@aglyn/aglyn 1.0.0-beta.218 → 1.0.0-beta.220

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 (455) hide show
  1. package/package.json +12 -12
  2. package/src/lib/app-utils/actions.d.ts +26 -433
  3. package/src/lib/app-utils/actions.js +108 -633
  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/analytics-events.d.ts +1 -1
  9. package/src/lib/app-utils/analytics-events.js.map +1 -1
  10. package/src/lib/app-utils/analytics-provider.d.ts +182 -0
  11. package/src/lib/app-utils/analytics-provider.js +133 -0
  12. package/src/lib/app-utils/analytics-provider.js.map +1 -0
  13. package/src/lib/app-utils/api-plugins.d.ts +46 -0
  14. package/src/lib/app-utils/api-plugins.js +19 -0
  15. package/src/lib/app-utils/api-plugins.js.map +1 -1
  16. package/src/lib/app-utils/{marketplace-overrides.d.ts → artifact-overrides.d.ts} +9 -6
  17. package/src/lib/app-utils/{marketplace-overrides.js → artifact-overrides.js} +10 -7
  18. package/src/lib/app-utils/artifact-overrides.js.map +1 -0
  19. package/src/lib/app-utils/{marketplace-provenance.d.ts → artifact-provenance.d.ts} +12 -10
  20. package/src/lib/app-utils/{marketplace-provenance.js → artifact-provenance.js} +9 -7
  21. package/src/lib/app-utils/artifact-provenance.js.map +1 -0
  22. package/src/lib/app-utils/binding-token-catalog.d.ts +5 -13
  23. package/src/lib/app-utils/binding-token-catalog.js +17 -41
  24. package/src/lib/app-utils/binding-token-catalog.js.map +1 -1
  25. package/src/lib/app-utils/brand-support-line.d.ts +36 -0
  26. package/src/lib/app-utils/brand-support-line.js +38 -0
  27. package/src/lib/app-utils/brand-support-line.js.map +1 -0
  28. package/src/lib/app-utils/collection-entries.d.ts +2 -2
  29. package/src/lib/app-utils/collection-entries.js.map +1 -1
  30. package/src/lib/app-utils/consent-group-change.d.ts +4 -0
  31. package/src/lib/app-utils/consent-group-change.js.map +1 -1
  32. package/src/lib/app-utils/consent-groups.d.ts +1 -1
  33. package/src/lib/app-utils/consent-groups.js.map +1 -1
  34. package/src/lib/app-utils/console-routes.d.ts +15 -42
  35. package/src/lib/app-utils/console-routes.js +10 -39
  36. package/src/lib/app-utils/console-routes.js.map +1 -1
  37. package/src/lib/app-utils/contacts.d.ts +24 -2
  38. package/src/lib/app-utils/contacts.js +21 -5
  39. package/src/lib/app-utils/contacts.js.map +1 -1
  40. package/src/lib/app-utils/container-membership.d.ts +93 -0
  41. package/src/lib/app-utils/container-membership.js +165 -0
  42. package/src/lib/app-utils/container-membership.js.map +1 -0
  43. package/src/lib/app-utils/crm-task-reminders.d.ts +23 -6
  44. package/src/lib/app-utils/crm-task-reminders.js +32 -11
  45. package/src/lib/app-utils/crm-task-reminders.js.map +1 -1
  46. package/src/lib/app-utils/crm.d.ts +24 -4
  47. package/src/lib/app-utils/crm.js +23 -0
  48. package/src/lib/app-utils/crm.js.map +1 -1
  49. package/src/lib/app-utils/cross-pool-desync.d.ts +39 -0
  50. package/src/lib/app-utils/cross-pool-desync.js +47 -0
  51. package/src/lib/app-utils/cross-pool-desync.js.map +1 -0
  52. package/src/lib/app-utils/csv-upload.d.ts +29 -0
  53. package/src/lib/app-utils/csv-upload.js +29 -0
  54. package/src/lib/app-utils/csv-upload.js.map +1 -0
  55. package/src/lib/app-utils/{dataset-csv.d.ts → csv.d.ts} +10 -43
  56. package/src/lib/app-utils/{dataset-csv.js → csv.js} +10 -81
  57. package/src/lib/app-utils/csv.js.map +1 -0
  58. package/src/lib/app-utils/dataset-models.d.ts +5 -5
  59. package/src/lib/app-utils/dataset-models.js +19 -2
  60. package/src/lib/app-utils/dataset-models.js.map +1 -1
  61. package/src/lib/app-utils/datasets.d.ts +65 -30
  62. package/src/lib/app-utils/datasets.js +74 -24
  63. package/src/lib/app-utils/datasets.js.map +1 -1
  64. package/src/lib/app-utils/docs-deflection.d.ts +6 -6
  65. package/src/lib/app-utils/docs-deflection.js.map +1 -1
  66. package/src/lib/app-utils/docs-help.generated.d.ts +14 -8
  67. package/src/lib/app-utils/docs-help.generated.js +23 -6
  68. package/src/lib/app-utils/docs-help.generated.js.map +1 -1
  69. package/src/lib/app-utils/docs-index.generated.d.ts +2 -2
  70. package/src/lib/app-utils/docs-index.generated.js +570 -346
  71. package/src/lib/app-utils/docs-index.generated.js.map +1 -1
  72. package/src/lib/app-utils/docs-retrieval.d.ts +3 -3
  73. package/src/lib/app-utils/docs-retrieval.js +14 -10
  74. package/src/lib/app-utils/docs-retrieval.js.map +1 -1
  75. package/src/lib/app-utils/duplicate-resource.d.ts +4 -1
  76. package/src/lib/app-utils/duplicate-resource.js +7 -4
  77. package/src/lib/app-utils/duplicate-resource.js.map +1 -1
  78. package/src/lib/app-utils/dynamic-list-rule.d.ts +1 -1
  79. package/src/lib/app-utils/dynamic-list-rule.js +3 -3
  80. package/src/lib/app-utils/dynamic-list-rule.js.map +1 -1
  81. package/src/lib/app-utils/element-ui.d.ts +1 -1
  82. package/src/lib/app-utils/element-ui.js +1 -1
  83. package/src/lib/app-utils/element-ui.js.map +1 -1
  84. package/src/lib/app-utils/email-starter-policy.js +3 -3
  85. package/src/lib/app-utils/email-starter-policy.js.map +1 -1
  86. package/src/lib/app-utils/email-text.d.ts +80 -0
  87. package/src/lib/app-utils/email-text.js +189 -0
  88. package/src/lib/app-utils/email-text.js.map +1 -0
  89. package/src/lib/app-utils/{list-assignment-policy.d.ts → enrollment-basis.d.ts} +4 -0
  90. package/src/lib/app-utils/{list-assignment-policy.js → enrollment-basis.js} +5 -1
  91. package/src/lib/app-utils/enrollment-basis.js.map +1 -0
  92. package/src/lib/app-utils/entity-picker-context.d.ts +10 -5
  93. package/src/lib/app-utils/entity-picker-context.js.map +1 -1
  94. package/src/lib/app-utils/error-beacon.d.ts +75 -6
  95. package/src/lib/app-utils/error-beacon.js +160 -21
  96. package/src/lib/app-utils/error-beacon.js.map +1 -1
  97. package/src/lib/app-utils/expand-repeatables.d.ts +10 -10
  98. package/src/lib/app-utils/expand-repeatables.js +14 -14
  99. package/src/lib/app-utils/expand-repeatables.js.map +1 -1
  100. package/src/lib/app-utils/forms.js +2 -2
  101. package/src/lib/app-utils/forms.js.map +1 -1
  102. package/src/lib/app-utils/health-report.d.ts +2 -3
  103. package/src/lib/app-utils/health-report.js +8 -6
  104. package/src/lib/app-utils/health-report.js.map +1 -1
  105. package/src/lib/app-utils/host-events.d.ts +82 -0
  106. package/src/lib/app-utils/host-events.js +62 -0
  107. package/src/lib/app-utils/host-events.js.map +1 -0
  108. package/src/lib/app-utils/inbound-mail-domain.d.ts +27 -0
  109. package/src/lib/app-utils/inbound-mail-domain.js +31 -0
  110. package/src/lib/app-utils/inbound-mail-domain.js.map +1 -0
  111. package/src/lib/app-utils/lockdown.d.ts +11 -0
  112. package/src/lib/app-utils/lockdown.js +33 -3
  113. package/src/lib/app-utils/lockdown.js.map +1 -1
  114. package/src/lib/app-utils/margin-utilization.d.ts +4 -69
  115. package/src/lib/app-utils/margin-utilization.js +82 -69
  116. package/src/lib/app-utils/margin-utilization.js.map +1 -1
  117. package/src/lib/app-utils/member-email-aliases.d.ts +25 -0
  118. package/src/lib/app-utils/member-email-aliases.js +29 -0
  119. package/src/lib/app-utils/member-email-aliases.js.map +1 -1
  120. package/src/lib/app-utils/node-definition-sanitizer.d.ts +16 -16
  121. package/src/lib/app-utils/node-definition-sanitizer.js +24 -20
  122. package/src/lib/app-utils/node-definition-sanitizer.js.map +1 -1
  123. package/src/lib/app-utils/node-interactions.d.ts +7 -7
  124. package/src/lib/app-utils/node-interactions.js.map +1 -1
  125. package/src/lib/app-utils/notifications.d.ts +147 -47
  126. package/src/lib/app-utils/notifications.js +182 -44
  127. package/src/lib/app-utils/notifications.js.map +1 -1
  128. package/src/lib/app-utils/operator-alerts.d.ts +15 -1
  129. package/src/lib/app-utils/operator-alerts.js +47 -10
  130. package/src/lib/app-utils/operator-alerts.js.map +1 -1
  131. package/src/lib/app-utils/payments-configured.d.ts +8 -21
  132. package/src/lib/app-utils/payments-configured.js +8 -23
  133. package/src/lib/app-utils/payments-configured.js.map +1 -1
  134. package/src/lib/app-utils/plan-entitlements.d.ts +207 -306
  135. package/src/lib/app-utils/plan-entitlements.js +345 -528
  136. package/src/lib/app-utils/plan-entitlements.js.map +1 -1
  137. package/src/lib/app-utils/platform-brand.d.ts +10 -0
  138. package/src/lib/app-utils/platform-brand.js +14 -3
  139. package/src/lib/app-utils/platform-brand.js.map +1 -1
  140. package/src/lib/app-utils/platform-marketing-consent.d.ts +56 -2
  141. package/src/lib/app-utils/platform-marketing-consent.js +6 -5
  142. package/src/lib/app-utils/platform-marketing-consent.js.map +1 -1
  143. package/src/lib/app-utils/plugin-api-rate-limit.d.ts +7 -1
  144. package/src/lib/app-utils/plugin-api-rate-limit.js +11 -3
  145. package/src/lib/app-utils/plugin-api-rate-limit.js.map +1 -1
  146. package/src/lib/app-utils/plugin-bundle-checks.js +2 -2
  147. package/src/lib/app-utils/plugin-bundle-checks.js.map +1 -1
  148. package/src/lib/app-utils/plugin-host-events.generated.d.ts +12 -0
  149. package/src/lib/app-utils/plugin-host-events.generated.js +169 -0
  150. package/src/lib/app-utils/plugin-host-events.generated.js.map +1 -0
  151. package/src/lib/app-utils/plugin-release-flags.generated.d.ts +12 -0
  152. package/src/lib/app-utils/plugin-release-flags.generated.js +106 -0
  153. package/src/lib/app-utils/plugin-release-flags.generated.js.map +1 -0
  154. package/src/lib/app-utils/plugin-starter-templates.generated.d.ts +12 -0
  155. package/src/lib/app-utils/plugin-starter-templates.generated.js +711 -0
  156. package/src/lib/app-utils/plugin-starter-templates.generated.js.map +1 -0
  157. package/src/lib/app-utils/realm-host-surface.generated.js +2 -0
  158. package/src/lib/app-utils/realm-host-surface.generated.js.map +1 -1
  159. package/src/lib/app-utils/release-flags.d.ts +14 -5
  160. package/src/lib/app-utils/release-flags.js +21 -125
  161. package/src/lib/app-utils/release-flags.js.map +1 -1
  162. package/src/lib/app-utils/repeat-query.d.ts +56 -0
  163. package/src/lib/app-utils/{dataset-query.js → repeat-query.js} +16 -16
  164. package/src/lib/app-utils/repeat-query.js.map +1 -0
  165. package/src/lib/app-utils/repeat-sources.d.ts +9 -0
  166. package/src/lib/app-utils/repeat-sources.js.map +1 -1
  167. package/src/lib/app-utils/retained-refusals.d.ts +73 -0
  168. package/src/lib/app-utils/retained-refusals.js +186 -0
  169. package/src/lib/app-utils/retained-refusals.js.map +1 -0
  170. package/src/lib/app-utils/scope-tokens.d.ts +27 -0
  171. package/src/lib/app-utils/scope-tokens.js +61 -0
  172. package/src/lib/app-utils/scope-tokens.js.map +1 -1
  173. package/src/lib/app-utils/screen-link-context.js +3 -3
  174. package/src/lib/app-utils/screen-link-context.js.map +1 -1
  175. package/src/lib/app-utils/screen-route.js +1 -1
  176. package/src/lib/app-utils/screen-route.js.map +1 -1
  177. package/src/lib/app-utils/seo-audit.d.ts +132 -0
  178. package/src/lib/app-utils/seo-audit.js +246 -0
  179. package/src/lib/app-utils/seo-audit.js.map +1 -0
  180. package/src/lib/app-utils/seo-keywords.d.ts +48 -0
  181. package/src/lib/app-utils/seo-keywords.js +60 -0
  182. package/src/lib/app-utils/seo-keywords.js.map +1 -0
  183. package/src/lib/app-utils/seo-page-facts.d.ts +66 -0
  184. package/src/lib/app-utils/seo-page-facts.js +155 -0
  185. package/src/lib/app-utils/seo-page-facts.js.map +1 -0
  186. package/src/lib/app-utils/seo-site-scan.d.ts +126 -0
  187. package/src/lib/app-utils/seo-site-scan.js +162 -0
  188. package/src/lib/app-utils/seo-site-scan.js.map +1 -0
  189. package/src/lib/app-utils/seo-title-variables.js +1 -1
  190. package/src/lib/app-utils/seo-title-variables.js.map +1 -1
  191. package/src/lib/app-utils/server.d.ts +13 -18
  192. package/src/lib/app-utils/server.js +33 -51
  193. package/src/lib/app-utils/server.js.map +1 -1
  194. package/src/lib/app-utils/site-interactions.d.ts +501 -0
  195. package/src/lib/app-utils/site-interactions.js +554 -0
  196. package/src/lib/app-utils/site-interactions.js.map +1 -0
  197. package/src/lib/app-utils/{marketplace-theme.d.ts → site-theme.d.ts} +13 -2
  198. package/src/lib/app-utils/{marketplace-theme.js → site-theme.js} +2 -2
  199. package/src/lib/app-utils/site-theme.js.map +1 -0
  200. package/src/lib/app-utils/sitemap.d.ts +4 -3
  201. package/src/lib/app-utils/sitemap.js +9 -7
  202. package/src/lib/app-utils/sitemap.js.map +1 -1
  203. package/src/lib/app-utils/stale-build-error.d.ts +51 -0
  204. package/src/lib/app-utils/stale-build-error.js +100 -1
  205. package/src/lib/app-utils/stale-build-error.js.map +1 -1
  206. package/src/lib/app-utils/starter-template-nodes.d.ts +137 -0
  207. package/src/lib/app-utils/starter-template-nodes.js +129 -0
  208. package/src/lib/app-utils/starter-template-nodes.js.map +1 -0
  209. package/src/lib/app-utils/starter-templates.d.ts +11 -34
  210. package/src/lib/app-utils/starter-templates.js +19 -230
  211. package/src/lib/app-utils/starter-templates.js.map +1 -1
  212. package/src/lib/app-utils/{email-topics.d.ts → subscription-topics.d.ts} +64 -48
  213. package/src/lib/app-utils/{email-topics.js → subscription-topics.js} +39 -109
  214. package/src/lib/app-utils/subscription-topics.js.map +1 -0
  215. package/src/lib/app-utils/tax-jurisdiction-figures.d.ts +118 -0
  216. package/src/lib/app-utils/tax-jurisdiction-figures.js +123 -0
  217. package/src/lib/app-utils/tax-jurisdiction-figures.js.map +1 -0
  218. package/src/lib/app-utils/theme-library.d.ts +10 -3
  219. package/src/lib/app-utils/theme-library.js +13 -4
  220. package/src/lib/app-utils/theme-library.js.map +1 -1
  221. package/src/lib/app-utils/usage-budget.d.ts +73 -188
  222. package/src/lib/app-utils/usage-budget.js +58 -194
  223. package/src/lib/app-utils/usage-budget.js.map +1 -1
  224. package/src/lib/app-utils/{campaign-attribution.d.ts → utm-attribution.d.ts} +11 -6
  225. package/src/lib/app-utils/{campaign-attribution.js → utm-attribution.js} +13 -8
  226. package/src/lib/app-utils/utm-attribution.js.map +1 -0
  227. package/src/lib/app-utils/{campaign-forwarding.d.ts → utm-forwarding.d.ts} +14 -14
  228. package/src/lib/app-utils/{campaign-forwarding.js → utm-forwarding.js} +26 -26
  229. package/src/lib/app-utils/utm-forwarding.js.map +1 -0
  230. package/src/lib/app-utils/{campaign-touch.d.ts → utm-touch.d.ts} +25 -17
  231. package/src/lib/app-utils/{campaign-touch.js → utm-touch.js} +38 -30
  232. package/src/lib/app-utils/utm-touch.js.map +1 -0
  233. package/src/lib/app-utils/variables.d.ts +9 -9
  234. package/src/lib/app-utils/variables.js.map +1 -1
  235. package/src/lib/app-utils/video-object.js +6 -5
  236. package/src/lib/app-utils/video-object.js.map +1 -1
  237. package/src/lib/app-utils/visitor-consent.d.ts +41 -164
  238. package/src/lib/app-utils/visitor-consent.js +66 -277
  239. package/src/lib/app-utils/visitor-consent.js.map +1 -1
  240. package/src/lib/app-utils/visitor-record-ceiling.d.ts +32 -0
  241. package/src/lib/app-utils/visitor-record-ceiling.js +39 -0
  242. package/src/lib/app-utils/visitor-record-ceiling.js.map +1 -1
  243. package/src/lib/app-utils/web-vitals-rum.d.ts +7 -7
  244. package/src/lib/app-utils/web-vitals-rum.js +31 -63
  245. package/src/lib/app-utils/web-vitals-rum.js.map +1 -1
  246. package/src/lib/app-utils/where-used.d.ts +11 -6
  247. package/src/lib/app-utils/where-used.js +3 -8
  248. package/src/lib/app-utils/where-used.js.map +1 -1
  249. package/src/lib/foundation/definitions/components.types.d.ts +1 -1
  250. package/src/lib/foundation/definitions/components.types.js +1 -1
  251. package/src/lib/foundation/definitions/components.types.js.map +1 -1
  252. package/src/lib/foundation/definitions/org-billing.types.d.ts +11 -137
  253. package/src/lib/foundation/definitions/org-billing.types.js.map +1 -1
  254. package/src/lib/foundation/definitions/organization.types.d.ts +1 -3
  255. package/src/lib/foundation/definitions/organization.types.js.map +1 -1
  256. package/src/lib/foundation/definitions/platform.types.d.ts +11 -5
  257. package/src/lib/foundation/definitions/platform.types.js.map +1 -1
  258. package/src/lib/foundation/definitions/write-deny-coverage.util.d.ts +16 -0
  259. package/src/lib/foundation/definitions/write-deny-coverage.util.js +20 -0
  260. package/src/lib/foundation/definitions/write-deny-coverage.util.js.map +1 -1
  261. package/src/lib/foundation/index.d.ts +1 -1
  262. package/src/lib/foundation/index.js.map +1 -1
  263. package/src/lib/plugin-manager/besigner-documents.d.ts +96 -0
  264. package/src/lib/plugin-manager/besigner-documents.js +61 -0
  265. package/src/lib/plugin-manager/besigner-documents.js.map +1 -0
  266. package/src/lib/plugin-manager/computed-variables.d.ts +71 -0
  267. package/src/lib/plugin-manager/computed-variables.js +74 -0
  268. package/src/lib/plugin-manager/computed-variables.js.map +1 -0
  269. package/src/lib/plugin-manager/custom-fields.d.ts +29 -2
  270. package/src/lib/plugin-manager/custom-fields.js +47 -1
  271. package/src/lib/plugin-manager/custom-fields.js.map +1 -1
  272. package/src/lib/plugin-manager/feature-plugins.d.ts +372 -99
  273. package/src/lib/plugin-manager/feature-plugins.js +126 -51
  274. package/src/lib/plugin-manager/feature-plugins.js.map +1 -1
  275. package/src/lib/plugin-manager/first-party-plugins.generated.d.ts +134 -0
  276. package/src/lib/plugin-manager/first-party-plugins.generated.js +840 -10
  277. package/src/lib/plugin-manager/first-party-plugins.generated.js.map +1 -1
  278. package/src/lib/plugin-manager/index.d.ts +0 -1
  279. package/src/lib/plugin-manager/index.js +0 -1
  280. package/src/lib/plugin-manager/index.js.map +1 -1
  281. package/src/lib/plugin-manager/plugin-activity-actions.d.ts +12 -0
  282. package/src/lib/plugin-manager/plugin-activity-actions.js +25 -0
  283. package/src/lib/plugin-manager/plugin-activity-actions.js.map +1 -1
  284. package/src/lib/plugin-manager/plugin-contact-capture.d.ts +9 -4
  285. package/src/lib/plugin-manager/plugin-contact-capture.js.map +1 -1
  286. package/src/lib/plugin-manager/plugin-containers.d.ts +68 -0
  287. package/src/lib/plugin-manager/plugin-containers.generated.d.ts +10 -0
  288. package/src/lib/plugin-manager/plugin-containers.generated.js +20 -0
  289. package/src/lib/plugin-manager/plugin-containers.generated.js.map +1 -0
  290. package/src/lib/plugin-manager/plugin-containers.js +27 -0
  291. package/src/lib/plugin-manager/plugin-containers.js.map +1 -0
  292. package/src/lib/plugin-manager/plugin-contributions.d.ts +1 -1
  293. package/src/lib/plugin-manager/plugin-contributions.js.map +1 -1
  294. package/src/lib/plugin-manager/plugin-declarations-repair.d.ts +36 -0
  295. package/src/lib/plugin-manager/plugin-declarations-repair.js +64 -0
  296. package/src/lib/plugin-manager/plugin-declarations-repair.js.map +1 -0
  297. package/src/lib/plugin-manager/plugin-dependents.d.ts +101 -0
  298. package/src/lib/plugin-manager/plugin-dependents.js +75 -0
  299. package/src/lib/plugin-manager/plugin-dependents.js.map +1 -0
  300. package/src/lib/plugin-manager/plugin-distribution.d.ts +55 -0
  301. package/src/lib/plugin-manager/plugin-distribution.js +45 -0
  302. package/src/lib/plugin-manager/plugin-distribution.js.map +1 -0
  303. package/src/lib/plugin-manager/plugin-entitlements.d.ts +8 -0
  304. package/src/lib/plugin-manager/plugin-entitlements.js.map +1 -1
  305. package/src/lib/plugin-manager/plugin-host-collections.d.ts +17 -0
  306. package/src/lib/plugin-manager/plugin-host-collections.js +6 -0
  307. package/src/lib/plugin-manager/plugin-host-collections.js.map +1 -1
  308. package/src/lib/plugin-manager/plugin-host-resources.d.ts +133 -0
  309. package/src/lib/plugin-manager/plugin-host-resources.js +52 -0
  310. package/src/lib/plugin-manager/plugin-host-resources.js.map +1 -0
  311. package/src/lib/plugin-manager/plugin-membership-detach.js +1 -1
  312. package/src/lib/plugin-manager/plugin-membership-detach.js.map +1 -1
  313. package/src/lib/plugin-manager/plugin-org-erasure.d.ts +28 -2
  314. package/src/lib/plugin-manager/plugin-org-erasure.js +61 -2
  315. package/src/lib/plugin-manager/plugin-org-erasure.js.map +1 -1
  316. package/src/lib/plugin-manager/plugin-plan-entitlements.d.ts +123 -0
  317. package/src/lib/plugin-manager/plugin-plan-entitlements.js +101 -0
  318. package/src/lib/plugin-manager/plugin-plan-entitlements.js.map +1 -0
  319. package/src/lib/plugin-manager/plugin-record-email-state.d.ts +69 -0
  320. package/src/lib/plugin-manager/plugin-record-email-state.js +32 -0
  321. package/src/lib/plugin-manager/plugin-record-email-state.js.map +1 -1
  322. package/src/lib/plugin-manager/plugin-record-index.d.ts +95 -0
  323. package/src/lib/plugin-manager/plugin-record-index.js +51 -0
  324. package/src/lib/plugin-manager/plugin-record-index.js.map +1 -0
  325. package/src/lib/plugin-manager/plugin-record-lists.d.ts +115 -0
  326. package/src/lib/plugin-manager/plugin-record-lists.js +75 -0
  327. package/src/lib/plugin-manager/plugin-record-lists.js.map +1 -0
  328. package/src/lib/plugin-manager/plugin-record-timeline.d.ts +42 -8
  329. package/src/lib/plugin-manager/plugin-record-timeline.js.map +1 -1
  330. package/src/lib/plugin-manager/plugin-record-written.d.ts +58 -0
  331. package/src/lib/plugin-manager/plugin-record-written.js +42 -0
  332. package/src/lib/plugin-manager/plugin-record-written.js.map +1 -0
  333. package/src/lib/plugin-manager/plugin-revenue-sources.d.ts +213 -0
  334. package/src/lib/plugin-manager/plugin-revenue-sources.js +194 -0
  335. package/src/lib/plugin-manager/plugin-revenue-sources.js.map +1 -0
  336. package/src/lib/plugin-manager/plugin-site-beacons.d.ts +71 -0
  337. package/src/lib/plugin-manager/plugin-site-beacons.js +54 -0
  338. package/src/lib/plugin-manager/plugin-site-beacons.js.map +1 -0
  339. package/src/lib/plugin-manager/plugin-site-bundle.d.ts +145 -0
  340. package/src/lib/plugin-manager/plugin-site-bundle.js +78 -0
  341. package/src/lib/plugin-manager/plugin-site-bundle.js.map +1 -0
  342. package/src/lib/plugin-manager/plugin-site-cache.d.ts +12 -0
  343. package/src/lib/plugin-manager/plugin-site-cache.js.map +1 -1
  344. package/src/lib/plugin-manager/plugin-site-export.d.ts +81 -0
  345. package/src/lib/plugin-manager/plugin-site-export.js +40 -0
  346. package/src/lib/plugin-manager/plugin-site-export.js.map +1 -0
  347. package/src/lib/plugin-manager/plugin-sitemap-sections.d.ts +88 -0
  348. package/src/lib/plugin-manager/plugin-sitemap-sections.js +29 -0
  349. package/src/lib/plugin-manager/plugin-sitemap-sections.js.map +1 -0
  350. package/src/lib/plugin-manager/plugin-subscription-topics.generated.d.ts +11 -0
  351. package/src/lib/plugin-manager/plugin-subscription-topics.generated.js +41 -0
  352. package/src/lib/plugin-manager/plugin-subscription-topics.generated.js.map +1 -0
  353. package/src/lib/plugin-manager/plugin-tax-profile.d.ts +20 -4
  354. package/src/lib/plugin-manager/plugin-tax-profile.js.map +1 -1
  355. package/src/lib/plugin-manager/plugin-tax-return-sources.d.ts +255 -0
  356. package/src/lib/plugin-manager/plugin-tax-return-sources.js +191 -0
  357. package/src/lib/plugin-manager/plugin-tax-return-sources.js.map +1 -0
  358. package/src/lib/plugin-manager/plugin-template-sources.d.ts +75 -0
  359. package/src/lib/plugin-manager/plugin-template-sources.js +37 -0
  360. package/src/lib/plugin-manager/plugin-template-sources.js.map +1 -0
  361. package/src/lib/plugin-manager/plugin-usage-axes.d.ts +319 -0
  362. package/src/lib/plugin-manager/plugin-usage-axes.js +186 -0
  363. package/src/lib/plugin-manager/plugin-usage-axes.js.map +1 -0
  364. package/src/lib/plugin-manager/plugin-usage-meters.d.ts +108 -0
  365. package/src/lib/plugin-manager/plugin-usage-meters.js +105 -0
  366. package/src/lib/plugin-manager/plugin-usage-meters.js.map +1 -0
  367. package/src/lib/plugin-manager/plugin-zones.d.ts +4 -5
  368. package/src/lib/plugin-manager/plugin-zones.js.map +1 -1
  369. package/src/lib/plugin-manager/realm-host-aglyn.generated.js +2 -0
  370. package/src/lib/plugin-manager/realm-host-aglyn.generated.js.map +1 -1
  371. package/src/lib/plugin-manager/record-captured-contact.d.ts +1 -14
  372. package/src/lib/plugin-manager/record-captured-contact.js +10 -32
  373. package/src/lib/plugin-manager/record-captured-contact.js.map +1 -1
  374. package/src/lib/plugin-manager/repeat-rows.d.ts +124 -0
  375. package/src/lib/plugin-manager/repeat-rows.js +108 -0
  376. package/src/lib/plugin-manager/repeat-rows.js.map +1 -0
  377. package/src/lib/plugin-manager/submission-record-target.d.ts +144 -0
  378. package/src/lib/plugin-manager/submission-record-target.js +125 -0
  379. package/src/lib/plugin-manager/submission-record-target.js.map +1 -0
  380. package/src/lib/plugin-manager/usage-alert-contributors.d.ts +76 -6
  381. package/src/lib/plugin-manager/usage-alert-contributors.js +23 -10
  382. package/src/lib/plugin-manager/usage-alert-contributors.js.map +1 -1
  383. package/src/lib/plugin-manager/video-embed-provider.d.ts +108 -0
  384. package/src/lib/plugin-manager/video-embed-provider.js +165 -0
  385. package/src/lib/plugin-manager/video-embed-provider.js.map +1 -0
  386. package/src/lib/types/nodes.d.ts +2 -2
  387. package/src/lib/types/nodes.js.map +1 -1
  388. package/src/lib/app-utils/assist-credits.d.ts +0 -482
  389. package/src/lib/app-utils/assist-credits.js +0 -509
  390. package/src/lib/app-utils/assist-credits.js.map +0 -1
  391. package/src/lib/app-utils/campaign-attribution.js.map +0 -1
  392. package/src/lib/app-utils/campaign-forwarding.js.map +0 -1
  393. package/src/lib/app-utils/campaign-membership.d.ts +0 -121
  394. package/src/lib/app-utils/campaign-membership.js +0 -189
  395. package/src/lib/app-utils/campaign-membership.js.map +0 -1
  396. package/src/lib/app-utils/campaign-touch.js.map +0 -1
  397. package/src/lib/app-utils/console-record-links.d.ts +0 -163
  398. package/src/lib/app-utils/console-record-links.js +0 -180
  399. package/src/lib/app-utils/console-record-links.js.map +0 -1
  400. package/src/lib/app-utils/contact-holder.d.ts +0 -68
  401. package/src/lib/app-utils/contact-holder.js +0 -129
  402. package/src/lib/app-utils/contact-holder.js.map +0 -1
  403. package/src/lib/app-utils/contact-merge.d.ts +0 -136
  404. package/src/lib/app-utils/contact-merge.js +0 -412
  405. package/src/lib/app-utils/contact-merge.js.map +0 -1
  406. package/src/lib/app-utils/crm-booking.d.ts +0 -75
  407. package/src/lib/app-utils/crm-booking.js +0 -133
  408. package/src/lib/app-utils/crm-booking.js.map +0 -1
  409. package/src/lib/app-utils/crm-csv.d.ts +0 -239
  410. package/src/lib/app-utils/crm-csv.js +0 -467
  411. package/src/lib/app-utils/crm-csv.js.map +0 -1
  412. package/src/lib/app-utils/crm-digest.d.ts +0 -185
  413. package/src/lib/app-utils/crm-digest.js +0 -272
  414. package/src/lib/app-utils/crm-digest.js.map +0 -1
  415. package/src/lib/app-utils/crm-inbound.d.ts +0 -245
  416. package/src/lib/app-utils/crm-inbound.js +0 -407
  417. package/src/lib/app-utils/crm-inbound.js.map +0 -1
  418. package/src/lib/app-utils/crm-reports.d.ts +0 -479
  419. package/src/lib/app-utils/crm-reports.js +0 -680
  420. package/src/lib/app-utils/crm-reports.js.map +0 -1
  421. package/src/lib/app-utils/dataset-csv.js.map +0 -1
  422. package/src/lib/app-utils/dataset-query.d.ts +0 -57
  423. package/src/lib/app-utils/dataset-query.js.map +0 -1
  424. package/src/lib/app-utils/email-topics.js.map +0 -1
  425. package/src/lib/app-utils/form-dataset-binding.d.ts +0 -50
  426. package/src/lib/app-utils/form-dataset-binding.js +0 -74
  427. package/src/lib/app-utils/form-dataset-binding.js.map +0 -1
  428. package/src/lib/app-utils/list-assignment-policy.js.map +0 -1
  429. package/src/lib/app-utils/list-import.d.ts +0 -158
  430. package/src/lib/app-utils/list-import.js +0 -332
  431. package/src/lib/app-utils/list-import.js.map +0 -1
  432. package/src/lib/app-utils/marketplace-listing-visibility.d.ts +0 -122
  433. package/src/lib/app-utils/marketplace-listing-visibility.js +0 -147
  434. package/src/lib/app-utils/marketplace-listing-visibility.js.map +0 -1
  435. package/src/lib/app-utils/marketplace-overrides.js.map +0 -1
  436. package/src/lib/app-utils/marketplace-provenance.js.map +0 -1
  437. package/src/lib/app-utils/marketplace-theme.js.map +0 -1
  438. package/src/lib/app-utils/marketplace-update-state.d.ts +0 -119
  439. package/src/lib/app-utils/marketplace-update-state.js +0 -132
  440. package/src/lib/app-utils/marketplace-update-state.js.map +0 -1
  441. package/src/lib/app-utils/publisher-agreement.d.ts +0 -289
  442. package/src/lib/app-utils/publisher-agreement.js +0 -321
  443. package/src/lib/app-utils/publisher-agreement.js.map +0 -1
  444. package/src/lib/app-utils/wistia-embed.d.ts +0 -104
  445. package/src/lib/app-utils/wistia-embed.js +0 -138
  446. package/src/lib/app-utils/wistia-embed.js.map +0 -1
  447. package/src/lib/app-utils/workflows.d.ts +0 -136
  448. package/src/lib/app-utils/workflows.js +0 -346
  449. package/src/lib/app-utils/workflows.js.map +0 -1
  450. package/src/lib/plugin-manager/commerce-zone-props.d.ts +0 -172
  451. package/src/lib/plugin-manager/commerce-zone-props.js +0 -31
  452. package/src/lib/plugin-manager/commerce-zone-props.js.map +0 -1
  453. package/src/lib/plugin-manager/plugin-metered-lines.d.ts +0 -97
  454. package/src/lib/plugin-manager/plugin-metered-lines.js +0 -123
  455. package/src/lib/plugin-manager/plugin-metered-lines.js.map +0 -1
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ /**
18
+ * Recognizes the rejection Firebase raises when another tab signs in to a
19
+ * DIFFERENT account pool (AGL-3280).
20
+ *
21
+ * The console recovers from it (`apps/console/utils/cross-pool-desync.ts`
22
+ * holds the reload and its fences) and the error beacon labels it, so the
23
+ * two must agree on what it is. One definition, here, because a second copy
24
+ * fails silently: a shape learned by the recovery would go on paging from the
25
+ * beacon, or the other way round.
26
+ *
27
+ * Pure and framework-free — the beacon ships in every page's client bundle.
28
+ */
29
+ /** The SDK's code for "the incoming user is not in this instance's pool". */
30
+ export declare const CROSS_POOL_DESYNC_CODE = "auth/tenant-id-mismatch";
31
+ /**
32
+ * Is this the cross-pool desync? Matched on `code` first, which is the field
33
+ * Firebase promises; the message is the fallback for a rejection that arrived
34
+ * as something plainer.
35
+ *
36
+ * Nothing here may throw: it runs inside rejection handlers, where a getter
37
+ * that throws would lose the event it was asked about.
38
+ */
39
+ export declare function isCrossPoolDesync(reason: unknown): boolean;
@@ -0,0 +1,47 @@
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
+ * Recognizes the rejection Firebase raises when another tab signs in to a
18
+ * DIFFERENT account pool (AGL-3280).
19
+ *
20
+ * The console recovers from it (`apps/console/utils/cross-pool-desync.ts`
21
+ * holds the reload and its fences) and the error beacon labels it, so the
22
+ * two must agree on what it is. One definition, here, because a second copy
23
+ * fails silently: a shape learned by the recovery would go on paging from the
24
+ * beacon, or the other way round.
25
+ *
26
+ * Pure and framework-free — the beacon ships in every page's client bundle.
27
+ */ /** The SDK's code for "the incoming user is not in this instance's pool". */ export const CROSS_POOL_DESYNC_CODE = 'auth/tenant-id-mismatch';
28
+ /**
29
+ * Is this the cross-pool desync? Matched on `code` first, which is the field
30
+ * Firebase promises; the message is the fallback for a rejection that arrived
31
+ * as something plainer.
32
+ *
33
+ * Nothing here may throw: it runs inside rejection handlers, where a getter
34
+ * that throws would lose the event it was asked about.
35
+ */ export function isCrossPoolDesync(reason) {
36
+ try {
37
+ var _error_code, _error_message;
38
+ if (!reason || typeof reason !== 'object') return false;
39
+ const error = reason;
40
+ if (String((_error_code = error.code) != null ? _error_code : '') === CROSS_POOL_DESYNC_CODE) return true;
41
+ return String((_error_message = error.message) != null ? _error_message : '').includes(CROSS_POOL_DESYNC_CODE);
42
+ } catch (unused) {
43
+ return false;
44
+ }
45
+ }
46
+
47
+ //# sourceMappingURL=cross-pool-desync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/cross-pool-desync.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 * Recognizes the rejection Firebase raises when another tab signs in to a\n * DIFFERENT account pool (AGL-3280).\n *\n * The console recovers from it (`apps/console/utils/cross-pool-desync.ts`\n * holds the reload and its fences) and the error beacon labels it, so the\n * two must agree on what it is. One definition, here, because a second copy\n * fails silently: a shape learned by the recovery would go on paging from the\n * beacon, or the other way round.\n *\n * Pure and framework-free — the beacon ships in every page's client bundle.\n */\n\n/** The SDK's code for \"the incoming user is not in this instance's pool\". */\nexport const CROSS_POOL_DESYNC_CODE = 'auth/tenant-id-mismatch'\n\n/**\n * Is this the cross-pool desync? Matched on `code` first, which is the field\n * Firebase promises; the message is the fallback for a rejection that arrived\n * as something plainer.\n *\n * Nothing here may throw: it runs inside rejection handlers, where a getter\n * that throws would lose the event it was asked about.\n */\nexport function isCrossPoolDesync(reason: unknown): boolean {\n try {\n if (!reason || typeof reason !== 'object') return false\n const error = reason as { code?: unknown; message?: unknown }\n if (String(error.code ?? '') === CROSS_POOL_DESYNC_CODE) return true\n return String(error.message ?? '').includes(CROSS_POOL_DESYNC_CODE)\n } catch {\n return false\n }\n}\n"],"names":["CROSS_POOL_DESYNC_CODE","isCrossPoolDesync","reason","error","String","code","message","includes"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;;;;CAWC,GAED,2EAA2E,GAC3E,OAAO,MAAMA,yBAAyB,0BAAyB;AAE/D;;;;;;;CAOC,GACD,OAAO,SAASC,kBAAkBC,MAAe;IAC/C,IAAI;YAGSC,aACGA;QAHd,IAAI,CAACD,UAAU,OAAOA,WAAW,UAAU,OAAO;QAClD,MAAMC,QAAQD;QACd,IAAIE,QAAOD,cAAAA,MAAME,IAAI,YAAVF,cAAc,QAAQH,wBAAwB,OAAO;QAChE,OAAOI,QAAOD,iBAAAA,MAAMG,OAAO,YAAbH,iBAAiB,IAAII,QAAQ,CAACP;IAC9C,EAAE,eAAM;QACN,OAAO;IACT;AACF"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ /**
18
+ * The most characters one uploaded CSV may carry, whoever reads it.
19
+ *
20
+ * A file a person uploads is parsed in one pass by `parseCsv` (`csv.ts`), in the
21
+ * browser that picked it and again on the server that imports it. This bounds
22
+ * that pass: it is checked before the parse rather than after, because the
23
+ * parse is what the ceiling is protecting — a refusal answered on the byte
24
+ * count costs nothing, where discovering the file was too big by
25
+ * materializing all of its cells has already spent the memory the limit
26
+ * exists to bound. Every importer that reads a CSV in one go shares it, so a
27
+ * file one importer accepts is never one another refuses for its size.
28
+ */
29
+ export declare const CSV_UPLOAD_MAX_CHARACTERS = 8000000;
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */ /**
17
+ * The most characters one uploaded CSV may carry, whoever reads it.
18
+ *
19
+ * A file a person uploads is parsed in one pass by `parseCsv` (`csv.ts`), in the
20
+ * browser that picked it and again on the server that imports it. This bounds
21
+ * that pass: it is checked before the parse rather than after, because the
22
+ * parse is what the ceiling is protecting — a refusal answered on the byte
23
+ * count costs nothing, where discovering the file was too big by
24
+ * materializing all of its cells has already spent the memory the limit
25
+ * exists to bound. Every importer that reads a CSV in one go shares it, so a
26
+ * file one importer accepts is never one another refuses for its size.
27
+ */ export const CSV_UPLOAD_MAX_CHARACTERS = 8000000;
28
+
29
+ //# sourceMappingURL=csv-upload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/csv-upload.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * The most characters one uploaded CSV may carry, whoever reads it.\n *\n * A file a person uploads is parsed in one pass by `parseCsv` (`csv.ts`), in the\n * browser that picked it and again on the server that imports it. This bounds\n * that pass: it is checked before the parse rather than after, because the\n * parse is what the ceiling is protecting — a refusal answered on the byte\n * count costs nothing, where discovering the file was too big by\n * materializing all of its cells has already spent the memory the limit\n * exists to bound. Every importer that reads a CSV in one go shares it, so a\n * file one importer accepts is never one another refuses for its size.\n */\nexport const CSV_UPLOAD_MAX_CHARACTERS = 8_000_000\n"],"names":["CSV_UPLOAD_MAX_CHARACTERS"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;;;;CAWC,GACD,OAAO,MAAMA,4BAA4B,QAAS"}
@@ -15,49 +15,18 @@
15
15
  * limitations under the License.
