@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
@@ -1,3 +1,4 @@
1
+ import { _ as _extends } from "@swc/helpers/_/_extends";
1
2
  /**
2
3
  * @license
3
4
  * Copyright 2026 Aglyn LLC
@@ -13,39 +14,46 @@
13
14
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
15
  * See the License for the specific language governing permissions and
15
16
  * limitations under the License.
16
- */ import { CONTACT_LIFECYCLE_STAGE_LABELS, CONTACT_SOURCE_LABELS, CRM_ACTIVITY_KIND_LABELS, CRM_EMAIL_DELIVERY_STATE_LABELS, CRM_LEAD_STATUS_LABELS, CRM_TASK_KIND_LABELS, contactDisplayName, crmLeadStatus, customImportTarget, dealStageById, fieldDefinitionObject, interactionsForGroup, isContactLifecycleStage, isCrmEmailDeliveryState, readContactFacet } from "@aglyn/aglyn/server";
17
- import { COMPANY_IMPORT_FIELD_LABELS, COMPANY_IMPORT_FIELDS } from "./crm-company-import.js";
18
- import { CONTACT_IMPORT_FIELD_LABELS, CONTACT_IMPORT_FIELDS } from "./crm-import.js";
19
- import { DEAL_IMPORT_FIELD_LABELS, DEAL_IMPORT_FIELDS } from "./crm-deal-import.js";
20
- import { LEAD_IMPORT_FIELD_LABELS, LEAD_IMPORT_FIELDS } from "./crm-lead-import.js";
17
+ */ import { CONTACT_ALTERNATE_EMAILS_FIELD, CONTACT_LIFECYCLE_STAGE_LABELS, CONTACT_SOURCE_LABELS, CRM_ACTIVITY_KIND_LABELS, CRM_EMAIL_DELIVERY_STATE_LABELS, CRM_TASK_KIND_LABELS, contactDisplayName, crmLeadStatusLabel, CRM_FORECAST_CATEGORY_LABELS, crmActivityDirection, customImportTarget, DEAL_NEXT_STEP_MAX, dealContactRolesOf, dealForecastCategory, dealProbability, dealStageById, dealStageForecastCategory, fieldDefinitionObject, interactionsForGroup, isContactLifecycleStage, isCrmEmailDeliveryState, readContactFacet, readMarketingBasis } from "@aglyn/aglyn/server";
18
+ import { COMPANY_TRANSFER_FIELDS, CONTACT_TRANSFER_FIELDS, DEAL_TRANSFER_FIELDS, LEAD_TRANSFER_FIELDS } from "../transfer/fields.js";
21
19
  /**
22
20
  * WHAT THE CRM TELLS ANOTHER PLUGIN ABOUT ONE OF ITS RECORDS (AGL-2917).
23
21
  *
24
22
  * The facts a reader on the core's record-facts seam reports: one contact,
25
23
  * company, deal or lead as a person on the team sees it, and the fields a
26
24
  * spreadsheet import may fill. The server half reads the documents and
27
- * applies who may see them (`server/record-facts.ts`); this half decides
28
- * which of their fields leave the CRM at all, so the list below is the whole
29
- * of what a caller — an assistant summarizing a record, an automation
30
- * deciding on one — can pass on.
25
+ * applies who may see them (`server/record-facts.ts`); this half shapes
26
+ * them, so the list below is the whole of what a caller — an assistant
27
+ * summarizing a record, an automation deciding on one — can pass on.
31
28
  *
32
- * ## What never leaves
29
+ * ## The whole record (AGL-3520)
33
30
  *
34
- * No email address, phone number or postal address of anyone; no marketing
35
- * consent; no custom field VALUE; no team member's name or id; no document
36
- * id of any record; no file; no order or payment detail beyond a count. A
37
- * logged email carries its subject and a cut of its body, never the address
38
- * it went to or came from. An import catalog carries field keys, labels and
39
- * types, never a row of the file.
31
+ * These builders answer only for an organization with
32
+ * `release_crm_assist_whole_record` on; with it off, the readers answer
33
+ * `record-facts-disclosed.ts`, the fields the published pages promise.
34
+ * A record is reported as the CRM shows it: every standard field —
35
+ * Salesforce's included — with its email addresses, phone numbers, postal
36
+ * addresses, birthdate, assistant and reports-to; the labels of its
37
+ * picklists as the record holds them; its custom field values under their
38
+ * labels; its marketing consent; its notes, newest timeline entries and
39
+ * open tasks and deals. Text a person wrote is reported as written.
40
40
  *
41
- * Every text a person wrote into a record — a name, a job title, a tag, notes,
42
- * a logged activity, a capture's summary, a task's or a deal's title, a
43
- * reason — is reported as written, except that an email address or a phone
44
- * number inside it is replaced by a placeholder first ({@link crmFactProse}):
45
- * an import that put an address in the name column leaves no address behind.
46
- * What the workspace configured — pipeline, stage and field names — and a
47
- * company's domain are reported as they are. A postal address typed into a
48
- * note is not recognized and leaves as typed.
41
+ * ## What still never leaves
42
+ *
43
+ * No authentication token, no account identifier and no internal record
44
+ * id. A related record — the company a person works for, the contact a deal
45
+ * is with, the person someone reports to, a parent company, a campaign — is
46
+ * named by its name; a team member by their display name. The one id a
47
+ * caller is handed is a pipeline stage's, which a stage proposal must name.
48
+ * An import catalog carries field keys, labels and types, never a row of
49
+ * the file.
50
+ *
51
+ * ## Bounded
52
+ *
53
+ * Every list and every long text is cut — notes to
54
+ * {@link CRM_FACTS_NOTES_MAX}, a timeline entry to {@link CRM_FACTS_TEXT_MAX},
55
+ * at most {@link CRM_FACTS_CUSTOM_FIELDS_MAX} custom fields — so a record
56
+ * holding everything still fits the request a caller builds from it.
49
57
  *
50
58
  * ## Stable bytes
51
59
  *
@@ -73,10 +81,13 @@ export function isCrmImportFactsCollection(value) {
73
81
  /** Open tasks reported for a record. */ export const CRM_FACTS_TASKS_MAX = 8;
