@aglyn/plugins-crm 1.0.0-beta.220 → 1.0.0-beta.222

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 (514) hide show
  1. package/README.md +2 -1
  2. package/package.json +13 -13
  3. package/src/lib/components/activity-list.js +12 -5
  4. package/src/lib/components/activity-list.js.map +1 -1
  5. package/src/lib/components/companies-bulk-bar.d.ts +1 -4
  6. package/src/lib/components/companies-bulk-bar.js +7 -20
  7. package/src/lib/components/companies-bulk-bar.js.map +1 -1
  8. package/src/lib/components/companies-section.d.ts +3 -3
  9. package/src/lib/components/companies-section.js +149 -46
  10. package/src/lib/components/companies-section.js.map +1 -1
  11. package/src/lib/components/company-edit-drawer.js +281 -20
  12. package/src/lib/components/company-edit-drawer.js.map +1 -1
  13. package/src/lib/components/company-properties-card.js +99 -8
  14. package/src/lib/components/company-properties-card.js.map +1 -1
  15. package/src/lib/components/contact-detail-page.js +3 -1
  16. package/src/lib/components/contact-detail-page.js.map +1 -1
  17. package/src/lib/components/contact-merge-dialog.js +33 -10
  18. package/src/lib/components/contact-merge-dialog.js.map +1 -1
  19. package/src/lib/components/contact-properties-card.d.ts +0 -69
  20. package/src/lib/components/contact-properties-card.js +350 -60
  21. package/src/lib/components/contact-properties-card.js.map +1 -1
  22. package/src/lib/components/contact-reports-to-field.d.ts +46 -0
  23. package/src/lib/components/contact-reports-to-field.js +67 -0
  24. package/src/lib/components/contact-reports-to-field.js.map +1 -0
  25. package/src/lib/components/contacts-bulk-bar.d.ts +1 -8
  26. package/src/lib/components/contacts-bulk-bar.js +7 -19
  27. package/src/lib/components/contacts-bulk-bar.js.map +1 -1
  28. package/src/lib/components/contacts-section.js +46 -33
  29. package/src/lib/components/contacts-section.js.map +1 -1
  30. package/src/lib/components/crm-call-actions.d.ts +10 -0
  31. package/src/lib/components/crm-call-actions.js +26 -9
  32. package/src/lib/components/crm-call-actions.js.map +1 -1
  33. package/src/lib/components/crm-record-picker.d.ts +15 -0
  34. package/src/lib/components/crm-record-picker.js +16 -10
  35. package/src/lib/components/crm-record-picker.js.map +1 -1
  36. package/src/lib/components/crm-transfer-buttons.d.ts +54 -0
  37. package/src/lib/components/crm-transfer-buttons.js +167 -0
  38. package/src/lib/components/crm-transfer-buttons.js.map +1 -0
  39. package/src/lib/components/deal-contact-roles-card.d.ts +46 -0
  40. package/src/lib/components/deal-contact-roles-card.js +368 -0
  41. package/src/lib/components/deal-contact-roles-card.js.map +1 -0
  42. package/src/lib/components/deal-detail-page.d.ts +3 -2
  43. package/src/lib/components/deal-detail-page.js +25 -6
  44. package/src/lib/components/deal-detail-page.js.map +1 -1
  45. package/src/lib/components/deal-edit-drawer.d.ts +10 -0
  46. package/src/lib/components/deal-edit-drawer.js +219 -10
  47. package/src/lib/components/deal-edit-drawer.js.map +1 -1
  48. package/src/lib/components/deal-properties-card.d.ts +7 -0
  49. package/src/lib/components/deal-properties-card.js +34 -3
  50. package/src/lib/components/deal-properties-card.js.map +1 -1
  51. package/src/lib/components/deal-stage-card.d.ts +4 -0
  52. package/src/lib/components/deal-stage-card.js +10 -2
  53. package/src/lib/components/deal-stage-card.js.map +1 -1
  54. package/src/lib/components/deals-bulk-bar.d.ts +0 -3
  55. package/src/lib/components/deals-bulk-bar.js +7 -20
  56. package/src/lib/components/deals-bulk-bar.js.map +1 -1
  57. package/src/lib/components/deals-section.d.ts +3 -3
  58. package/src/lib/components/deals-section.js +123 -63
  59. package/src/lib/components/deals-section.js.map +1 -1
  60. package/src/lib/components/fields-section.js +31 -17
  61. package/src/lib/components/fields-section.js.map +1 -1
  62. package/src/lib/components/lead-convert-dialog.d.ts +4 -0
  63. package/src/lib/components/lead-convert-dialog.js +23 -1
  64. package/src/lib/components/lead-convert-dialog.js.map +1 -1
  65. package/src/lib/components/lead-detail-page.js +8 -2
  66. package/src/lib/components/lead-detail-page.js.map +1 -1
  67. package/src/lib/components/lead-profile-fields.d.ts +71 -0
  68. package/src/lib/components/lead-profile-fields.js +386 -0
  69. package/src/lib/components/lead-profile-fields.js.map +1 -0
  70. package/src/lib/components/lead-properties-card.d.ts +2 -1
  71. package/src/lib/components/lead-properties-card.js +85 -176
  72. package/src/lib/components/lead-properties-card.js.map +1 -1
  73. package/src/lib/components/lead-source-select.d.ts +4 -23
  74. package/src/lib/components/lead-source-select.js +9 -73
  75. package/src/lib/components/lead-source-select.js.map +1 -1
  76. package/src/lib/components/lead-status-chip.d.ts +9 -3
  77. package/src/lib/components/lead-status-chip.js +8 -4
  78. package/src/lib/components/lead-status-chip.js.map +1 -1
  79. package/src/lib/components/lead-status-options.d.ts +20 -0
  80. package/src/lib/components/lead-status-options.js +51 -0
  81. package/src/lib/components/lead-status-options.js.map +1 -0
  82. package/src/lib/components/lead-unqualify-dialog.d.ts +5 -0
  83. package/src/lib/components/lead-unqualify-dialog.js +50 -18
  84. package/src/lib/components/lead-unqualify-dialog.js.map +1 -1
  85. package/src/lib/components/leads-bulk-bar.d.ts +0 -3
  86. package/src/lib/components/leads-bulk-bar.js +29 -29
  87. package/src/lib/components/leads-bulk-bar.js.map +1 -1
  88. package/src/lib/components/leads-section.js +120 -68
  89. package/src/lib/components/leads-section.js.map +1 -1
  90. package/src/lib/components/linked-deals-card.d.ts +4 -0
  91. package/src/lib/components/linked-deals-card.js +47 -3
  92. package/src/lib/components/linked-deals-card.js.map +1 -1
  93. package/src/lib/components/log-activity-dialog.js +43 -3
  94. package/src/lib/components/log-activity-dialog.js.map +1 -1
  95. package/src/lib/components/new-contact-drawer.d.ts +8 -0
  96. package/src/lib/components/new-contact-drawer.js +108 -6
  97. package/src/lib/components/new-contact-drawer.js.map +1 -1
  98. package/src/lib/components/new-lead-drawer.d.ts +9 -2
  99. package/src/lib/components/new-lead-drawer.js +88 -121
  100. package/src/lib/components/new-lead-drawer.js.map +1 -1
  101. package/src/lib/components/picklist-select.d.ts +36 -0
  102. package/src/lib/components/picklist-select.js +114 -0
  103. package/src/lib/components/picklist-select.js.map +1 -0
  104. package/src/lib/components/picklist-values-card.d.ts +34 -0
  105. package/src/lib/components/{lead-source-values-card.js → picklist-values-card.js} +241 -58
  106. package/src/lib/components/picklist-values-card.js.map +1 -0
  107. package/src/lib/components/pipeline-stages-dialog.d.ts +7 -0
  108. package/src/lib/components/pipeline-stages-dialog.js +26 -4
  109. package/src/lib/components/pipeline-stages-dialog.js.map +1 -1
  110. package/src/lib/components/pipelines-dialog.js +15 -6
  111. package/src/lib/components/pipelines-dialog.js.map +1 -1
  112. package/src/lib/components/recent-activity-feed.js +20 -5
  113. package/src/lib/components/recent-activity-feed.js.map +1 -1
  114. package/src/lib/components/recipes-card.js +4 -2
  115. package/src/lib/components/recipes-card.js.map +1 -1
  116. package/src/lib/components/record-tasks-card.js +15 -8
  117. package/src/lib/components/record-tasks-card.js.map +1 -1
  118. package/src/lib/components/reports/forecast-card.d.ts +6 -0
  119. package/src/lib/components/reports/forecast-card.js +101 -3
  120. package/src/lib/components/reports/forecast-card.js.map +1 -1
  121. package/src/lib/components/reports/lead-funnel-card.d.ts +12 -0
  122. package/src/lib/components/reports/lead-funnel-card.js +9 -5
  123. package/src/lib/components/reports/lead-funnel-card.js.map +1 -1
  124. package/src/lib/components/reports/lead-source-card.d.ts +23 -0
  125. package/src/lib/components/reports/lead-source-card.js +318 -0
  126. package/src/lib/components/reports/lead-source-card.js.map +1 -0
  127. package/src/lib/components/reports/report-export.js +1 -1
  128. package/src/lib/components/reports/report-export.js.map +1 -1
  129. package/src/lib/components/reports-section.js +8 -0
  130. package/src/lib/components/reports-section.js.map +1 -1
  131. package/src/lib/components/sharing-rule-drawer.d.ts +5 -0
  132. package/src/lib/components/sharing-rule-drawer.js +108 -19
  133. package/src/lib/components/sharing-rule-drawer.js.map +1 -1
  134. package/src/lib/components/sharing-rules-card.js +11 -3
  135. package/src/lib/components/sharing-rules-card.js.map +1 -1
  136. package/src/lib/components/task-cells.d.ts +9 -1
  137. package/src/lib/components/task-cells.js +9 -4
  138. package/src/lib/components/task-cells.js.map +1 -1
  139. package/src/lib/components/task-edit-drawer.js +111 -43
  140. package/src/lib/components/task-edit-drawer.js.map +1 -1
  141. package/src/lib/components/tasks-bulk-bar.d.ts +0 -3
  142. package/src/lib/components/tasks-bulk-bar.js +7 -20
  143. package/src/lib/components/tasks-bulk-bar.js.map +1 -1
  144. package/src/lib/components/tasks-calendar.d.ts +3 -0
  145. package/src/lib/components/tasks-calendar.js +8 -1
  146. package/src/lib/components/tasks-calendar.js.map +1 -1
  147. package/src/lib/components/tasks-section.d.ts +3 -3
  148. package/src/lib/components/tasks-section.js +58 -43
  149. package/src/lib/components/tasks-section.js.map +1 -1
  150. package/src/lib/constants/api-routes.d.ts +2 -9
  151. package/src/lib/constants/api-routes.js +1 -7
  152. package/src/lib/constants/api-routes.js.map +1 -1
  153. package/src/lib/constants/bundle-common.d.ts +6 -0
  154. package/src/lib/constants/bundle-common.js +11 -0
  155. package/src/lib/constants/bundle-common.js.map +1 -1
  156. package/src/lib/constants/company-filters.d.ts +14 -0
  157. package/src/lib/constants/company-filters.js +51 -1
  158. package/src/lib/constants/company-filters.js.map +1 -1
  159. package/src/lib/constants/contact-filters.d.ts +2 -0
  160. package/src/lib/constants/contact-filters.js +18 -1
  161. package/src/lib/constants/contact-filters.js.map +1 -1
  162. package/src/lib/constants/deal-filters.d.ts +22 -1
  163. package/src/lib/constants/deal-filters.js +67 -4
  164. package/src/lib/constants/deal-filters.js.map +1 -1
  165. package/src/lib/declarations.console-server.d.ts +3 -0
  166. package/src/lib/declarations.console-server.js +35 -0
  167. package/src/lib/declarations.console-server.js.map +1 -1
  168. package/src/lib/declarations.d.ts +26 -0
  169. package/src/lib/declarations.js +35 -0
  170. package/src/lib/declarations.js.map +1 -0
  171. package/src/lib/declarations.server.d.ts +11 -0
  172. package/src/lib/declarations.server.js +92 -1
  173. package/src/lib/declarations.server.js.map +1 -1
  174. package/src/lib/hooks/use-company-picklists.d.ts +15 -0
  175. package/src/lib/hooks/use-company-picklists.js +55 -0
  176. package/src/lib/hooks/use-company-picklists.js.map +1 -0
  177. package/src/lib/hooks/use-crm-picklist.d.ts +25 -0
  178. package/src/lib/hooks/use-crm-picklist.js +53 -0
  179. package/src/lib/hooks/use-crm-picklist.js.map +1 -0
  180. package/src/lib/hooks/use-crm-record-names.d.ts +16 -0
  181. package/src/lib/hooks/use-crm-record-names.js +45 -19
  182. package/src/lib/hooks/use-crm-record-names.js.map +1 -1
  183. package/src/lib/hooks/use-crm-task-picklists.d.ts +11 -0
  184. package/src/lib/hooks/use-crm-task-picklists.js +45 -0
  185. package/src/lib/hooks/use-crm-task-picklists.js.map +1 -0
  186. package/src/lib/hooks/use-deals.d.ts +14 -0
  187. package/src/lib/hooks/use-deals.js +29 -0
  188. package/src/lib/hooks/use-deals.js.map +1 -1
  189. package/src/lib/hooks/use-lead-picklists.d.ts +14 -0
  190. package/src/lib/hooks/use-lead-picklists.js +46 -0
  191. package/src/lib/hooks/use-lead-picklists.js.map +1 -0
  192. package/src/lib/hooks/use-lead-source-picklist.d.ts +5 -19
  193. package/src/lib/hooks/use-lead-source-picklist.js +12 -22
  194. package/src/lib/hooks/use-lead-source-picklist.js.map +1 -1
  195. package/src/lib/hooks/use-lead-status-picklist.d.ts +9 -0
  196. package/src/lib/hooks/use-lead-status-picklist.js +40 -0
  197. package/src/lib/hooks/use-lead-status-picklist.js.map +1 -0
  198. package/src/lib/model/companies.d.ts +32 -3
  199. package/src/lib/model/companies.js +133 -16
  200. package/src/lib/model/companies.js.map +1 -1
  201. package/src/lib/model/contact-merge.d.ts +27 -3
  202. package/src/lib/model/contact-merge.js +81 -7
  203. package/src/lib/model/contact-merge.js.map +1 -1
  204. package/src/lib/model/contact-record.d.ts +17 -0
  205. package/src/lib/model/contact-record.js +15 -1
  206. package/src/lib/model/contact-record.js.map +1 -1
  207. package/src/lib/model/contact-update.d.ts +31 -2
  208. package/src/lib/model/contact-update.js +14 -0
  209. package/src/lib/model/contact-update.js.map +1 -1
  210. package/src/lib/model/crm-list-query.d.ts +5 -0
  211. package/src/lib/model/crm-list-query.js +8 -0
  212. package/src/lib/model/crm-list-query.js.map +1 -1
  213. package/src/lib/model/crm-recipes.d.ts +40 -0
  214. package/src/lib/model/crm-recipes.js +244 -0
  215. package/src/lib/model/crm-recipes.js.map +1 -0
  216. package/src/lib/model/crm-record-counts.d.ts +36 -0
  217. package/src/lib/model/crm-record-counts.js +54 -0
  218. package/src/lib/model/crm-record-counts.js.map +1 -0
  219. package/src/lib/model/crm-record-lists.d.ts +23 -0
  220. package/src/lib/model/crm-record-lists.js +161 -0
  221. package/src/lib/model/crm-record-lists.js.map +1 -0
  222. package/src/lib/model/crm-reports.d.ts +73 -3
  223. package/src/lib/model/crm-reports.js +120 -1
  224. package/src/lib/model/crm-reports.js.map +1 -1
  225. package/src/lib/model/crm-sharing.d.ts +21 -3
  226. package/src/lib/model/crm-sharing.js +27 -6
  227. package/src/lib/model/crm-sharing.js.map +1 -1
  228. package/src/lib/model/deal-board-model.d.ts +8 -2
  229. package/src/lib/model/deal-board-model.js +15 -2
  230. package/src/lib/model/deal-board-model.js.map +1 -1
  231. package/src/lib/model/deal-contact-roles.d.ts +45 -0
  232. package/src/lib/model/deal-contact-roles.js +73 -0
  233. package/src/lib/model/deal-contact-roles.js.map +1 -0
  234. package/src/lib/model/deal-form-model.d.ts +56 -0
  235. package/src/lib/model/deal-form-model.js +79 -7
  236. package/src/lib/model/deal-form-model.js.map +1 -1
  237. package/src/lib/model/download-text-file.d.ts +23 -0
  238. package/src/lib/model/download-text-file.js +34 -0
  239. package/src/lib/model/download-text-file.js.map +1 -0
  240. package/src/lib/model/lead-filters.d.ts +36 -2
  241. package/src/lib/model/lead-filters.js +123 -2
  242. package/src/lib/model/lead-filters.js.map +1 -1
  243. package/src/lib/model/lead-source-direction.d.ts +38 -0
  244. package/src/lib/model/lead-source-direction.js +52 -0
  245. package/src/lib/model/lead-source-direction.js.map +1 -0
  246. package/src/lib/model/picklist-values.d.ts +119 -0
  247. package/src/lib/model/picklist-values.js +256 -0
  248. package/src/lib/model/picklist-values.js.map +1 -0
  249. package/src/lib/model/record-facts-disclosed.d.ts +81 -0
  250. package/src/lib/model/record-facts-disclosed.js +281 -0
  251. package/src/lib/model/record-facts-disclosed.js.map +1 -0
  252. package/src/lib/model/record-facts.d.ts +215 -34
  253. package/src/lib/model/record-facts.js +307 -128
  254. package/src/lib/model/record-facts.js.map +1 -1
  255. package/src/lib/model/task-picklists.d.ts +52 -0
  256. package/src/lib/model/task-picklists.js +83 -0
  257. package/src/lib/model/task-picklists.js.map +1 -0
  258. package/src/lib/model/task-routes.d.ts +13 -0
  259. package/src/lib/model/task-routes.js +23 -4
  260. package/src/lib/model/task-routes.js.map +1 -1
  261. package/src/lib/plan-entitlements.js +6 -4
  262. package/src/lib/plan-entitlements.js.map +1 -1
  263. package/src/lib/plugin.js +17 -0
  264. package/src/lib/plugin.js.map +1 -1
  265. package/src/lib/server/api-v1/contacts.js +220 -14
  266. package/src/lib/server/api-v1/contacts.js.map +1 -1
  267. package/src/lib/server/api-v1/crm-activities.js +14 -1
  268. package/src/lib/server/api-v1/crm-activities.js.map +1 -1
  269. package/src/lib/server/api-v1/crm-companies.js +123 -14
  270. package/src/lib/server/api-v1/crm-companies.js.map +1 -1
  271. package/src/lib/server/api-v1/crm-deals.js +291 -26
  272. package/src/lib/server/api-v1/crm-deals.js.map +1 -1
  273. package/src/lib/server/api-v1/crm-leads.js +144 -38
  274. package/src/lib/server/api-v1/crm-leads.js.map +1 -1
  275. package/src/lib/server/api-v1/crm-pipelines.d.ts +6 -0
  276. package/src/lib/server/api-v1/crm-pipelines.js +8 -2
  277. package/src/lib/server/api-v1/crm-pipelines.js.map +1 -1
  278. package/src/lib/server/api-v1/crm-tasks.js +75 -33
  279. package/src/lib/server/api-v1/crm-tasks.js.map +1 -1
  280. package/src/lib/server/api-v1/openapi.d.ts +0 -11
  281. package/src/lib/server/api-v1/openapi.js +171 -16
  282. package/src/lib/server/api-v1/openapi.js.map +1 -1
  283. package/src/lib/server/assign-contact-owner.d.ts +162 -0
  284. package/src/lib/server/assign-contact-owner.js +340 -0
  285. package/src/lib/server/assign-contact-owner.js.map +1 -0
  286. package/src/lib/server/associate-company-by-domain.d.ts +70 -0
  287. package/src/lib/server/associate-company-by-domain.js +153 -0
  288. package/src/lib/server/associate-company-by-domain.js.map +1 -0
  289. package/src/lib/server/automation-steps.d.ts +139 -0
  290. package/src/lib/server/automation-steps.js +472 -0
  291. package/src/lib/server/automation-steps.js.map +1 -0
  292. package/src/lib/server/capture-contact.js +69 -22
  293. package/src/lib/server/capture-contact.js.map +1 -1
  294. package/src/lib/server/capture-host-contact.d.ts +104 -0
  295. package/src/lib/server/capture-host-contact.js +151 -0
  296. package/src/lib/server/capture-host-contact.js.map +1 -0
  297. package/src/lib/server/company-children.d.ts +25 -0
  298. package/src/lib/server/company-children.js +42 -0
  299. package/src/lib/server/company-children.js.map +1 -0
  300. package/src/lib/server/company-delete.d.ts +18 -0
  301. package/src/lib/server/company-delete.js +44 -21
  302. package/src/lib/server/company-delete.js.map +1 -1
  303. package/src/lib/server/contact-email-history.js +21 -19
  304. package/src/lib/server/contact-email-history.js.map +1 -1
  305. package/src/lib/server/contact-remove.js +27 -2
  306. package/src/lib/server/contact-remove.js.map +1 -1
  307. package/src/lib/server/contact-reports-to.d.ts +61 -0
  308. package/src/lib/server/contact-reports-to.js +114 -0
  309. package/src/lib/server/contact-reports-to.js.map +1 -0
  310. package/src/lib/server/contact-update.d.ts +42 -1
  311. package/src/lib/server/contact-update.js +204 -23
  312. package/src/lib/server/contact-update.js.map +1 -1
  313. package/src/lib/server/convert-host-lead.d.ts +46 -1
  314. package/src/lib/server/convert-host-lead.js +173 -15
  315. package/src/lib/server/convert-host-lead.js.map +1 -1
  316. package/src/lib/server/convert-open-lead.js +12 -5
  317. package/src/lib/server/convert-open-lead.js.map +1 -1
  318. package/src/lib/server/crm-record-indexes.d.ts +45 -0
  319. package/src/lib/server/crm-record-indexes.js +78 -0
  320. package/src/lib/server/crm-record-indexes.js.map +1 -0
  321. package/src/lib/server/crm-sharing.d.ts +9 -1
  322. package/src/lib/server/crm-sharing.js +23 -3
  323. package/src/lib/server/crm-sharing.js.map +1 -1
  324. package/src/lib/server/deal-contact-roles.d.ts +27 -0
  325. package/src/lib/server/deal-contact-roles.js +89 -0
  326. package/src/lib/server/deal-contact-roles.js.map +1 -0
  327. package/src/lib/server/lead-convert.d.ts +5 -0
  328. package/src/lib/server/lead-convert.js +19 -3
  329. package/src/lib/server/lead-convert.js.map +1 -1
  330. package/src/lib/server/lead-create.d.ts +17 -2
  331. package/src/lib/server/lead-create.js +46 -14
  332. package/src/lib/server/lead-create.js.map +1 -1
  333. package/src/lib/server/lead-nurturing.d.ts +6 -0
  334. package/src/lib/server/lead-nurturing.js +57 -20
  335. package/src/lib/server/lead-nurturing.js.map +1 -1
  336. package/src/lib/server/lead-picklists.d.ts +35 -0
  337. package/src/lib/server/lead-picklists.js +52 -0
  338. package/src/lib/server/lead-picklists.js.map +1 -0
  339. package/src/lib/server/lead-source-picklist.d.ts +1 -13
  340. package/src/lib/server/lead-source-picklist.js +6 -33
  341. package/src/lib/server/lead-source-picklist.js.map +1 -1
  342. package/src/lib/server/merge-contacts.js +22 -4
  343. package/src/lib/server/merge-contacts.js.map +1 -1
  344. package/src/lib/server/person-eraser.d.ts +53 -0
  345. package/src/lib/server/person-eraser.js +149 -0
  346. package/src/lib/server/person-eraser.js.map +1 -0
  347. package/src/lib/server/person-records.d.ts +69 -0
  348. package/src/lib/server/person-records.js +317 -0
  349. package/src/lib/server/person-records.js.map +1 -0
  350. package/src/lib/server/person-refund.d.ts +97 -0
  351. package/src/lib/server/person-refund.js +221 -0
  352. package/src/lib/server/person-refund.js.map +1 -0
  353. package/src/lib/server/picklist-values.d.ts +21 -0
  354. package/src/lib/server/picklist-values.js +308 -0
  355. package/src/lib/server/picklist-values.js.map +1 -0
  356. package/src/lib/server/read-picklist.d.ts +44 -0
  357. package/src/lib/server/read-picklist.js +65 -0
  358. package/src/lib/server/read-picklist.js.map +1 -0
  359. package/src/lib/server/recipe-routes.js +15 -7
  360. package/src/lib/server/recipe-routes.js.map +1 -1
  361. package/src/lib/server/record-email-state.js +7 -1
  362. package/src/lib/server/record-email-state.js.map +1 -1
  363. package/src/lib/server/record-facts.d.ts +3 -0
  364. package/src/lib/server/record-facts.js +233 -31
  365. package/src/lib/server/record-facts.js.map +1 -1
  366. package/src/lib/server/record-origin.d.ts +27 -0
  367. package/src/lib/server/record-origin.js +104 -0
  368. package/src/lib/server/record-origin.js.map +1 -0
  369. package/src/lib/server/record-timeline.js +15 -2
  370. package/src/lib/server/record-timeline.js.map +1 -1
  371. package/src/lib/server/suite-gate.js +4 -3
  372. package/src/lib/server/suite-gate.js.map +1 -1
  373. package/src/lib/server/task-routes.js +30 -16
  374. package/src/lib/server/task-routes.js.map +1 -1
  375. package/src/lib/server-deal-stage.d.ts +5 -1
  376. package/src/lib/server-deal-stage.js +10 -5
  377. package/src/lib/server-deal-stage.js.map +1 -1
  378. package/src/lib/server.d.ts +8 -3
  379. package/src/lib/server.js +47 -43
  380. package/src/lib/server.js.map +1 -1
  381. package/src/lib/testing/memory-firestore.d.ts +55 -0
  382. package/src/lib/testing/memory-firestore.js +335 -0
  383. package/src/lib/testing/memory-firestore.js.map +1 -0
  384. package/src/lib/testing/stand-in-email-send-index.d.ts +25 -0
  385. package/src/lib/testing/stand-in-email-send-index.js +49 -0
  386. package/src/lib/testing/stand-in-email-send-index.js.map +1 -0
  387. package/src/lib/transfer/activities.d.ts +30 -0
  388. package/src/lib/transfer/activities.js +132 -0
  389. package/src/lib/transfer/activities.js.map +1 -0
  390. package/src/lib/transfer/aliases.d.ts +22 -0
  391. package/src/lib/transfer/aliases.js +1342 -0
  392. package/src/lib/transfer/aliases.js.map +1 -0
  393. package/src/lib/transfer/common.d.ts +222 -0
  394. package/src/lib/transfer/common.js +832 -0
  395. package/src/lib/transfer/common.js.map +1 -0
  396. package/src/lib/transfer/companies.d.ts +43 -0
  397. package/src/lib/transfer/companies.js +549 -0
  398. package/src/lib/transfer/companies.js.map +1 -0
  399. package/src/lib/transfer/contacts.d.ts +31 -0
  400. package/src/lib/transfer/contacts.js +727 -0
  401. package/src/lib/transfer/contacts.js.map +1 -0
  402. package/src/lib/transfer/deals.d.ts +66 -0
  403. package/src/lib/transfer/deals.js +698 -0
  404. package/src/lib/transfer/deals.js.map +1 -0
  405. package/src/lib/transfer/email-templates-package.d.ts +40 -0
  406. package/src/lib/transfer/email-templates-package.js +76 -0
  407. package/src/lib/transfer/email-templates-package.js.map +1 -0
  408. package/src/lib/transfer/email-templates-package.server.d.ts +32 -0
  409. package/src/lib/transfer/email-templates-package.server.js +176 -0
  410. package/src/lib/transfer/email-templates-package.server.js.map +1 -0
  411. package/src/lib/transfer/fields.d.ts +102 -0
  412. package/src/lib/transfer/fields.js +1755 -0
  413. package/src/lib/transfer/fields.js.map +1 -0
  414. package/src/lib/transfer/leads.d.ts +30 -0
  415. package/src/lib/transfer/leads.js +582 -0
  416. package/src/lib/transfer/leads.js.map +1 -0
  417. package/src/lib/transfer/pipelines.d.ts +21 -0
  418. package/src/lib/transfer/pipelines.js +172 -0
  419. package/src/lib/transfer/pipelines.js.map +1 -0
  420. package/src/lib/transfer/register.d.ts +47 -0
  421. package/src/lib/transfer/register.js +277 -0
  422. package/src/lib/transfer/register.js.map +1 -0
  423. package/src/lib/transfer/tasks.d.ts +30 -0
  424. package/src/lib/transfer/tasks.js +418 -0
  425. package/src/lib/transfer/tasks.js.map +1 -0
  426. package/src/lib/transfer/ui.d.ts +20 -0
  427. package/src/lib/transfer/ui.js +42 -0
  428. package/src/lib/transfer/ui.js.map +1 -0
  429. package/src/lib/components/company-import-drawer.d.ts +0 -42
  430. package/src/lib/components/company-import-drawer.js +0 -99
  431. package/src/lib/components/company-import-drawer.js.map +0 -1
  432. package/src/lib/components/contact-import-drawer.d.ts +0 -46
  433. package/src/lib/components/contact-import-drawer.js +0 -149
  434. package/src/lib/components/contact-import-drawer.js.map +0 -1
  435. package/src/lib/components/crm-export-all-button.d.ts +0 -39
  436. package/src/lib/components/crm-export-all-button.js +0 -98
  437. package/src/lib/components/crm-export-all-button.js.map +0 -1
  438. package/src/lib/components/csv-import-drawer.d.ts +0 -139
  439. package/src/lib/components/csv-import-drawer.js +0 -757
  440. package/src/lib/components/csv-import-drawer.js.map +0 -1
  441. package/src/lib/components/deal-import-drawer.d.ts +0 -24
  442. package/src/lib/components/deal-import-drawer.js +0 -83
  443. package/src/lib/components/deal-import-drawer.js.map +0 -1
  444. package/src/lib/components/lead-import-drawer.d.ts +0 -27
  445. package/src/lib/components/lead-import-drawer.js +0 -118
  446. package/src/lib/components/lead-import-drawer.js.map +0 -1
  447. package/src/lib/components/lead-source-values-card.d.ts +0 -27
  448. package/src/lib/components/lead-source-values-card.js.map +0 -1
  449. package/src/lib/components/task-import-drawer.d.ts +0 -24
  450. package/src/lib/components/task-import-drawer.js +0 -82
  451. package/src/lib/components/task-import-drawer.js.map +0 -1
  452. package/src/lib/model/companies-csv.d.ts +0 -36
  453. package/src/lib/model/companies-csv.js +0 -38
  454. package/src/lib/model/companies-csv.js.map +0 -1
  455. package/src/lib/model/contacts-csv.d.ts +0 -54
  456. package/src/lib/model/contacts-csv.js +0 -67
  457. package/src/lib/model/contacts-csv.js.map +0 -1
  458. package/src/lib/model/crm-company-import.d.ts +0 -154
  459. package/src/lib/model/crm-company-import.js +0 -331
  460. package/src/lib/model/crm-company-import.js.map +0 -1
  461. package/src/lib/model/crm-csv.d.ts +0 -239
  462. package/src/lib/model/crm-csv.js +0 -467
  463. package/src/lib/model/crm-csv.js.map +0 -1
  464. package/src/lib/model/crm-deal-import.d.ts +0 -112
  465. package/src/lib/model/crm-deal-import.js +0 -263
  466. package/src/lib/model/crm-deal-import.js.map +0 -1
  467. package/src/lib/model/crm-import.d.ts +0 -250
  468. package/src/lib/model/crm-import.js +0 -467
  469. package/src/lib/model/crm-import.js.map +0 -1
  470. package/src/lib/model/crm-lead-import.d.ts +0 -138
  471. package/src/lib/model/crm-lead-import.js +0 -446
  472. package/src/lib/model/crm-lead-import.js.map +0 -1
  473. package/src/lib/model/crm-task-import.d.ts +0 -94
  474. package/src/lib/model/crm-task-import.js +0 -275
  475. package/src/lib/model/crm-task-import.js.map +0 -1
  476. package/src/lib/model/deals-csv.d.ts +0 -32
  477. package/src/lib/model/deals-csv.js +0 -36
  478. package/src/lib/model/deals-csv.js.map +0 -1
  479. package/src/lib/model/import-column-shapes.d.ts +0 -36
  480. package/src/lib/model/import-column-shapes.js +0 -76
  481. package/src/lib/model/import-column-shapes.js.map +0 -1
  482. package/src/lib/model/lead-source-values.d.ts +0 -82
  483. package/src/lib/model/lead-source-values.js +0 -149
  484. package/src/lib/model/lead-source-values.js.map +0 -1
  485. package/src/lib/model/leads-csv.d.ts +0 -40
  486. package/src/lib/model/leads-csv.js +0 -40
  487. package/src/lib/model/leads-csv.js.map +0 -1
  488. package/src/lib/model/tasks-csv.d.ts +0 -28
  489. package/src/lib/model/tasks-csv.js +0 -28
  490. package/src/lib/model/tasks-csv.js.map +0 -1
  491. package/src/lib/server/companies-import.d.ts +0 -57
  492. package/src/lib/server/companies-import.js +0 -242
  493. package/src/lib/server/companies-import.js.map +0 -1
  494. package/src/lib/server/contacts-import.d.ts +0 -109
  495. package/src/lib/server/contacts-import.js +0 -393
  496. package/src/lib/server/contacts-import.js.map +0 -1
  497. package/src/lib/server/deals-import.d.ts +0 -76
  498. package/src/lib/server/deals-import.js +0 -248
  499. package/src/lib/server/deals-import.js.map +0 -1
  500. package/src/lib/server/export-route.d.ts +0 -60
  501. package/src/lib/server/export-route.js +0 -447
  502. package/src/lib/server/export-route.js.map +0 -1
  503. package/src/lib/server/import-context.d.ts +0 -87
  504. package/src/lib/server/import-context.js +0 -182
  505. package/src/lib/server/import-context.js.map +0 -1
  506. package/src/lib/server/lead-source-values.d.ts +0 -50
  507. package/src/lib/server/lead-source-values.js +0 -191
  508. package/src/lib/server/lead-source-values.js.map +0 -1
  509. package/src/lib/server/leads-import.d.ts +0 -84
  510. package/src/lib/server/leads-import.js +0 -367
  511. package/src/lib/server/leads-import.js.map +0 -1
  512. package/src/lib/server/tasks-import.d.ts +0 -54
  513. package/src/lib/server/tasks-import.js +0 -160
  514. package/src/lib/server/tasks-import.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../libs/plugins/crm/src/lib/transfer/companies.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 * COMPANIES ON THE TRANSFER FRAMEWORK (AGL-3527) — the server half of\n * `crm.companies`.\n *\n * Every field a company holds, its custom fields and its parent company,\n * read for an export and written by an import through the same rules the\n * companies import route kept: the scope stamp of the site that imports, the\n * records band, the org's picklists judging each label, the list's search\n * and filter keys, and a parent that is never the company itself or one\n * under it (`crmCompanyParentRefusal`).\n *\n * A row finds its company by Aglyn ID, then by domain, then by name — each\n * only among the companies the site reads, so two clients of one agency who\n * each hold an \"Acme\" each import into their own.\n *=========================================*/\n\nimport {\n CRM_COLLECTIONS,\n CRM_COMPANY_PICKLIST_FIELDS,\n type ContactFieldDefinition,\n type CrmPicklist,\n type CrmPicklistId,\n crmCompanyListFields,\n crmCompanyParentId,\n crmCompanyParentRefusal,\n crmNewRecordListFields,\n judgeCrmCompanyPicklists,\n nameSearchFields,\n normalizeCompanyDomain,\n normalizeCompanyText,\n normalizeCompanyWebsite,\n} from '@aglyn/aglyn/server'\nimport { createResourceUid } from '@aglyn/aglyn/app-utils/create-resource-uid'\nimport { nameSearchKey } from '@aglyn/aglyn/app-utils/name-search'\nimport {\n planTransferUndo,\n TRANSFER_ID_FIELD,\n transferLookupNewName,\n buildTransferPlan,\n rankTransferLookupSuggestions,\n type CurrencyAmount,\n type PlannedTransferRow,\n type TransferRowResult,\n type TransferUndoEntry,\n type TransferUndoStep,\n} from '@aglyn/aglyn/data-transfer'\nimport type { TransferRecordsHooks } from '@aglyn/aglyn/plugin-manager/plugin-transfer-resources'\nimport { restampCrmListFieldsOf } from '@aglyn/tenant-data-admin'\nimport { FieldValue } from 'firebase-admin/firestore'\nimport { deleteCrmCompany } from '../server/company-delete'\nimport { COMPANY_ALIASES } from './aliases'\nimport {\n addCrmPicklistValues,\n addressFromValues,\n addressValues,\n countCrmExport,\n creationScope,\n crmCustomDefinitions,\n crmMemberEmails,\n crmMembersTarget,\n crmPicklistLists,\n crmRecordsRoom,\n crmTransferEnv,\n type CrmTransferEnv,\n customTransferValues,\n customWriteValues,\n eachWithinBudget,\n failureMessage,\n IN_LIMIT,\n isoOf,\n lookupByField,\n lookupById,\n lookupResult,\n nameKey,\n pickValues,\n plannedValues,\n readCrmExportPage,\n requireCrmRecords,\n requireCrmSuite,\n requireSite,\n textOf,\n TransferEngineError,\n visibleIn,\n} from './common'\nimport {\n COMPANY_TRANSFER_DERIVED,\n COMPANY_TRANSFER_FIELDS,\n COMPANY_TRANSFER_GROUPS,\n CRM_MEMBERS_TARGET,\n CRM_TIMESTAMP_FIELDS,\n crmCustomTransferFields,\n} from './fields'\n\nconst companiesOf = (env: CrmTransferEnv) => env.orgRef.collection(CRM_COLLECTIONS.companies)\n\n/** The text fields stored as typed, each capped. */\nconst TEXT_FIELDS = ['accountNumber', 'site', 'tickerSymbol', 'sicCode'] as const\n\n/** A stored revenue as the file reads it: its amount and its currency. */\nfunction revenueOf(company: Record<string, unknown>): CurrencyAmount | null {\n const cents = company['annualRevenueCents']\n if (typeof cents !== 'number' || !Number.isFinite(cents)) return null\n return { amountMinor: cents, currency: String(company['currency'] || 'usd').toUpperCase() }\n}\n\n/**\n * One company as values by field id. `ids` is how a lookup and an undo\n * read it — a parent and an owner by id, so the plan compares what is\n * stored; an export writes their names instead (`names`).\n */\nexport function companyTransferValues(\n id: string,\n company: Record<string, unknown>,\n definitions: readonly ContactFieldDefinition[],\n names?: { owner: (uid: string) => string | undefined; parent: (id: string) => string | undefined },\n): Record<string, unknown> {\n const ownerUid = textOf(company['ownerUid']) || null\n const parentId = crmCompanyParentId(company['parentCompanyId'])\n const revenue = revenueOf(company)\n return {\n name: textOf(company['name']) || null,\n domain: textOf(company['domain']) || null,\n website: textOf(company['website']) || null,\n phone: textOf(company['phone']) || null,\n fax: textOf(company['fax']) || null,\n parentCompany: parentId ? (names ? (names.parent(parentId) ?? parentId) : parentId) : null,\n ...Object.fromEntries(\n CRM_COMPANY_PICKLIST_FIELDS.map(({ field }) => [field, textOf(company[field]) || null]),\n ),\n ...Object.fromEntries(TEXT_FIELDS.map((field) => [field, textOf(company[field]) || null])),\n numberOfEmployees: typeof company['numberOfEmployees'] === 'number' ? company['numberOfEmployees'] : null,\n annualRevenue: revenue\n ? names\n ? `${(revenue.amountMinor / 100).toFixed(2)} ${revenue.currency}`\n : revenue\n : null,\n ...addressValues('billing', company['address']),\n ...addressValues('shipping', company['shippingAddress']),\n owner: ownerUid ? (names ? (names.owner(ownerUid) ?? ownerUid) : ownerUid) : null,\n tags: Array.isArray(company['tags']) ? (company['tags'] as string[]) : [],\n notes: textOf(company['notes']) || null,\n contactsCount: typeof company['contactsCount'] === 'number' ? company['contactsCount'] : 0,\n createdAt: isoOf(company['createdAt']),\n updatedAt: isoOf(company['updatedAt']),\n ...customTransferValues(definitions, company['custom']),\n [TRANSFER_ID_FIELD]: id,\n }\n}\n\n/**\n * The stored fields a row's values make, over the company as it stands:\n * each field normalized the way the company drawer and the old import\n * stored it; `null` for a field the row clears.\n */\nfunction storedFieldsFor(\n values: Readonly<Record<string, unknown>>,\n current: Record<string, unknown>,\n): { fields: Record<string, unknown>; error?: string } {\n const fields: Record<string, unknown> = {}\n const set = (field: string, value: unknown) => {\n fields[field] = value === null || value === undefined || value === '' ? null : value\n }\n if ('name' in values) {\n const name = normalizeCompanyText(values['name']).slice(0, 120)\n if (!name) return { fields, error: 'A company needs a name.' }\n Object.assign(fields, nameSearchFields(name))\n }\n if ('domain' in values) {\n const text = textOf(values['domain'])\n const domain = text ? normalizeCompanyDomain(text) : null\n if (text && !domain) return { fields, error: `“${text}” is not a domain.` }\n set('domain', domain)\n }\n if ('website' in values) {\n const text = textOf(values['website'])\n const website = text ? normalizeCompanyWebsite(text) : null\n if (text && !website) return { fields, error: `“${text}” is not a web address.` }\n set('website', website)\n }\n for (const field of ['phone', 'fax'] as const) if (field in values) set(field, textOf(values[field]) || null)\n for (const field of TEXT_FIELDS) {\n if (field in values) set(field, normalizeCompanyText(values[field]) || null)\n }\n if ('numberOfEmployees' in values) set('numberOfEmployees', values['numberOfEmployees'] ?? null)\n if ('annualRevenue' in values) {\n const revenue = values['annualRevenue'] as CurrencyAmount | null\n if (revenue && typeof revenue === 'object') {\n fields['annualRevenueCents'] = revenue.amountMinor\n fields['currency'] = String(revenue.currency || 'usd').toLowerCase()\n } else {\n fields['annualRevenueCents'] = null\n }\n }\n const billing = addressFromValues('billing', values, current['address'])\n if (billing !== undefined) set('address', billing)\n const shipping = addressFromValues('shipping', values, current['shippingAddress'])\n if (shipping !== undefined) set('shippingAddress', shipping)\n if ('owner' in values) set('ownerUid', textOf(values['owner']) || null)\n if ('tags' in values) fields['tags'] = Array.isArray(values['tags']) ? values['tags'] : []\n if ('notes' in values) set('notes', textOf(values['notes']).slice(0, 4000) || null)\n return { fields }\n}\n\n/** Fields as an update writes them: a cleared field is deleted. */\nfunction asUpdate(fields: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(\n Object.entries(fields).map(([key, value]) => [key, value === null ? FieldValue.delete() : value]),\n )\n}\n\n/** Fields as a create writes them: a cleared field is simply absent. */\nfunction asCreate(fields: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(Object.entries(fields).filter(([, value]) => value !== null && value !== undefined))\n}\n\n/** The values of a chunk's companies as `companyTransferValues` reads them, by id. */\nasync function readCompanies(\n env: CrmTransferEnv,\n ids: readonly string[],\n definitions: readonly ContactFieldDefinition[],\n): Promise<Map<string, Record<string, unknown>>> {\n const out = new Map<string, Record<string, unknown>>()\n for (let at = 0; at < ids.length; at += 500) {\n const page = ids.slice(at, at + 500)\n if (!page.length) continue\n for (const snapshot of await env.firestore.getAll(...page.map((id) => companiesOf(env).doc(id)))) {\n if (snapshot.exists) out.set(snapshot.id, companyTransferValues(snapshot.id, snapshot.data() ?? {}, definitions))\n }\n }\n return out\n}\n\n/**\n * The company a name names in this site's view, or one created for it —\n * once per name per apply call, and found again (by `nameLower`) when a\n * retried chunk asks after a create that already landed. `null` when the\n * records band has no room.\n */\nexport async function companyForName(\n env: CrmTransferEnv,\n name: string,\n actorUid: string | null,\n cache: Map<string, Promise<{ id: string; name: string } | null>>,\n admit: () => Promise<boolean>,\n): Promise<{ id: string; name: string } | null> {\n const key = nameKey(name)\n let pending = cache.get(key)\n if (!pending) {\n pending = (async () => {\n const fields = nameSearchFields(normalizeCompanyText(name).slice(0, 120))\n const found = await companiesOf(env).where('nameLower', '==', fields.nameLower).limit(10).get()\n const seen = found.docs.find((doc) => visibleIn(env, doc.get('visibleTo')))\n if (seen) return { id: seen.id, name: String(seen.get('name') ?? fields.name) }\n if (!(await admit())) return null\n const scope = creationScope(env, actorUid)\n const ref = companiesOf(env).doc(createResourceUid())\n await ref.set({\n ...fields,\n tags: [],\n ...scope,\n ...crmNewRecordListFields('companies', { ...fields, ...scope }),\n })\n return { id: ref.id, name: fields.name }\n })()\n cache.set(key, pending)\n }\n return pending\n}\n\n/** The parent a row names, as an id: a chosen record, or one the import creates by name. */\nasync function parentIdFor(\n env: CrmTransferEnv,\n value: unknown,\n actorUid: string | null,\n cache: Map<string, Promise<{ id: string; name: string } | null>>,\n admit: () => Promise<boolean>,\n): Promise<string | null> {\n if (value === null || value === undefined || value === '') return null\n const create = transferLookupNewName(value)\n if (create) {\n const company = await companyForName(env, create, actorUid, cache, admit)\n if (!company) throw new TransferEngineError('invalid', 422, 'The CRM records limit has no room for the parent company.')\n return company.id\n }\n return String(value)\n}\n\n/** Why a parent cannot sit over this company, read through the site's view. */\nasync function parentRefusal(env: CrmTransferEnv, companyId: string | null, parentId: string): Promise<string | null> {\n return crmCompanyParentRefusal(companyId, parentId, async (id) => {\n const snapshot = await companiesOf(env).doc(id).get()\n if (!snapshot.exists || !visibleIn(env, snapshot.get('visibleTo'))) return null\n return { parentCompanyId: crmCompanyParentId(snapshot.get('parentCompanyId')) }\n })\n}\n\n/** The org's list behind each company picklist field. */\nasync function companyPicklists(env: CrmTransferEnv): Promise<Partial<Record<CrmPicklistId, CrmPicklist>>> {\n const ids = [...new Set(CRM_COMPANY_PICKLIST_FIELDS.map((entry) => entry.picklistId))]\n const lists = await crmPicklistLists(env, ids, [])\n return Object.fromEntries(ids.map((id) => [id, lists[id]?.set])) as Partial<Record<CrmPicklistId, CrmPicklist>>\n}\n\n/** The `crm.companies` hooks. */\nexport function companiesTransferResource(): TransferRecordsHooks {\n return {\n async fields(ctx) {\n const env = await crmTransferEnv(ctx)\n return {\n standard: COMPANY_TRANSFER_FIELDS,\n derived: COMPANY_TRANSFER_DERIVED,\n system: CRM_TIMESTAMP_FIELDS,\n custom: crmCustomTransferFields(await crmCustomDefinitions(env, 'company'), 'company'),\n groups: COMPANY_TRANSFER_GROUPS,\n }\n },\n matchKeys: [\n { fieldId: TRANSFER_ID_FIELD, normalizer: 'aglynId' },\n { fieldId: 'domain', normalizer: 'domain' },\n { fieldId: 'name', normalizer: 'caseless' },\n ],\n aliases: COMPANY_ALIASES,\n lookupTargets: { [CRM_MEMBERS_TARGET]: crmMembersTarget() },\n\n async count(ctx, options) {\n const env = await crmTransferEnv(ctx)\n requireCrmRecords(env, 'companies')\n return countCrmExport(env, companiesOf(env), options, (data) => visibleIn(env, data['visibleTo'], options.scopeTokens))\n },\n\n async readPage(ctx, cursor, fieldIds, options) {\n const env = await crmTransferEnv(ctx)\n requireCrmRecords(env, 'companies')\n const definitions = await crmCustomDefinitions(env, 'company')\n const emails = fieldIds.includes('owner') ? await crmMemberEmails(env.orgId) : new Map<string, string>()\n return readCrmExportPage(\n env,\n companiesOf(env),\n cursor,\n options,\n (data) => visibleIn(env, data['visibleTo'], options?.scopeTokens),\n async (docs) => {\n const parentIds = fieldIds.includes('parentCompany')\n ? [...new Set(docs.map((doc) => crmCompanyParentId(doc.data['parentCompanyId'])).filter((id): id is string => Boolean(id)))]\n : []\n const parents = new Map<string, string>()\n if (parentIds.length) {\n for (const snapshot of await env.firestore.getAll(...parentIds.map((id) => companiesOf(env).doc(id)))) {\n if (snapshot.exists) parents.set(snapshot.id, String(snapshot.get('name') ?? snapshot.id))\n }\n }\n return docs.map((doc) =>\n pickValues(\n companyTransferValues(doc.id, doc.data, definitions, {\n owner: (uid) => emails.get(uid),\n parent: (id) => parents.get(id),\n }),\n fieldIds,\n ),\n )\n },\n )\n },\n\n async lookup(ctx, requests) {\n const env = await crmTransferEnv(ctx)\n const definitions = await crmCustomDefinitions(env, 'company')\n const visible = (data: Record<string, unknown>) => visibleIn(env, data['visibleTo'])\n const found = { lookup: new Map<string, string[]>(), docs: new Map<string, Record<string, unknown>>() }\n for (const request of requests) {\n if (request.fieldId === TRANSFER_ID_FIELD) await lookupById(env, companiesOf(env), request, visible, found)\n else if (request.fieldId === 'domain') {\n await lookupByField(companiesOf(env), request, 'domain', (value) => normalizeCompanyDomain(value) ?? '', visible, found)\n } else if (request.fieldId === 'name') {\n await lookupByField(companiesOf(env), request, 'nameLower', (value) => nameSearchKey(value), visible, found)\n }\n }\n return lookupResult(found, (id, data) => companyTransferValues(id, data, definitions))\n },\n\n async suggest(ctx, request) {\n const env = await crmTransferEnv(ctx)\n const answer: Record<string, ReturnType<typeof rankTransferLookupSuggestions>> = {}\n for (const value of request.values) {\n // Companies whose name starts with the value's first word: a prefix\n // range on `nameLower`, the field the list's own search reads.\n const first = nameSearchKey(value).split(' ')[0] ?? ''\n if (first.length < 2) {\n answer[value] = []\n continue\n }\n const snapshot = await companiesOf(env)\n .where('nameLower', '>=', first)\n .where('nameLower', '<', `${first}`)\n .limit(IN_LIMIT)\n .get()\n const candidates = snapshot.docs\n .filter((doc) => visibleIn(env, doc.get('visibleTo')))\n .map((doc) => ({ recordId: doc.id, label: String(doc.get('name') ?? doc.id) }))\n answer[value] = rankTransferLookupSuggestions(value, candidates)\n }\n return answer\n },\n\n async picklists(ctx, ids) {\n const env = await crmTransferEnv(ctx)\n return crmPicklistLists(env, ids, await crmCustomDefinitions(env, 'company'))\n },\n\n async addPicklistValues(ctx, picklistId, values) {\n await addCrmPicklistValues(await crmTransferEnv(ctx), picklistId, values)\n },\n\n lockedRules: () => [\n {\n fieldId: 'parentCompany',\n reason: 'A company can never sit under itself or a company under it; such a parent is refused for that row.',\n },\n ],\n\n async plan(ctx, input) {\n const env = await crmTransferEnv(ctx)\n requireCrmSuite(env, 'Importing companies')\n requireSite(env, 'companies')\n return buildTransferPlan(input)\n },\n\n async apply(ctx, chunk, writer) {\n const env = await crmTransferEnv(ctx)\n requireCrmSuite(env, 'Importing companies')\n requireSite(env, 'companies')\n const definitions = await crmCustomDefinitions(env, 'company')\n const picklists = await companyPicklists(env)\n const admit = crmRecordsRoom(env)\n const created = new Map<string, Promise<{ id: string; name: string } | null>>()\n const results: TransferRowResult[] = []\n const undo: TransferUndoEntry[] = []\n const rows = chunk.rows as PlannedTransferRow[]\n\n await eachWithinBudget(rows, () => writer.timeLeftMs(), async (row) => {\n const earlier = await writer.alreadyApplied(row.index)\n if (earlier) {\n results.push(earlier)\n return\n }\n let result: TransferRowResult\n let entry: TransferUndoEntry | undefined\n try {\n const values = plannedValues(row)\n const ref = row.verdict === 'update' && row.recordId ? companiesOf(env).doc(row.recordId) : null\n const current = ref ? ((await ref.get()).data() ?? null) : {}\n if (!current) throw new TransferEngineError('notFound', 404, 'That company no longer exists.')\n const before = ref ? companyTransferValues(ref.id, current, definitions) : null\n const { fields, error } = storedFieldsFor(values, current)\n if (error) throw new TransferEngineError('invalid', 422, error)\n const requested = Object.fromEntries(\n CRM_COMPANY_PICKLIST_FIELDS.filter(({ field }) => field in values).map(({ field }) => [field, values[field] ?? null]),\n )\n const judged = judgeCrmCompanyPicklists(picklists, requested, { current, created: !ref })\n const refused = Object.entries(judged.errors)[0]\n if (refused) throw new TransferEngineError('invalid', 422, refused[1])\n for (const [field, value] of Object.entries(judged.values)) fields[field] = value ?? null\n const custom = customWriteValues(values, definitions, 'company')\n if ('error' in custom) throw new TransferEngineError('invalid', 422, custom.error)\n if ('parentCompany' in values) {\n const parentId = await parentIdFor(env, values['parentCompany'], ctx.actorUid, created, admit)\n if (parentId) {\n const refusal = await parentRefusal(env, ref?.id ?? null, parentId)\n if (refusal) throw new TransferEngineError('invalid', 422, refusal)\n }\n fields['parentCompanyId'] = parentId ?? null\n }\n\n if (ref) {\n const next = { ...current, ...fields }\n await ref.update({\n ...asUpdate(fields),\n ...Object.fromEntries(Object.entries(custom.values).map(([key, value]) => [`custom.${key}`, value])),\n ...crmCompanyListFields(next),\n updatedAt: FieldValue.serverTimestamp(),\n })\n const after = (await readCompanies(env, [ref.id], definitions)).get(ref.id) ?? {}\n const changed = row.diff.map((change) => change.fieldId)\n result = { row: row.index, outcome: 'updated', recordId: ref.id }\n entry = {\n row: row.index,\n recordId: ref.id,\n action: 'updated',\n previous: pickValues(before ?? {}, changed),\n written: pickValues(after, changed),\n }\n } else {\n if (!(await admit())) throw new TransferEngineError('invalid', 422, 'The CRM records limit is reached.')\n const scope = creationScope(env, ctx.actorUid)\n const stored = asCreate(fields)\n const createdRef = companiesOf(env).doc(createResourceUid())\n await createdRef.set({\n ...stored,\n tags: Array.isArray(stored['tags']) ? stored['tags'] : [],\n ...(Object.keys(custom.values).length ? { custom: custom.values } : {}),\n ...scope,\n ...crmNewRecordListFields('companies', { ...stored, ...scope }),\n })\n const after = (await readCompanies(env, [createdRef.id], definitions)).get(createdRef.id) ?? {}\n result = { row: row.index, outcome: 'created', recordId: createdRef.id }\n entry = {\n row: row.index,\n recordId: createdRef.id,\n action: 'created',\n written: pickValues(after, row.diff.map((change) => change.fieldId)),\n }\n }\n } catch (error) {\n result = { row: row.index, outcome: 'failed', ...(row.recordId ? { recordId: row.recordId } : {}), message: failureMessage(error) }\n entry = undefined\n }\n await writer.markApplied(result, entry)\n results.push(result)\n if (entry) undo.push(entry)\n })\n return { results, undo }\n },\n\n async revert(ctx, snapshot, decisions) {\n const env = await crmTransferEnv(ctx)\n const definitions = await crmCustomDefinitions(env, 'company')\n const done: TransferUndoStep[] = []\n const conflicts: TransferUndoStep[] = []\n const current = await readCompanies(env, snapshot.entries.map((entry) => entry.recordId), definitions)\n const touched: FirebaseFirestore.DocumentReference[] = []\n for (const entry of snapshot.entries) {\n const step = planTransferUndo(entry, current.get(entry.recordId) ?? null)\n if (step.action === 'conflict' && decisions?.[entry.recordId] !== 'revert') {\n if (decisions?.[entry.recordId] === 'keep') done.push({ action: 'nothing', recordId: entry.recordId, why: 'alreadyReverted' })\n else conflicts.push(step)\n continue\n }\n if (step.action === 'nothing') {\n done.push(step)\n continue\n }\n if (entry.action === 'created') {\n await deleteCrmCompany(env.firestore, env.orgRef, entry.recordId)\n done.push({ action: 'delete', recordId: entry.recordId })\n continue\n }\n const values = step.action === 'restore' || step.action === 'conflict' ? step.values : {}\n const ref = companiesOf(env).doc(entry.recordId)\n const stored = (await ref.get()).data() ?? {}\n const { fields } = storedFieldsFor(values, stored)\n for (const { field } of CRM_COMPANY_PICKLIST_FIELDS) {\n if (field in values) fields[field] = (values[field] as string | null) ?? null\n }\n if ('parentCompany' in values) fields['parentCompanyId'] = (values['parentCompany'] as string | null) ?? null\n for (const [fieldId, value] of Object.entries(values)) {\n if (fieldId.startsWith('custom:')) {\n const key = fieldId.slice('custom:'.length)\n const definition = definitions.find((one) => one.key === key)\n fields[`custom.${key}`] =\n definition?.type === 'date' && typeof value === 'string' ? Date.parse(value) : (value ?? null)\n }\n }\n await ref.update({\n ...asUpdate(fields),\n ...crmCompanyListFields({ ...stored, ...fields }),\n updatedAt: FieldValue.serverTimestamp(),\n })\n touched.push(ref)\n done.push(step)\n }\n if (touched.length) await restampCrmListFieldsOf(touched, 'companies').catch(() => undefined)\n return { done, conflicts }\n },\n }\n}\n"],"names":["CRM_COLLECTIONS","CRM_COMPANY_PICKLIST_FIELDS","crmCompanyListFields","crmCompanyParentId","crmCompanyParentRefusal","crmNewRecordListFields","judgeCrmCompanyPicklists","nameSearchFields","normalizeCompanyDomain","normalizeCompanyText","normalizeCompanyWebsite","createResourceUid","nameSearchKey","planTransferUndo","TRANSFER_ID_FIELD","transferLookupNewName","buildTransferPlan","rankTransferLookupSuggestions","restampCrmListFieldsOf","FieldValue","deleteCrmCompany","COMPANY_ALIASES","addCrmPicklistValues","addressFromValues","addressValues","countCrmExport","creationScope","crmCustomDefinitions","crmMemberEmails","crmMembersTarget","crmPicklistLists","crmRecordsRoom","crmTransferEnv","customTransferValues","customWriteValues","eachWithinBudget","failureMessage","IN_LIMIT","isoOf","lookupByField","lookupById","lookupResult","nameKey","pickValues","plannedValues","readCrmExportPage","requireCrmRecords","requireCrmSuite","requireSite","textOf","TransferEngineError","visibleIn","COMPANY_TRANSFER_DERIVED","COMPANY_TRANSFER_FIELDS","COMPANY_TRANSFER_GROUPS","CRM_MEMBERS_TARGET","CRM_TIMESTAMP_FIELDS","crmCustomTransferFields","companiesOf","env","orgRef","collection","companies","TEXT_FIELDS","revenueOf","company","cents","Number","isFinite","amountMinor","currency","String","toUpperCase","companyTransferValues","id","definitions","names","ownerUid","parentId","revenue","name","domain","website","phone","fax","parentCompany","parent","Object","fromEntries","map","field","numberOfEmployees","annualRevenue","toFixed","owner","tags","Array","isArray","notes","contactsCount","createdAt","updatedAt","storedFieldsFor","values","current","fields","set","value","undefined","slice","error","assign","text","toLowerCase","billing","shipping","asUpdate","entries","key","delete","asCreate","filter","readCompanies","ids","out","Map","at","length","page","snapshot","firestore","getAll","doc","exists","data","companyForName","actorUid","cache","admit","pending","get","seen","found","where","nameLower","limit","docs","find","scope","ref","parentIdFor","create","parentRefusal","companyId","parentCompanyId","companyPicklists","Set","entry","picklistId","lists","companiesTransferResource","ctx","standard","derived","system","custom","groups","matchKeys","fieldId","normalizer","aliases","lookupTargets","count","options","scopeTokens","readPage","cursor","fieldIds","emails","includes","orgId","parentIds","Boolean","parents","uid","lookup","requests","visible","request","suggest","answer","first","split","candidates","recordId","label","picklists","addPicklistValues","lockedRules","reason","plan","input","apply","chunk","writer","created","results","undo","rows","timeLeftMs","row","earlier","alreadyApplied","index","push","result","verdict","before","requested","judged","refused","errors","refusal","next","update","serverTimestamp","after","changed","diff","change","outcome","action","previous","written","stored","createdRef","keys","message","markApplied","revert","decisions","done","conflicts","touched","step","why","startsWith","definition","one","type","Date","parse","catch"],"mappings":"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"}
@@ -0,0 +1,31 @@
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 ConsentGroup, type ContactFieldDefinition } from '@aglyn/aglyn/server';
18
+ import type { TransferRecordsHooks } from '@aglyn/aglyn/plugin-manager/plugin-transfer-resources';
19
+ /** The sentence an imported person's timeline opens with. */
20
+ export declare const CONTACT_TRANSFER_INTERACTION_SUMMARY = "Imported from a file";
21
+ /**
22
+ * One contact as values by field id, read through one holder's facet. A
23
+ * lookup and an undo read links by id (`ids`), so the plan compares what is
24
+ * stored; an export writes names a file can carry back (`names`).
25
+ */
26
+ export declare function contactTransferValues(id: string, contact: Record<string, unknown>, group: ConsentGroup, definitions: readonly ContactFieldDefinition[], names?: {
27
+ owner: (uid: string) => string | undefined;
28
+ manager: (id: string) => string | undefined;
29
+ }): Record<string, unknown>;
30
+ /** The `crm.contacts` hooks. */
31
+ export declare function contactsTransferResource(): TransferRecordsHooks;