16
16
  */
17
17
  /**
18
- * Dataset CSV/JSON serialization (AGL-182). The predictable inverse of
19
- * `coerceDocumentValues`: ISO dates, `lat, lon` coordinates, comma-joined
20
- * lists, JSON maps, reference ids — so an export re-imports losslessly
21
- * through the same coercion.
18
+ * CSV, read and written the one way the platform does it (AGL-2335).
22
19
  *
23
- * **Why this lives in core rather than in `@aglyn/plugins-data`** (AGL-2335).
24
- * AGL-413 moved dataset io out to the plugin, and the dataset-shaped half of
25
- * the import machinery — column mapping against a `DatasetModel` — is still
26
- * there, correctly: nothing outside that plugin maps a file onto a dataset.
27
- *
28
- * Writing one is different now. `/api/orgs/datasets/export` streams a
29
- * dataset from the server, and `scope:app` may not import a lib tagged
30
- * `aglyn:addons` — apps reach plugins only through the generated loader
31
- * manifests (AGL-417/419). The choice was a second copy of the escaper in
32
- * the console or one copy somewhere both may reach. There are already five
33
- * divergent hand-rolled CSV escapers in this repo; this is not becoming the
34
- * sixth. `dataset-io.ts` re-exports every name below, so the plugin's own
35
- * imports are unchanged.
36
- *
37
- * READING one is shared for the same reason. The email list importer parses
38
- * a merchant's contact file, and it lives in `@aglyn/plugins-email`, which
39
- * may not import `@aglyn/plugins-data` either. So {@link parseCsv} sits here
40
- * beside the escaper that is its inverse, and `dataset-io.ts` re-exports it
41
- * exactly as it re-exports the writing half.
42
- */
43
- import type { DatasetFieldDefinition, DatasetModel } from './dataset-models';
44
- /** Storage value → portable string (CSV cell / JSON value). */
45
- export declare function serializeDatasetValue(field: DatasetFieldDefinition, value: unknown): string;
46
- /**
47
- * The header line — field ids, in model order (AGL-2335).
48
- *
49
- * Split out of {@link datasetRecordsToCsv} so a server export can emit the
50
- * file a page at a time. The whole point of that export is that it is not
51
- * bounded by what one process can hold in memory, and a helper that only
52
- * takes a complete `rows` array cannot serve it. Everything below shares
53
- * one escaper: there are already five divergent hand-rolled CSV escapers in
54
- * this repo and this is not becoming the sixth.
20
+ * There were five divergent hand-rolled CSV escapers in this repo; this is
21
+ * the one escaper and the one parser every plugin and app reaches — the data
22
+ * plugin's dataset export and import, the email list import, the commerce
23
+ * catalog import, the CRM's contact import — and the check a download runs
24
+ * against the row count its server promised. Nothing here knows what the rows
25
+ * are; a plugin that writes its own records into a file formats each value
26
+ * itself and escapes it here.
55
27
  */