74
82
  /** Deals reported for a contact or a company. */ export const CRM_FACTS_DEALS_MAX = 5;
75
83
  /** Tags reported for a record. */ export const CRM_FACTS_TAGS_MAX = 10;
76
- /** How much of a logged activity's text, or a platform capture's summary, is reported. */ export const CRM_FACTS_TEXT_MAX = 280;
84
+ /** How much of a logged activity's text, a capture's summary, a task's notes or a custom value is reported. */ export const CRM_FACTS_TEXT_MAX = 280;
77
85
  /** How much of a record's notes is reported. */ export const CRM_FACTS_NOTES_MAX = 600;
78
86
  /** How long a name, a title or a subject may run. */ export const CRM_FACTS_LABEL_MAX = 120;
79
- /** Custom fields an import catalog reports. */ export const CRM_FACTS_CUSTOM_FIELDS_MAX = 40;
87
+ /** Custom fields an import catalog, or a record, reports. */ export const CRM_FACTS_CUSTOM_FIELDS_MAX = 40;
88
+ /** Products a deal's facts list. */ export const CRM_FACTS_PRODUCTS_MAX = 20;
89
+ /** Email addresses and campaigns a record's facts list. */ export const CRM_FACTS_LIST_MAX = 10;
90
+ /** The contacts a deal's facts name — the committee, not the whole list. */ export const CRM_FACTS_CONTACT_ROLES_MAX = 10;
80
91
  const DAY_MS = 86400000;
81
92
  /** A value as trimmed, single-spaced text of at most `max` characters. */ export function crmFactText(value, max) {
82
93
  if (typeof value !== 'string') return '';
@@ -102,26 +113,80 @@ const DAY_MS = 86400000;
102
113
  const code = (typeof currency === 'string' && /^[a-z]{3}$/i.test(currency) ? currency : 'usd').toUpperCase();
103
114
  return `${code} ${(cents / 100).toFixed(2)}`;
104
115
  }
