@aglyn/aglyn 1.0.0-beta.217 → 1.0.0-beta.219

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 (348) hide show
  1. package/package.json +14 -14
  2. package/src/lib/app-utils/actions.d.ts +25 -374
  3. package/src/lib/app-utils/actions.js +101 -561
  4. package/src/lib/app-utils/actions.js.map +1 -1
  5. package/src/lib/app-utils/activity-presenter.d.ts +3 -3
  6. package/src/lib/app-utils/activity-presenter.js +36 -52
  7. package/src/lib/app-utils/activity-presenter.js.map +1 -1
  8. package/src/lib/app-utils/admin-audit-index.js +2 -2
  9. package/src/lib/app-utils/admin-audit-index.js.map +1 -1
  10. package/src/lib/app-utils/analytics-events.d.ts +11 -2
  11. package/src/lib/app-utils/analytics-events.js +11 -2
  12. package/src/lib/app-utils/analytics-events.js.map +1 -1
  13. package/src/lib/app-utils/analytics-provider.d.ts +182 -0
  14. package/src/lib/app-utils/analytics-provider.js +133 -0
  15. package/src/lib/app-utils/analytics-provider.js.map +1 -0
  16. package/src/lib/app-utils/api-plugins.d.ts +46 -0
  17. package/src/lib/app-utils/api-plugins.js +19 -0
  18. package/src/lib/app-utils/api-plugins.js.map +1 -1
  19. package/src/lib/app-utils/{marketplace-overrides.d.ts → artifact-overrides.d.ts} +9 -6
  20. package/src/lib/app-utils/{marketplace-overrides.js → artifact-overrides.js} +10 -7
  21. package/src/lib/app-utils/artifact-overrides.js.map +1 -0
  22. package/src/lib/app-utils/{marketplace-provenance.d.ts → artifact-provenance.d.ts} +12 -10
  23. package/src/lib/app-utils/{marketplace-provenance.js → artifact-provenance.js} +9 -7
  24. package/src/lib/app-utils/artifact-provenance.js.map +1 -0
  25. package/src/lib/app-utils/assist-credits.js +2 -1
  26. package/src/lib/app-utils/assist-credits.js.map +1 -1
  27. package/src/lib/app-utils/binding-token-catalog.d.ts +5 -13
  28. package/src/lib/app-utils/binding-token-catalog.js +17 -41
  29. package/src/lib/app-utils/binding-token-catalog.js.map +1 -1
  30. package/src/lib/app-utils/binding-tokens.js +1 -1
  31. package/src/lib/app-utils/binding-tokens.js.map +1 -1
  32. package/src/lib/app-utils/brand-support-line.d.ts +36 -0
  33. package/src/lib/app-utils/brand-support-line.js +38 -0
  34. package/src/lib/app-utils/brand-support-line.js.map +1 -0
  35. package/src/lib/app-utils/campaign-touch.d.ts +5 -5
  36. package/src/lib/app-utils/campaign-touch.js +8 -8
  37. package/src/lib/app-utils/campaign-touch.js.map +1 -1
  38. package/src/lib/app-utils/collection-entries.d.ts +2 -2
  39. package/src/lib/app-utils/collection-entries.js.map +1 -1
  40. package/src/lib/app-utils/consent-group-change.d.ts +4 -0
  41. package/src/lib/app-utils/consent-group-change.js.map +1 -1
  42. package/src/lib/app-utils/console-record-links.d.ts +10 -89
  43. package/src/lib/app-utils/console-record-links.js +3 -107
  44. package/src/lib/app-utils/console-record-links.js.map +1 -1
  45. package/src/lib/app-utils/console-routes.d.ts +16 -7
  46. package/src/lib/app-utils/console-routes.js +9 -3
  47. package/src/lib/app-utils/console-routes.js.map +1 -1
  48. package/src/lib/app-utils/contacts.d.ts +23 -1
  49. package/src/lib/app-utils/contacts.js +21 -5
  50. package/src/lib/app-utils/contacts.js.map +1 -1
  51. package/src/lib/app-utils/cross-pool-desync.d.ts +39 -0
  52. package/src/lib/app-utils/cross-pool-desync.js +47 -0
  53. package/src/lib/app-utils/cross-pool-desync.js.map +1 -0
  54. package/src/lib/app-utils/csv-upload.d.ts +29 -0
  55. package/src/lib/app-utils/csv-upload.js +29 -0
  56. package/src/lib/app-utils/csv-upload.js.map +1 -0
  57. package/src/lib/app-utils/dataset-models.d.ts +5 -5
  58. package/src/lib/app-utils/dataset-models.js +19 -2
  59. package/src/lib/app-utils/dataset-models.js.map +1 -1
  60. package/src/lib/app-utils/datasets.d.ts +65 -11
  61. package/src/lib/app-utils/datasets.js +74 -11
  62. package/src/lib/app-utils/datasets.js.map +1 -1
  63. package/src/lib/app-utils/docs-deflection.d.ts +6 -6
  64. package/src/lib/app-utils/docs-deflection.js.map +1 -1
  65. package/src/lib/app-utils/docs-help.generated.d.ts +12 -6
  66. package/src/lib/app-utils/docs-help.generated.js +21 -6
  67. package/src/lib/app-utils/docs-help.generated.js.map +1 -1
  68. package/src/lib/app-utils/docs-index.generated.d.ts +2 -2
  69. package/src/lib/app-utils/docs-index.generated.js +514 -318
  70. package/src/lib/app-utils/docs-index.generated.js.map +1 -1
  71. package/src/lib/app-utils/docs-retrieval.d.ts +3 -3
  72. package/src/lib/app-utils/docs-retrieval.js +14 -10
  73. package/src/lib/app-utils/docs-retrieval.js.map +1 -1
  74. package/src/lib/app-utils/duplicate-resource.d.ts +4 -1
  75. package/src/lib/app-utils/duplicate-resource.js +7 -4
  76. package/src/lib/app-utils/duplicate-resource.js.map +1 -1
  77. package/src/lib/app-utils/dynamic-list-rule.d.ts +1 -1
  78. package/src/lib/app-utils/dynamic-list-rule.js.map +1 -1
  79. package/src/lib/app-utils/element-ui.d.ts +1 -1
  80. package/src/lib/app-utils/element-ui.js +1 -1
  81. package/src/lib/app-utils/element-ui.js.map +1 -1
  82. package/src/lib/app-utils/email-starter-policy.js +3 -3
  83. package/src/lib/app-utils/email-starter-policy.js.map +1 -1
  84. package/src/lib/app-utils/entity-picker-context.d.ts +10 -5
  85. package/src/lib/app-utils/entity-picker-context.js.map +1 -1
  86. package/src/lib/app-utils/error-beacon.d.ts +75 -6
  87. package/src/lib/app-utils/error-beacon.js +160 -21
  88. package/src/lib/app-utils/error-beacon.js.map +1 -1
  89. package/src/lib/app-utils/expand-repeatables.d.ts +10 -10
  90. package/src/lib/app-utils/expand-repeatables.js +10 -10
  91. package/src/lib/app-utils/expand-repeatables.js.map +1 -1
  92. package/src/lib/app-utils/host-events.d.ts +82 -0
  93. package/src/lib/app-utils/host-events.js +62 -0
  94. package/src/lib/app-utils/host-events.js.map +1 -0
  95. package/src/lib/app-utils/lockdown.d.ts +33 -1
  96. package/src/lib/app-utils/lockdown.js +45 -4
  97. package/src/lib/app-utils/lockdown.js.map +1 -1
  98. package/src/lib/app-utils/margin-utilization.d.ts +4 -69
  99. package/src/lib/app-utils/margin-utilization.js +82 -69
  100. package/src/lib/app-utils/margin-utilization.js.map +1 -1
  101. package/src/lib/app-utils/node-definition-sanitizer.d.ts +16 -16
  102. package/src/lib/app-utils/node-definition-sanitizer.js +24 -20
  103. package/src/lib/app-utils/node-definition-sanitizer.js.map +1 -1
  104. package/src/lib/app-utils/node-interactions.d.ts +7 -7
  105. package/src/lib/app-utils/node-interactions.js.map +1 -1
  106. package/src/lib/app-utils/notifications.d.ts +78 -47
  107. package/src/lib/app-utils/notifications.js +63 -44
  108. package/src/lib/app-utils/notifications.js.map +1 -1
  109. package/src/lib/app-utils/payments-configured.d.ts +8 -21
  110. package/src/lib/app-utils/payments-configured.js +8 -23
  111. package/src/lib/app-utils/payments-configured.js.map +1 -1
  112. package/src/lib/app-utils/plan-entitlements.d.ts +43 -128
  113. package/src/lib/app-utils/plan-entitlements.js +145 -304
  114. package/src/lib/app-utils/plan-entitlements.js.map +1 -1
  115. package/src/lib/app-utils/platform-brand.d.ts +10 -0
  116. package/src/lib/app-utils/platform-brand.js +14 -3
  117. package/src/lib/app-utils/platform-brand.js.map +1 -1
  118. package/src/lib/app-utils/plugin-api-rate-limit.d.ts +7 -1
  119. package/src/lib/app-utils/plugin-api-rate-limit.js +11 -3
  120. package/src/lib/app-utils/plugin-api-rate-limit.js.map +1 -1
  121. package/src/lib/app-utils/plugin-bundle-checks.js +2 -2
  122. package/src/lib/app-utils/plugin-bundle-checks.js.map +1 -1
  123. package/src/lib/app-utils/plugin-host-events.generated.d.ts +12 -0
  124. package/src/lib/app-utils/plugin-host-events.generated.js +169 -0
  125. package/src/lib/app-utils/plugin-host-events.generated.js.map +1 -0
  126. package/src/lib/app-utils/plugin-release-flags.generated.d.ts +12 -0
  127. package/src/lib/app-utils/plugin-release-flags.generated.js +106 -0
  128. package/src/lib/app-utils/plugin-release-flags.generated.js.map +1 -0
  129. package/src/lib/app-utils/realm-host-surface.generated.js +2 -0
  130. package/src/lib/app-utils/realm-host-surface.generated.js.map +1 -1
  131. package/src/lib/app-utils/release-flags.d.ts +14 -5
  132. package/src/lib/app-utils/release-flags.js +21 -125
  133. package/src/lib/app-utils/release-flags.js.map +1 -1
  134. package/src/lib/app-utils/repeat-sources.d.ts +9 -0
  135. package/src/lib/app-utils/repeat-sources.js.map +1 -1
  136. package/src/lib/app-utils/retained-refusals.d.ts +73 -0
  137. package/src/lib/app-utils/retained-refusals.js +186 -0
  138. package/src/lib/app-utils/retained-refusals.js.map +1 -0
  139. package/src/lib/app-utils/scope-tokens.d.ts +27 -0
  140. package/src/lib/app-utils/scope-tokens.js +61 -0
  141. package/src/lib/app-utils/scope-tokens.js.map +1 -1
  142. package/src/lib/app-utils/screen-link-context.js +3 -3
  143. package/src/lib/app-utils/screen-link-context.js.map +1 -1
  144. package/src/lib/app-utils/screen-route.d.ts +15 -0
  145. package/src/lib/app-utils/screen-route.js +21 -1
  146. package/src/lib/app-utils/screen-route.js.map +1 -1
  147. package/src/lib/app-utils/seo-audit.d.ts +132 -0
  148. package/src/lib/app-utils/seo-audit.js +246 -0
  149. package/src/lib/app-utils/seo-audit.js.map +1 -0
  150. package/src/lib/app-utils/seo-keywords.d.ts +48 -0
  151. package/src/lib/app-utils/seo-keywords.js +60 -0
  152. package/src/lib/app-utils/seo-keywords.js.map +1 -0
  153. package/src/lib/app-utils/seo-page-facts.d.ts +66 -0
  154. package/src/lib/app-utils/seo-page-facts.js +155 -0
  155. package/src/lib/app-utils/seo-page-facts.js.map +1 -0
  156. package/src/lib/app-utils/seo-site-scan.d.ts +126 -0
  157. package/src/lib/app-utils/seo-site-scan.js +162 -0
  158. package/src/lib/app-utils/seo-site-scan.js.map +1 -0
  159. package/src/lib/app-utils/seo-title-variables.js +1 -1
  160. package/src/lib/app-utils/seo-title-variables.js.map +1 -1
  161. package/src/lib/app-utils/server.d.ts +6 -9
  162. package/src/lib/app-utils/server.js +17 -27
  163. package/src/lib/app-utils/server.js.map +1 -1
  164. package/src/lib/app-utils/site-interactions.d.ts +501 -0
  165. package/src/lib/app-utils/site-interactions.js +554 -0
  166. package/src/lib/app-utils/site-interactions.js.map +1 -0
  167. package/src/lib/app-utils/{marketplace-theme.d.ts → site-theme.d.ts} +13 -2
  168. package/src/lib/app-utils/{marketplace-theme.js → site-theme.js} +5 -2
  169. package/src/lib/app-utils/site-theme.js.map +1 -0
  170. package/src/lib/app-utils/sitemap.d.ts +4 -3
  171. package/src/lib/app-utils/sitemap.js +9 -7
  172. package/src/lib/app-utils/sitemap.js.map +1 -1
  173. package/src/lib/app-utils/stale-build-error.d.ts +51 -0
  174. package/src/lib/app-utils/stale-build-error.js +100 -1
  175. package/src/lib/app-utils/stale-build-error.js.map +1 -1
  176. package/src/lib/app-utils/starter-templates.d.ts +20 -0
  177. package/src/lib/app-utils/starter-templates.js +49 -0
  178. package/src/lib/app-utils/starter-templates.js.map +1 -1
  179. package/src/lib/app-utils/tax-jurisdiction-figures.d.ts +118 -0
  180. package/src/lib/app-utils/tax-jurisdiction-figures.js +123 -0
  181. package/src/lib/app-utils/tax-jurisdiction-figures.js.map +1 -0
  182. package/src/lib/app-utils/theme-library.d.ts +10 -3
  183. package/src/lib/app-utils/theme-library.js +13 -4
  184. package/src/lib/app-utils/theme-library.js.map +1 -1
  185. package/src/lib/app-utils/{campaign-attribution.d.ts → utm-attribution.d.ts} +11 -6
  186. package/src/lib/app-utils/{campaign-attribution.js → utm-attribution.js} +13 -8
  187. package/src/lib/app-utils/utm-attribution.js.map +1 -0
  188. package/src/lib/app-utils/{campaign-forwarding.d.ts → utm-forwarding.d.ts} +14 -14
  189. package/src/lib/app-utils/{campaign-forwarding.js → utm-forwarding.js} +26 -26
  190. package/src/lib/app-utils/utm-forwarding.js.map +1 -0
  191. package/src/lib/app-utils/video-object.js +6 -5
  192. package/src/lib/app-utils/video-object.js.map +1 -1
  193. package/src/lib/app-utils/visitor-consent.d.ts +41 -164
  194. package/src/lib/app-utils/visitor-consent.js +66 -277
  195. package/src/lib/app-utils/visitor-consent.js.map +1 -1
  196. package/src/lib/app-utils/web-vitals-rum.d.ts +7 -7
  197. package/src/lib/app-utils/web-vitals-rum.js +31 -63
  198. package/src/lib/app-utils/web-vitals-rum.js.map +1 -1
  199. package/src/lib/app-utils/where-used.d.ts +11 -6
  200. package/src/lib/app-utils/where-used.js +3 -8
  201. package/src/lib/app-utils/where-used.js.map +1 -1
  202. package/src/lib/canvas-manager/canvas-manager.js +3 -3
  203. package/src/lib/canvas-manager/canvas-manager.js.map +1 -1
  204. package/src/lib/foundation/definitions/components.types.d.ts +1 -1
  205. package/src/lib/foundation/definitions/components.types.js +1 -1
  206. package/src/lib/foundation/definitions/components.types.js.map +1 -1
  207. package/src/lib/foundation/definitions/org-billing.types.d.ts +18 -135
  208. package/src/lib/foundation/definitions/org-billing.types.js.map +1 -1
  209. package/src/lib/foundation/definitions/organization.types.d.ts +6 -3
  210. package/src/lib/foundation/definitions/organization.types.js.map +1 -1
  211. package/src/lib/foundation/definitions/platform.types.d.ts +27 -5
  212. package/src/lib/foundation/definitions/platform.types.js.map +1 -1
  213. package/src/lib/foundation/definitions/write-deny-coverage.util.d.ts +16 -0
  214. package/src/lib/foundation/definitions/write-deny-coverage.util.js +20 -0
  215. package/src/lib/foundation/definitions/write-deny-coverage.util.js.map +1 -1
  216. package/src/lib/foundation/index.d.ts +1 -1
  217. package/src/lib/foundation/index.js.map +1 -1
  218. package/src/lib/plugin-manager/besigner-documents.d.ts +96 -0
  219. package/src/lib/plugin-manager/besigner-documents.js +61 -0
  220. package/src/lib/plugin-manager/besigner-documents.js.map +1 -0
  221. package/src/lib/plugin-manager/computed-variables.d.ts +71 -0
  222. package/src/lib/plugin-manager/computed-variables.js +74 -0
  223. package/src/lib/plugin-manager/computed-variables.js.map +1 -0
  224. package/src/lib/plugin-manager/custom-fields.d.ts +29 -2
  225. package/src/lib/plugin-manager/custom-fields.js +47 -1
  226. package/src/lib/plugin-manager/custom-fields.js.map +1 -1
  227. package/src/lib/plugin-manager/feature-plugins.d.ts +292 -20
  228. package/src/lib/plugin-manager/feature-plugins.js +105 -17
  229. package/src/lib/plugin-manager/feature-plugins.js.map +1 -1
  230. package/src/lib/plugin-manager/first-party-plugins.generated.d.ts +123 -0
  231. package/src/lib/plugin-manager/first-party-plugins.generated.js +785 -14
  232. package/src/lib/plugin-manager/first-party-plugins.generated.js.map +1 -1
  233. package/src/lib/plugin-manager/plugin-activity-actions.d.ts +12 -0
  234. package/src/lib/plugin-manager/plugin-activity-actions.js +25 -0
  235. package/src/lib/plugin-manager/plugin-activity-actions.js.map +1 -1
  236. package/src/lib/plugin-manager/plugin-contributions.d.ts +1 -1
  237. package/src/lib/plugin-manager/plugin-contributions.js.map +1 -1
  238. package/src/lib/plugin-manager/plugin-declarations-repair.d.ts +36 -0
  239. package/src/lib/plugin-manager/plugin-declarations-repair.js +64 -0
  240. package/src/lib/plugin-manager/plugin-declarations-repair.js.map +1 -0
  241. package/src/lib/plugin-manager/plugin-dependents.d.ts +101 -0
  242. package/src/lib/plugin-manager/plugin-dependents.js +75 -0
  243. package/src/lib/plugin-manager/plugin-dependents.js.map +1 -0
  244. package/src/lib/plugin-manager/plugin-distribution.d.ts +55 -0
  245. package/src/lib/plugin-manager/plugin-distribution.js +45 -0
  246. package/src/lib/plugin-manager/plugin-distribution.js.map +1 -0
  247. package/src/lib/plugin-manager/plugin-host-collections.d.ts +17 -0
  248. package/src/lib/plugin-manager/plugin-host-collections.js +6 -0
  249. package/src/lib/plugin-manager/plugin-host-collections.js.map +1 -1
  250. package/src/lib/plugin-manager/plugin-host-resources.d.ts +133 -0
  251. package/src/lib/plugin-manager/plugin-host-resources.js +52 -0
  252. package/src/lib/plugin-manager/plugin-host-resources.js.map +1 -0
  253. package/src/lib/plugin-manager/plugin-org-erasure.d.ts +28 -2
  254. package/src/lib/plugin-manager/plugin-org-erasure.js +61 -2
  255. package/src/lib/plugin-manager/plugin-org-erasure.js.map +1 -1
  256. package/src/lib/plugin-manager/plugin-plan-entitlements.d.ts +123 -0
  257. package/src/lib/plugin-manager/plugin-plan-entitlements.js +101 -0
  258. package/src/lib/plugin-manager/plugin-plan-entitlements.js.map +1 -0
  259. package/src/lib/plugin-manager/plugin-record-index.d.ts +95 -0
  260. package/src/lib/plugin-manager/plugin-record-index.js +51 -0
  261. package/src/lib/plugin-manager/plugin-record-index.js.map +1 -0
  262. package/src/lib/plugin-manager/plugin-record-written.d.ts +58 -0
  263. package/src/lib/plugin-manager/plugin-record-written.js +42 -0
  264. package/src/lib/plugin-manager/plugin-record-written.js.map +1 -0
  265. package/src/lib/plugin-manager/plugin-revenue-sources.d.ts +213 -0
  266. package/src/lib/plugin-manager/plugin-revenue-sources.js +194 -0
  267. package/src/lib/plugin-manager/plugin-revenue-sources.js.map +1 -0
  268. package/src/lib/plugin-manager/plugin-site-bundle.d.ts +145 -0
  269. package/src/lib/plugin-manager/plugin-site-bundle.js +78 -0
  270. package/src/lib/plugin-manager/plugin-site-bundle.js.map +1 -0
  271. package/src/lib/plugin-manager/plugin-site-cache.d.ts +12 -0
  272. package/src/lib/plugin-manager/plugin-site-cache.js.map +1 -1
  273. package/src/lib/plugin-manager/plugin-site-export.d.ts +81 -0
  274. package/src/lib/plugin-manager/plugin-site-export.js +40 -0
  275. package/src/lib/plugin-manager/plugin-site-export.js.map +1 -0
  276. package/src/lib/plugin-manager/plugin-sitemap-sections.d.ts +88 -0
  277. package/src/lib/plugin-manager/plugin-sitemap-sections.js +29 -0
  278. package/src/lib/plugin-manager/plugin-sitemap-sections.js.map +1 -0
  279. package/src/lib/plugin-manager/plugin-tax-profile.d.ts +20 -4
  280. package/src/lib/plugin-manager/plugin-tax-profile.js.map +1 -1
  281. package/src/lib/plugin-manager/plugin-tax-return-sources.d.ts +255 -0
  282. package/src/lib/plugin-manager/plugin-tax-return-sources.js +191 -0
  283. package/src/lib/plugin-manager/plugin-tax-return-sources.js.map +1 -0
  284. package/src/lib/plugin-manager/plugin-template-sources.d.ts +75 -0
  285. package/src/lib/plugin-manager/plugin-template-sources.js +37 -0
  286. package/src/lib/plugin-manager/plugin-template-sources.js.map +1 -0
  287. package/src/lib/plugin-manager/plugin-usage-axes.d.ts +107 -0
  288. package/src/lib/plugin-manager/plugin-usage-axes.js +107 -0
  289. package/src/lib/plugin-manager/plugin-usage-axes.js.map +1 -0
  290. package/src/lib/plugin-manager/plugin-zones.d.ts +4 -5
  291. package/src/lib/plugin-manager/plugin-zones.js.map +1 -1
  292. package/src/lib/plugin-manager/realm-host-aglyn.generated.js +2 -0
  293. package/src/lib/plugin-manager/realm-host-aglyn.generated.js.map +1 -1
  294. package/src/lib/plugin-manager/record-captured-contact.d.ts +1 -14
  295. package/src/lib/plugin-manager/record-captured-contact.js +10 -32
  296. package/src/lib/plugin-manager/record-captured-contact.js.map +1 -1
  297. package/src/lib/plugin-manager/repeat-rows.d.ts +124 -0
  298. package/src/lib/plugin-manager/repeat-rows.js +108 -0
  299. package/src/lib/plugin-manager/repeat-rows.js.map +1 -0
  300. package/src/lib/plugin-manager/submission-record-target.d.ts +144 -0
  301. package/src/lib/plugin-manager/submission-record-target.js +125 -0
  302. package/src/lib/plugin-manager/submission-record-target.js.map +1 -0
  303. package/src/lib/plugin-manager/video-embed-provider.d.ts +108 -0
  304. package/src/lib/plugin-manager/video-embed-provider.js +165 -0
  305. package/src/lib/plugin-manager/video-embed-provider.js.map +1 -0
  306. package/src/lib/types/nodes.d.ts +2 -2
  307. package/src/lib/types/nodes.js.map +1 -1
  308. package/src/lib/app-utils/campaign-attribution.js.map +0 -1
  309. package/src/lib/app-utils/campaign-forwarding.js.map +0 -1
  310. package/src/lib/app-utils/contact-holder.d.ts +0 -68
  311. package/src/lib/app-utils/contact-holder.js +0 -129
  312. package/src/lib/app-utils/contact-holder.js.map +0 -1
  313. package/src/lib/app-utils/contact-merge.d.ts +0 -136
  314. package/src/lib/app-utils/contact-merge.js +0 -412
  315. package/src/lib/app-utils/contact-merge.js.map +0 -1
  316. package/src/lib/app-utils/crm-csv.d.ts +0 -239
  317. package/src/lib/app-utils/crm-csv.js +0 -467
  318. package/src/lib/app-utils/crm-csv.js.map +0 -1
  319. package/src/lib/app-utils/crm-digest.d.ts +0 -185
  320. package/src/lib/app-utils/crm-digest.js +0 -272
  321. package/src/lib/app-utils/crm-digest.js.map +0 -1
  322. package/src/lib/app-utils/form-dataset-binding.d.ts +0 -50
  323. package/src/lib/app-utils/form-dataset-binding.js +0 -74
  324. package/src/lib/app-utils/form-dataset-binding.js.map +0 -1
  325. package/src/lib/app-utils/list-import.d.ts +0 -158
  326. package/src/lib/app-utils/list-import.js +0 -332
  327. package/src/lib/app-utils/list-import.js.map +0 -1
  328. package/src/lib/app-utils/marketplace-listing-visibility.d.ts +0 -122
  329. package/src/lib/app-utils/marketplace-listing-visibility.js +0 -147
  330. package/src/lib/app-utils/marketplace-listing-visibility.js.map +0 -1
  331. package/src/lib/app-utils/marketplace-overrides.js.map +0 -1
  332. package/src/lib/app-utils/marketplace-provenance.js.map +0 -1
  333. package/src/lib/app-utils/marketplace-theme.js.map +0 -1
  334. package/src/lib/app-utils/marketplace-update-state.d.ts +0 -119
  335. package/src/lib/app-utils/marketplace-update-state.js +0 -132
  336. package/src/lib/app-utils/marketplace-update-state.js.map +0 -1
  337. package/src/lib/app-utils/publisher-agreement.d.ts +0 -289
  338. package/src/lib/app-utils/publisher-agreement.js +0 -321
  339. package/src/lib/app-utils/publisher-agreement.js.map +0 -1
  340. package/src/lib/app-utils/wistia-embed.d.ts +0 -104
  341. package/src/lib/app-utils/wistia-embed.js +0 -138
  342. package/src/lib/app-utils/wistia-embed.js.map +0 -1
  343. package/src/lib/app-utils/workflows.d.ts +0 -136
  344. package/src/lib/app-utils/workflows.js +0 -346
  345. package/src/lib/app-utils/workflows.js.map +0 -1
  346. package/src/lib/plugin-manager/commerce-zone-props.d.ts +0 -172
  347. package/src/lib/plugin-manager/commerce-zone-props.js +0 -31
  348. package/src/lib/plugin-manager/commerce-zone-props.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/plugin-manager/plugin-zones.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\nimport { getRegisteringPluginId } from '../app-utils/registering-plugin'\nimport {\n definePluginServiceContract,\n registerPluginService,\n resolvePluginServices,\n} from './plugin-services'\n\n/**\n * A zone a plugin declares, and the props it hands each widget (AGL-3124).\n *\n * `CONSOLE_WIDGET_SLOTS` is the catalog of zones the console SHELL draws, and\n * a slot id has always been an open string, so a plugin could already host a\n * zone of its own. What it could not do is say what that zone HANDS a widget.\n * The props had to be a type, the type had to be somewhere both sides import,\n * and \"somewhere both sides import\" was read as the core — which is how\n * `plugin-manager/commerce-zone-props.ts` and `plugin-manager/record-zone-props.ts`\n * came to spell out the commerce catalog and the record vocabulary of two\n * named plugins inside the platform.\n *\n * So the declaration moves to the plugin. A plugin defines a token for its\n * zone with {@link definePluginZone}, carrying the props type on the token,\n * and registers it here with a label and the surface it is drawn on. A widget\n * author takes the props type off the token — `PluginZoneProps<typeof ZONE>`\n * — without the core ever naming a product, a deal or a lead.\n *\n * ## Nothing here reaches a published page\n *\n * A zone token is `{ id }` and nothing else: `__props` is a phantom field that\n * never holds a value, so the props type is carried at the type level and\n * erased. That is the same trick the two type-only modules above use, and it\n * is load-bearing rather than tidy — AGL-3082 measured the zone catalog on the\n * published page's static graph, and a declaration that put a plugin's prop\n * SHAPES there would have made every published page carry the console's\n * vocabulary. `plugin-zones.spec.ts` pins the token's own key set so a field\n * added to it later has to be a decision.\n *\n * This module is reached by its own subpath and is deliberately absent from\n * `plugin-manager/index.ts`, for the reason that barrel already states about\n * `plugin-figures`: what a published page does not need, it must not import.\n *\n * ## One zone id, one owner\n *\n * A zone is a position on a page somebody draws. Two plugins declaring the\n * same id would each believe they set what a widget there receives, and the\n * widget author would have no way to tell whose props arrived — so a second\n * plugin's declaration is refused naming both, and the incumbent keeps its\n * zone. The same plugin declaring again — a second surface, a hot reload —\n * replaces its own.\n */\n\n/**\n * A zone's identity, with the props it hands a widget carried at the type\n * level. `__props` never holds a value.\n */\nexport interface PluginZone<Props> {\n readonly id: string\n readonly __props?: Props\n}\n\n/** The props a zone hands each widget, read off its token. */\nexport type PluginZoneProps<Zone> = Zone extends PluginZone<infer Props>\n ? Props\n : never\n\n/**\n * A zone token. Pure: it allocates no registration and reads no registry, so\n * a plugin may define one at module scope and register it from its register\n * fn, where the loader's owner marker is set.\n */\nexport function definePluginZone<Props>(id: string): PluginZone<Props> {\n const zoneId = id.trim()\n if (!zoneId) throw new Error('a plugin zone needs an id')\n return { id: zoneId }\n}\n\n/** Where a zone is drawn, which is what decides the gates around it. */\nexport type PluginZoneSurface = 'console' | 'besigner' | 'site'\n\nexport interface PluginZoneDeclaration<Props = unknown> {\n zone: PluginZone<Props>\n /** What the plugin's own manifest and the widget picker call the zone. */\n label: string\n /** The surface the zone is drawn on. */\n surface: PluginZoneSurface\n /**\n * What a widget here may do, and what it may not — the sentence a widget\n * author reads before writing one. Every zone in the core catalog carries\n * the same distinction (a widget proposes, the host writes), and a plugin's\n * zone owes its widgets the same statement.\n */\n description?: string\n /**\n * How the zone places its widgets. `stack`, the default, is one block of\n * the page: its widgets are cards, spaced, and the block takes no room when\n * nothing in it drew. `bare` adds no element of its own: every widget is one\n * item of a layout the HOST draws — a button in a row of actions, a control\n * beside a form's fields, a dialog that portals out of the page. A wrapper\n * would put every button of a row into one column.\n */\n layout?: PluginZoneLayout\n}\n\n/** See {@link PluginZoneDeclaration.layout}. */\nexport type PluginZoneLayout = 'stack' | 'bare'\n\n/** A declaration with the plugin that made it. */\nexport type ResolvedPluginZone = PluginZoneDeclaration<unknown> & {\n pluginId: string\n}\n\nexport const PLUGIN_ZONES = definePluginServiceContract<\n PluginZoneDeclaration<never>\n>('core.zones', { multiple: true })\n\n/**\n * Declares a zone the registering plugin hosts. The owner is the loader's\n * marker when a register fn is running, else `options.pluginId`; with neither\n * the registration throws. A zone id another plugin declared throws naming\n * both.\n */\nexport function registerPluginZone<Props>(\n declaration: PluginZoneDeclaration<Props>,\n options?: { pluginId?: string },\n): void {\n const key = declaration.zone?.id?.trim() ?? ''\n if (!key) throw new Error('a plugin zone needs an id')\n if (!declaration.label?.trim()) {\n throw new Error(`plugin zone \"${key}\" needs a label`)\n }\n const pluginId = (getRegisteringPluginId() ?? options?.pluginId ?? '').trim()\n const incumbent = resolvePluginServices(PLUGIN_ZONES).find(\n (entry) => entry.key === key,\n )\n if (incumbent && pluginId && incumbent.pluginId !== pluginId) {\n throw new Error(\n `zone \"${key}\" is already declared by \"${incumbent.pluginId}\"; ` +\n `refused \"${pluginId}\"`,\n )\n }\n registerPluginService(\n PLUGIN_ZONES,\n declaration as unknown as PluginZoneDeclaration<never>,\n {\n ...(options?.pluginId ? { pluginId: options.pluginId } : {}),\n key,\n },\n )\n}\n\n/** Every declared zone, with its owner, in registration order. */\nexport function listPluginZones(): ResolvedPluginZone[] {\n return resolvePluginServices(PLUGIN_ZONES).map((entry) => ({\n ...(entry.impl as unknown as PluginZoneDeclaration<unknown>),\n pluginId: entry.pluginId,\n }))\n}\n\n/** One declared zone by id, with its owner, or `null` when nobody declares it. */\nexport function pluginZone(zoneId: string): ResolvedPluginZone | null {\n const key = zoneId.trim()\n const entry = resolvePluginServices(PLUGIN_ZONES).find(\n (one) => one.key === key,\n )\n return entry\n ? {\n ...(entry.impl as unknown as PluginZoneDeclaration<unknown>),\n pluginId: entry.pluginId,\n }\n : null\n}\n\n/** The plugin that declared a zone, for attribution, or `undefined`. */\nexport function pluginIdForZone(zoneId: string): string | undefined {\n return pluginZone(zoneId)?.pluginId\n}\n"],"names":["getRegisteringPluginId","definePluginServiceContract","registerPluginService","resolvePluginServices","definePluginZone","id","zoneId","trim","Error","PLUGIN_ZONES","multiple","registerPluginZone","declaration","options","key","zone","label","pluginId","incumbent","find","entry","listPluginZones","map","impl","pluginZone","one","pluginIdForZone"],"mappings":";AAAA;;;;;;;;;;;;;;;CAeC,GAED,SAASA,sBAAsB,QAAQ,qCAAiC;AACxE,SACEC,2BAA2B,EAC3BC,qBAAqB,EACrBC,qBAAqB,QAChB,uBAAmB;AA2D1B;;;;CAIC,GACD,OAAO,SAASC,iBAAwBC,EAAU;IAChD,MAAMC,SAASD,GAAGE,IAAI;IACtB,IAAI,CAACD,QAAQ,MAAM,IAAIE,MAAM;IAC7B,OAAO;QAAEH,IAAIC;IAAO;AACtB;AAqCA,OAAO,MAAMG,eAAeR,4BAE1B,cAAc;IAAES,UAAU;AAAK,GAAE;AAEnC;;;;;CAKC,GACD,OAAO,SAASC,mBACdC,WAAyC,EACzCC,OAA+B;cAObb,OAAAA;QALNY,sBAAAA,mBAEPA;IAFL,MAAME,eAAMF,oBAAAA,YAAYG,IAAI,sBAAhBH,uBAAAA,kBAAkBP,EAAE,qBAApBO,qBAAsBL,IAAI,qBAAM;IAC5C,IAAI,CAACO,KAAK,MAAM,IAAIN,MAAM;IAC1B,IAAI,GAACI,qBAAAA,YAAYI,KAAK,qBAAjBJ,mBAAmBL,IAAI,KAAI;QAC9B,MAAM,IAAIC,MAAM,CAAC,aAAa,EAAEM,IAAI,eAAe,CAAC;IACtD;IACA,MAAMG,WAAW,EAACjB,SAAAA,0BAAAA,oCAAAA,0BAA4Ba,2BAAAA,QAASI,QAAQ,YAA7CjB,QAAiD,IAAIO,IAAI;IAC3E,MAAMW,YAAYf,sBAAsBM,cAAcU,IAAI,CACxD,CAACC,QAAUA,MAAMN,GAAG,KAAKA;IAE3B,IAAII,aAAaD,YAAYC,UAAUD,QAAQ,KAAKA,UAAU;QAC5D,MAAM,IAAIT,MACR,CAAC,MAAM,EAAEM,IAAI,0BAA0B,EAAEI,UAAUD,QAAQ,CAAC,GAAG,CAAC,GAC9D,CAAC,SAAS,EAAEA,SAAS,CAAC,CAAC;IAE7B;IACAf,sBACEO,cACAG,aACA,aACMC,CAAAA,2BAAAA,QAASI,QAAQ,IAAG;QAAEA,UAAUJ,QAAQI,QAAQ;IAAC,IAAI,CAAC;QAC1DH;;AAGN;AAEA,gEAAgE,GAChE,OAAO,SAASO;IACd,OAAOlB,sBAAsBM,cAAca,GAAG,CAAC,CAACF,QAAW,aACrDA,MAAMG,IAAI;YACdN,UAAUG,MAAMH,QAAQ;;AAE5B;AAEA,gFAAgF,GAChF,OAAO,SAASO,WAAWlB,MAAc;IACvC,MAAMQ,MAAMR,OAAOC,IAAI;IACvB,MAAMa,QAAQjB,sBAAsBM,cAAcU,IAAI,CACpD,CAACM,MAAQA,IAAIX,GAAG,KAAKA;IAEvB,OAAOM,QACH,aACMA,MAAMG,IAAI;QACdN,UAAUG,MAAMH,QAAQ;SAE1B;AACN;AAEA,sEAAsE,GACtE,OAAO,SAASS,gBAAgBpB,MAAc;QACrCkB;IAAP,QAAOA,cAAAA,WAAWlB,4BAAXkB,YAAoBP,QAAQ;AACrC"}
