@aglyn/plugins-crm 1.0.0-beta.221 → 1.0.0-beta.223
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.
- package/README.md +2 -1
- package/package.json +13 -13
- package/src/lib/components/activity-list.js +12 -5
- package/src/lib/components/activity-list.js.map +1 -1
- package/src/lib/components/companies-bulk-bar.d.ts +1 -4
- package/src/lib/components/companies-bulk-bar.js +7 -20
- package/src/lib/components/companies-bulk-bar.js.map +1 -1
- package/src/lib/components/companies-section.d.ts +3 -3
- package/src/lib/components/companies-section.js +149 -46
- package/src/lib/components/companies-section.js.map +1 -1
- package/src/lib/components/company-edit-drawer.js +281 -20
- package/src/lib/components/company-edit-drawer.js.map +1 -1
- package/src/lib/components/company-properties-card.js +99 -8
- package/src/lib/components/company-properties-card.js.map +1 -1
- package/src/lib/components/contact-detail-page.js +3 -1
- package/src/lib/components/contact-detail-page.js.map +1 -1
- package/src/lib/components/contact-merge-dialog.js +33 -10
- package/src/lib/components/contact-merge-dialog.js.map +1 -1
- package/src/lib/components/contact-properties-card.d.ts +0 -69
- package/src/lib/components/contact-properties-card.js +350 -60
- package/src/lib/components/contact-properties-card.js.map +1 -1
- package/src/lib/components/contact-reports-to-field.d.ts +46 -0
- package/src/lib/components/contact-reports-to-field.js +67 -0
- package/src/lib/components/contact-reports-to-field.js.map +1 -0
- package/src/lib/components/contacts-bulk-bar.d.ts +1 -8
- package/src/lib/components/contacts-bulk-bar.js +7 -19
- package/src/lib/components/contacts-bulk-bar.js.map +1 -1
- package/src/lib/components/contacts-section.js +46 -33
- package/src/lib/components/contacts-section.js.map +1 -1
- package/src/lib/components/crm-call-actions.d.ts +10 -0
- package/src/lib/components/crm-call-actions.js +26 -9
- package/src/lib/components/crm-call-actions.js.map +1 -1
- package/src/lib/components/crm-next-activity-column.js +1 -1
- package/src/lib/components/crm-next-activity-column.js.map +1 -1
- package/src/lib/components/crm-record-picker.d.ts +15 -0
- package/src/lib/components/crm-record-picker.js +16 -10
- package/src/lib/components/crm-record-picker.js.map +1 -1
- package/src/lib/components/crm-transfer-buttons.d.ts +54 -0
- package/src/lib/components/crm-transfer-buttons.js +167 -0
- package/src/lib/components/crm-transfer-buttons.js.map +1 -0
- package/src/lib/components/deal-contact-roles-card.d.ts +46 -0
- package/src/lib/components/deal-contact-roles-card.js +368 -0
- package/src/lib/components/deal-contact-roles-card.js.map +1 -0
- package/src/lib/components/deal-detail-page.d.ts +3 -2
- package/src/lib/components/deal-detail-page.js +25 -6
- package/src/lib/components/deal-detail-page.js.map +1 -1
- package/src/lib/components/deal-edit-drawer.d.ts +10 -0
- package/src/lib/components/deal-edit-drawer.js +219 -10
- package/src/lib/components/deal-edit-drawer.js.map +1 -1
- package/src/lib/components/deal-properties-card.d.ts +7 -0
- package/src/lib/components/deal-properties-card.js +34 -3
- package/src/lib/components/deal-properties-card.js.map +1 -1
- package/src/lib/components/deal-stage-card.d.ts +4 -0
- package/src/lib/components/deal-stage-card.js +10 -2
- package/src/lib/components/deal-stage-card.js.map +1 -1
- package/src/lib/components/deals-bulk-bar.d.ts +0 -3
- package/src/lib/components/deals-bulk-bar.js +7 -20
- package/src/lib/components/deals-bulk-bar.js.map +1 -1
- package/src/lib/components/deals-section.d.ts +3 -3
- package/src/lib/components/deals-section.js +123 -63
- package/src/lib/components/deals-section.js.map +1 -1
- package/src/lib/components/fields-section.js +31 -17
- package/src/lib/components/fields-section.js.map +1 -1
- package/src/lib/components/lead-convert-dialog.d.ts +4 -0
- package/src/lib/components/lead-convert-dialog.js +23 -1
- package/src/lib/components/lead-convert-dialog.js.map +1 -1
- package/src/lib/components/lead-detail-page.js +8 -2
- package/src/lib/components/lead-detail-page.js.map +1 -1
- package/src/lib/components/lead-profile-fields.d.ts +71 -0
- package/src/lib/components/lead-profile-fields.js +386 -0
- package/src/lib/components/lead-profile-fields.js.map +1 -0
- package/src/lib/components/lead-properties-card.d.ts +2 -1
- package/src/lib/components/lead-properties-card.js +85 -176
- package/src/lib/components/lead-properties-card.js.map +1 -1
- package/src/lib/components/lead-source-select.d.ts +4 -23
- package/src/lib/components/lead-source-select.js +9 -73
- package/src/lib/components/lead-source-select.js.map +1 -1
- package/src/lib/components/lead-status-chip.d.ts +9 -3
- package/src/lib/components/lead-status-chip.js +8 -4
- package/src/lib/components/lead-status-chip.js.map +1 -1
- package/src/lib/components/lead-status-options.d.ts +20 -0
- package/src/lib/components/lead-status-options.js +51 -0
- package/src/lib/components/lead-status-options.js.map +1 -0
- package/src/lib/components/lead-unqualify-dialog.d.ts +5 -0
- package/src/lib/components/lead-unqualify-dialog.js +50 -18
- package/src/lib/components/lead-unqualify-dialog.js.map +1 -1
- package/src/lib/components/leads-bulk-bar.d.ts +0 -3
- package/src/lib/components/leads-bulk-bar.js +29 -29
- package/src/lib/components/leads-bulk-bar.js.map +1 -1
- package/src/lib/components/leads-section.js +120 -68
- package/src/lib/components/leads-section.js.map +1 -1
- package/src/lib/components/linked-deals-card.d.ts +4 -0
- package/src/lib/components/linked-deals-card.js +47 -3
- package/src/lib/components/linked-deals-card.js.map +1 -1
- package/src/lib/components/log-activity-dialog.js +43 -3
- package/src/lib/components/log-activity-dialog.js.map +1 -1
- package/src/lib/components/new-contact-drawer.d.ts +8 -0
- package/src/lib/components/new-contact-drawer.js +108 -6
- package/src/lib/components/new-contact-drawer.js.map +1 -1
- package/src/lib/components/new-lead-drawer.d.ts +9 -2
- package/src/lib/components/new-lead-drawer.js +88 -121
- package/src/lib/components/new-lead-drawer.js.map +1 -1
- package/src/lib/components/picklist-select.d.ts +36 -0
- package/src/lib/components/picklist-select.js +114 -0
- package/src/lib/components/picklist-select.js.map +1 -0
- package/src/lib/components/picklist-values-card.d.ts +34 -0
- package/src/lib/components/{lead-source-values-card.js → picklist-values-card.js} +241 -58
- package/src/lib/components/picklist-values-card.js.map +1 -0
- package/src/lib/components/pipeline-stages-dialog.d.ts +7 -0
- package/src/lib/components/pipeline-stages-dialog.js +26 -4
- package/src/lib/components/pipeline-stages-dialog.js.map +1 -1
- package/src/lib/components/pipelines-dialog.js +15 -6
- package/src/lib/components/pipelines-dialog.js.map +1 -1
- package/src/lib/components/recent-activity-feed.js +20 -5
- package/src/lib/components/recent-activity-feed.js.map +1 -1
- package/src/lib/components/recipes-card.js +4 -2
- package/src/lib/components/recipes-card.js.map +1 -1
- package/src/lib/components/record-tasks-card.js +15 -8
- package/src/lib/components/record-tasks-card.js.map +1 -1
- package/src/lib/components/reports/forecast-card.d.ts +6 -0
- package/src/lib/components/reports/forecast-card.js +101 -3
- package/src/lib/components/reports/forecast-card.js.map +1 -1
- package/src/lib/components/reports/lead-funnel-card.d.ts +12 -0
- package/src/lib/components/reports/lead-funnel-card.js +9 -5
- package/src/lib/components/reports/lead-funnel-card.js.map +1 -1
- package/src/lib/components/reports/lead-source-card.d.ts +23 -0
- package/src/lib/components/reports/lead-source-card.js +318 -0
- package/src/lib/components/reports/lead-source-card.js.map +1 -0
- package/src/lib/components/reports/pipeline-card.js +2 -1
- package/src/lib/components/reports/pipeline-card.js.map +1 -1
- package/src/lib/components/reports/report-export.js +1 -1
- package/src/lib/components/reports/report-export.js.map +1 -1
- package/src/lib/components/reports-section.js +8 -0
- package/src/lib/components/reports-section.js.map +1 -1
- package/src/lib/components/sharing-rule-drawer.d.ts +5 -0
- package/src/lib/components/sharing-rule-drawer.js +108 -19
- package/src/lib/components/sharing-rule-drawer.js.map +1 -1
- package/src/lib/components/sharing-rules-card.js +11 -3
- package/src/lib/components/sharing-rules-card.js.map +1 -1
- package/src/lib/components/task-cells.d.ts +9 -1
- package/src/lib/components/task-cells.js +9 -4
- package/src/lib/components/task-cells.js.map +1 -1
- package/src/lib/components/task-edit-drawer.js +111 -43
- package/src/lib/components/task-edit-drawer.js.map +1 -1
- package/src/lib/components/tasks-bulk-bar.d.ts +0 -3
- package/src/lib/components/tasks-bulk-bar.js +7 -20
- package/src/lib/components/tasks-bulk-bar.js.map +1 -1
- package/src/lib/components/tasks-calendar.d.ts +3 -0
- package/src/lib/components/tasks-calendar.js +8 -1
- package/src/lib/components/tasks-calendar.js.map +1 -1
- package/src/lib/components/tasks-section.d.ts +3 -3
- package/src/lib/components/tasks-section.js +58 -43
- package/src/lib/components/tasks-section.js.map +1 -1
- package/src/lib/constants/api-routes.d.ts +2 -9
- package/src/lib/constants/api-routes.js +1 -7
- package/src/lib/constants/api-routes.js.map +1 -1
- package/src/lib/constants/bundle-common.d.ts +6 -0
- package/src/lib/constants/bundle-common.js +11 -0
- package/src/lib/constants/bundle-common.js.map +1 -1
- package/src/lib/constants/company-filters.d.ts +14 -0
- package/src/lib/constants/company-filters.js +51 -1
- package/src/lib/constants/company-filters.js.map +1 -1
- package/src/lib/constants/contact-filters.d.ts +2 -0
- package/src/lib/constants/contact-filters.js +18 -1
- package/src/lib/constants/contact-filters.js.map +1 -1
- package/src/lib/constants/deal-filters.d.ts +22 -1
- package/src/lib/constants/deal-filters.js +67 -4
- package/src/lib/constants/deal-filters.js.map +1 -1
- package/src/lib/declarations.console-server.d.ts +3 -0
- package/src/lib/declarations.console-server.js +35 -0
- package/src/lib/declarations.console-server.js.map +1 -1
- package/src/lib/declarations.d.ts +26 -0
- package/src/lib/declarations.js +35 -0
- package/src/lib/declarations.js.map +1 -0
- package/src/lib/declarations.server.d.ts +11 -0
- package/src/lib/declarations.server.js +97 -1
- package/src/lib/declarations.server.js.map +1 -1
- package/src/lib/hooks/use-company-picklists.d.ts +15 -0
- package/src/lib/hooks/use-company-picklists.js +55 -0
- package/src/lib/hooks/use-company-picklists.js.map +1 -0
- package/src/lib/hooks/use-crm-picklist.d.ts +25 -0
- package/src/lib/hooks/use-crm-picklist.js +53 -0
- package/src/lib/hooks/use-crm-picklist.js.map +1 -0
- package/src/lib/hooks/use-crm-record-names.d.ts +16 -0
- package/src/lib/hooks/use-crm-record-names.js +45 -19
- package/src/lib/hooks/use-crm-record-names.js.map +1 -1
- package/src/lib/hooks/use-crm-task-picklists.d.ts +11 -0
- package/src/lib/hooks/use-crm-task-picklists.js +45 -0
- package/src/lib/hooks/use-crm-task-picklists.js.map +1 -0
- package/src/lib/hooks/use-deals.d.ts +14 -0
- package/src/lib/hooks/use-deals.js +29 -0
- package/src/lib/hooks/use-deals.js.map +1 -1
- package/src/lib/hooks/use-lead-picklists.d.ts +14 -0
- package/src/lib/hooks/use-lead-picklists.js +46 -0
- package/src/lib/hooks/use-lead-picklists.js.map +1 -0
- package/src/lib/hooks/use-lead-source-picklist.d.ts +5 -19
- package/src/lib/hooks/use-lead-source-picklist.js +12 -22
- package/src/lib/hooks/use-lead-source-picklist.js.map +1 -1
- package/src/lib/hooks/use-lead-status-picklist.d.ts +9 -0
- package/src/lib/hooks/use-lead-status-picklist.js +40 -0
- package/src/lib/hooks/use-lead-status-picklist.js.map +1 -0
- package/src/lib/model/companies.d.ts +32 -3
- package/src/lib/model/companies.js +133 -16
- package/src/lib/model/companies.js.map +1 -1
- package/src/lib/model/contact-merge.d.ts +27 -3
- package/src/lib/model/contact-merge.js +81 -7
- package/src/lib/model/contact-merge.js.map +1 -1
- package/src/lib/model/contact-record.d.ts +17 -0
- package/src/lib/model/contact-record.js +17 -2
- package/src/lib/model/contact-record.js.map +1 -1
- package/src/lib/model/contact-update.d.ts +31 -2
- package/src/lib/model/contact-update.js +14 -0
- package/src/lib/model/contact-update.js.map +1 -1
- package/src/lib/model/crm-list-query.d.ts +5 -0
- package/src/lib/model/crm-list-query.js +8 -0
- package/src/lib/model/crm-list-query.js.map +1 -1
- package/src/lib/model/crm-next-activity.d.ts +107 -0
- package/src/lib/model/crm-next-activity.js +140 -0
- package/src/lib/model/crm-next-activity.js.map +1 -0
- package/src/lib/model/crm-recipes.d.ts +40 -0
- package/src/lib/model/crm-recipes.js +259 -0
- package/src/lib/model/crm-recipes.js.map +1 -0
- package/src/lib/model/crm-record-counts.d.ts +36 -0
- package/src/lib/model/crm-record-counts.js +54 -0
- package/src/lib/model/crm-record-counts.js.map +1 -0
- package/src/lib/model/crm-record-lists.d.ts +23 -0
- package/src/lib/model/crm-record-lists.js +161 -0
- package/src/lib/model/crm-record-lists.js.map +1 -0
- package/src/lib/model/crm-reports.d.ts +73 -3
- package/src/lib/model/crm-reports.js +120 -1
- package/src/lib/model/crm-reports.js.map +1 -1
- package/src/lib/model/crm-sharing.d.ts +21 -3
- package/src/lib/model/crm-sharing.js +27 -6
- package/src/lib/model/crm-sharing.js.map +1 -1
- package/src/lib/model/crm-task-reminders.d.ts +152 -0
- package/src/lib/model/crm-task-reminders.js +161 -0
- package/src/lib/model/crm-task-reminders.js.map +1 -0
- package/src/lib/model/deal-board-model.d.ts +8 -2
- package/src/lib/model/deal-board-model.js +15 -2
- package/src/lib/model/deal-board-model.js.map +1 -1
- package/src/lib/model/deal-contact-roles.d.ts +45 -0
- package/src/lib/model/deal-contact-roles.js +73 -0
- package/src/lib/model/deal-contact-roles.js.map +1 -0
- package/src/lib/model/deal-form-model.d.ts +56 -0
- package/src/lib/model/deal-form-model.js +79 -7
- package/src/lib/model/deal-form-model.js.map +1 -1
- package/src/lib/model/download-text-file.d.ts +23 -0
- package/src/lib/model/download-text-file.js +34 -0
- package/src/lib/model/download-text-file.js.map +1 -0
- package/src/lib/model/lead-filters.d.ts +36 -2
- package/src/lib/model/lead-filters.js +123 -2
- package/src/lib/model/lead-filters.js.map +1 -1
- package/src/lib/model/lead-source-direction.d.ts +38 -0
- package/src/lib/model/lead-source-direction.js +52 -0
- package/src/lib/model/lead-source-direction.js.map +1 -0
- package/src/lib/model/next-activity.d.ts +1 -1
- package/src/lib/model/next-activity.js.map +1 -1
- package/src/lib/model/picklist-values.d.ts +119 -0
- package/src/lib/model/picklist-values.js +256 -0
- package/src/lib/model/picklist-values.js.map +1 -0
- package/src/lib/model/record-facts-disclosed.d.ts +81 -0
- package/src/lib/model/record-facts-disclosed.js +281 -0
- package/src/lib/model/record-facts-disclosed.js.map +1 -0
- package/src/lib/model/record-facts.d.ts +215 -34
- package/src/lib/model/record-facts.js +307 -128
- package/src/lib/model/record-facts.js.map +1 -1
- package/src/lib/model/task-picklists.d.ts +52 -0
- package/src/lib/model/task-picklists.js +83 -0
- package/src/lib/model/task-picklists.js.map +1 -0
- package/src/lib/model/task-routes.d.ts +13 -0
- package/src/lib/model/task-routes.js +23 -4
- package/src/lib/model/task-routes.js.map +1 -1
- package/src/lib/plan-entitlements.js +6 -4
- package/src/lib/plan-entitlements.js.map +1 -1
- package/src/lib/plugin.js +17 -0
- package/src/lib/plugin.js.map +1 -1
- package/src/lib/server/api-v1/contacts.js +220 -14
- package/src/lib/server/api-v1/contacts.js.map +1 -1
- package/src/lib/server/api-v1/crm-activities.js +14 -1
- package/src/lib/server/api-v1/crm-activities.js.map +1 -1
- package/src/lib/server/api-v1/crm-companies.js +123 -14
- package/src/lib/server/api-v1/crm-companies.js.map +1 -1
- package/src/lib/server/api-v1/crm-deals.js +291 -26
- package/src/lib/server/api-v1/crm-deals.js.map +1 -1
- package/src/lib/server/api-v1/crm-leads.js +144 -38
- package/src/lib/server/api-v1/crm-leads.js.map +1 -1
- package/src/lib/server/api-v1/crm-pipelines.d.ts +6 -0
- package/src/lib/server/api-v1/crm-pipelines.js +8 -2
- package/src/lib/server/api-v1/crm-pipelines.js.map +1 -1
- package/src/lib/server/api-v1/crm-tasks.js +78 -34
- package/src/lib/server/api-v1/crm-tasks.js.map +1 -1
- package/src/lib/server/api-v1/openapi.d.ts +0 -11
- package/src/lib/server/api-v1/openapi.js +171 -16
- package/src/lib/server/api-v1/openapi.js.map +1 -1
- package/src/lib/server/assign-contact-owner.d.ts +188 -0
- package/src/lib/server/assign-contact-owner.js +446 -0
- package/src/lib/server/assign-contact-owner.js.map +1 -0
- package/src/lib/server/associate-company-by-domain.d.ts +70 -0
- package/src/lib/server/associate-company-by-domain.js +153 -0
- package/src/lib/server/associate-company-by-domain.js.map +1 -0
- package/src/lib/server/automation-steps.d.ts +140 -0
- package/src/lib/server/automation-steps.js +669 -0
- package/src/lib/server/automation-steps.js.map +1 -0
- package/src/lib/server/capture-contact.d.ts +17 -0
- package/src/lib/server/capture-contact.js +95 -26
- package/src/lib/server/capture-contact.js.map +1 -1
- package/src/lib/server/capture-host-contact.d.ts +104 -0
- package/src/lib/server/capture-host-contact.js +151 -0
- package/src/lib/server/capture-host-contact.js.map +1 -0
- package/src/lib/server/company-children.d.ts +25 -0
- package/src/lib/server/company-children.js +42 -0
- package/src/lib/server/company-children.js.map +1 -0
- package/src/lib/server/company-delete.d.ts +18 -0
- package/src/lib/server/company-delete.js +44 -21
- package/src/lib/server/company-delete.js.map +1 -1
- package/src/lib/server/contact-email-history.js +21 -19
- package/src/lib/server/contact-email-history.js.map +1 -1
- package/src/lib/server/contact-remove.js +27 -2
- package/src/lib/server/contact-remove.js.map +1 -1
- package/src/lib/server/contact-reports-to.d.ts +61 -0
- package/src/lib/server/contact-reports-to.js +114 -0
- package/src/lib/server/contact-reports-to.js.map +1 -0
- package/src/lib/server/contact-update.d.ts +42 -1
- package/src/lib/server/contact-update.js +204 -23
- package/src/lib/server/contact-update.js.map +1 -1
- package/src/lib/server/convert-host-lead.d.ts +46 -1
- package/src/lib/server/convert-host-lead.js +173 -15
- package/src/lib/server/convert-host-lead.js.map +1 -1
- package/src/lib/server/convert-open-lead.js +12 -5
- package/src/lib/server/convert-open-lead.js.map +1 -1
- package/src/lib/server/crm-email-activity.d.ts +118 -0
- package/src/lib/server/crm-email-activity.js +148 -0
- package/src/lib/server/crm-email-activity.js.map +1 -0
- package/src/lib/server/crm-inbound-email.js +1 -1
- package/src/lib/server/crm-inbound-email.js.map +1 -1
- package/src/lib/server/crm-next-activity.d.ts +74 -0
- package/src/lib/server/crm-next-activity.js +194 -0
- package/src/lib/server/crm-next-activity.js.map +1 -0
- package/src/lib/server/crm-record-indexes.d.ts +45 -0
- package/src/lib/server/crm-record-indexes.js +78 -0
- package/src/lib/server/crm-record-indexes.js.map +1 -0
- package/src/lib/server/crm-sharing.d.ts +9 -1
- package/src/lib/server/crm-sharing.js +23 -3
- package/src/lib/server/crm-sharing.js.map +1 -1
- package/src/lib/server/deal-contact-roles.d.ts +27 -0
- package/src/lib/server/deal-contact-roles.js +89 -0
- package/src/lib/server/deal-contact-roles.js.map +1 -0
- package/src/lib/server/email-send.js +2 -1
- package/src/lib/server/email-send.js.map +1 -1
- package/src/lib/server/lead-convert.d.ts +5 -0
- package/src/lib/server/lead-convert.js +19 -3
- package/src/lib/server/lead-convert.js.map +1 -1
- package/src/lib/server/lead-create.d.ts +17 -2
- package/src/lib/server/lead-create.js +46 -14
- package/src/lib/server/lead-create.js.map +1 -1
- package/src/lib/server/lead-nurturing.d.ts +6 -0
- package/src/lib/server/lead-nurturing.js +57 -20
- package/src/lib/server/lead-nurturing.js.map +1 -1
- package/src/lib/server/lead-picklists.d.ts +35 -0
- package/src/lib/server/lead-picklists.js +52 -0
- package/src/lib/server/lead-picklists.js.map +1 -0
- package/src/lib/server/lead-source-picklist.d.ts +1 -13
- package/src/lib/server/lead-source-picklist.js +6 -33
- package/src/lib/server/lead-source-picklist.js.map +1 -1
- package/src/lib/server/merge-contacts.js +23 -5
- package/src/lib/server/merge-contacts.js.map +1 -1
- package/src/lib/server/next-activity-routes.js +2 -1
- package/src/lib/server/next-activity-routes.js.map +1 -1
- package/src/lib/server/person-eraser.d.ts +53 -0
- package/src/lib/server/person-eraser.js +149 -0
- package/src/lib/server/person-eraser.js.map +1 -0
- package/src/lib/server/person-records.d.ts +69 -0
- package/src/lib/server/person-records.js +317 -0
- package/src/lib/server/person-records.js.map +1 -0
- package/src/lib/server/person-refund.d.ts +97 -0
- package/src/lib/server/person-refund.js +221 -0
- package/src/lib/server/person-refund.js.map +1 -0
- package/src/lib/server/picklist-values.d.ts +21 -0
- package/src/lib/server/picklist-values.js +308 -0
- package/src/lib/server/picklist-values.js.map +1 -0
- package/src/lib/server/read-picklist.d.ts +44 -0
- package/src/lib/server/read-picklist.js +65 -0
- package/src/lib/server/read-picklist.js.map +1 -0
- package/src/lib/server/recipe-routes.js +22 -8
- package/src/lib/server/recipe-routes.js.map +1 -1
- package/src/lib/server/record-email-state.js +7 -1
- package/src/lib/server/record-email-state.js.map +1 -1
- package/src/lib/server/record-facts.d.ts +3 -0
- package/src/lib/server/record-facts.js +233 -31
- package/src/lib/server/record-facts.js.map +1 -1
- package/src/lib/server/record-origin.d.ts +27 -0
- package/src/lib/server/record-origin.js +104 -0
- package/src/lib/server/record-origin.js.map +1 -0
- package/src/lib/server/record-timeline.js +40 -3
- package/src/lib/server/record-timeline.js.map +1 -1
- package/src/lib/server/suite-gate.js +4 -3
- package/src/lib/server/suite-gate.js.map +1 -1
- package/src/lib/server/task-reminders-route.js +2 -1
- package/src/lib/server/task-reminders-route.js.map +1 -1
- package/src/lib/server/task-routes.js +33 -17
- package/src/lib/server/task-routes.js.map +1 -1
- package/src/lib/server-deal-stage.d.ts +5 -1
- package/src/lib/server-deal-stage.js +10 -5
- package/src/lib/server-deal-stage.js.map +1 -1
- package/src/lib/server.d.ts +8 -3
- package/src/lib/server.js +47 -43
- package/src/lib/server.js.map +1 -1
- package/src/lib/testing/memory-firestore.d.ts +55 -0
- package/src/lib/testing/memory-firestore.js +335 -0
- package/src/lib/testing/memory-firestore.js.map +1 -0
- package/src/lib/testing/stand-in-email-send-index.d.ts +25 -0
- package/src/lib/testing/stand-in-email-send-index.js +49 -0
- package/src/lib/testing/stand-in-email-send-index.js.map +1 -0
- package/src/lib/transfer/activities.d.ts +30 -0
- package/src/lib/transfer/activities.js +132 -0
- package/src/lib/transfer/activities.js.map +1 -0
- package/src/lib/transfer/aliases.d.ts +22 -0
- package/src/lib/transfer/aliases.js +1342 -0
- package/src/lib/transfer/aliases.js.map +1 -0
- package/src/lib/transfer/common.d.ts +222 -0
- package/src/lib/transfer/common.js +832 -0
- package/src/lib/transfer/common.js.map +1 -0
- package/src/lib/transfer/companies.d.ts +43 -0
- package/src/lib/transfer/companies.js +549 -0
- package/src/lib/transfer/companies.js.map +1 -0
- package/src/lib/transfer/contacts.d.ts +31 -0
- package/src/lib/transfer/contacts.js +727 -0
- package/src/lib/transfer/contacts.js.map +1 -0
- package/src/lib/transfer/deals.d.ts +66 -0
- package/src/lib/transfer/deals.js +698 -0
- package/src/lib/transfer/deals.js.map +1 -0
- package/src/lib/transfer/email-templates-package.d.ts +40 -0
- package/src/lib/transfer/email-templates-package.js +76 -0
- package/src/lib/transfer/email-templates-package.js.map +1 -0
- package/src/lib/transfer/email-templates-package.server.d.ts +32 -0
- package/src/lib/transfer/email-templates-package.server.js +176 -0
- package/src/lib/transfer/email-templates-package.server.js.map +1 -0
- package/src/lib/transfer/fields.d.ts +102 -0
- package/src/lib/transfer/fields.js +1755 -0
- package/src/lib/transfer/fields.js.map +1 -0
- package/src/lib/transfer/leads.d.ts +30 -0
- package/src/lib/transfer/leads.js +582 -0
- package/src/lib/transfer/leads.js.map +1 -0
- package/src/lib/transfer/pipelines.d.ts +21 -0
- package/src/lib/transfer/pipelines.js +172 -0
- package/src/lib/transfer/pipelines.js.map +1 -0
- package/src/lib/transfer/register.d.ts +47 -0
- package/src/lib/transfer/register.js +277 -0
- package/src/lib/transfer/register.js.map +1 -0
- package/src/lib/transfer/tasks.d.ts +30 -0
- package/src/lib/transfer/tasks.js +418 -0
- package/src/lib/transfer/tasks.js.map +1 -0
- package/src/lib/transfer/ui.d.ts +20 -0
- package/src/lib/transfer/ui.js +42 -0
- package/src/lib/transfer/ui.js.map +1 -0
- package/src/lib/components/company-import-drawer.d.ts +0 -42
- package/src/lib/components/company-import-drawer.js +0 -99
- package/src/lib/components/company-import-drawer.js.map +0 -1
- package/src/lib/components/contact-import-drawer.d.ts +0 -46
- package/src/lib/components/contact-import-drawer.js +0 -149
- package/src/lib/components/contact-import-drawer.js.map +0 -1
- package/src/lib/components/crm-export-all-button.d.ts +0 -39
- package/src/lib/components/crm-export-all-button.js +0 -98
- package/src/lib/components/crm-export-all-button.js.map +0 -1
- package/src/lib/components/csv-import-drawer.d.ts +0 -139
- package/src/lib/components/csv-import-drawer.js +0 -757
- package/src/lib/components/csv-import-drawer.js.map +0 -1
- package/src/lib/components/deal-import-drawer.d.ts +0 -24
- package/src/lib/components/deal-import-drawer.js +0 -83
- package/src/lib/components/deal-import-drawer.js.map +0 -1
- package/src/lib/components/lead-import-drawer.d.ts +0 -27
- package/src/lib/components/lead-import-drawer.js +0 -118
- package/src/lib/components/lead-import-drawer.js.map +0 -1
- package/src/lib/components/lead-source-values-card.d.ts +0 -27
- package/src/lib/components/lead-source-values-card.js.map +0 -1
- package/src/lib/components/task-import-drawer.d.ts +0 -24
- package/src/lib/components/task-import-drawer.js +0 -82
- package/src/lib/components/task-import-drawer.js.map +0 -1
- package/src/lib/model/companies-csv.d.ts +0 -36
- package/src/lib/model/companies-csv.js +0 -38
- package/src/lib/model/companies-csv.js.map +0 -1
- package/src/lib/model/contacts-csv.d.ts +0 -54
- package/src/lib/model/contacts-csv.js +0 -67
- package/src/lib/model/contacts-csv.js.map +0 -1
- package/src/lib/model/crm-company-import.d.ts +0 -154
- package/src/lib/model/crm-company-import.js +0 -331
- package/src/lib/model/crm-company-import.js.map +0 -1
- package/src/lib/model/crm-csv.d.ts +0 -239
- package/src/lib/model/crm-csv.js +0 -467
- package/src/lib/model/crm-csv.js.map +0 -1
- package/src/lib/model/crm-deal-import.d.ts +0 -112
- package/src/lib/model/crm-deal-import.js +0 -263
- package/src/lib/model/crm-deal-import.js.map +0 -1
- package/src/lib/model/crm-import.d.ts +0 -250
- package/src/lib/model/crm-import.js +0 -467
- package/src/lib/model/crm-import.js.map +0 -1
- package/src/lib/model/crm-lead-import.d.ts +0 -138
- package/src/lib/model/crm-lead-import.js +0 -446
- package/src/lib/model/crm-lead-import.js.map +0 -1
- package/src/lib/model/crm-task-import.d.ts +0 -94
- package/src/lib/model/crm-task-import.js +0 -275
- package/src/lib/model/crm-task-import.js.map +0 -1
- package/src/lib/model/deals-csv.d.ts +0 -32
- package/src/lib/model/deals-csv.js +0 -36
- package/src/lib/model/deals-csv.js.map +0 -1
- package/src/lib/model/import-column-shapes.d.ts +0 -36
- package/src/lib/model/import-column-shapes.js +0 -76
- package/src/lib/model/import-column-shapes.js.map +0 -1
- package/src/lib/model/lead-source-values.d.ts +0 -82
- package/src/lib/model/lead-source-values.js +0 -149
- package/src/lib/model/lead-source-values.js.map +0 -1
- package/src/lib/model/leads-csv.d.ts +0 -40
- package/src/lib/model/leads-csv.js +0 -40
- package/src/lib/model/leads-csv.js.map +0 -1
- package/src/lib/model/tasks-csv.d.ts +0 -28
- package/src/lib/model/tasks-csv.js +0 -28
- package/src/lib/model/tasks-csv.js.map +0 -1
- package/src/lib/server/companies-import.d.ts +0 -57
- package/src/lib/server/companies-import.js +0 -242
- package/src/lib/server/companies-import.js.map +0 -1
- package/src/lib/server/contacts-import.d.ts +0 -109
- package/src/lib/server/contacts-import.js +0 -393
- package/src/lib/server/contacts-import.js.map +0 -1
- package/src/lib/server/deals-import.d.ts +0 -76
- package/src/lib/server/deals-import.js +0 -248
- package/src/lib/server/deals-import.js.map +0 -1
- package/src/lib/server/export-route.d.ts +0 -60
- package/src/lib/server/export-route.js +0 -447
- package/src/lib/server/export-route.js.map +0 -1
- package/src/lib/server/import-context.d.ts +0 -87
- package/src/lib/server/import-context.js +0 -182
- package/src/lib/server/import-context.js.map +0 -1
- package/src/lib/server/lead-source-values.d.ts +0 -50
- package/src/lib/server/lead-source-values.js +0 -191
- package/src/lib/server/lead-source-values.js.map +0 -1
- package/src/lib/server/leads-import.d.ts +0 -84
- package/src/lib/server/leads-import.js +0 -367
- package/src/lib/server/leads-import.js.map +0 -1
- package/src/lib/server/tasks-import.d.ts +0 -54
- package/src/lib/server/tasks-import.js +0 -160
- 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;
|