105
- /** An email address written inside free text. */ const EMAIL_IN_PROSE = /[\w.+-]+@[\w-]+(?:\.[\w-]+)+/g;
106
- /** A run of digits and the separators a phone number is written with. */ const DIGIT_RUN_IN_PROSE = /\+?\(?\d[\d\s().-]{7,}\d/g;
107
- /** Calendar days, which a run of digits may be and a phone number is not. */ const DAYS_ONLY = /^\d{4}-\d{2}-\d{2}(?:\s+\d{4}-\d{2}-\d{2})*$/;
108
- export const CRM_FACTS_EMAIL_PLACEHOLDER = '[email address]';
109
- export const CRM_FACTS_PHONE_PLACEHOLDER = '[phone number]';
116
+ /** A postal address on one line, its parts in the order an envelope writes them; `''` for none. */ export function crmFactAddress(address) {
117
+ if (!address || typeof address !== 'object') return '';
118
+ const part = (value)=>crmFactText(value, CRM_FACTS_LABEL_MAX);
119
+ const cityLine = [
120
+ part(address.city),
121
+ [
122
+ part(address.state),
123
+ part(address.postalCode)
124
+ ].filter(Boolean).join(' ')
125
+ ].filter(Boolean).join(', ');
126
+ return [
127
+ part(address.line1),
128
+ part(address.line2),
129
+ cityLine,
130
+ part(address.country)
131
+ ].filter(Boolean).join(', ');
132
+ }
133
+ /** A marketing basis as a sentence's worth: opted in (and since when), declined, or nothing recorded. */ export function crmFactConsent(record, group) {
134
+ if (!group) return '';
135
+ const consent = readMarketingBasis(record, group);
136
+ if (consent.basis === 'granted') {
137
+ const since = crmFactDay(consent.basisAtMs);
138
+ return since ? `opted in on ${since}` : 'opted in';
139
+ }
140
+ return consent.basis === 'declined' ? 'declined' : 'none recorded';
141
+ }
142
+ /** A custom value as text: a day for a date, yes or no for a checkbox. */ function customValueText(value, type) {
143
+ var _crmFactDay;
144
+ if (value === null || value === undefined || value === '') return '';
145
+ if (typeof value === 'boolean') return value ? 'yes' : 'no';
146
+ if (type === 'date') return (_crmFactDay = crmFactDay(typeof value === 'string' ? Date.parse(value) : value)) != null ? _crmFactDay : crmFactText(String(value), CRM_FACTS_TEXT_MAX);
147
+ if (typeof value === 'number') return Number.isFinite(value) ? String(value) : '';
148
+ return crmFactText(String(value), CRM_FACTS_TEXT_MAX);
149
+ }
110
150
  /**
111
- * Free text the team wrote, as {@link crmFactText} reports it, with every
112
- * email address, and every run of ten digits or more that is not a list of
113
- * days, replaced by a placeholder. The fields that hold an address or a number
114
- * are never reported, and this keeps one typed into a note from leaving
115
- * either. Replaced before the cut, so a cut never halves an address into
116
- * something unrecognized.
117
- */ export function crmFactProse(value, max) {
118
- if (typeof value !== 'string') return '';
119
- const scrubbed = value.replace(EMAIL_IN_PROSE, CRM_FACTS_EMAIL_PLACEHOLDER).replace(DIGIT_RUN_IN_PROSE, (run)=>DAYS_ONLY.test(run.trim()) || run.replace(/\D/g, '').length < 10 ? run : CRM_FACTS_PHONE_PLACEHOLDER);
120
- return crmFactText(scrubbed, max);
151
+ * A record's custom values under their fields' labels, in the fields'
152
+ * order — the active fields of `object` first, then a value whose field was
153
+ * retired or never defined, under its key.
154
+ */ export function crmCustomFacts(custom, object, definitions = []) {
155
+ if (!custom || typeof custom !== 'object' || Array.isArray(custom)) return [];
156
+ const values = custom;
157
+ const own = definitions.filter((field)=>field.key && fieldDefinitionObject(field) === object).sort((a, b)=>{
158
+ var _a_order, _b_order;
159
+ return Number(Boolean(a.retiredAt)) - Number(Boolean(b.retiredAt)) || Number((_a_order = a.order) != null ? _a_order : 0) - Number((_b_order = b.order) != null ? _b_order : 0) || String(a.key).localeCompare(String(b.key));
160
+ });
161
+ const facts = [];
162
+ const seen = new Set();
163
+ for (const field of own){
164
+ const key = String(field.key);
165
+ seen.add(key);
166
+ const value = customValueText(values[key], field.type);
167
+ if (value) facts.push({
168
+ label: crmFactText(field.label, CRM_FACTS_LABEL_MAX) || key,
169
+ value
170
+ });
171
+ }
172
+ for (const key of Object.keys(values).sort()){
173
+ if (seen.has(key)) continue;
174
+ const value = customValueText(values[key], undefined);
175
+ if (value) facts.push({
176
+ label: key,
177
+ value
178
+ });
179
+ }
180
+ return facts.slice(0, CRM_FACTS_CUSTOM_FIELDS_MAX);
121
181
  }
122
182
  function tagsOf(value) {
123
- return Array.isArray(value) ? value.map((tag)=>crmFactProse(tag, 40)).filter(Boolean).slice(0, CRM_FACTS_TAGS_MAX) : [];
183
+ return Array.isArray(value) ? value.map((tag)=>crmFactText(tag, 40)).filter(Boolean).slice(0, CRM_FACTS_TAGS_MAX) : [];
124
184
  }
185
+ const memberName = (names, uid)=>{
186
+ var _ref;
187
+ var _names_member;
188
+ return typeof uid === 'string' && uid ? crmFactText((_ref = names == null ? void 0 : (_names_member = names.member) == null ? void 0 : _names_member.call(names, uid)) != null ? _ref : '', CRM_FACTS_LABEL_MAX) : '';
189
+ };
125
190
  /** A logged activity as a timeline entry. */ export function crmActivityFact(activity) {
126
191
  var _activity_subject;
127
192
  const on = crmFactDay(activity.atMs);
@@ -131,14 +196,17 @@ function tagsOf(value) {
131
196
  on,
132
197
  kind: CRM_ACTIVITY_KIND_LABELS[kind]
133
198
  };
134
- if (kind === 'email' && (activity.direction === 'outbound' || activity.direction === 'inbound')) {
135
- fact.direction = activity.direction;
136
- }
137
- const subject = crmFactProse((_activity_subject = activity.subject) != null ? _activity_subject : activity.threadSubject, CRM_FACTS_LABEL_MAX);
199
+ const direction = crmActivityDirection(kind, activity.direction);
200
+ if (direction) fact.direction = direction;
201
+ const from = crmFactText(activity.from, CRM_FACTS_LABEL_MAX);
202
+ if (from) fact.from = from;
203
+ const to = crmFactText(activity.to, CRM_FACTS_LABEL_MAX);
204
+ if (to) fact.to = to;
205
+ const subject = crmFactText((_activity_subject = activity.subject) != null ? _activity_subject : activity.threadSubject, CRM_FACTS_LABEL_MAX);
138
206
  if (subject) fact.subject = subject;
139
- const text = crmFactProse(activity.body, CRM_FACTS_TEXT_MAX);
207
+ const text = crmFactText(activity.body, CRM_FACTS_TEXT_MAX);
140
208
  if (text) fact.text = text;
141
- const outcome = crmFactProse(activity.outcome, CRM_FACTS_LABEL_MAX);
209
+ const outcome = crmFactText(activity.outcome, CRM_FACTS_LABEL_MAX);
142
210
  if (outcome) fact.outcome = outcome;
143
211
  if (kind === 'email' && isCrmEmailDeliveryState(activity.deliveryState)) {
144
212
  fact.delivery = CRM_EMAIL_DELIVERY_STATE_LABELS[activity.deliveryState];
@@ -149,7 +217,7 @@ function tagsOf(value) {
149
217
  const on = crmFactDay(interaction.atMs);
150
218
  if (!on) return null;
151
219
  const kind = interaction.type && CONTACT_SOURCE_LABELS[interaction.type] ? CONTACT_SOURCE_LABELS[interaction.type] : 'Capture';
152
- const text = crmFactProse(interaction.summary, CRM_FACTS_TEXT_MAX);
220
+ const text = crmFactText(interaction.summary, CRM_FACTS_TEXT_MAX);
153
221
  return text ? {
154
222
  on,
155
223
  kind,
@@ -173,7 +241,7 @@ function tagsOf(value) {
173
241
  };
174
242
  }).filter((entry)=>entry.fact !== null).sort((a, b)=>b.at - a.at || a.index - b.index).slice(0, CRM_FACTS_TIMELINE_MAX).map((entry)=>entry.fact);
175
243
  }
176
- /** The open tasks among `tasks`, soonest due first, undated last. */ export function crmOpenTaskFacts(tasks, nowMs) {
244
+ /** The open tasks among `tasks`, soonest due first, undated last. */ export function crmOpenTaskFacts(tasks, nowMs, names) {
177
245
  return tasks.filter((task)=>task.status !== 'done' && crmFactText(task.title, CRM_FACTS_LABEL_MAX)).map((task, index)=>({
178
246
  task,
179
247
  index,
@@ -181,20 +249,31 @@ function tagsOf(value) {
181
249
  })).sort((a, b)=>{
182
250
  var _a_due, _b_due;
183
251
  return ((_a_due = a.due) != null ? _a_due : Number.POSITIVE_INFINITY) - ((_b_due = b.due) != null ? _b_due : Number.POSITIVE_INFINITY) || a.index - b.index;
184
- }).slice(0, CRM_FACTS_TASKS_MAX).map(({ task, due })=>({
185
- title: crmFactProse(task.title, CRM_FACTS_LABEL_MAX),
186
- kind: task.kind && CRM_TASK_KIND_LABELS[task.kind] ? CRM_TASK_KIND_LABELS[task.kind] : 'To-do',
187
- priority: task.priority === 'high' || task.priority === 'low' ? task.priority : 'normal',
252
+ }).slice(0, CRM_FACTS_TASKS_MAX).map(({ task, due })=>{
253
+ const assignee = memberName(names, task.assigneeUid);
254
+ const notes = crmFactText(task.notes, CRM_FACTS_TEXT_MAX);
255
+ return _extends({
256
+ title: crmFactText(task.title, CRM_FACTS_LABEL_MAX),
257
+ kind: crmFactText(task.typeLabel, CRM_FACTS_LABEL_MAX) || (task.kind && CRM_TASK_KIND_LABELS[task.kind] ? CRM_TASK_KIND_LABELS[task.kind] : 'To-do'),
258
+ priority: task.priority === 'high' || task.priority === 'low' ? task.priority : 'normal'
259
+ }, crmFactText(task.statusLabel, CRM_FACTS_LABEL_MAX) ? {
260
+ status: crmFactText(task.statusLabel, CRM_FACTS_LABEL_MAX)
261
+ } : {}, {
188
262
  due: due === null ? null : crmFactDay(due),
189
263
  // Overdue by the UTC day: a task due today is not overdue until tomorrow.
190
264
  overdue: due !== null && Math.floor(due / DAY_MS) < Math.floor(nowMs / DAY_MS)
191
- }));
265
+ }, assignee ? {
266
+ assignee
267
+ } : {}, notes ? {
268
+ notes
269
+ } : {});
270
+ });
192
271
  }
193
272
  /** One deal, with its stage named by the pipeline it is in. */ export function crmDealFact(deal, pipeline) {
194
273
  var _deal_stageId;
195
274
  const stage = dealStageById(pipeline != null ? pipeline : undefined, String((_deal_stageId = deal.stageId) != null ? _deal_stageId : ''));
196
275
  return {
197
- title: crmFactProse(deal.title, CRM_FACTS_LABEL_MAX),
276
+ title: crmFactText(deal.title, CRM_FACTS_LABEL_MAX),
198
277
  stage: crmFactText(stage == null ? void 0 : stage.name, CRM_FACTS_LABEL_MAX),
199
278
  status: deal.status === 'won' || deal.status === 'lost' ? deal.status : 'open',
200
279
  amount: crmFactMoney(deal.amountCents, deal.currency),
@@ -214,21 +293,49 @@ function tagsOf(value) {
214
293
  return crmDealFact(deal, pipelines.get(String((_deal_pipelineId = deal.pipelineId) != null ? _deal_pipelineId : '')));
215
294
  });
216
295
  }
296
+ const label = (value)=>crmFactText(value, CRM_FACTS_LABEL_MAX);
217
297
  export function contactFacts(input) {
218
- var _facet_sources;
219
- const { row, group } = input;
298
+ var _facet_sources, _facet_phone;
299
+ const { row, group, names } = input;
220
300
  const facet = readContactFacet(row, group.groupId);
221
301
  const sources = Object.entries((_facet_sources = facet.sources) != null ? _facet_sources : {}).filter(([, on])=>on === true).map(([source])=>{
222
302
  var _CONTACT_SOURCE_LABELS_source;
223
303
  return (_CONTACT_SOURCE_LABELS_source = CONTACT_SOURCE_LABELS[source]) != null ? _CONTACT_SOURCE_LABELS_source : '';
224
304
  }).filter(Boolean);
225
305
  const interactions = interactionsForGroup(facet.interactions, group.hostIds);
306
+ const alternates = Array.isArray(row[CONTACT_ALTERNATE_EMAILS_FIELD]) ? row[CONTACT_ALTERNATE_EMAILS_FIELD] : [];
307
+ const emails = [
308
+ ...new Set([
309
+ row['email'],
310
+ ...alternates
311
+ ].map(label).filter(Boolean))
312
+ ].slice(0, CRM_FACTS_LIST_MAX);
226
313
  return {
227
314
  record: 'contact',
228
- name: crmFactProse(contactDisplayName(row, group.groupId), CRM_FACTS_LABEL_MAX),
229
- jobTitle: crmFactProse(facet.jobTitle, CRM_FACTS_LABEL_MAX),
230
- company: crmFactProse(facet.companyName, CRM_FACTS_LABEL_MAX),
315
+ name: label(contactDisplayName(row, group.groupId)),
316
+ salutation: label(facet.salutation),
317
+ firstName: label(facet.firstName),
318
+ lastName: label(facet.lastName),
319
+ emails,
320
+ phone: label((_facet_phone = facet.phone) != null ? _facet_phone : row['phone']),
321
+ mobilePhone: label(facet.mobilePhone),
322
+ homePhone: label(facet.homePhone),
323
+ otherPhone: label(facet.otherPhone),
324
+ fax: label(facet.fax),
325
+ jobTitle: label(facet.jobTitle),
326
+ department: label(facet.department),
327
+ birthdate: label(facet.birthdate),
328
+ assistant: label(facet.assistantName),
329
+ assistantPhone: label(facet.assistantPhone),
330
+ reportsTo: label(input.reportsToName),
331
+ mailingAddress: crmFactAddress(facet.address),
332
+ otherAddress: crmFactAddress(facet.otherAddress),
333
+ doNotCall: facet.doNotCall === true,
334
+ company: label(facet.companyName),
231
335
  lifecycleStage: isContactLifecycleStage(facet.lifecycleStage) ? CONTACT_LIFECYCLE_STAGE_LABELS[facet.lifecycleStage] : '',
336
+ leadSource: label(facet.leadSource),
337
+ owner: memberName(names, facet.ownerUid),
338
+ marketingConsent: crmFactConsent(row, group),
232
339
  tags: tagsOf(facet.tags),
233
340
  sources: [
234
341
  ...new Set(sources)
@@ -237,7 +344,8 @@ export function contactFacts(input) {
237
344
  lastPurchase: crmFactDay(facet.lastPurchaseAtMs),
238
345
  since: crmFactDay(row['createdAt']),
239
346
  lastEmailEngagement: crmFactDay(facet.lastEmailEngagementAtMs),
240
- notes: crmFactProse(facet.notes, CRM_FACTS_NOTES_MAX),
347
+ custom: crmCustomFacts(facet.custom, 'contact', names == null ? void 0 : names.customFields),
348
+ notes: crmFactText(facet.notes, CRM_FACTS_NOTES_MAX),
241
349
  timeline: crmTimelineFacts([
242
350
  ...input.activities.map((activity)=>({
243
351
  atMs: activity.atMs,
@@ -248,32 +356,50 @@ export function contactFacts(input) {
248
356
  fact: crmInteractionFact(interaction)
249
357
  }))
250
358
  ]),
251
- openTasks: crmOpenTaskFacts(input.tasks, input.nowMs),
359
+ openTasks: crmOpenTaskFacts(input.tasks, input.nowMs, names),
252
360
  deals: crmDealFacts(input.deals, input.pipelines)
253
361
  };
254
362
  }
255
363
  export function companyFacts(input) {
256
- const { company } = input;
364
+ const { company, names } = input;
257
365
  return {
258
366
  record: 'company',
259
- name: crmFactProse(company.name, CRM_FACTS_LABEL_MAX),
260
- domain: crmFactText(company.domain, CRM_FACTS_LABEL_MAX),
261
- industry: crmFactProse(company.industry, CRM_FACTS_LABEL_MAX),
367
+ name: label(company.name),
368
+ domain: label(company.domain),
369
+ website: label(company.website),
370
+ phone: label(company.phone),
371
+ fax: label(company.fax),
372
+ industry: label(company.industry),
373
+ type: label(company.type),
374
+ rating: label(company.rating),
375
+ ownership: label(company.ownership),
376
+ accountSource: label(company.accountSource),
377
+ employees: typeof company.numberOfEmployees === 'number' && company.numberOfEmployees >= 0 ? Math.floor(company.numberOfEmployees) : null,
378
+ annualRevenue: crmFactMoney(company.annualRevenueCents, company.currency),
379
+ accountNumber: label(company.accountNumber),
380
+ site: label(company.site),
381
+ tickerSymbol: label(company.tickerSymbol),
382
+ sicCode: label(company.sicCode),
383
+ billingAddress: crmFactAddress(company.address),
384
+ shippingAddress: crmFactAddress(company.shippingAddress),
385
+ parentCompany: label(input.parentCompanyName),
386
+ owner: memberName(names, company.ownerUid),
262
387
  tags: tagsOf(company.tags),
263
388
  people: typeof company.contactsCount === 'number' && company.contactsCount > 0 ? Math.floor(company.contactsCount) : 0,
264
389
  since: crmFactDay(company.createdAt),
265
- notes: crmFactProse(company.notes, CRM_FACTS_NOTES_MAX),
390
+ custom: crmCustomFacts(company.custom, 'company', names == null ? void 0 : names.customFields),
391
+ notes: crmFactText(company.notes, CRM_FACTS_NOTES_MAX),
266
392
  timeline: crmTimelineFacts(input.activities.map((activity)=>({
267
393
  atMs: activity.atMs,
268
394
  fact: crmActivityFact(activity)
269
395
  }))),
270
- openTasks: crmOpenTaskFacts(input.tasks, input.nowMs),
396
+ openTasks: crmOpenTaskFacts(input.tasks, input.nowMs, names),
271
397
  deals: crmDealFacts(input.deals, input.pipelines)
272
398
  };
273
399
  }
274
400
  export function dealFacts(input) {
275
- var _ref, _deal_stageId;
276
- const { deal, pipeline } = input;
401
+ var _ref, _deal_stageId, _deal_stageId1;
402
+ const { deal, pipeline, names } = input;
277
403
  const summary = crmDealFact(deal, pipeline);
278
404
  const stages = [
279
405
  ...(_ref = pipeline == null ? void 0 : pipeline.stages) != null ? _ref : []
@@ -283,33 +409,64 @@ export function dealFacts(input) {
283
409
  }).map((stage)=>({
284
410
  id: String(stage.id),
285
411
  name: crmFactText(stage.name, CRM_FACTS_LABEL_MAX),
286
- kind: stage.kind === 'won' || stage.kind === 'lost' ? stage.kind : 'open'
412
+ kind: stage.kind === 'won' || stage.kind === 'lost' ? stage.kind : 'open',
413
+ probability: Math.min(100, Math.max(0, Number(stage.probability) || 0)),
414
+ forecastCategory: CRM_FORECAST_CATEGORY_LABELS[dealStageForecastCategory(stage)]
287
415
  }));
416
+ const stage = dealStageById(pipeline != null ? pipeline : undefined, String((_deal_stageId = deal.stageId) != null ? _deal_stageId : ''));
417
+ const products = (Array.isArray(deal.lineItems) ? deal.lineItems : []).slice(0, CRM_FACTS_PRODUCTS_MAX).map((item)=>{
418
+ var _ref;
419
+ return {
420
+ name: label(item == null ? void 0 : item.name),
421
+ quantity: Number(item == null ? void 0 : item.quantity) || 0,
422
+ unitAmount: crmFactMoney(item == null ? void 0 : item.unitAmountCents, (_ref = item == null ? void 0 : item.currency) != null ? _ref : deal.currency)
423
+ };
424
+ });
288
425
  return {
289
426
  record: 'deal',
290
427
  title: summary.title,
291
428
  pipeline: crmFactText(pipeline == null ? void 0 : pipeline.name, CRM_FACTS_LABEL_MAX),
292
429
  stages,
293
- stageId: String((_deal_stageId = deal.stageId) != null ? _deal_stageId : ''),
430
+ stageId: String((_deal_stageId1 = deal.stageId) != null ? _deal_stageId1 : ''),
294
431
  stage: summary.stage,
295
432
  status: summary.status,
296
433
  amount: summary.amount,
297
434
  expectedClose: summary.expectedClose,
298
435
  inStageSince: crmFactDay(deal.stageChangedAtMs),
299
- lostReason: crmFactProse(deal.lostReason, CRM_FACTS_LABEL_MAX),
300
- contact: crmFactProse(deal.contactName, CRM_FACTS_LABEL_MAX),
301
- company: crmFactProse(deal.companyName, CRM_FACTS_LABEL_MAX),
302
- products: Array.isArray(deal.lineItems) ? deal.lineItems.length : 0,
436
+ lostReason: label(deal.lostReason),
437
+ type: label(deal.type),
438
+ leadSource: label(deal.leadSource),
439
+ nextStep: crmFactText(deal.nextStep, DEAL_NEXT_STEP_MAX),
440
+ probability: dealProbability(deal, stage),
441
+ forecastCategory: CRM_FORECAST_CATEGORY_LABELS[dealForecastCategory(deal, stage)],
442
+ campaign: label(input.campaignName),
443
+ contact: label(deal.contactName),
444
+ contactRoles: dealContactRoleFacts(deal, input.contactNames),
445
+ company: label(deal.companyName),
446
+ owner: memberName(names, deal.ownerUid),
447
+ products,
303
448
  since: crmFactDay(deal.createdAt),
304
- notes: crmFactProse(deal.notes, CRM_FACTS_NOTES_MAX),
449
+ custom: crmCustomFacts(deal.custom, 'deal', names == null ? void 0 : names.customFields),
450
+ notes: crmFactText(deal.notes, CRM_FACTS_NOTES_MAX),
305
451
  timeline: crmTimelineFacts(input.activities.map((activity)=>({
306
452
  atMs: activity.atMs,
307
453
  fact: crmActivityFact(activity)
308
454
  }))),
309
- openTasks: crmOpenTaskFacts(input.tasks, input.nowMs)
455
+ openTasks: crmOpenTaskFacts(input.tasks, input.nowMs, names)
310
456
  };
311
457
  }
312
- /** What a lead's capture surfaces are called, the lead history card's words. */ function leadSourceFact(source) {
458
+ /**
459
+ * A deal's contact roles as facts (AGL-3521): the Primary first, each by the
460
+ * name the reader resolved — a contact the reader may not see, or could
461
+ * not read, is left out rather than named by id.
462
+ */ export function dealContactRoleFacts(deal, names = new Map()) {
463
+ return dealContactRolesOf(deal).sort((a, b)=>Number(b.primary) - Number(a.primary)).filter((row)=>names.has(row.contactId)).slice(0, CRM_FACTS_CONTACT_ROLES_MAX).map((row)=>({
464
+ name: label(names.get(row.contactId)),
465
+ role: crmFactText(row.role, CRM_FACTS_LABEL_MAX),
466
+ primary: row.primary
467
+ }));
468
+ }
469
+ /** What a lead's capture surfaces are called, the lead history card's words. */ export function leadSourceFact(source) {
313
470
  if (source === 'signup') return 'Sign-up';
314
471
  if (source === 'booking') return 'Booking';
315
472
  if (source === 'import') return CONTACT_SOURCE_LABELS.import;
@@ -317,15 +474,37 @@ export function dealFacts(input) {
317
474
  return 'Other';
318
475
  }
319
476
  export function leadFacts(input) {
320
- const { lead } = input;
477
+ var _input_campaignNames, _input_tasks, _input_nowMs;
478
+ const { lead, leadStatuses, names } = input;
321
479
  const rawSources = Array.isArray(lead['sources']) ? lead['sources'] : typeof lead['source'] === 'string' ? [
322
480
  lead['source']
323
481
  ] : [];
324
482
  const captures = Number(lead['submissionCount']);
325
483
  return {
326
484
  record: 'lead',
327
- name: crmFactProse(lead['name'], CRM_FACTS_LABEL_MAX),
328
- status: CRM_LEAD_STATUS_LABELS[crmLeadStatus(lead)],
485
+ name: label(lead['name']),
486
+ salutation: label(lead['salutation']),
487
+ firstName: label(lead['firstName']),
488
+ lastName: label(lead['lastName']),
489
+ email: label(lead['email']),
490
+ phone: label(lead['phone']),
491
+ mobilePhone: label(lead['mobilePhone']),
492
+ fax: label(lead['fax']),
493
+ website: label(lead['website']),
494
+ address: crmFactAddress(lead['address']),
495
+ company: label(lead['company']),
496
+ jobTitle: label(lead['jobTitle']),
497
+ leadSource: label(lead['leadSource']),
498
+ industry: label(lead['industry']),
499
+ rating: label(lead['rating']),
500
+ employees: typeof lead['numberOfEmployees'] === 'number' && lead['numberOfEmployees'] >= 0 ? Math.floor(lead['numberOfEmployees']) : null,
501
+ annualRevenue: crmFactMoney(lead['annualRevenueCents'], lead['currency']),
502
+ doNotCall: lead['doNotCall'] === true,
503
+ status: crmLeadStatusLabel(lead, leadStatuses),
504
+ owner: memberName(names, lead['ownerUid']),
505
+ campaigns: ((_input_campaignNames = input.campaignNames) != null ? _input_campaignNames : []).map(label).filter(Boolean).slice(0, CRM_FACTS_LIST_MAX),
506
+ marketingConsent: crmFactConsent(lead, input.group),
507
+ tags: tagsOf(lead['tags']),
329
508
  sources: [
330
509
  ...new Set(rawSources.map((source)=>leadSourceFact(String(source))))
331
510
  ].sort(),
@@ -334,59 +513,59 @@ export function leadFacts(input) {
334
513
  lastSeen: crmFactDay(lead['lastSeenAtMs']),
335
514
  assigned: typeof lead['ownerUid'] === 'string' && lead['ownerUid'] !== '',
336
515
  converted: typeof lead['convertedContactId'] === 'string' && lead['convertedContactId'] !== '',
337
- unqualifiedReason: crmFactProse(lead['unqualifiedReason'], CRM_FACTS_LABEL_MAX),
338
- notes: crmFactProse(lead['notes'], CRM_FACTS_NOTES_MAX),
516
+ unqualifiedReason: label(lead['unqualifiedReason']),
517
+ custom: crmCustomFacts(lead['custom'], 'lead', names == null ? void 0 : names.customFields),
518
+ notes: crmFactText(lead['notes'], CRM_FACTS_NOTES_MAX),
339
519
  timeline: crmTimelineFacts(input.activities.map((activity)=>({
340
520
  atMs: activity.atMs,
341
521
  fact: crmActivityFact(activity)
342
- })))
522
+ }))),
523
+ openTasks: crmOpenTaskFacts((_input_tasks = input.tasks) != null ? _input_tasks : [], (_input_nowMs = input.nowMs) != null ? _input_nowMs : Date.now(), names)
524
+ };
525
+ }
526
+ /** A column's kind, as the matcher is told it, for each transfer field type. */ const TRANSFER_TYPES = {
527
+ email: 'email',
528
+ phone: 'phone',
529
+ url: 'url',
530
+ number: 'number',
531
+ integer: 'number',
532
+ currency: 'number',
533
+ percent: 'number',
534
+ date: 'date',
535
+ datetime: 'date',
536
+ boolean: 'yes-no'
537
+ };
538
+ /** The fields a transfer catalog lets a file write, as the import facts list them. */ function transferImportFields(fields) {
539
+ var _ref;
540
+ var _writable_find;
541
+ const writable = fields.filter((field)=>!field.readOnly && !field.derived && !field.system);
542
+ return {
543
+ keys: writable.map((field)=>field.id),
544
+ labels: Object.fromEntries(writable.map((field)=>[
545
+ field.id,
546
+ field.label
547
+ ])),
548
+ required: (_ref = (_writable_find = writable.find((field)=>field.required)) == null ? void 0 : _writable_find.id) != null ? _ref : '',
549
+ types: Object.fromEntries(writable.flatMap((field)=>TRANSFER_TYPES[field.type] ? [
550
+ [
551
+ field.id,
552
+ TRANSFER_TYPES[field.type]
553
+ ]
554
+ ] : []))
343
555
  };
344
556
  }
345
557
  /** The standard fields of each import, with the type a column must hold for each. */ const STANDARD_IMPORT_FIELDS = {
346
- contacts: {
347
- keys: CONTACT_IMPORT_FIELDS,
348
- labels: CONTACT_IMPORT_FIELD_LABELS,
349
- required: 'email',
350
- types: {
351
- email: 'email',
352
- phone: 'phone',
353
- ownerEmail: 'email',
354
- marketingConsent: 'yes-no'
355
- }
356
- },
357
- companies: {
358
- keys: COMPANY_IMPORT_FIELDS,
359
- labels: COMPANY_IMPORT_FIELD_LABELS,
360
- required: 'name',
361
- types: {
362
- phone: 'phone',
363
- ownerEmail: 'email',
364
- website: 'url'
365
- }
366
- },
367
- deals: {
368
- keys: DEAL_IMPORT_FIELDS,
369
- labels: DEAL_IMPORT_FIELD_LABELS,
370
- required: 'title',
371
- types: {
372
- amount: 'number',
373
- ownerEmail: 'email',
374
- expectedClose: 'date'
375
- }
376
- },
377
- leads: {
378
- keys: LEAD_IMPORT_FIELDS,
379
- labels: LEAD_IMPORT_FIELD_LABELS,
380
- required: 'email',
381
- types: {
382
- email: 'email',
383
- ownerEmail: 'email'
384
- }
385
- }
558
+ // The transfer catalogs' own ids (AGL-3527): what the import wizard maps to.
559
+ contacts: transferImportFields(CONTACT_TRANSFER_FIELDS),
560
+ companies: transferImportFields(COMPANY_TRANSFER_FIELDS),
561
+ deals: transferImportFields(DEAL_TRANSFER_FIELDS),
562
+ leads: transferImportFields(LEAD_TRANSFER_FIELDS)
386
563
  };
387
- /** The object a collection's custom fields describe; leads and deals import none. */ const CUSTOM_FIELD_OBJECT = {
564
+ /** The object a collection's custom fields describe. */ const CUSTOM_FIELD_OBJECT = {
388
565
  contacts: 'contact',
389
- companies: 'company'
566
+ companies: 'company',
567
+ deals: 'deal',
568
+ leads: 'lead'
390
569
  };
391
570
  const CUSTOM_FIELD_TYPES = {
392
571
  number: 'number',