1
+ {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/plugin-manager/plugin-zones.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\nimport { getRegisteringPluginId } from '../app-utils/registering-plugin'\nimport {\n definePluginServiceContract,\n registerPluginService,\n resolvePluginServices,\n} from './plugin-services'\n\n/**\n * A zone a plugin declares, and the props it hands each widget (AGL-3124).\n *\n * `CONSOLE_WIDGET_SLOTS` is the catalog of zones the console SHELL draws, and\n * a slot id has always been an open string, so a plugin could already host a\n * zone of its own. What it could not do is say what that zone HANDS a widget.\n * The props had to be a type, the type had to be somewhere both sides import,\n * and \"somewhere both sides import\" was read as the core — which is how a\n * named plugin's catalog or record vocabulary comes to be spelled out inside\n * the platform.\n *\n * So the declaration moves to the plugin. A plugin defines a token for its\n * zone with {@link definePluginZone}, carrying the props type on the token,\n * and registers it here with a label and the surface it is drawn on. A widget\n * author takes the props type off the token — `PluginZoneProps<typeof ZONE>`\n * — without the core ever naming a product, a deal or a lead.\n *\n * ## Nothing here reaches a published page\n *\n * A zone token is `{ id }` and nothing else: `__props` is a phantom field that\n * never holds a value, so the props type is carried at the type level and\n * erased. That is the same trick a type-only props module uses, and it\n * is load-bearing rather than tidy — AGL-3082 measured the zone catalog on the\n * published page's static graph, and a declaration that put a plugin's prop\n * SHAPES there would have made every published page carry the console's\n * vocabulary. `plugin-zones.spec.ts` pins the token's own key set so a field\n * added to it later has to be a decision.\n *\n * This module is reached by its own subpath and is deliberately absent from\n * `plugin-manager/index.ts`, for the reason that barrel already states about\n * `plugin-figures`: what a published page does not need, it must not import.\n *\n * ## One zone id, one owner\n *\n * A zone is a position on a page somebody draws. Two plugins declaring the\n * same id would each believe they set what a widget there receives, and the\n * widget author would have no way to tell whose props arrived — so a second\n * plugin's declaration is refused naming both, and the incumbent keeps its\n * zone. The same plugin declaring again — a second surface, a hot reload —\n * replaces its own.\n */\n\n/**\n * A zone's identity, with the props it hands a widget carried at the type\n * level. `__props` never holds a value.\n */\nexport interface PluginZone<Props> {\n readonly id: string\n readonly __props?: Props\n}\n\n/** The props a zone hands each widget, read off its token. */\nexport type PluginZoneProps<Zone> = Zone extends PluginZone<infer Props>\n ? Props\n : never\n\n/**\n * A zone token. Pure: it allocates no registration and reads no registry, so\n * a plugin may define one at module scope and register it from its register\n * fn, where the loader's owner marker is set.\n */\nexport function definePluginZone<Props>(id: string): PluginZone<Props> {\n const zoneId = id.trim()\n if (!zoneId) throw new Error('a plugin zone needs an id')\n return { id: zoneId }\n}\n\n/** Where a zone is drawn, which is what decides the gates around it. */\nexport type PluginZoneSurface = 'console' | 'besigner' | 'site'\n\nexport interface PluginZoneDeclaration<Props = unknown> {\n zone: PluginZone<Props>\n /** What the plugin's own manifest and the widget picker call the zone. */\n label: string\n /** The surface the zone is drawn on. */\n surface: PluginZoneSurface\n /**\n * What a widget here may do, and what it may not — the sentence a widget\n * author reads before writing one. Every zone in the core catalog carries\n * the same distinction (a widget proposes, the host writes), and a plugin's\n * zone owes its widgets the same statement.\n */\n description?: string\n /**\n * How the zone places its widgets. `stack`, the default, is one block of\n * the page: its widgets are cards, spaced, and the block takes no room when\n * nothing in it drew. `bare` adds no element of its own: every widget is one\n * item of a layout the HOST draws — a button in a row of actions, a control\n * beside a form's fields, a dialog that portals out of the page. A wrapper\n * would put every button of a row into one column.\n */\n layout?: PluginZoneLayout\n}\n\n/** See {@link PluginZoneDeclaration.layout}. */\nexport type PluginZoneLayout = 'stack' | 'bare'\n\n/** A declaration with the plugin that made it. */\nexport type ResolvedPluginZone = PluginZoneDeclaration<unknown> & {\n pluginId: string\n}\n\nexport const PLUGIN_ZONES = definePluginServiceContract<\n PluginZoneDeclaration<never>\n>('core.zones', { multiple: true })\n\n/**\n * Declares a zone the registering plugin hosts. The owner is the loader's\n * marker when a register fn is running, else `options.pluginId`; with neither\n * the registration throws. A zone id another plugin declared throws naming\n * both.\n */\nexport function registerPluginZone<Props>(\n declaration: PluginZoneDeclaration<Props>,\n options?: { pluginId?: string },\n): void {\n const key = declaration.zone?.id?.trim() ?? ''\n if (!key) throw new Error('a plugin zone needs an id')\n if (!declaration.label?.trim()) {\n throw new Error(`plugin zone \"${key}\" needs a label`)\n }\n const pluginId = (getRegisteringPluginId() ?? options?.pluginId ?? '').trim()\n const incumbent = resolvePluginServices(PLUGIN_ZONES).find(\n (entry) => entry.key === key,\n )\n if (incumbent && pluginId && incumbent.pluginId !== pluginId) {\n throw new Error(\n `zone \"${key}\" is already declared by \"${incumbent.pluginId}\"; ` +\n `refused \"${pluginId}\"`,\n )\n }\n registerPluginService(\n PLUGIN_ZONES,\n declaration as unknown as PluginZoneDeclaration<never>,\n {\n ...(options?.pluginId ? { pluginId: options.pluginId } : {}),\n key,\n },\n )\n}\n\n/** Every declared zone, with its owner, in registration order. */\nexport function listPluginZones(): ResolvedPluginZone[] {\n return resolvePluginServices(PLUGIN_ZONES).map((entry) => ({\n ...(entry.impl as unknown as PluginZoneDeclaration<unknown>),\n pluginId: entry.pluginId,\n }))\n}\n\n/** One declared zone by id, with its owner, or `null` when nobody declares it. */\nexport function pluginZone(zoneId: string): ResolvedPluginZone | null {\n const key = zoneId.trim()\n const entry = resolvePluginServices(PLUGIN_ZONES).find(\n (one) => one.key === key,\n )\n return entry\n ? {\n ...(entry.impl as unknown as PluginZoneDeclaration<unknown>),\n pluginId: entry.pluginId,\n }\n : null\n}\n\n/** The plugin that declared a zone, for attribution, or `undefined`. */\nexport function pluginIdForZone(zoneId: string): string | undefined {\n return pluginZone(zoneId)?.pluginId\n}\n"],"names":["getRegisteringPluginId","definePluginServiceContract","registerPluginService","resolvePluginServices","definePluginZone","id","zoneId","trim","Error","PLUGIN_ZONES","multiple","registerPluginZone","declaration","options","key","zone","label","pluginId","incumbent","find","entry","listPluginZones","map","impl","pluginZone","one","pluginIdForZone"],"mappings":";AAAA;;;;;;;;;;;;;;;CAeC,GAED,SAASA,sBAAsB,QAAQ,qCAAiC;AACxE,SACEC,2BAA2B,EAC3BC,qBAAqB,EACrBC,qBAAqB,QAChB,uBAAmB;AA0D1B;;;;CAIC,GACD,OAAO,SAASC,iBAAwBC,EAAU;IAChD,MAAMC,SAASD,GAAGE,IAAI;IACtB,IAAI,CAACD,QAAQ,MAAM,IAAIE,MAAM;IAC7B,OAAO;QAAEH,IAAIC;IAAO;AACtB;AAqCA,OAAO,MAAMG,eAAeR,4BAE1B,cAAc;IAAES,UAAU;AAAK,GAAE;AAEnC;;;;;CAKC,GACD,OAAO,SAASC,mBACdC,WAAyC,EACzCC,OAA+B;cAObb,OAAAA;QALNY,sBAAAA,mBAEPA;IAFL,MAAME,eAAMF,oBAAAA,YAAYG,IAAI,sBAAhBH,uBAAAA,kBAAkBP,EAAE,qBAApBO,qBAAsBL,IAAI,qBAAM;IAC5C,IAAI,CAACO,KAAK,MAAM,IAAIN,MAAM;IAC1B,IAAI,GAACI,qBAAAA,YAAYI,KAAK,qBAAjBJ,mBAAmBL,IAAI,KAAI;QAC9B,MAAM,IAAIC,MAAM,CAAC,aAAa,EAAEM,IAAI,eAAe,CAAC;IACtD;IACA,MAAMG,WAAW,EAACjB,SAAAA,0BAAAA,oCAAAA,0BAA4Ba,2BAAAA,QAASI,QAAQ,YAA7CjB,QAAiD,IAAIO,IAAI;IAC3E,MAAMW,YAAYf,sBAAsBM,cAAcU,IAAI,CACxD,CAACC,QAAUA,MAAMN,GAAG,KAAKA;IAE3B,IAAII,aAAaD,YAAYC,UAAUD,QAAQ,KAAKA,UAAU;QAC5D,MAAM,IAAIT,MACR,CAAC,MAAM,EAAEM,IAAI,0BAA0B,EAAEI,UAAUD,QAAQ,CAAC,GAAG,CAAC,GAC9D,CAAC,SAAS,EAAEA,SAAS,CAAC,CAAC;IAE7B;IACAf,sBACEO,cACAG,aACA,aACMC,CAAAA,2BAAAA,QAASI,QAAQ,IAAG;QAAEA,UAAUJ,QAAQI,QAAQ;IAAC,IAAI,CAAC;QAC1DH;;AAGN;AAEA,gEAAgE,GAChE,OAAO,SAASO;IACd,OAAOlB,sBAAsBM,cAAca,GAAG,CAAC,CAACF,QAAW,aACrDA,MAAMG,IAAI;YACdN,UAAUG,MAAMH,QAAQ;;AAE5B;AAEA,gFAAgF,GAChF,OAAO,SAASO,WAAWlB,MAAc;IACvC,MAAMQ,MAAMR,OAAOC,IAAI;IACvB,MAAMa,QAAQjB,sBAAsBM,cAAcU,IAAI,CACpD,CAACM,MAAQA,IAAIX,GAAG,KAAKA;IAEvB,OAAOM,QACH,aACMA,MAAMG,IAAI;QACdN,UAAUG,MAAMH,QAAQ;SAE1B;AACN;AAEA,sEAAsE,GACtE,OAAO,SAASS,gBAAgBpB,MAAc;QACrCkB;IAAP,QAAOA,cAAAA,WAAWlB,4BAAXkB,YAAoBP,QAAQ;AACrC"}
@@ -79,6 +79,7 @@ export const AGLYN_HOST_SURFACE = Object.freeze({
79
79
  FieldComponentType: m10.FieldComponentType,
80
80
  FieldValidatorType: m10.FieldValidatorType,
81
81
  LinealDirectiveFlag: m10.LinealDirectiveFlag,
82
+ CONSOLE_SEARCH_LOAD_POINT: m11.CONSOLE_SEARCH_LOAD_POINT,
82
83
  CONSOLE_STAFF_WIDGET_SLOTS: m11.CONSOLE_STAFF_WIDGET_SLOTS,
83
84
  CONSOLE_WIDGET_SLOTS: m11.CONSOLE_WIDGET_SLOTS,
84
85
  MUI_BUNDLE_ID: m11.MUI_BUNDLE_ID,
@@ -89,6 +90,7 @@ export const AGLYN_HOST_SURFACE = Object.freeze({
89
90
  listConsoleNavItems: m11.listConsoleNavItems,
90
91
  listConsoleOrgNavItems: m11.listConsoleOrgNavItems,
91
92
  listConsoleProviders: m11.listConsoleProviders,
93
+ listConsoleSearchSources: m11.listConsoleSearchSources,
92
94
  listConsoleStaffPages: m11.listConsoleStaffPages,
93
95
  listConsoleThemePresets: m11.listConsoleThemePresets,
94
96
  listConsoleWidgets: m11.listConsoleWidgets,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/plugin-manager/realm-host-aglyn.generated.ts"],"sourcesContent":["/**\n * GENERATED FILE — do not edit. Regenerate with:\n * node tools/scripts/generate-realm-host-exports.mjs\n *\n * The realm plugin surface of `@aglyn/aglyn` (AGL-3392): what a signed\n * bundle reads from core. Imported only by the lazily loaded host module.\n */\n/* eslint-disable */\n\nimport * as m0 from \"../aglyn\"\nimport * as m1 from \"../app-utils/binding-tokens\"\nimport * as m2 from \"../app-utils/enabled-plugins-context\"\nimport * as m3 from \"../app-utils/functions\"\nimport * as m4 from \"../app-utils/node-identity\"\nimport * as m5 from \"../app-utils/screen-link-context-value\"\nimport * as m6 from \"../app-utils/site-context\"\nimport * as m7 from \"../app-utils/variables\"\nimport * as m8 from \"../foundation/constants/components\"\nimport * as m9 from \"../foundation/constants/shared\"\nimport * as m10 from \"../foundation/definitions/components.types\"\nimport * as m11 from \"./feature-plugins\"\nimport * as m12 from \"../types/nodes\"\n\nexport const AGLYN_HOST_SURFACE: Readonly<Record<string, unknown>> = Object.freeze({\n Aglyn: m0.Aglyn,\n aglyn: m0.aglyn,\n canvas: m0.canvas,\n components: m0.components,\n emitter: m0.emitter,\n logger: m0.logger,\n plugins: m0.plugins,\n FUNCTION_TOKEN_PATTERN: m1.FUNCTION_TOKEN_PATTERN,\n MISSING_BINDING_LABEL: m1.MISSING_BINDING_LABEL,\n NAME_TOKEN_PATTERN: m1.NAME_TOKEN_PATTERN,\n VARIABLE_ID_TOKEN_PATTERN: m1.VARIABLE_ID_TOKEN_PATTERN,\n bindingTokenNeedsDeep: m1.bindingTokenNeedsDeep,\n displayBindingTokens: m1.displayBindingTokens,\n editableBindingTokens: m1.editableBindingTokens,\n formatFunctionIdToken: m1.formatFunctionIdToken,\n formatVariableIdToken: m1.formatVariableIdToken,\n keyById: m1.keyById,\n nodesReferenceBinding: m1.nodesReferenceBinding,\n normalizeBindingTokens: m1.normalizeBindingTokens,\n rewriteBindingTokensDeep: m1.rewriteBindingTokensDeep,\n textReferencesBinding: m1.textReferencesBinding,\n CATEGORY_REQUIRED_CAPABILITY: m2.CATEGORY_REQUIRED_CAPABILITY,\n EnabledPluginsContext: m2.EnabledPluginsContext,\n isCategoryCapabilityEnabled: m2.isCategoryCapabilityEnabled,\n isFromEnabledPlugin: m2.isFromEnabledPlugin,\n isSwitchedOffForRenderedSite: m2.isSwitchedOffForRenderedSite,\n useEnabledPlugins: m2.useEnabledPlugins,\n FUNCTION_BUILTIN_NAMES: m3.FUNCTION_BUILTIN_NAMES,\n FUNCTION_MAX_OPERATIONS: m3.FUNCTION_MAX_OPERATIONS,\n evaluateExpression: m3.evaluateExpression,\n evaluateHostFunction: m3.evaluateHostFunction,\n expressionIdentifiers: m3.expressionIdentifiers,\n formatFunctionParameterOptions: m3.formatFunctionParameterOptions,\n functionReferencedNames: m3.functionReferencedNames,\n parseFunctionParameterOptions: m3.parseFunctionParameterOptions,\n NodeIdentityContext: m4.NodeIdentityContext,\n useNodeId: m4.useNodeId,\n ScreenLinkContext: m5.ScreenLinkContext,\n PREVIEW_REFUSED_STATUS: m6.PREVIEW_REFUSED_STATUS,\n PREVIEW_WRITE_BLOCKED_EVENT: m6.PREVIEW_WRITE_BLOCKED_EVENT,\n SiteContext: m6.SiteContext,\n isPreviewRefusal: m6.isPreviewRefusal,\n useSite: m6.useSite,\n useSiteFetch: m6.useSiteFetch,\n HOST_VARIABLE_TYPE_LABELS: m7.HOST_VARIABLE_TYPE_LABELS,\n VARIABLE_NAME_PATTERN: m7.VARIABLE_NAME_PATTERN,\n attachFunctionDefinitions: m7.attachFunctionDefinitions,\n formatVariableValue: m7.formatVariableValue,\n functionGlobals: m7.functionGlobals,\n hasBindings: m7.hasBindings,\n resolveBindings: m7.resolveBindings,\n resolveNodesBindings: m7.resolveNodesBindings,\n COMPONENT_CATEGORY_ORDER: m8.COMPONENT_CATEGORY_ORDER,\n ComponentCategory: m8.ComponentCategory,\n REUSABLE_COMPONENT_CATEGORY: m8.REUSABLE_COMPONENT_CATEGORY,\n REUSABLE_EMAIL_BLOCK_CATEGORY: m8.REUSABLE_EMAIL_BLOCK_CATEGORY,\n FEATURE_FLAG: m9.FEATURE_FLAG,\n RICH_TEXT_COMMANDS: m9.RICH_TEXT_COMMANDS,\n FieldComponentType: m10.FieldComponentType,\n FieldValidatorType: m10.FieldValidatorType,\n LinealDirectiveFlag: m10.LinealDirectiveFlag,\n CONSOLE_STAFF_WIDGET_SLOTS: m11.CONSOLE_STAFF_WIDGET_SLOTS,\n CONSOLE_WIDGET_SLOTS: m11.CONSOLE_WIDGET_SLOTS,\n MUI_BUNDLE_ID: m11.MUI_BUNDLE_ID,\n THEME_PRESETS_LOAD_POINT: m11.THEME_PRESETS_LOAD_POINT,\n defineUiFeatureBundle: m11.defineUiFeatureBundle,\n isConsoleStaffWidgetSlot: m11.isConsoleStaffWidgetSlot,\n listConsoleExtensions: m11.listConsoleExtensions,\n listConsoleNavItems: m11.listConsoleNavItems,\n listConsoleOrgNavItems: m11.listConsoleOrgNavItems,\n listConsoleProviders: m11.listConsoleProviders,\n listConsoleStaffPages: m11.listConsoleStaffPages,\n listConsoleThemePresets: m11.listConsoleThemePresets,\n listConsoleWidgets: m11.listConsoleWidgets,\n registerConsoleExtension: m11.registerConsoleExtension,\n resolveConsoleOrgPluginPage: m11.resolveConsoleOrgPluginPage,\n resolveConsolePluginPage: m11.resolveConsolePluginPage,\n resolveConsoleStaffPage: m11.resolveConsoleStaffPage,\n unregisterConsoleExtension: m11.unregisterConsoleExtension,\n NodeType: m12.NodeType,\n})\n"],"names":["m0","m1","m2","m3","m4","m5","m6","m7","m8","m9","m10","m11","m12","AGLYN_HOST_SURFACE","Object","freeze","Aglyn","aglyn","canvas","components","emitter","logger","plugins","FUNCTION_TOKEN_PATTERN","MISSING_BINDING_LABEL","NAME_TOKEN_PATTERN","VARIABLE_ID_TOKEN_PATTERN","bindingTokenNeedsDeep","displayBindingTokens","editableBindingTokens","formatFunctionIdToken","formatVariableIdToken","keyById","nodesReferenceBinding","normalizeBindingTokens","rewriteBindingTokensDeep","textReferencesBinding","CATEGORY_REQUIRED_CAPABILITY","EnabledPluginsContext","isCategoryCapabilityEnabled","isFromEnabledPlugin","isSwitchedOffForRenderedSite","useEnabledPlugins","FUNCTION_BUILTIN_NAMES","FUNCTION_MAX_OPERATIONS","evaluateExpression","evaluateHostFunction","expressionIdentifiers","formatFunctionParameterOptions","functionReferencedNames","parseFunctionParameterOptions","NodeIdentityContext","useNodeId","ScreenLinkContext","PREVIEW_REFUSED_STATUS","PREVIEW_WRITE_BLOCKED_EVENT","SiteContext","isPreviewRefusal","useSite","useSiteFetch","HOST_VARIABLE_TYPE_LABELS","VARIABLE_NAME_PATTERN","attachFunctionDefinitions","formatVariableValue","functionGlobals","hasBindings","resolveBindings","resolveNodesBindings","COMPONENT_CATEGORY_ORDER","ComponentCategory","REUSABLE_COMPONENT_CATEGORY","REUSABLE_EMAIL_BLOCK_CATEGORY","FEATURE_FLAG","RICH_TEXT_COMMANDS","FieldComponentType","FieldValidatorType","LinealDirectiveFlag","CONSOLE_STAFF_WIDGET_SLOTS","CONSOLE_WIDGET_SLOTS","MUI_BUNDLE_ID","THEME_PRESETS_LOAD_POINT","defineUiFeatureBundle","isConsoleStaffWidgetSlot","listConsoleExtensions","listConsoleNavItems","listConsoleOrgNavItems","listConsoleProviders","listConsoleStaffPages","listConsoleThemePresets","listConsoleWidgets","registerConsoleExtension","resolveConsoleOrgPluginPage","resolveConsolePluginPage","resolveConsoleStaffPage","unregisterConsoleExtension","NodeType"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/plugin-manager/realm-host-aglyn.generated.ts"],"sourcesContent":["/**\n * GENERATED FILE — do not edit. Regenerate with:\n * node tools/scripts/generate-realm-host-exports.mjs\n *\n * The realm plugin surface of `@aglyn/aglyn` (AGL-3392): what a signed\n * bundle reads from core. Imported only by the lazily loaded host module.\n */\n/* eslint-disable */\n\nimport * as m0 from \"../aglyn\"\nimport * as m1 from \"../app-utils/binding-tokens\"\nimport * as m2 from \"../app-utils/enabled-plugins-context\"\nimport * as m3 from \"../app-utils/functions\"\nimport * as m4 from \"../app-utils/node-identity\"\nimport * as m5 from \"../app-utils/screen-link-context-value\"\nimport * as m6 from \"../app-utils/site-context\"\nimport * as m7 from \"../app-utils/variables\"\nimport * as m8 from \"../foundation/constants/components\"\nimport * as m9 from \"../foundation/constants/shared\"\nimport * as m10 from \"../foundation/definitions/components.types\"\nimport * as m11 from \"./feature-plugins\"\nimport * as m12 from \"../types/nodes\"\n\nexport const AGLYN_HOST_SURFACE: Readonly<Record<string, unknown>> = Object.freeze({\n Aglyn: m0.Aglyn,\n aglyn: m0.aglyn,\n canvas: m0.canvas,\n components: m0.components,\n emitter: m0.emitter,\n logger: m0.logger,\n plugins: m0.plugins,\n FUNCTION_TOKEN_PATTERN: m1.FUNCTION_TOKEN_PATTERN,\n MISSING_BINDING_LABEL: m1.MISSING_BINDING_LABEL,\n NAME_TOKEN_PATTERN: m1.NAME_TOKEN_PATTERN,\n VARIABLE_ID_TOKEN_PATTERN: m1.VARIABLE_ID_TOKEN_PATTERN,\n bindingTokenNeedsDeep: m1.bindingTokenNeedsDeep,\n displayBindingTokens: m1.displayBindingTokens,\n editableBindingTokens: m1.editableBindingTokens,\n formatFunctionIdToken: m1.formatFunctionIdToken,\n formatVariableIdToken: m1.formatVariableIdToken,\n keyById: m1.keyById,\n nodesReferenceBinding: m1.nodesReferenceBinding,\n normalizeBindingTokens: m1.normalizeBindingTokens,\n rewriteBindingTokensDeep: m1.rewriteBindingTokensDeep,\n textReferencesBinding: m1.textReferencesBinding,\n CATEGORY_REQUIRED_CAPABILITY: m2.CATEGORY_REQUIRED_CAPABILITY,\n EnabledPluginsContext: m2.EnabledPluginsContext,\n isCategoryCapabilityEnabled: m2.isCategoryCapabilityEnabled,\n isFromEnabledPlugin: m2.isFromEnabledPlugin,\n isSwitchedOffForRenderedSite: m2.isSwitchedOffForRenderedSite,\n useEnabledPlugins: m2.useEnabledPlugins,\n FUNCTION_BUILTIN_NAMES: m3.FUNCTION_BUILTIN_NAMES,\n FUNCTION_MAX_OPERATIONS: m3.FUNCTION_MAX_OPERATIONS,\n evaluateExpression: m3.evaluateExpression,\n evaluateHostFunction: m3.evaluateHostFunction,\n expressionIdentifiers: m3.expressionIdentifiers,\n formatFunctionParameterOptions: m3.formatFunctionParameterOptions,\n functionReferencedNames: m3.functionReferencedNames,\n parseFunctionParameterOptions: m3.parseFunctionParameterOptions,\n NodeIdentityContext: m4.NodeIdentityContext,\n useNodeId: m4.useNodeId,\n ScreenLinkContext: m5.ScreenLinkContext,\n PREVIEW_REFUSED_STATUS: m6.PREVIEW_REFUSED_STATUS,\n PREVIEW_WRITE_BLOCKED_EVENT: m6.PREVIEW_WRITE_BLOCKED_EVENT,\n SiteContext: m6.SiteContext,\n isPreviewRefusal: m6.isPreviewRefusal,\n useSite: m6.useSite,\n useSiteFetch: m6.useSiteFetch,\n HOST_VARIABLE_TYPE_LABELS: m7.HOST_VARIABLE_TYPE_LABELS,\n VARIABLE_NAME_PATTERN: m7.VARIABLE_NAME_PATTERN,\n attachFunctionDefinitions: m7.attachFunctionDefinitions,\n formatVariableValue: m7.formatVariableValue,\n functionGlobals: m7.functionGlobals,\n hasBindings: m7.hasBindings,\n resolveBindings: m7.resolveBindings,\n resolveNodesBindings: m7.resolveNodesBindings,\n COMPONENT_CATEGORY_ORDER: m8.COMPONENT_CATEGORY_ORDER,\n ComponentCategory: m8.ComponentCategory,\n REUSABLE_COMPONENT_CATEGORY: m8.REUSABLE_COMPONENT_CATEGORY,\n REUSABLE_EMAIL_BLOCK_CATEGORY: m8.REUSABLE_EMAIL_BLOCK_CATEGORY,\n FEATURE_FLAG: m9.FEATURE_FLAG,\n RICH_TEXT_COMMANDS: m9.RICH_TEXT_COMMANDS,\n FieldComponentType: m10.FieldComponentType,\n FieldValidatorType: m10.FieldValidatorType,\n LinealDirectiveFlag: m10.LinealDirectiveFlag,\n CONSOLE_SEARCH_LOAD_POINT: m11.CONSOLE_SEARCH_LOAD_POINT,\n CONSOLE_STAFF_WIDGET_SLOTS: m11.CONSOLE_STAFF_WIDGET_SLOTS,\n CONSOLE_WIDGET_SLOTS: m11.CONSOLE_WIDGET_SLOTS,\n MUI_BUNDLE_ID: m11.MUI_BUNDLE_ID,\n THEME_PRESETS_LOAD_POINT: m11.THEME_PRESETS_LOAD_POINT,\n defineUiFeatureBundle: m11.defineUiFeatureBundle,\n isConsoleStaffWidgetSlot: m11.isConsoleStaffWidgetSlot,\n listConsoleExtensions: m11.listConsoleExtensions,\n listConsoleNavItems: m11.listConsoleNavItems,\n listConsoleOrgNavItems: m11.listConsoleOrgNavItems,\n listConsoleProviders: m11.listConsoleProviders,\n listConsoleSearchSources: m11.listConsoleSearchSources,\n listConsoleStaffPages: m11.listConsoleStaffPages,\n listConsoleThemePresets: m11.listConsoleThemePresets,\n listConsoleWidgets: m11.listConsoleWidgets,\n registerConsoleExtension: m11.registerConsoleExtension,\n resolveConsoleOrgPluginPage: m11.resolveConsoleOrgPluginPage,\n resolveConsolePluginPage: m11.resolveConsolePluginPage,\n resolveConsoleStaffPage: m11.resolveConsoleStaffPage,\n unregisterConsoleExtension: m11.unregisterConsoleExtension,\n NodeType: m12.NodeType,\n})\n"],"names":["m0","m1","m2","m3","m4","m5","m6","m7","m8","m9","m10","m11","m12","AGLYN_HOST_SURFACE","Object","freeze","Aglyn","aglyn","canvas","components","emitter","logger","plugins","FUNCTION_TOKEN_PATTERN","MISSING_BINDING_LABEL","NAME_TOKEN_PATTERN","VARIABLE_ID_TOKEN_PATTERN","bindingTokenNeedsDeep","displayBindingTokens","editableBindingTokens","formatFunctionIdToken","formatVariableIdToken","keyById","nodesReferenceBinding","normalizeBindingTokens","rewriteBindingTokensDeep","textReferencesBinding","CATEGORY_REQUIRED_CAPABILITY","EnabledPluginsContext","isCategoryCapabilityEnabled","isFromEnabledPlugin","isSwitchedOffForRenderedSite","useEnabledPlugins","FUNCTION_BUILTIN_NAMES","FUNCTION_MAX_OPERATIONS","evaluateExpression","evaluateHostFunction","expressionIdentifiers","formatFunctionParameterOptions","functionReferencedNames","parseFunctionParameterOptions","NodeIdentityContext","useNodeId","ScreenLinkContext","PREVIEW_REFUSED_STATUS","PREVIEW_WRITE_BLOCKED_EVENT","SiteContext","isPreviewRefusal","useSite","useSiteFetch","HOST_VARIABLE_TYPE_LABELS","VARIABLE_NAME_PATTERN","attachFunctionDefinitions","formatVariableValue","functionGlobals","hasBindings","resolveBindings","resolveNodesBindings","COMPONENT_CATEGORY_ORDER","ComponentCategory","REUSABLE_COMPONENT_CATEGORY","REUSABLE_EMAIL_BLOCK_CATEGORY","FEATURE_FLAG","RICH_TEXT_COMMANDS","FieldComponentType","FieldValidatorType","LinealDirectiveFlag","CONSOLE_SEARCH_LOAD_POINT","CONSOLE_STAFF_WIDGET_SLOTS","CONSOLE_WIDGET_SLOTS","MUI_BUNDLE_ID","THEME_PRESETS_LOAD_POINT","defineUiFeatureBundle","isConsoleStaffWidgetSlot","listConsoleExtensions","listConsoleNavItems","listConsoleOrgNavItems","listConsoleProviders","listConsoleSearchSources","listConsoleStaffPages","listConsoleThemePresets","listConsoleWidgets","registerConsoleExtension","resolveConsoleOrgPluginPage","resolveConsolePluginPage","resolveConsoleStaffPage","unregisterConsoleExtension","NodeType"],"mappings":"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"}
@@ -71,19 +71,6 @@
71
71
  * `plugin-manager/index.ts`.
72
72
  */
73
73
  import { type PluginContactCaptureRequest, type PluginContactCaptured } from './plugin-contact-capture';
74
- /**
75
- * The app offers its boot step, so a capture that finds nobody can run it.
76
- *
77
- * Called at boot from the app's own instrumentation, beside the declarations
78
- * themselves and BEFORE them — this is a plain assignment that cannot fail,
79
- * and the failure it exists to repair is the one immediately after it. The
80
- * app passes a function rather than core importing the generated manifest,
81
- * which core may not do: the manifest names every plugin.
82
- *
83
- * Idempotent and last-one-wins; an app registers exactly once per process.
84
- */
85
- export declare function registerPluginDeclarationsRepair(run: () => Promise<void>): void;
86
- /** Only for specs: forgets the registered boot step. */
87
- export declare function resetPluginDeclarationsRepairForTests(): void;
74
+ export { registerPluginDeclarationsRepair, resetPluginDeclarationsRepairForTests, } from './plugin-declarations-repair';
88
75
  export declare function recordCapturedContact(request: PluginContactCaptureRequest): Promise<PluginContactCaptured | null>;
89
76
  export default recordCapturedContact;
@@ -69,31 +69,12 @@
69
69
  * Server-side: reached by its own subpath, never through
70
70
  * `plugin-manager/index.ts`.
71
71
  */ import { pluginContactCaptureWriter } from "./plugin-contact-capture.js";
72
- /**
73
- * The app's boot-time declarations step, when it has offered one.
74
- *
75
- * Held on `globalThis` rather than in a module `let` (AGL-3412): the app
76
- * offers it from `instrumentation.ts`, which Next compiles into a different
77
- * module graph from the routes that capture, so a module-scoped slot is set
78
- * in one copy and read as empty in the other.
79
- */ const REPAIR_KEY = Symbol.for('@aglyn/aglyn:plugin-declarations-repair');
80
- const globalScope = globalThis;
81
- /**
82
- * The app offers its boot step, so a capture that finds nobody can run it.
83
- *
84
- * Called at boot from the app's own instrumentation, beside the declarations
85
- * themselves and BEFORE them — this is a plain assignment that cannot fail,
86
- * and the failure it exists to repair is the one immediately after it. The
87
- * app passes a function rather than core importing the generated manifest,
88
- * which core may not do: the manifest names every plugin.
89
- *
90
- * Idempotent and last-one-wins; an app registers exactly once per process.
91
- */ export function registerPluginDeclarationsRepair(run) {
92
- globalScope[REPAIR_KEY] = run;
93
- }
94
- /** Only for specs: forgets the registered boot step. */ export function resetPluginDeclarationsRepairForTests() {
95
- globalScope[REPAIR_KEY] = null;
96
- }
72
+ import { runPluginDeclarationsRepair } from "./plugin-declarations-repair.js";
73
+ /*
74
+ * The boot step's slot lives in its own leaf (AGL-2773), because the custom
75
+ * field registry reads it too and that registry is client-safe. Re-exported
76
+ * so the apps' instrumentation keeps importing it from here.
77
+ */ export { registerPluginDeclarationsRepair, resetPluginDeclarationsRepairForTests } from "./plugin-declarations-repair.js";
97
78
  export async function recordCapturedContact(request) {
98
79
  const where = `${request.interaction.source} on ${request.hostId}`;
99
80
  const found = pluginContactCaptureWriter();
@@ -102,13 +83,10 @@ export async function recordCapturedContact(request) {
102
83
  // that registers the writer failed and every capture in this process has
103
84
  // been going nowhere. Run it and ask again — the registration memoizes its
104
85
  // own promise, so this is one attempt per process and not one per capture.
105
- const repair = globalScope[REPAIR_KEY];
106
- if (repair) {
107
- try {
108
- await repair();
109
- } catch (error) {
110
- console.error(`[capture] plugin declarations failed before ${where}`, error);
111
- }
86
+ try {
87
+ await runPluginDeclarationsRepair();
88
+ } catch (error) {
89
+ console.error(`[capture] plugin declarations failed before ${where}`, error);
112
90
  }
113
91
  const late = pluginContactCaptureWriter();
114
92
  if (!late) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/plugin-manager/record-captured-contact.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 * How a door hands somebody it just met to whichever plugin keeps people\n * (AGL-3080).\n *\n * `capturePluginContact` is the contract; this is the three things every\n * door calling it has to get right, in one place so no door has to remember\n * them. It lives in core rather than in an app because the doors are not all\n * in one place: a form submission is a core route in the tenant app, a\n * newsletter signup and a membership registration are commerce's, a booking\n * request is bookings'. A plugin may not import an app, so a wrapper that\n * lived in one would be a wrapper the plugin doors had to copy — and a copy\n * is where the two halves of this behaviour would drift.\n *\n * ## It makes sure somebody is listening, without slowing down the case where\n * somebody already is\n *\n * `capturePluginContact` answers `null` when no plugin keeps people, and the\n * plugin that does registers itself from the server declarations each app\n * runs at boot. That boot step is wrapped in a `catch` — a declaration that\n * fails to load must not cost every route — so a boot that went wrong leaves\n * a process where every capture answers `null` and no contact is ever\n * written, with one line in a log nobody is reading.\n *\n * So the writer is looked up FIRST, synchronously, and handed the capture\n * with no await in between. That matters for more than speed: every caller\n * is fire-and-forget, and a door that awaited anything before reaching the\n * writer would hand the capture to a request that may already have returned.\n * Only when no writer answers does this run the app's boot step and try once\n * more — repairing the broken-boot case rather than just reporting it.\n *\n * The boot step itself is the app's, because the list of plugins to declare\n * is generated per app and core may not import a plugin. The app hands it\n * over at boot with {@link registerPluginDeclarationsRepair}. An app that has\n * not — or a process that never ran its instrumentation at all — loses the\n * repair and keeps every other behaviour here, which is the honest outcome:\n * a process that ran no boot step has bigger silences than this one.\n *\n * ## It tells the difference between the two silences\n *\n * `null` is \"this workspace has no record system\", which is a real and quiet\n * answer for a workspace with the record plugin switched off. It is ALSO what\n * a broken registration looks like, and the two are indistinguishable from\n * here. So it is logged rather than ignored: a workspace that should be\n * keeping contacts and has silently stopped is the failure mode this seam can\n * produce, and a line naming the site is what turns an unreproducible support\n * ticket into a one-minute answer. A refusal is different again — the owner\n * considered this person and declined, for a reason it states — and is logged\n * as itself.\n *\n * ⚠️ IT NEVER THROWS, and callers use it fire-and-forget. Every door has\n * already done the thing it is recording; losing the submission, the signup\n * or the booking over the contact would be the larger failure.\n *\n * Server-side: reached by its own subpath, never through\n * `plugin-manager/index.ts`.\n */\n\nimport {\n pluginContactCaptureWriter,\n type PluginContactCaptureRequest,\n type PluginContactCaptureWriter,\n type PluginContactCaptured,\n} from './plugin-contact-capture'\n\n/**\n * The app's boot-time declarations step, when it has offered one.\n *\n * Held on `globalThis` rather than in a module `let` (AGL-3412): the app\n * offers it from `instrumentation.ts`, which Next compiles into a different\n * module graph from the routes that capture, so a module-scoped slot is set\n * in one copy and read as empty in the other.\n */\nconst REPAIR_KEY = Symbol.for('@aglyn/aglyn:plugin-declarations-repair')\n\nconst globalScope = globalThis as typeof globalThis & {\n [REPAIR_KEY]?: (() => Promise<void>) | null\n}\n\n/**\n * The app offers its boot step, so a capture that finds nobody can run it.\n *\n * Called at boot from the app's own instrumentation, beside the declarations\n * themselves and BEFORE them — this is a plain assignment that cannot fail,\n * and the failure it exists to repair is the one immediately after it. The\n * app passes a function rather than core importing the generated manifest,\n * which core may not do: the manifest names every plugin.\n *\n * Idempotent and last-one-wins; an app registers exactly once per process.\n */\nexport function registerPluginDeclarationsRepair(run: () => Promise<void>): void {\n globalScope[REPAIR_KEY] = run\n}\n\n/** Only for specs: forgets the registered boot step. */\nexport function resetPluginDeclarationsRepairForTests(): void {\n globalScope[REPAIR_KEY] = null\n}\n\nexport async function recordCapturedContact(\n request: PluginContactCaptureRequest,\n): Promise<PluginContactCaptured | null> {\n const where = `${request.interaction.source} on ${request.hostId}`\n const found = pluginContactCaptureWriter()\n if (found) return await handedTo(found.writer, request, where)\n\n // Nobody answers. Either this workspace keeps no records, or the boot step\n // that registers the writer failed and every capture in this process has\n // been going nowhere. Run it and ask again — the registration memoizes its\n // own promise, so this is one attempt per process and not one per capture.\n const repair = globalScope[REPAIR_KEY]\n if (repair) {\n try {\n await repair()\n } catch (error) {\n console.error(`[capture] plugin declarations failed before ${where}`, error)\n }\n }\n const late = pluginContactCaptureWriter()\n if (!late) {\n console.warn(\n `[capture] no plugin keeps people, so the ${where} recorded nobody. ` +\n 'Expected when the record plugin is off for this workspace; a bug otherwise.',\n )\n return null\n }\n console.warn(\n `[capture] the ${where} found no writer until it registered one itself — ` +\n 'the boot-time declarations did not run in this process.',\n )\n return await handedTo(late.writer, request, where)\n}\n\n/** One capture, with the two failures a door must not be made to handle. */\nasync function handedTo(\n writer: PluginContactCaptureWriter,\n request: PluginContactCaptureRequest,\n where: string,\n): Promise<PluginContactCaptured | null> {\n try {\n const verdict = await writer.capture(request)\n if (verdict.ok === false) {\n console.warn(`[capture] ${where} was refused (${verdict.reason})`)\n }\n return verdict\n } catch (error) {\n // The contract says a writer RETURNS its refusals, so reaching here means\n // one broke its own contract. It still costs the door nothing.\n console.error(`[capture] ${where} threw`, error)\n return null\n }\n}\n\nexport default recordCapturedContact\n"],"names":["pluginContactCaptureWriter","REPAIR_KEY","Symbol","for","globalScope","globalThis","registerPluginDeclarationsRepair","run","resetPluginDeclarationsRepairForTests","recordCapturedContact","request","where","interaction","source","hostId","found","handedTo","writer","repair","error","console","late","warn","verdict","capture","ok","reason"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuDC,GAED,SACEA,0BAA0B,QAIrB,8BAA0B;AAEjC;;;;;;;CAOC,GACD,MAAMC,aAAaC,OAAOC,GAAG,CAAC;AAE9B,MAAMC,cAAcC;AAIpB;;;;;;;;;;CAUC,GACD,OAAO,SAASC,iCAAiCC,GAAwB;IACvEH,WAAW,CAACH,WAAW,GAAGM;AAC5B;AAEA,sDAAsD,GACtD,OAAO,SAASC;IACdJ,WAAW,CAACH,WAAW,GAAG;AAC5B;AAEA,OAAO,eAAeQ,sBACpBC,OAAoC;IAEpC,MAAMC,QAAQ,GAAGD,QAAQE,WAAW,CAACC,MAAM,CAAC,IAAI,EAAEH,QAAQI,MAAM,EAAE;IAClE,MAAMC,QAAQf;IACd,IAAIe,OAAO,OAAO,MAAMC,SAASD,MAAME,MAAM,EAAEP,SAASC;IAExD,2EAA2E;IAC3E,yEAAyE;IACzE,2EAA2E;IAC3E,2EAA2E;IAC3E,MAAMO,SAASd,WAAW,CAACH,WAAW;IACtC,IAAIiB,QAAQ;QACV,IAAI;YACF,MAAMA;QACR,EAAE,OAAOC,OAAO;YACdC,QAAQD,KAAK,CAAC,CAAC,4CAA4C,EAAER,OAAO,EAAEQ;QACxE;IACF;IACA,MAAME,OAAOrB;IACb,IAAI,CAACqB,MAAM;QACTD,QAAQE,IAAI,CACV,CAAC,yCAAyC,EAAEX,MAAM,kBAAkB,CAAC,GACnE;QAEJ,OAAO;IACT;IACAS,QAAQE,IAAI,CACV,CAAC,cAAc,EAAEX,MAAM,kDAAkD,CAAC,GACxE;IAEJ,OAAO,MAAMK,SAASK,KAAKJ,MAAM,EAAEP,SAASC;AAC9C;AAEA,0EAA0E,GAC1E,eAAeK,SACbC,MAAkC,EAClCP,OAAoC,EACpCC,KAAa;IAEb,IAAI;QACF,MAAMY,UAAU,MAAMN,OAAOO,OAAO,CAACd;QACrC,IAAIa,QAAQE,EAAE,KAAK,OAAO;YACxBL,QAAQE,IAAI,CAAC,CAAC,UAAU,EAAEX,MAAM,cAAc,EAAEY,QAAQG,MAAM,CAAC,CAAC,CAAC;QACnE;QACA,OAAOH;IACT,EAAE,OAAOJ,OAAO;QACd,0EAA0E;QAC1E,+DAA+D;QAC/DC,QAAQD,KAAK,CAAC,CAAC,UAAU,EAAER,MAAM,MAAM,CAAC,EAAEQ;QAC1C,OAAO;IACT;AACF;AAEA,eAAeV,sBAAqB"}
1
+ {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/plugin-manager/record-captured-contact.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 * How a door hands somebody it just met to whichever plugin keeps people\n * (AGL-3080).\n *\n * `capturePluginContact` is the contract; this is the three things every\n * door calling it has to get right, in one place so no door has to remember\n * them. It lives in core rather than in an app because the doors are not all\n * in one place: a form submission is a core route in the tenant app, a\n * newsletter signup and a membership registration are commerce's, a booking\n * request is bookings'. A plugin may not import an app, so a wrapper that\n * lived in one would be a wrapper the plugin doors had to copy — and a copy\n * is where the two halves of this behaviour would drift.\n *\n * ## It makes sure somebody is listening, without slowing down the case where\n * somebody already is\n *\n * `capturePluginContact` answers `null` when no plugin keeps people, and the\n * plugin that does registers itself from the server declarations each app\n * runs at boot. That boot step is wrapped in a `catch` — a declaration that\n * fails to load must not cost every route — so a boot that went wrong leaves\n * a process where every capture answers `null` and no contact is ever\n * written, with one line in a log nobody is reading.\n *\n * So the writer is looked up FIRST, synchronously, and handed the capture\n * with no await in between. That matters for more than speed: every caller\n * is fire-and-forget, and a door that awaited anything before reaching the\n * writer would hand the capture to a request that may already have returned.\n * Only when no writer answers does this run the app's boot step and try once\n * more — repairing the broken-boot case rather than just reporting it.\n *\n * The boot step itself is the app's, because the list of plugins to declare\n * is generated per app and core may not import a plugin. The app hands it\n * over at boot with {@link registerPluginDeclarationsRepair}. An app that has\n * not — or a process that never ran its instrumentation at all — loses the\n * repair and keeps every other behaviour here, which is the honest outcome:\n * a process that ran no boot step has bigger silences than this one.\n *\n * ## It tells the difference between the two silences\n *\n * `null` is \"this workspace has no record system\", which is a real and quiet\n * answer for a workspace with the record plugin switched off. It is ALSO what\n * a broken registration looks like, and the two are indistinguishable from\n * here. So it is logged rather than ignored: a workspace that should be\n * keeping contacts and has silently stopped is the failure mode this seam can\n * produce, and a line naming the site is what turns an unreproducible support\n * ticket into a one-minute answer. A refusal is different again — the owner\n * considered this person and declined, for a reason it states — and is logged\n * as itself.\n *\n * ⚠️ IT NEVER THROWS, and callers use it fire-and-forget. Every door has\n * already done the thing it is recording; losing the submission, the signup\n * or the booking over the contact would be the larger failure.\n *\n * Server-side: reached by its own subpath, never through\n * `plugin-manager/index.ts`.\n */\n\nimport {\n pluginContactCaptureWriter,\n type PluginContactCaptureRequest,\n type PluginContactCaptureWriter,\n type PluginContactCaptured,\n} from './plugin-contact-capture'\nimport { runPluginDeclarationsRepair } from './plugin-declarations-repair'\n\n/*\n * The boot step's slot lives in its own leaf (AGL-2773), because the custom\n * field registry reads it too and that registry is client-safe. Re-exported\n * so the apps' instrumentation keeps importing it from here.\n */\nexport {\n registerPluginDeclarationsRepair,\n resetPluginDeclarationsRepairForTests,\n} from './plugin-declarations-repair'\n\nexport async function recordCapturedContact(\n request: PluginContactCaptureRequest,\n): Promise<PluginContactCaptured | null> {\n const where = `${request.interaction.source} on ${request.hostId}`\n const found = pluginContactCaptureWriter()\n if (found) return await handedTo(found.writer, request, where)\n\n // Nobody answers. Either this workspace keeps no records, or the boot step\n // that registers the writer failed and every capture in this process has\n // been going nowhere. Run it and ask again — the registration memoizes its\n // own promise, so this is one attempt per process and not one per capture.\n try {\n await runPluginDeclarationsRepair()\n } catch (error) {\n console.error(`[capture] plugin declarations failed before ${where}`, error)\n }\n const late = pluginContactCaptureWriter()\n if (!late) {\n console.warn(\n `[capture] no plugin keeps people, so the ${where} recorded nobody. ` +\n 'Expected when the record plugin is off for this workspace; a bug otherwise.',\n )\n return null\n }\n console.warn(\n `[capture] the ${where} found no writer until it registered one itself — ` +\n 'the boot-time declarations did not run in this process.',\n )\n return await handedTo(late.writer, request, where)\n}\n\n/** One capture, with the two failures a door must not be made to handle. */\nasync function handedTo(\n writer: PluginContactCaptureWriter,\n request: PluginContactCaptureRequest,\n where: string,\n): Promise<PluginContactCaptured | null> {\n try {\n const verdict = await writer.capture(request)\n if (verdict.ok === false) {\n console.warn(`[capture] ${where} was refused (${verdict.reason})`)\n }\n return verdict\n } catch (error) {\n // The contract says a writer RETURNS its refusals, so reaching here means\n // one broke its own contract. It still costs the door nothing.\n console.error(`[capture] ${where} threw`, error)\n return null\n }\n}\n\nexport default recordCapturedContact\n"],"names":["pluginContactCaptureWriter","runPluginDeclarationsRepair","registerPluginDeclarationsRepair","resetPluginDeclarationsRepairForTests","recordCapturedContact","request","where","interaction","source","hostId","found","handedTo","writer","error","console","late","warn","verdict","capture","ok","reason"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuDC,GAED,SACEA,0BAA0B,QAIrB,8BAA0B;AACjC,SAASC,2BAA2B,QAAQ,kCAA8B;AAE1E;;;;CAIC,GACD,SACEC,gCAAgC,EAChCC,qCAAqC,QAChC,kCAA8B;AAErC,OAAO,eAAeC,sBACpBC,OAAoC;IAEpC,MAAMC,QAAQ,GAAGD,QAAQE,WAAW,CAACC,MAAM,CAAC,IAAI,EAAEH,QAAQI,MAAM,EAAE;IAClE,MAAMC,QAAQV;IACd,IAAIU,OAAO,OAAO,MAAMC,SAASD,MAAME,MAAM,EAAEP,SAASC;IAExD,2EAA2E;IAC3E,yEAAyE;IACzE,2EAA2E;IAC3E,2EAA2E;IAC3E,IAAI;QACF,MAAML;IACR,EAAE,OAAOY,OAAO;QACdC,QAAQD,KAAK,CAAC,CAAC,4CAA4C,EAAEP,OAAO,EAAEO;IACxE;IACA,MAAME,OAAOf;IACb,IAAI,CAACe,MAAM;QACTD,QAAQE,IAAI,CACV,CAAC,yCAAyC,EAAEV,MAAM,kBAAkB,CAAC,GACnE;QAEJ,OAAO;IACT;IACAQ,QAAQE,IAAI,CACV,CAAC,cAAc,EAAEV,MAAM,kDAAkD,CAAC,GACxE;IAEJ,OAAO,MAAMK,SAASI,KAAKH,MAAM,EAAEP,SAASC;AAC9C;AAEA,0EAA0E,GAC1E,eAAeK,SACbC,MAAkC,EAClCP,OAAoC,EACpCC,KAAa;IAEb,IAAI;QACF,MAAMW,UAAU,MAAML,OAAOM,OAAO,CAACb;QACrC,IAAIY,QAAQE,EAAE,KAAK,OAAO;YACxBL,QAAQE,IAAI,CAAC,CAAC,UAAU,EAAEV,MAAM,cAAc,EAAEW,QAAQG,MAAM,CAAC,CAAC,CAAC;QACnE;QACA,OAAOH;IACT,EAAE,OAAOJ,OAAO;QACd,0EAA0E;QAC1E,+DAA+D;QAC/DC,QAAQD,KAAK,CAAC,CAAC,UAAU,EAAEP,MAAM,MAAM,CAAC,EAAEO;QAC1C,OAAO;IACT;AACF;AAEA,eAAeT,sBAAqB"}
@@ -0,0 +1,124 @@
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
+ import type { RepeatableDataset } from '../app-utils/expand-repeatables';
18
+ /**
19
+ * WHERE A PUBLISHED PAGE'S REPEATED ROWS COME FROM (AGL-3080).
20
+ *
21
+ * Any element can repeat, and the platform decides what a repeat MEANS — the
22
+ * scope, the copies, the filter, the bound (`expand-repeatables.ts`). What it
23
+ * does not decide is where the rows live. That is the plugin's that keeps
24
+ * them, and the composition that renders a published page asks it here, with
25
+ * the keys the page's tree repeats over, and never reads a collection itself.
26
+ *
27
+ * `repeat-sources.ts` is the editor's side of the same line: a hook the
28
+ * besigner's canvas mounts to preview the rows. This is the server's side,
29
+ * read once per compose, and it is a different registry because its readers
30
+ * are different processes with different failure costs.
31
+ *
32
+ * ## Declared, then registered — and an absent reader is refused
33
+ *
34
+ * The reader is registered from the owning plugin's `serverDeclarations`
35
+ * entry, which every app runs at boot, so every process that composes a page
36
+ * has it before the first request. But a registry is only safe where an empty
37
+ * one cannot be mistaken for an answer, and here it can: a page whose repeat
38
+ * found no reader would render the template once where the author put a list,
39
+ * and nothing anywhere would be red. That is the AGL-3025 shape on the most
40
+ * public surface the product has.
41
+ *
42
+ * So the plugin that answers also DECLARES that it does, in
43
+ * `plugins.config.json` (`repeatSource`), and the generator compiles that into
44
+ * core. The two together tell the one case that is a real answer from the one
45
+ * that is a broken boot:
46
+ *
47
+ * - nothing declared — this deployment ships no plugin that keeps rows, and a
48
+ * repeat renders its element once, as written, exactly as a key naming
49
+ * nothing does;
50
+ * - declared and registered — the reader answers;
51
+ * - declared and NOT registered — the boot failed. The app's declarations
52
+ * step is run again ({@link runPluginDeclarationsRepair}); if the reader is
53
+ * still missing, {@link readRepeatRows} THROWS. A render that throws keeps
54
+ * the page it last rendered in the cache and is loud in the logs, which is
55
+ * the right way round for a page that would otherwise go out wrong.
56
+ *
57
+ * Per-key failures are the reader's to absorb, as they always were: a deleted
58
+ * or unreadable entry leaves its element rendering once and costs the page
59
+ * nothing else.
60
+ *
61
+ * Reached by path, never through a barrel: only the server composition asks.
62
+ */
63
+ /** One composition's question: the keys a page's tree repeats over. */
64
+ export interface RepeatRowsRequest {
65
+ /** The site being rendered. A reader answers only what that site may see. */
66
+ hostId: string;
67
+ /**
68
+ * The keys exactly as the nodes store them (`repeatKeys`), trimmed,
69
+ * sorted and without repeats.
70
+ */
71
+ keys: readonly string[];
72
+ }
73
+ /**
74
+ * The rows for a request, under every key the expansion looks them up by: the
75
+ * key as the node stores it, the entry's own id, and each entry a one-hop
76
+ * reference in the rows reads. A key with nothing to render is absent.
77
+ */
78
+ export type RepeatRowsAnswer = Record<string, RepeatableDataset>;
79
+ /** Answers one composition's request. Never rejects for a single bad key. */
80
+ export type RepeatRowReader = (request: RepeatRowsRequest) => Promise<RepeatRowsAnswer>;
81
+ /** The compiled declaration: which plugin answers, under which source id. */
82
+ export interface RepeatSourceDeclaration {
83
+ pluginId: string;
84
+ /** The same id the plugin's editor source (`repeat-sources.ts`) uses. */
85
+ id: string;
86
+ }
87
+ /** The plugin declared to answer repeats, or `null` when none is. */
88
+ export declare function declaredRepeatSource(): RepeatSourceDeclaration | null;
89
+ interface RegisteredReader {
90
+ pluginId: string;
91
+ reader: RepeatRowReader;
92
+ }
93
+ /**
94
+ * Registers the reader for a source. Returns the unregister, which removes it
95
+ * only while it is still the one registered.
96
+ *
97
+ * The owner is the plugin whose register fn is running, or the `pluginId`
98
+ * passed for a boot declaration, where the loader's marker is not set. A
99
+ * registration with neither is refused, and so is one from a plugin other
100
+ * than the one the declaration names — two readers for one source would each
101
+ * answer for the other's rows. The same plugin registering again replaces its
102
+ * reader (a second surface, a repeated boot).
103
+ */
104
+ export declare function registerRepeatRowReader(sourceId: string, reader: RepeatRowReader, options?: {
105
+ pluginId?: string;
106
+ }): () => void;
107
+ /** The reader registered for a source, with its owner, or `null`. */
108
+ export declare function repeatRowReader(sourceId: string): RegisteredReader | null;
109
+ /** Only for specs: forgets every registered reader. */
110
+ export declare function resetRepeatRowReadersForTests(): void;
111
+ /**
112
+ * The declared source's reader was not registered, even after the app's
113
+ * declarations step ran again. Thrown, never answered: see the module note.
114
+ */
115
+ export declare class RepeatRowsUnavailableError extends Error {
116
+ readonly source: RepeatSourceDeclaration;
117
+ constructor(source: RepeatSourceDeclaration);
118
+ }
119
+ /**
120
+ * The rows a composition's repeats render. See the module note for what each
121
+ * of the three cases answers; with no keys it answers `{}` and asks nobody.
122
+ */
123
+ export declare function readRepeatRows(request: RepeatRowsRequest): Promise<RepeatRowsAnswer>;
124
+ export {};
@@ -0,0 +1,108 @@
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
+ */ var _globalScope_READERS_KEY;
17
+ import { getRegisteringPluginId } from "../app-utils/registering-plugin.js";
18
+ import { PLUGIN_REPEAT_SOURCE_DECLARED } from "./first-party-plugins.generated.js";
19
+ import { runPluginDeclarationsRepair } from "./plugin-declarations-repair.js";
20
+ /** The plugin declared to answer repeats, or `null` when none is. */ export function declaredRepeatSource() {
21
+ return PLUGIN_REPEAT_SOURCE_DECLARED;
22
+ }
23
+ /**
24
+ * One table per process, on `globalThis` (AGL-3412): the app registers from
25
+ * `instrumentation.ts`, which Next compiles apart from the routes that read,
26
+ * and a module-scoped map would be filled in one copy and read empty in the
27
+ * other — the exact failure this module exists to refuse.
28
+ */ const READERS_KEY = Symbol.for('@aglyn/aglyn:repeat-row-readers');
29
+ const globalScope = globalThis;
30
+ const readers = (_globalScope_READERS_KEY = globalScope[READERS_KEY]) != null ? _globalScope_READERS_KEY : globalScope[READERS_KEY] = new Map();
31
+ /**
32
+ * Registers the reader for a source. Returns the unregister, which removes it
33
+ * only while it is still the one registered.
34
+ *
35
+ * The owner is the plugin whose register fn is running, or the `pluginId`
36
+ * passed for a boot declaration, where the loader's marker is not set. A
37
+ * registration with neither is refused, and so is one from a plugin other
38
+ * than the one the declaration names — two readers for one source would each
39
+ * answer for the other's rows. The same plugin registering again replaces its
40
+ * reader (a second surface, a repeated boot).
41
+ */ export function registerRepeatRowReader(sourceId, reader, options) {
42
+ var _ref, _getRegisteringPluginId;
43
+ const id = sourceId.trim();
44
+ const pluginId = ((_ref = (_getRegisteringPluginId = getRegisteringPluginId()) != null ? _getRegisteringPluginId : options == null ? void 0 : options.pluginId) != null ? _ref : '').trim();
45
+ if (!id) throw new Error('a repeat row reader needs a source id');
46
+ if (!pluginId) {
47
+ throw new Error(`repeat row reader "${id}" registered with no owner: pass { pluginId } ` + 'when registering outside a plugin register fn');
48
+ }
49
+ const declared = declaredRepeatSource();
50
+ if ((declared == null ? void 0 : declared.id) === id && declared.pluginId !== pluginId) {
51
+ throw new Error(`repeat source "${id}" is declared by "${declared.pluginId}"; ` + `refused a reader from "${pluginId}"`);
52
+ }
53
+ const held = readers.get(id);
54
+ if (held && held.pluginId !== pluginId) {
55
+ throw new Error(`repeat source "${id}" already has a reader from "${held.pluginId}"; ` + `refused "${pluginId}"`);
56
+ }
57
+ const entry = {
58
+ pluginId,
59
+ reader
60
+ };
61
+ readers.set(id, entry);
62
+ return ()=>{
63
+ if (readers.get(id) === entry) readers.delete(id);
64
+ };
65
+ }
66
+ /** The reader registered for a source, with its owner, or `null`. */ export function repeatRowReader(sourceId) {
67
+ var _readers_get;
68
+ return (_readers_get = readers.get(sourceId)) != null ? _readers_get : null;
69
+ }
70
+ /** Only for specs: forgets every registered reader. */ export function resetRepeatRowReadersForTests() {
71
+ readers.clear();
72
+ }
73
+ /**
74
+ * The declared source's reader was not registered, even after the app's
75
+ * declarations step ran again. Thrown, never answered: see the module note.
76
+ */ export class RepeatRowsUnavailableError extends Error {
77
+ constructor(source){
78
+ super(`repeat source "${source.id}" is declared by "${source.pluginId}" but ` + 'no reader is registered in this process — its server declarations ' + 'did not run. Refusing to render repeats as if they had no rows.'), this.source = source;
79
+ this.name = 'RepeatRowsUnavailableError';
80
+ }
81
+ }
82
+ /**
83
+ * The rows a composition's repeats render. See the module note for what each
84
+ * of the three cases answers; with no keys it answers `{}` and asks nobody.
85
+ */ export async function readRepeatRows(request) {
86
+ const keys = [
87
+ ...new Set(request.keys.map((key)=>key.trim()).filter(Boolean))
88
+ ].sort();
89
+ if (!keys.length) return {};
90
+ const declared = declaredRepeatSource();
91
+ if (!declared) return {};
92
+ let registered = readers.get(declared.id);
93
+ if (!registered) {
94
+ try {
95
+ await runPluginDeclarationsRepair();
96
+ } catch (error) {
97
+ console.error('[repeat-rows] the declarations repair failed', error);
98
+ }
99
+ registered = readers.get(declared.id);
100
+ }
101
+ if (!registered) throw new RepeatRowsUnavailableError(declared);
102
+ return registered.reader({
103
+ hostId: request.hostId,
104
+ keys
105
+ });
106
+ }
107
+
108
+ //# sourceMappingURL=repeat-rows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/plugin-manager/repeat-rows.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\nimport type { RepeatableDataset } from '../app-utils/expand-repeatables'\nimport { getRegisteringPluginId } from '../app-utils/registering-plugin'\nimport { PLUGIN_REPEAT_SOURCE_DECLARED } from './first-party-plugins.generated'\nimport { runPluginDeclarationsRepair } from './plugin-declarations-repair'\n\n/**\n * WHERE A PUBLISHED PAGE'S REPEATED ROWS COME FROM (AGL-3080).\n *\n * Any element can repeat, and the platform decides what a repeat MEANS — the\n * scope, the copies, the filter, the bound (`expand-repeatables.ts`). What it\n * does not decide is where the rows live. That is the plugin's that keeps\n * them, and the composition that renders a published page asks it here, with\n * the keys the page's tree repeats over, and never reads a collection itself.\n *\n * `repeat-sources.ts` is the editor's side of the same line: a hook the\n * besigner's canvas mounts to preview the rows. This is the server's side,\n * read once per compose, and it is a different registry because its readers\n * are different processes with different failure costs.\n *\n * ## Declared, then registered — and an absent reader is refused\n *\n * The reader is registered from the owning plugin's `serverDeclarations`\n * entry, which every app runs at boot, so every process that composes a page\n * has it before the first request. But a registry is only safe where an empty\n * one cannot be mistaken for an answer, and here it can: a page whose repeat\n * found no reader would render the template once where the author put a list,\n * and nothing anywhere would be red. That is the AGL-3025 shape on the most\n * public surface the product has.\n *\n * So the plugin that answers also DECLARES that it does, in\n * `plugins.config.json` (`repeatSource`), and the generator compiles that into\n * core. The two together tell the one case that is a real answer from the one\n * that is a broken boot:\n *\n * - nothing declared — this deployment ships no plugin that keeps rows, and a\n * repeat renders its element once, as written, exactly as a key naming\n * nothing does;\n * - declared and registered — the reader answers;\n * - declared and NOT registered — the boot failed. The app's declarations\n * step is run again ({@link runPluginDeclarationsRepair}); if the reader is\n * still missing, {@link readRepeatRows} THROWS. A render that throws keeps\n * the page it last rendered in the cache and is loud in the logs, which is\n * the right way round for a page that would otherwise go out wrong.\n *\n * Per-key failures are the reader's to absorb, as they always were: a deleted\n * or unreadable entry leaves its element rendering once and costs the page\n * nothing else.\n *\n * Reached by path, never through a barrel: only the server composition asks.\n */\n\n/** One composition's question: the keys a page's tree repeats over. */\nexport interface RepeatRowsRequest {\n /** The site being rendered. A reader answers only what that site may see. */\n hostId: string\n /**\n * The keys exactly as the nodes store them (`repeatKeys`), trimmed,\n * sorted and without repeats.\n */\n keys: readonly string[]\n}\n\n/**\n * The rows for a request, under every key the expansion looks them up by: the\n * key as the node stores it, the entry's own id, and each entry a one-hop\n * reference in the rows reads. A key with nothing to render is absent.\n */\nexport type RepeatRowsAnswer = Record<string, RepeatableDataset>\n\n/** Answers one composition's request. Never rejects for a single bad key. */\nexport type RepeatRowReader = (\n request: RepeatRowsRequest,\n) => Promise<RepeatRowsAnswer>\n\n/** The compiled declaration: which plugin answers, under which source id. */\nexport interface RepeatSourceDeclaration {\n pluginId: string\n /** The same id the plugin's editor source (`repeat-sources.ts`) uses. */\n id: string\n}\n\n/** The plugin declared to answer repeats, or `null` when none is. */\nexport function declaredRepeatSource(): RepeatSourceDeclaration | null {\n return PLUGIN_REPEAT_SOURCE_DECLARED\n}\n\ninterface RegisteredReader {\n pluginId: string\n reader: RepeatRowReader\n}\n\n/**\n * One table per process, on `globalThis` (AGL-3412): the app registers from\n * `instrumentation.ts`, which Next compiles apart from the routes that read,\n * and a module-scoped map would be filled in one copy and read empty in the\n * other — the exact failure this module exists to refuse.\n */\nconst READERS_KEY = Symbol.for('@aglyn/aglyn:repeat-row-readers')\n\nconst globalScope = globalThis as typeof globalThis & {\n [READERS_KEY]?: Map<string, RegisteredReader>\n}\n\nconst readers: Map<string, RegisteredReader> =\n globalScope[READERS_KEY] ?? (globalScope[READERS_KEY] = new Map())\n\n/**\n * Registers the reader for a source. Returns the unregister, which removes it\n * only while it is still the one registered.\n *\n * The owner is the plugin whose register fn is running, or the `pluginId`\n * passed for a boot declaration, where the loader's marker is not set. A\n * registration with neither is refused, and so is one from a plugin other\n * than the one the declaration names — two readers for one source would each\n * answer for the other's rows. The same plugin registering again replaces its\n * reader (a second surface, a repeated boot).\n */\nexport function registerRepeatRowReader(\n sourceId: string,\n reader: RepeatRowReader,\n options?: { pluginId?: string },\n): () => void {\n const id = sourceId.trim()\n const pluginId = (getRegisteringPluginId() ?? options?.pluginId ?? '').trim()\n if (!id) throw new Error('a repeat row reader needs a source id')\n if (!pluginId) {\n throw new Error(\n `repeat row reader \"${id}\" registered with no owner: pass { pluginId } ` +\n 'when registering outside a plugin register fn',\n )\n }\n const declared = declaredRepeatSource()\n if (declared?.id === id && declared.pluginId !== pluginId) {\n throw new Error(\n `repeat source \"${id}\" is declared by \"${declared.pluginId}\"; ` +\n `refused a reader from \"${pluginId}\"`,\n )\n }\n const held = readers.get(id)\n if (held && held.pluginId !== pluginId) {\n throw new Error(\n `repeat source \"${id}\" already has a reader from \"${held.pluginId}\"; ` +\n `refused \"${pluginId}\"`,\n )\n }\n const entry: RegisteredReader = { pluginId, reader }\n readers.set(id, entry)\n return () => {\n if (readers.get(id) === entry) readers.delete(id)\n }\n}\n\n/** The reader registered for a source, with its owner, or `null`. */\nexport function repeatRowReader(sourceId: string): RegisteredReader | null {\n return readers.get(sourceId) ?? null\n}\n\n/** Only for specs: forgets every registered reader. */\nexport function resetRepeatRowReadersForTests(): void {\n readers.clear()\n}\n\n/**\n * The declared source's reader was not registered, even after the app's\n * declarations step ran again. Thrown, never answered: see the module note.\n */\nexport class RepeatRowsUnavailableError extends Error {\n constructor(readonly source: RepeatSourceDeclaration) {\n super(\n `repeat source \"${source.id}\" is declared by \"${source.pluginId}\" but ` +\n 'no reader is registered in this process — its server declarations ' +\n 'did not run. Refusing to render repeats as if they had no rows.',\n )\n this.name = 'RepeatRowsUnavailableError'\n }\n}\n\n/**\n * The rows a composition's repeats render. See the module note for what each\n * of the three cases answers; with no keys it answers `{}` and asks nobody.\n */\nexport async function readRepeatRows(\n request: RepeatRowsRequest,\n): Promise<RepeatRowsAnswer> {\n const keys = [\n ...new Set(request.keys.map((key) => key.trim()).filter(Boolean)),\n ].sort()\n if (!keys.length) return {}\n const declared = declaredRepeatSource()\n if (!declared) return {}\n let registered = readers.get(declared.id)\n if (!registered) {\n try {\n await runPluginDeclarationsRepair()\n } catch (error) {\n console.error('[repeat-rows] the declarations repair failed', error)\n }\n registered = readers.get(declared.id)\n }\n if (!registered) throw new RepeatRowsUnavailableError(declared)\n return registered.reader({ hostId: request.hostId, keys })\n}\n"],"names":["globalScope","getRegisteringPluginId","PLUGIN_REPEAT_SOURCE_DECLARED","runPluginDeclarationsRepair","declaredRepeatSource","READERS_KEY","Symbol","for","globalThis","readers","Map","registerRepeatRowReader","sourceId","reader","options","id","trim","pluginId","Error","declared","held","get","entry","set","delete","repeatRowReader","resetRepeatRowReadersForTests","clear","RepeatRowsUnavailableError","source","name","readRepeatRows","request","keys","Set","map","key","filter","Boolean","sort","length","registered","error","console","hostId"],"mappings":"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"}