56
- export declare function datasetCsvHeader(model: DatasetModel): string;
57
- /** One record's values (storage form) → one CSV line, no terminator. */
58
- export declare function datasetCsvRow(model: DatasetModel, row: Record<string, unknown>): string;
59
- /** One record's values → the portable JSON object the JSON export emits. */
60
- export declare function datasetRecordToJson(model: DatasetModel, row: Record<string, unknown>): Record<string, string>;
28
+ /** One cell, quoted when it has to be: a comma, a quote or a line break. */
29
+ export declare const escapeCsvCell: (cell: string) => string;
61
30
  /**
62
31
  * Data rows in a CSV document — the header excluded, quoted newlines not
63
32
  * counted as row breaks (AGL-2335).
@@ -93,8 +62,6 @@ export declare function exportShortfall(promisedHeader: string | null | undefine
93
62
  received: number;
94
63
  short: boolean;
95
64
  };
96
- /** Rows (storage-form value maps) → CSV with a fieldId header row. */
97
- export declare function datasetRecordsToCsv(model: DatasetModel, rows: Array<Record<string, unknown>>): string;
98
65
  /**
99
66
  * Minimal RFC-4180 CSV parser (quoted fields, escaped quotes, CRLF).
100
67
  *
@@ -14,81 +14,16 @@
14
14
  * See the License for the specific language governing permissions and
15
15
  * limitations under the License.
16
16
  */ /**
17
- * Dataset CSV/JSON serialization (AGL-182). The predictable inverse of
18
- * `coerceDocumentValues`: ISO dates, `lat, lon` coordinates, comma-joined
19
- * lists, JSON maps, reference ids — so an export re-imports losslessly
20
- * through the same coercion.
17
+ * CSV, read and written the one way the platform does it (AGL-2335).
21
18
  *
22
- * **Why this lives in core rather than in `@aglyn/plugins-data`** (AGL-2335).
23
- * AGL-413 moved dataset io out to the plugin, and the dataset-shaped half of
24
- * the import machinery — column mapping against a `DatasetModel` — is still
25
- * there, correctly: nothing outside that plugin maps a file onto a dataset.
26
- *
27
- * Writing one is different now. `/api/orgs/datasets/export` streams a
28
- * dataset from the server, and `scope:app` may not import a lib tagged
29
- * `aglyn:addons` — apps reach plugins only through the generated loader
30
- * manifests (AGL-417/419). The choice was a second copy of the escaper in
31
- * the console or one copy somewhere both may reach. There are already five
32
- * divergent hand-rolled CSV escapers in this repo; this is not becoming the
33
- * sixth. `dataset-io.ts` re-exports every name below, so the plugin's own
34
- * imports are unchanged.
35
- *
36
- * READING one is shared for the same reason. The email list importer parses
37
- * a merchant's contact file, and it lives in `@aglyn/plugins-email`, which
38
- * may not import `@aglyn/plugins-data` either. So {@link parseCsv} sits here
39
- * beside the escaper that is its inverse, and `dataset-io.ts` re-exports it
40
- * exactly as it re-exports the writing half.
41
- */ /** Storage value → portable string (CSV cell / JSON value). */ export function serializeDatasetValue(field, value) {
42
- if (value == null) return '';
43
- switch(field.type){
44
- case 'timestamp':
45
- return typeof value === 'number' && Number.isFinite(value) ? new Date(value).toISOString() : String(value);
46
- case 'coordinates':
47
- {
48
- const coordinates = value;
49
- return coordinates && typeof coordinates.latitude === 'number' && typeof coordinates.longitude === 'number' ? `${coordinates.latitude}, ${coordinates.longitude}` : String(value);
50
- }
51
- case 'sorted':
52
- case 'reference':
53
- return Array.isArray(value) ? value.join(', ') : String(value);
54
- case 'map':
55
- try {
56
- return JSON.stringify(value);
57
- } catch (unused) {
58
- return String(value);
59
- }
60
- default:
61
- return String(value);
62
- }
63
- }
64
- const csvEscape = (cell)=>/[",\r\n]/.test(cell) ? `"${cell.replace(/"/g, '""')}"` : cell;
65
- /**
66
- * The header line — field ids, in model order (AGL-2335).
67
- *
68
- * Split out of {@link datasetRecordsToCsv} so a server export can emit the
69
- * file a page at a time. The whole point of that export is that it is not
70
- * bounded by what one process can hold in memory, and a helper that only
71
- * takes a complete `rows` array cannot serve it. Everything below shares
72
- * one escaper: there are already five divergent hand-rolled CSV escapers in
73
- * this repo and this is not becoming the sixth.
74
- */ export function datasetCsvHeader(model) {
75
- return model.order.map(csvEscape).join(',');
76
- }
77
- /** One record's values (storage form) → one CSV line, no terminator. */ export function datasetCsvRow(model, row) {
78
- return model.order.map((fieldId)=>{
79
- const field = model.fields[fieldId];
80
- return csvEscape(field ? serializeDatasetValue(field, row[fieldId]) : '');
81
- }).join(',');
82
- }
83
- /** One record's values → the portable JSON object the JSON export emits. */ export function datasetRecordToJson(model, row) {
84
- return Object.fromEntries(model.order.map((fieldId)=>{
85
- const field = model.fields[fieldId];
86
- return [
87
- fieldId,
88
- field ? serializeDatasetValue(field, row[fieldId]) : ''
89
- ];
90
- }));
91
- }
19
+ * There were five divergent hand-rolled CSV escapers in this repo; this is
20
+ * the one escaper and the one parser every plugin and app reaches — the data
21
+ * plugin's dataset export and import, the email list import, the commerce
22
+ * catalog import, the CRM's contact import — and the check a download runs
23
+ * against the row count its server promised. Nothing here knows what the rows
24
+ * are; a plugin that writes its own records into a file formats each value
25
+ * itself and escapes it here.
26
+ */ /** One cell, quoted when it has to be: a comma, a quote or a line break. */ export const escapeCsvCell = (cell)=>/[",\r\n]/.test(cell) ? `"${cell.replace(/"/g, '""')}"` : cell;
92
27
  /**
93
28
  * Data rows in a CSV document — the header excluded, quoted newlines not
94
29
  * counted as row breaks (AGL-2335).
@@ -173,12 +108,6 @@ const csvEscape = (cell)=>/[",\r\n]/.test(cell) ? `"${cell.replace(/"/g, '""')}"
173
108
  short: Number.isFinite(promised) && promisedHeader != null && received < promised
174
109
  };
175
110
  }
176
- /** Rows (storage-form value maps) → CSV with a fieldId header row. */ export function datasetRecordsToCsv(model, rows) {
177
- return [
178
- datasetCsvHeader(model),
179
- ...rows.map((row)=>datasetCsvRow(model, row))
180
- ].join('\n');
181
- }
182
111
  /**
183
112
  * Minimal RFC-4180 CSV parser (quoted fields, escaped quotes, CRLF).
184
113
  *
@@ -232,4 +161,4 @@ const csvEscape = (cell)=>/[",\r\n]/.test(cell) ? `"${cell.replace(/"/g, '""')}"
232
161
  return rows.filter((cells)=>cells.some((value)=>value.trim() !== ''));
233
162
  }
234
163
 
235
- //# sourceMappingURL=dataset-csv.js.map
164
+ //# sourceMappingURL=csv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/csv.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 * CSV, read and written the one way the platform does it (AGL-2335).\n *\n * There were five divergent hand-rolled CSV escapers in this repo; this is\n * the one escaper and the one parser every plugin and app reaches — the data\n * plugin's dataset export and import, the email list import, the commerce\n * catalog import, the CRM's contact import — and the check a download runs\n * against the row count its server promised. Nothing here knows what the rows\n * are; a plugin that writes its own records into a file formats each value\n * itself and escapes it here.\n */\n\n/** One cell, quoted when it has to be: a comma, a quote or a line break. */\nexport const escapeCsvCell = (cell: string): string =>\n /[\",\\r\\n]/.test(cell) ? `\"${cell.replace(/\"/g, '\"\"')}\"` : cell\n\n/**\n * Data rows in a CSV document — the header excluded, quoted newlines not\n * counted as row breaks (AGL-2335).\n *\n * This exists so a download can be CHECKED against the row count the server\n * promised, rather than trusted. A truncated export is the defect this whole\n * area is about, and a stream that dies halfway produces a perfectly\n * well-formed shorter file: nothing about the bytes says they are short.\n *\n * Single pass, no array building — {@link parseCsv} answers the same\n * question but materializes every cell, which is the wrong trade when the\n * file may be hundreds of thousands of rows and the only thing wanted is\n * how many there are.\n */\nexport function countCsvDataRows(text: string): number {\n const source = String(text ?? '')\n if (!source) return 0\n let rows = 0\n let quoted = false\n let cellsSeen = false\n for (let index = 0; index < source.length; index += 1) {\n const char = source[index]\n if (quoted) {\n if (char === '\"') {\n if (source[index + 1] === '\"') index += 1\n else quoted = false\n }\n cellsSeen = true\n continue\n }\n if (char === '\"') {\n quoted = true\n cellsSeen = true\n continue\n }\n if (char === '\\n') {\n rows += 1\n cellsSeen = false\n continue\n }\n if (char !== '\\r') cellsSeen = true\n }\n // A file that does not end in a newline still has a final row.\n if (cellsSeen) rows += 1\n // The header is not data.\n return Math.max(0, rows - 1)\n}\n\n/**\n * Did a downloaded export arrive whole? (AGL-2335)\n *\n * The server streams and reports its `count()` aggregate in a header, so the\n * client can CHECK rather than trust. This is the check, kept here as a pure\n * function because a guard living inline in a component is a guard nobody\n * can force red — and this one exists precisely to catch a silent shortfall.\n *\n * `short` is only true when the count is both KNOWN and lower. A missing or\n * unparseable header is not evidence of truncation, and refusing a download\n * on the strength of a header that never arrived would fail the user for the\n * server's bookkeeping. More rows than promised is not short either — the\n * count is a snapshot taken before the first page, so a concurrent insert\n * can legitimately overtake it.\n */\nexport function exportShortfall(\n promisedHeader: string | null | undefined,\n body: string,\n format: 'csv' | 'json',\n): { promised: number; received: number; short: boolean } {\n const promised = Number(promisedHeader)\n let received: number\n if (format === 'csv') {\n received = countCsvDataRows(body)\n } else {\n try {\n const parsed = JSON.parse(body) as unknown\n received = Array.isArray(parsed) ? parsed.length : 0\n } catch {\n // A body that is not JSON at all did not arrive whole.\n return { promised, received: 0, short: true }\n }\n }\n return {\n promised,\n received,\n short: Number.isFinite(promised) && promisedHeader != null && received < promised,\n }\n}\n\n/**\n * Minimal RFC-4180 CSV parser (quoted fields, escaped quotes, CRLF).\n *\n * The inverse of the escaper above, and the one parser in the repo — see the\n * module note for why the email list importer reaches this rather than\n * writing its own.\n *\n * A wholly blank row is dropped. Every spreadsheet writes a trailing newline\n * and a row of empty cells is not a record; carrying it through would give\n * every caller the same off-by-one to remember.\n */\nexport function parseCsv(text: string): string[][] {\n const rows: string[][] = []\n let row: string[] = []\n let cell = ''\n let quoted = false\n const source = String(text ?? '')\n for (let index = 0; index < source.length; index += 1) {\n const char = source[index]\n if (quoted) {\n if (char === '\"') {\n if (source[index + 1] === '\"') {\n cell += '\"'\n index += 1\n } else {\n quoted = false\n }\n } else {\n cell += char\n }\n continue\n }\n if (char === '\"') {\n quoted = true\n } else if (char === ',') {\n row.push(cell)\n cell = ''\n } else if (char === '\\n' || char === '\\r') {\n if (char === '\\r' && source[index + 1] === '\\n') index += 1\n row.push(cell)\n cell = ''\n rows.push(row)\n row = []\n } else {\n cell += char\n }\n }\n if (cell !== '' || row.length) {\n row.push(cell)\n rows.push(row)\n }\n return rows.filter((cells) => cells.some((value) => value.trim() !== ''))\n}\n"],"names":["escapeCsvCell","cell","test","replace","countCsvDataRows","text","source","String","rows","quoted","cellsSeen","index","length","char","Math","max","exportShortfall","promisedHeader","body","format","promised","Number","received","parsed","JSON","parse","Array","isArray","short","isFinite","parseCsv","row","push","filter","cells","some","value","trim"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;;;CAUC,GAED,0EAA0E,GAC1E,OAAO,MAAMA,gBAAgB,CAACC,OAC5B,WAAWC,IAAI,CAACD,QAAQ,CAAC,CAAC,EAAEA,KAAKE,OAAO,CAAC,MAAM,MAAM,CAAC,CAAC,GAAGF,KAAI;AAEhE;;;;;;;;;;;;;CAaC,GACD,OAAO,SAASG,iBAAiBC,IAAY;IAC3C,MAAMC,SAASC,OAAOF,eAAAA,OAAQ;IAC9B,IAAI,CAACC,QAAQ,OAAO;IACpB,IAAIE,OAAO;IACX,IAAIC,SAAS;IACb,IAAIC,YAAY;IAChB,IAAK,IAAIC,QAAQ,GAAGA,QAAQL,OAAOM,MAAM,EAAED,SAAS,EAAG;QACrD,MAAME,OAAOP,MAAM,CAACK,MAAM;QAC1B,IAAIF,QAAQ;YACV,IAAII,SAAS,KAAK;gBAChB,IAAIP,MAAM,CAACK,QAAQ,EAAE,KAAK,KAAKA,SAAS;qBACnCF,SAAS;YAChB;YACAC,YAAY;YACZ;QACF;QACA,IAAIG,SAAS,KAAK;YAChBJ,SAAS;YACTC,YAAY;YACZ;QACF;QACA,IAAIG,SAAS,MAAM;YACjBL,QAAQ;YACRE,YAAY;YACZ;QACF;QACA,IAAIG,SAAS,MAAMH,YAAY;IACjC;IACA,+DAA+D;IAC/D,IAAIA,WAAWF,QAAQ;IACvB,0BAA0B;IAC1B,OAAOM,KAAKC,GAAG,CAAC,GAAGP,OAAO;AAC5B;AAEA;;;;;;;;;;;;;;CAcC,GACD,OAAO,SAASQ,gBACdC,cAAyC,EACzCC,IAAY,EACZC,MAAsB;IAEtB,MAAMC,WAAWC,OAAOJ;IACxB,IAAIK;IACJ,IAAIH,WAAW,OAAO;QACpBG,WAAWlB,iBAAiBc;IAC9B,OAAO;QACL,IAAI;YACF,MAAMK,SAASC,KAAKC,KAAK,CAACP;YAC1BI,WAAWI,MAAMC,OAAO,CAACJ,UAAUA,OAAOX,MAAM,GAAG;QACrD,EAAE,eAAM;YACN,uDAAuD;YACvD,OAAO;gBAAEQ;gBAAUE,UAAU;gBAAGM,OAAO;YAAK;QAC9C;IACF;IACA,OAAO;QACLR;QACAE;QACAM,OAAOP,OAAOQ,QAAQ,CAACT,aAAaH,kBAAkB,QAAQK,WAAWF;IAC3E;AACF;AAEA;;;;;;;;;;CAUC,GACD,OAAO,SAASU,SAASzB,IAAY;IACnC,MAAMG,OAAmB,EAAE;IAC3B,IAAIuB,MAAgB,EAAE;IACtB,IAAI9B,OAAO;IACX,IAAIQ,SAAS;IACb,MAAMH,SAASC,OAAOF,eAAAA,OAAQ;IAC9B,IAAK,IAAIM,QAAQ,GAAGA,QAAQL,OAAOM,MAAM,EAAED,SAAS,EAAG;QACrD,MAAME,OAAOP,MAAM,CAACK,MAAM;QAC1B,IAAIF,QAAQ;YACV,IAAII,SAAS,KAAK;gBAChB,IAAIP,MAAM,CAACK,QAAQ,EAAE,KAAK,KAAK;oBAC7BV,QAAQ;oBACRU,SAAS;gBACX,OAAO;oBACLF,SAAS;gBACX;YACF,OAAO;gBACLR,QAAQY;YACV;YACA;QACF;QACA,IAAIA,SAAS,KAAK;YAChBJ,SAAS;QACX,OAAO,IAAII,SAAS,KAAK;YACvBkB,IAAIC,IAAI,CAAC/B;YACTA,OAAO;QACT,OAAO,IAAIY,SAAS,QAAQA,SAAS,MAAM;YACzC,IAAIA,SAAS,QAAQP,MAAM,CAACK,QAAQ,EAAE,KAAK,MAAMA,SAAS;YAC1DoB,IAAIC,IAAI,CAAC/B;YACTA,OAAO;YACPO,KAAKwB,IAAI,CAACD;YACVA,MAAM,EAAE;QACV,OAAO;YACL9B,QAAQY;QACV;IACF;IACA,IAAIZ,SAAS,MAAM8B,IAAInB,MAAM,EAAE;QAC7BmB,IAAIC,IAAI,CAAC/B;QACTO,KAAKwB,IAAI,CAACD;IACZ;IACA,OAAOvB,KAAKyB,MAAM,CAAC,CAACC,QAAUA,MAAMC,IAAI,CAAC,CAACC,QAAUA,MAAMC,IAAI,OAAO;AACvE"}
@@ -21,11 +21,11 @@ import { type DatasetFieldEntry } from './datasets';
21
21
  * referenced design doc — this module is the single runtime source of
22
22
  * truth). A model lives on the dataset doc
23
23
  * (`orgs/{orgId}/datasets/{id}.model`) and drives the typed editor, import
24
- * and site-restore validation, and the console and `/v1` record writes
25
- * through the shared `validateDocument`/`coerceDocumentValues` pair so they
26
- * can't disagree. Form submissions and automation steps write through
27
- * `buildDatasetRecordValues` instead, which stores each value as text and
28
- * validates nothing.
24
+ * and site-restore validation, and every record write — the console, `/v1`,
25
+ * a bound form's submission and an automation step — through the shared
26
+ * `validateDocument`/`coerceDocumentValues` pair so they can't disagree. The
27
+ * form and the automation step reach the pair through
28
+ * `prepareDatasetRecordWrite` (AGL-2773).
29
29
  *
30
30
  * Storage conventions (Firestore-safe): timestamps as epoch millis
31
31
  * numbers, coordinates as `{ latitude, longitude }`, `sorted` as arrays,
@@ -251,6 +251,18 @@ const isFiniteNumber = (value)=>typeof value === 'number' && Number.isFinite(val
251
251
  if (field.type === 'map') return formatDatasetValue(field, value);
252
252
  return String(value);
253
253
  }
254
+ const BOOL_TRUE_WORDS = new Set([
255
+ 'true',
256
+ 'yes',
257
+ 'on',
258
+ '1'
259
+ ]);
260
+ const BOOL_FALSE_WORDS = new Set([
261
+ 'false',
262
+ 'no',
263
+ 'off',
264
+ '0'
265
+ ]);
254
266
  /**
255
267
  * Coerces user-input strings (form fields, CSV cells) into storage form
256
268
  * per the field type. Unparseable input is passed through untouched so
@@ -267,8 +279,13 @@ const isFiniteNumber = (value)=>typeof value === 'number' && Number.isFinite(val
267
279
  }
268
280
  switch(field.type){
269
281
  case 'bool':
270
- values[fieldId] = raw === 'true' ? true : raw === 'false' ? false : raw;
271
- break;
282
+ {
283
+ // The words a form control or a CSV cell says yes and no with: a
284
+ // lone checkbox posts `on`, a spreadsheet exports `TRUE` or `1`.
285
+ const word = raw.trim().toLowerCase();
286
+ values[fieldId] = BOOL_TRUE_WORDS.has(word) ? true : BOOL_FALSE_WORDS.has(word) ? false : raw;
287
+ break;
288
+ }
272
289
  case 'int32':
273
290
  case 'int64':
274
291
  {