@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
|
@@ -25,7 +25,10 @@ import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
|
25
25
|
* the customer-facing contract, as the platform's own resources are; each
|
|
26
26
|
* write body lists its handler's own writable set. `api-v1-openapi.spec.ts`
|
|
27
27
|
* holds the document to every endpoint the documentation promises.
|
|
28
|
-
*/
|
|
28
|
+
*/ /** How a company picklist field reads in the description (AGL-3514). */ function companyPicklistNote(label, plural) {
|
|
29
|
+
return `${label}: one of the organization's active ${plural} (CRM › Fields › Companies), matched ` + 'without regard to case. Any other value is refused with a 400 naming the values allowed; ' + 'the value a company already holds is kept even after it is deactivated.';
|
|
30
|
+
}
|
|
31
|
+
export const CRM_API_V1_DESCRIPTIONS = {
|
|
29
32
|
contacts: {
|
|
30
33
|
tag: 'Contacts',
|
|
31
34
|
description: 'People, organization-wide. Part of the CRM, which is included from Starter.',
|
|
@@ -50,7 +53,23 @@ import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
|
50
53
|
'address',
|
|
51
54
|
'ownerUid',
|
|
52
55
|
'lifecycleStage',
|
|
53
|
-
'mediaIds'
|
|
56
|
+
'mediaIds',
|
|
57
|
+
'leadSource',
|
|
58
|
+
// Salesforce's standard contact fields (AGL-3515).
|
|
59
|
+
'salutation',
|
|
60
|
+
'firstName',
|
|
61
|
+
'lastName',
|
|
62
|
+
'department',
|
|
63
|
+
'mobilePhone',
|
|
64
|
+
'homePhone',
|
|
65
|
+
'otherPhone',
|
|
66
|
+
'fax',
|
|
67
|
+
'birthdate',
|
|
68
|
+
'assistantName',
|
|
69
|
+
'assistantPhone',
|
|
70
|
+
'reportsToContactId',
|
|
71
|
+
'otherAddress',
|
|
72
|
+
'doNotCall'
|
|
54
73
|
],
|
|
55
74
|
writeOnly: {
|
|
56
75
|
consentSiteId: stringField('The site this write is made on behalf of: where the person opted in, and whose profile the profile fields land on.'),
|
|
@@ -75,6 +94,22 @@ import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
|
75
94
|
address: postalAddressField(),
|
|
76
95
|
ownerUid: nullableField(stringField('Owning user. Checked on the page, not the query.')),
|
|
77
96
|
lifecycleStage: nullableField(stringField('CRM lifecycle stage.')),
|
|
97
|
+
leadSource: nullableField(stringField('Lead source: one of the organization’s Lead source values (CRM › Fields › Leads), stored on the named site’s profile. A value the list does not hold is a `400` naming the values it allows.')),
|
|
98
|
+
// Salesforce's standard contact fields (AGL-3515).
|
|
99
|
+
salutation: nullableField(stringField("One of the organization's salutation values (Mr., Ms., Mrs., Dr., Prof. and its own).")),
|
|
100
|
+
firstName: nullableField(stringField('First name. With `lastName`, it makes the name the named site shows.')),
|
|
101
|
+
lastName: nullableField(stringField('Last name.')),
|
|
102
|
+
department: nullableField(stringField('Department.')),
|
|
103
|
+
mobilePhone: nullableField(stringField('Mobile phone, E.164.')),
|
|
104
|
+
homePhone: nullableField(stringField('Home phone, E.164.')),
|
|
105
|
+
otherPhone: nullableField(stringField('Other phone, E.164.')),
|
|
106
|
+
fax: nullableField(stringField('Fax, E.164.')),
|
|
107
|
+
birthdate: nullableField(stringField('Birthdate, `YYYY-MM-DD`, never in the future.')),
|
|
108
|
+
assistantName: nullableField(stringField("Assistant's name.")),
|
|
109
|
+
assistantPhone: nullableField(stringField("Assistant's phone, E.164.")),
|
|
110
|
+
reportsToContactId: nullableField(stringField('The contact this person reports to. Never the contact itself, and never one that already reports to it.')),
|
|
111
|
+
otherAddress: nullableField(postalAddressField()),
|
|
112
|
+
doNotCall: booleanField('The person asked not to be phoned.'),
|
|
78
113
|
companyIds: stringListField('Every company this contact belongs to.'),
|
|
79
114
|
alternateEmails: stringListField('Other addresses that resolve to this contact.')
|
|
80
115
|
}, RECORD_STAMPS),
|
|
@@ -202,7 +237,22 @@ import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
|
202
237
|
'notes',
|
|
203
238
|
'custom',
|
|
204
239
|
'mediaIds',
|
|
205
|
-
'consentSiteId'
|
|
240
|
+
'consentSiteId',
|
|
241
|
+
// Salesforce's Account fields (AGL-3514).
|
|
242
|
+
'type',
|
|
243
|
+
'rating',
|
|
244
|
+
'ownership',
|
|
245
|
+
'accountSource',
|
|
246
|
+
'annualRevenueCents',
|
|
247
|
+
'currency',
|
|
248
|
+
'numberOfEmployees',
|
|
249
|
+
'fax',
|
|
250
|
+
'accountNumber',
|
|
251
|
+
'site',
|
|
252
|
+
'tickerSymbol',
|
|
253
|
+
'sicCode',
|
|
254
|
+
'shippingAddress',
|
|
255
|
+
'parentCompanyId'
|
|
206
256
|
],
|
|
207
257
|
writeOnly: {
|
|
208
258
|
mediaIds: stringListField('Media library files attached to this company, by id, at most 20. An empty array clears them.'),
|
|
@@ -216,8 +266,27 @@ import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
|
216
266
|
domain: nullableField(stringField('Primary domain. Unique per organization.')),
|
|
217
267
|
website: nullableField(stringField('Website URL.')),
|
|
218
268
|
phone: nullableField(stringField('Telephone number.')),
|
|
219
|
-
address: postalAddressField(),
|
|
220
|
-
|
|
269
|
+
address: _extends({}, postalAddressField(), {
|
|
270
|
+
description: 'Billing address. Members are optional and free-form.'
|
|
271
|
+
}),
|
|
272
|
+
industry: nullableField(stringField(companyPicklistNote('Industry', 'industries'))),
|
|
273
|
+
// Salesforce's Account fields (AGL-3514).
|
|
274
|
+
type: nullableField(stringField(companyPicklistNote('Account type', 'types'))),
|
|
275
|
+
rating: nullableField(stringField(companyPicklistNote('Rating', 'ratings'))),
|
|
276
|
+
ownership: nullableField(stringField(companyPicklistNote('Ownership', 'ownership values'))),
|
|
277
|
+
accountSource: nullableField(stringField("Where the account came from: one of the organization's active lead source values " + '(CRM › Fields › Leads), matched without regard to case. Any other value is refused ' + 'with a 400 naming the values allowed; the value a company already holds is kept.')),
|
|
278
|
+
annualRevenueCents: nullableField(integerField('Annual revenue in the minor unit of `currency`, 0 or more.')),
|
|
279
|
+
currency: stringField('Lowercase ISO 4217 code of the annual revenue. `usd` when unset.'),
|
|
280
|
+
numberOfEmployees: nullableField(integerField('Number of employees, 0 to 99,999,999.')),
|
|
281
|
+
fax: nullableField(stringField('E.164 fax number.')),
|
|
282
|
+
accountNumber: nullableField(stringField('Account number, at most 40 characters.')),
|
|
283
|
+
site: nullableField(stringField('Which of the company’s locations this record is, at most 80 characters.')),
|
|
284
|
+
tickerSymbol: nullableField(stringField('Stock ticker symbol, at most 20 characters.')),
|
|
285
|
+
sicCode: nullableField(stringField('Standard Industrial Classification code, at most 20 characters.')),
|
|
286
|
+
shippingAddress: _extends({}, postalAddressField(), {
|
|
287
|
+
description: 'Shipping address. Members are optional and free-form.'
|
|
288
|
+
}),
|
|
289
|
+
parentCompanyId: nullableField(stringField('The company this one sits under. Never itself or a company below it; deleting the parent clears it.')),
|
|
221
290
|
ownerUid: nullableField(stringField('Owning user.')),
|
|
222
291
|
notes: nullableField(stringField('Free-form notes.')),
|
|
223
292
|
custom: openObjectField('Customer-defined fields.'),
|
|
@@ -326,6 +395,29 @@ import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
|
326
395
|
},
|
|
327
396
|
order: {
|
|
328
397
|
type: 'integer'
|
|
398
|
+
},
|
|
399
|
+
probability: {
|
|
400
|
+
type: 'integer',
|
|
401
|
+
description: 'Chance of closing from this stage, 0–100.'
|
|
402
|
+
},
|
|
403
|
+
kind: {
|
|
404
|
+
type: 'string',
|
|
405
|
+
enum: [
|
|
406
|
+
'open',
|
|
407
|
+
'won',
|
|
408
|
+
'lost'
|
|
409
|
+
]
|
|
410
|
+
},
|
|
411
|
+
forecastCategory: {
|
|
412
|
+
type: 'string',
|
|
413
|
+
enum: [
|
|
414
|
+
'omitted',
|
|
415
|
+
'pipeline',
|
|
416
|
+
'bestCase',
|
|
417
|
+
'commit',
|
|
418
|
+
'closed'
|
|
419
|
+
],
|
|
420
|
+
description: 'The forecast category a deal takes on landing in this stage.'
|
|
329
421
|
}
|
|
330
422
|
},
|
|
331
423
|
additionalProperties: true
|
|
@@ -389,13 +481,20 @@ import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
|
389
481
|
'notes',
|
|
390
482
|
'custom',
|
|
391
483
|
'mediaIds',
|
|
392
|
-
'consentSiteId'
|
|
484
|
+
'consentSiteId',
|
|
485
|
+
'type',
|
|
486
|
+
'leadSource',
|
|
487
|
+
'nextStep',
|
|
488
|
+
'probability',
|
|
489
|
+
'forecastCategory',
|
|
490
|
+
'campaignId',
|
|
491
|
+
'contactRoles'
|
|
393
492
|
],
|
|
394
493
|
writeOnly: {
|
|
395
494
|
mediaIds: stringListField('Media library files attached to this deal, by id, at most 20. An empty array clears them.'),
|
|
396
495
|
consentSiteId: stringField('The site the deal is created on behalf of.')
|
|
397
496
|
},
|
|
398
|
-
writeNote: '`pipelineId` and `consentSiteId` are accepted on create only; a `PATCH` that names either is a `400`.',
|
|
497
|
+
writeNote: '`pipelineId` and `consentSiteId` are accepted on create only; a `PATCH` that names either is a `400`. ' + '`type` and `leadSource` must be active values of the organization’s lists (a deal keeps the value it holds). ' + 'A stage move sets `forecastCategory` from the new stage and clears `probability`, unless the same body sets them. ' + '`contactRoles` replaces the whole list: each contact once, at most 50, at most one `primary`, each `role` an active value of the organization’s contact roles. ' + 'The Primary is `contactId`: a body sending both must agree, and `contactId` alone makes that contact Primary.',
|
|
399
498
|
fields: _extends({
|
|
400
499
|
id: stringField('Deal id.'),
|
|
401
500
|
object: objectKindField('deal'),
|
|
@@ -417,10 +516,32 @@ import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
|
417
516
|
closedAt: nullableField(isoField('When it was actually closed.')),
|
|
418
517
|
stageChangedAt: nullableField(isoField('When the stage last moved.')),
|
|
419
518
|
ownerUid: nullableField(stringField('Owning user.')),
|
|
420
|
-
contactId: nullableField(stringField('Associated contact
|
|
519
|
+
contactId: nullableField(stringField('Associated contact — the Primary of `contactRoles`.')),
|
|
520
|
+
contactRoles: {
|
|
521
|
+
type: 'array',
|
|
522
|
+
description: 'Every contact on the deal and the part each plays (Salesforce’s Opportunity Contact Roles). At most one is `primary`, and it is `contactId`.',
|
|
523
|
+
items: {
|
|
524
|
+
type: 'object',
|
|
525
|
+
required: [
|
|
526
|
+
'contactId',
|
|
527
|
+
'primary'
|
|
528
|
+
],
|
|
529
|
+
properties: {
|
|
530
|
+
contactId: stringField('The contact.'),
|
|
531
|
+
role: nullableField(stringField('One of the organization’s contact roles (Decision Maker, Evaluator, …), or `null` for none.')),
|
|
532
|
+
primary: booleanField('Whether this is the deal’s Primary contact.')
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
},
|
|
421
536
|
companyId: nullableField(stringField('Associated company.')),
|
|
422
537
|
lostReason: nullableField(stringField('Why it was lost.')),
|
|
423
538
|
notes: nullableField(stringField('Free-form notes.')),
|
|
539
|
+
type: nullableField(stringField('Type — one of the organization’s deal types (New Business, Existing Business, …).')),
|
|
540
|
+
leadSource: nullableField(stringField('Lead source — one of the organization’s lead sources.')),
|
|
541
|
+
nextStep: nullableField(stringField('What happens next. At most 255 characters.')),
|
|
542
|
+
probability: nullableField(integerField('This deal’s own chance of closing, 0–100; `null` uses its stage’s. A stage move clears it.')),
|
|
543
|
+
forecastCategory: nullableField(stringField('`omitted`, `pipeline`, `bestCase`, `commit` or `closed`. Every stage move sets it from the new stage.')),
|
|
544
|
+
campaignId: nullableField(stringField('The campaign the deal is attributed to.')),
|
|
424
545
|
custom: openObjectField('Customer-defined fields.'),
|
|
425
546
|
nextTaskAt: nullableField(isoField('When the next open task on this deal is due.')),
|
|
426
547
|
siteId: nullableField(stringField('Site the record originated on.'))
|
|
@@ -439,7 +560,11 @@ import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
|
439
560
|
queryParam('pipelineId', 'Pipeline.'),
|
|
440
561
|
queryParam('stageId', 'Stage.'),
|
|
441
562
|
queryParam('status', 'Deal status.'),
|
|
442
|
-
queryParam('ownerUid', 'Owning user.')
|
|
563
|
+
queryParam('ownerUid', 'Owning user.'),
|
|
564
|
+
queryParam('type', 'Type, exactly as stored.'),
|
|
565
|
+
queryParam('leadSource', 'Lead source, exactly as stored.'),
|
|
566
|
+
queryParam('forecastCategory', 'Forecast category.'),
|
|
567
|
+
queryParam('campaignId', 'Campaign.')
|
|
443
568
|
]
|
|
444
569
|
},
|
|
445
570
|
{
|
|
@@ -529,9 +654,12 @@ import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
|
529
654
|
object: objectKindField('task'),
|
|
530
655
|
title: stringField('Task title.'),
|
|
531
656
|
notes: nullableField(stringField('Free-form notes.')),
|
|
532
|
-
kind: stringField('Task
|
|
533
|
-
|
|
534
|
-
|
|
657
|
+
kind: stringField('Task type as its meaning: `call`, `email`, `meeting` or `todo`. A write takes the meaning or a label of the Type picklist.'),
|
|
658
|
+
typeLabel: stringField('The organization’s Type picklist label, e.g. `Call`. Read-only; set through `kind`.'),
|
|
659
|
+
priority: stringField('`low`, `normal` or `high`. A write takes the meaning or a label of the Priority picklist.'),
|
|
660
|
+
priorityLabel: stringField('The organization’s Priority picklist label, e.g. `High`. Read-only; set through `priority`.'),
|
|
661
|
+
status: stringField('`open` or `done`. A write takes the meaning or a label of the Status picklist, e.g. `In Progress`.'),
|
|
662
|
+
statusLabel: stringField('The organization’s Status picklist label, e.g. `Not Started`. Read-only; set through `status`.'),
|
|
535
663
|
dueAt: nullableField(isoField('When the task is due.')),
|
|
536
664
|
remindAt: nullableField(isoField('When a reminder is scheduled.')),
|
|
537
665
|
reminderSentAt: nullableField(isoField('When the reminder was sent.')),
|
|
@@ -634,6 +762,7 @@ import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
|
634
762
|
'dealId',
|
|
635
763
|
'outcome',
|
|
636
764
|
'durationMinutes',
|
|
765
|
+
'direction',
|
|
637
766
|
'consentSiteId'
|
|
638
767
|
],
|
|
639
768
|
writeOnly: {
|
|
@@ -655,6 +784,7 @@ import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
|
655
784
|
dealId: nullableField(stringField('Associated deal.')),
|
|
656
785
|
outcome: nullableField(stringField('Outcome label.')),
|
|
657
786
|
durationMinutes: nullableField(integerField('Duration, for calls and meetings.')),
|
|
787
|
+
direction: nullableField(stringField('Which way it went: `inbound`, `outbound` or `internal` for a call, `inbound` or `outbound` for an email.')),
|
|
658
788
|
siteId: nullableField(stringField('Site the record originated on.'))
|
|
659
789
|
}, RECORD_STAMPS),
|
|
660
790
|
ops: [
|
|
@@ -737,15 +867,27 @@ import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
|
737
867
|
'website',
|
|
738
868
|
'address',
|
|
739
869
|
'tags',
|
|
740
|
-
'leadSource'
|
|
870
|
+
'leadSource',
|
|
871
|
+
// Salesforce's standard lead fields (AGL-3513).
|
|
872
|
+
'salutation',
|
|
873
|
+
'firstName',
|
|
874
|
+
'lastName',
|
|
875
|
+
'mobilePhone',
|
|
876
|
+
'fax',
|
|
877
|
+
'doNotCall',
|
|
878
|
+
'industry',
|
|
879
|
+
'rating',
|
|
880
|
+
'annualRevenueCents',
|
|
881
|
+
'currency',
|
|
882
|
+
'numberOfEmployees'
|
|
741
883
|
],
|
|
742
|
-
writeNote: '`email` and `name` are taken on a create only; a `PATCH` cannot change the address, which is the lead’s identity within its site.',
|
|
884
|
+
writeNote: '`email` and `name` are taken on a create only; a `PATCH` cannot change the address, which is the lead’s identity within its site. While `firstName` or `lastName` is set, `name` is their composition, "First Last", and follows them.',
|
|
743
885
|
writeRequired: [
|
|
744
886
|
'email'
|
|
745
887
|
],
|
|
746
888
|
writeOnly: {
|
|
747
889
|
siteId: stringField('The site the lead belongs to, instead of the `siteId` query parameter.'),
|
|
748
|
-
status: stringField('`new`, `nurturing`, `working` or `unqualified` (`nurturing` and `unqualified` on a `PATCH` only). A lead becomes `qualified` by being converted.'),
|
|
890
|
+
status: stringField('One of the organization’s active lead status values by its label (CRM › Fields › Leads), or a meaning — `new`, `nurturing`, `working` or `unqualified` (`nurturing` and `unqualified` on a `PATCH` only). Stored as the meaning and the label together. A lead becomes `qualified` by being converted.'),
|
|
749
891
|
ownerEmail: stringField('A member’s address, resolved against the organization’s roster. Not with `ownerUid` in the same request.')
|
|
750
892
|
},
|
|
751
893
|
fields: _extends({
|
|
@@ -754,7 +896,8 @@ import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
|
754
896
|
siteId: stringField('Site the lead arrived on.'),
|
|
755
897
|
email: nullableField(stringField('Email — the lead’s identity within its site.')),
|
|
756
898
|
name: nullableField(stringField('Name, when supplied.')),
|
|
757
|
-
status: stringField('
|
|
899
|
+
status: stringField('What the lead status means: `new`, `nurturing`, `working`, `qualified` or `unqualified`. What every filter and automation reads.'),
|
|
900
|
+
statusLabel: stringField('The organization’s label for the lead status value the lead holds — one of `status`’s meaning. Read-only; set it through `status`.'),
|
|
758
901
|
ownerUid: nullableField(stringField('Owning user.')),
|
|
759
902
|
notes: nullableField(stringField('Free-form notes.')),
|
|
760
903
|
unqualifiedReason: nullableField(stringField('Why the lead was disqualified.')),
|
|
@@ -765,6 +908,18 @@ import { _ as _extends } from "@swc/helpers/_/_extends";
|
|
|
765
908
|
address: nullableField(postalAddressField()),
|
|
766
909
|
tags: stringListField('Lower-cased tags.'),
|
|
767
910
|
leadSource: nullableField(stringField("Where the lead came from: one of the organization's active lead source values " + '(CRM › Fields › Leads), matched without regard to case. Any other value is refused ' + 'with a 400 naming the values allowed; the value a lead already holds is kept even ' + "after it is deactivated. A create that names none starts from the list's default.")),
|
|
911
|
+
// Salesforce's standard lead fields (AGL-3513).
|
|
912
|
+
salutation: nullableField(stringField('Salutation: one of the organization’s active Salutation values (CRM › Fields › Contacts), matched without regard to case. Any other value is a `400` naming the values allowed; the value a lead already holds is kept.')),
|
|
913
|
+
firstName: nullableField(stringField('First name, at most 59 characters. While it or `lastName` is set, `name` is "First Last".')),
|
|
914
|
+
lastName: nullableField(stringField('Last name, at most 59 characters.')),
|
|
915
|
+
mobilePhone: nullableField(stringField('E.164 mobile phone number.')),
|
|
916
|
+
fax: nullableField(stringField('E.164 fax number.')),
|
|
917
|
+
doNotCall: booleanField('The person asked not to be phoned. A hint on every call control, never a block. `false` clears it.'),
|
|
918
|
+
industry: nullableField(stringField('Industry: one of the organization’s active Industry values (CRM › Fields › Companies) — the list companies keep, so converting carries it. Any other value is a `400` naming the values allowed; the value a lead already holds is kept.')),
|
|
919
|
+
rating: nullableField(stringField('Rating: one of the organization’s active Rating values (CRM › Fields › Companies). Any other value is a `400` naming the values allowed.')),
|
|
920
|
+
annualRevenueCents: nullableField(integerField('Annual revenue in the minor unit of `currency`, 0 or more.')),
|
|
921
|
+
currency: stringField('Lowercase ISO 4217 code of the annual revenue. `usd` when unset.'),
|
|
922
|
+
numberOfEmployees: nullableField(integerField('Number of employees, 0 to 99,999,999.')),
|
|
768
923
|
sources: stringListField('The surfaces that captured the lead: `signup`, `booking`, `form:{formId}`, `import`, `manual`, `api`.'),
|
|
769
924
|
submissionCount: integerField('How many form submissions this lead has made.'),
|
|
770
925
|
firstSeen: isoField('First interaction.'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../../libs/plugins/crm/src/lib/server/api-v1/openapi.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n type ApiV1ResourceDescription,\n booleanField,\n integerField,\n isoField,\n nullableField,\n objectKindField,\n openObjectField,\n postalAddressField,\n queryParam,\n RECORD_STAMPS,\n stringField,\n stringListField,\n UPDATED_AFTER_PARAM,\n} from '@aglyn/tenant-data-admin/server/api-v1-description'\n\n/**\n * The CRM's resources as the customer API's OpenAPI document describes them\n * (AGL-2733), keyed by the resource each describes — what the console's\n * builder turns into their paths, tags and schemas, and the MCP tools derive\n * from.\n *\n * Transcribed from the response examples in `apps/docs/api/resources/*.md`,\n * the customer-facing contract, as the platform's own resources are; each\n * write body lists its handler's own writable set. `api-v1-openapi.spec.ts`\n * holds the document to every endpoint the documentation promises.\n */\nexport const CRM_API_V1_DESCRIPTIONS: Readonly<Record<string, ApiV1ResourceDescription>> = {\n contacts: {\n tag: 'Contacts',\n description: 'People, organization-wide. Part of the CRM, which is included from Starter.',\n schemaName: 'Contact',\n required: ['id', 'object', 'email'],\n writable: [\n 'email', 'name', 'tags', 'notes', 'marketingConsent', 'consentSiteId', 'consentGroupId', 'custom',\n 'phone', 'jobTitle', 'companyId', 'address', 'ownerUid', 'lifecycleStage', 'mediaIds',\n ],\n writeOnly: {\n consentSiteId: stringField('The site this write is made on behalf of: where the person opted in, and whose profile the profile fields land on.'),\n consentGroupId: stringField('With `marketingConsent: true`: the consent group the person was shown when they opted in. The opt-in then covers every site of that group; without it, or when the site is no longer in that group, it covers `consentSiteId` alone.'),\n custom: openObjectField('Contact custom fields, keyed by field key.'),\n mediaIds: stringListField('Media library files attached by the named site, by id, at most 20. An empty array clears them.'),\n },\n writeNote: '`email` is accepted on create only — a `PATCH` that names it is a `400`, because a contact is identified by its email.',\n fields: {\n id: stringField('Contact id.'),\n object: objectKindField('contact'),\n email: stringField('Primary email. Unique per organization.'),\n name: stringField('Display name.'),\n tags: stringListField('Free-form tags.'),\n notes: stringField('Free-form notes.'),\n marketingConsent: booleanField('Whether the contact accepted marketing email.'),\n consentSites: stringListField('Site ids the consent was given on.'),\n sources: stringListField('Where this contact came from.'),\n phone: stringField('Telephone number.'),\n jobTitle: stringField('Job title.'),\n companyId: nullableField(stringField('Primary company.')),\n address: postalAddressField(),\n ownerUid: nullableField(stringField('Owning user. Checked on the page, not the query.')),\n lifecycleStage: nullableField(stringField('CRM lifecycle stage.')),\n companyIds: stringListField('Every company this contact belongs to.'),\n alternateEmails: stringListField('Other addresses that resolve to this contact.'),\n ...RECORD_STAMPS,\n },\n ops: [\n {\n path: '/v1/contacts', method: 'get', operationId: 'listContacts', summary: 'List contacts', list: true, returns: 'Contact', entitlement: 'crm',\n description: 'Combining `email` with `tag` narrows on `email` and checks `tag` on the page, so pages can come back short. `lifecycleStage` and `ownerUid` live on a per-site profile and are ALWAYS checked on the page.',\n filters: [\n queryParam('email', 'Exact match, normalized the way the write path normalizes it. An unusable value is a 400.'),\n queryParam('tag', 'Checked on the page when combined with `email`.'),\n queryParam('lifecycleStage', 'Always checked on the page.'),\n queryParam('ownerUid', 'Always checked on the page.'),\n ],\n },\n { path: '/v1/contacts', method: 'post', operationId: 'createContact', summary: 'Create a contact', accepts: 'ContactWrite', returns: 'Contact', entitlement: 'crm', creates: true, description: 'A duplicate email is `409 conflict` (`code: \"contact_exists\"`), and the message names the existing id.' },\n { path: '/v1/contacts/{contactId}', method: 'get', operationId: 'getContact', summary: 'Retrieve a contact', returns: 'Contact', entitlement: 'crm', pathParams: [{ name: 'contactId', description: 'Contact id.' }] },\n { path: '/v1/contacts/{contactId}', method: 'patch', operationId: 'updateContact', summary: 'Update a contact', accepts: 'ContactWrite', returns: 'Contact', entitlement: 'crm', pathParams: [{ name: 'contactId', description: 'Contact id.' }] },\n { path: '/v1/contacts/{contactId}', method: 'delete', operationId: 'deleteContact', summary: 'Delete a contact', returns: 'Deleted', entitlement: 'crm', pathParams: [{ name: 'contactId', description: 'Contact id.' }] },\n { path: '/v1/contacts/{contactId}/merge', method: 'post', operationId: 'mergeContact', summary: 'Merge two contacts', accepts: 'ContactMerge', returns: 'Contact', entitlement: 'crm', pathParams: [{ name: 'contactId', description: 'The contact that survives.' }] },\n ],\n components: {\n ContactMerge: {\n type: 'object',\n required: ['sourceContactId'],\n description:\n 'Merge another contact into this one. The source is removed. Any other ' +\n 'member is a `400`.',\n properties: {\n sourceContactId: {\n type: 'string',\n description:\n 'The contact to merge FROM. It does not survive, and it must not be ' +\n 'the contact in the path.',\n },\n },\n additionalProperties: false,\n },\n },\n },\n companies: {\n tag: 'Companies',\n description: 'Organizations in the CRM.',\n schemaName: 'Company',\n required: ['id', 'object', 'name'],\n writable: ['name', 'domain', 'website', 'phone', 'address', 'industry', 'ownerUid', 'notes', 'custom', 'mediaIds', 'consentSiteId'],\n writeOnly: {\n mediaIds: stringListField('Media library files attached to this company, by id, at most 20. An empty array clears them.'),\n consentSiteId: stringField('The site the company is created on behalf of.'),\n },\n writeNote: 'A create needs `name` and `consentSiteId`; a `PATCH` that names `consentSiteId` is a `400`.',\n fields: {\n id: stringField('Company id.'),\n object: objectKindField('company'),\n name: stringField('Company name.'),\n domain: nullableField(stringField('Primary domain. Unique per organization.')),\n website: nullableField(stringField('Website URL.')),\n phone: nullableField(stringField('Telephone number.')),\n address: postalAddressField(),\n industry: nullableField(stringField('Industry label.')),\n ownerUid: nullableField(stringField('Owning user.')),\n notes: nullableField(stringField('Free-form notes.')),\n custom: openObjectField('Customer-defined fields.'),\n nextTaskAt: nullableField(isoField('When the next open task on this company is due.')),\n siteId: nullableField(stringField('Site the record originated on.')),\n ...RECORD_STAMPS,\n },\n ops: [\n { path: '/v1/companies', method: 'get', operationId: 'listCompanies', summary: 'List companies', list: true, returns: 'Company', entitlement: 'crm', filters: [UPDATED_AFTER_PARAM, queryParam('domain', 'Exact match.'), queryParam('ownerUid', 'Owning user.')] },\n { path: '/v1/companies', method: 'post', operationId: 'createCompany', summary: 'Create a company', accepts: 'CompanyWrite', returns: 'Company', entitlement: 'crm', creates: true, description: 'A duplicate domain is `409 conflict` (`code: \"company_exists\"`), naming the existing id.' },\n { path: '/v1/companies/{companyId}', method: 'get', operationId: 'getCompany', summary: 'Retrieve a company', returns: 'Company', entitlement: 'crm', pathParams: [{ name: 'companyId', description: 'Company id.' }] },\n { path: '/v1/companies/{companyId}', method: 'patch', operationId: 'updateCompany', summary: 'Update a company', accepts: 'CompanyWrite', returns: 'Company', entitlement: 'crm', pathParams: [{ name: 'companyId', description: 'Company id.' }] },\n { path: '/v1/companies/{companyId}', method: 'delete', operationId: 'deleteCompany', summary: 'Delete a company', returns: 'Deleted', entitlement: 'crm', pathParams: [{ name: 'companyId', description: 'Company id.' }] },\n ],\n },\n pipelines: {\n tag: 'Pipelines',\n description: 'Deal pipelines and their stages. Read-only over the API.',\n schemaName: 'Pipeline',\n required: ['id', 'object', 'name', 'stages'],\n fields: {\n id: stringField('Pipeline id.'),\n object: objectKindField('pipeline'),\n name: stringField('Pipeline name.'),\n isDefault: booleanField('Whether new deals land here when none is named.'),\n archived: booleanField('Whether the pipeline is archived.'),\n archivedAt: nullableField(isoField('When it was archived.')),\n stages: {\n type: 'array',\n description: 'Ordered stages. A deal’s `stageId` names one of these.',\n items: {\n type: 'object',\n properties: { id: { type: 'string' }, name: { type: 'string' }, order: { type: 'integer' } },\n additionalProperties: true,\n },\n },\n siteId: nullableField(stringField('Site the pipeline belongs to, when scoped.')),\n ...RECORD_STAMPS,\n },\n ops: [\n { path: '/v1/pipelines', method: 'get', operationId: 'listPipelines', summary: 'List pipelines', list: true, returns: 'Pipeline', entitlement: 'crm', filters: [UPDATED_AFTER_PARAM] },\n { path: '/v1/pipelines/{pipelineId}', method: 'get', operationId: 'getPipeline', summary: 'Retrieve a pipeline', returns: 'Pipeline', entitlement: 'crm', pathParams: [{ name: 'pipelineId', description: 'Pipeline id.' }] },\n ],\n },\n deals: {\n tag: 'Deals',\n description: 'Opportunities moving through a pipeline.',\n schemaName: 'Deal',\n required: ['id', 'object', 'title', 'pipelineId', 'stageId'],\n writable: ['title', 'pipelineId', 'stageId', 'status', 'amountCents', 'currency', 'lineItems', 'expectedCloseAt', 'ownerUid', 'contactId', 'companyId', 'lostReason', 'notes', 'custom', 'mediaIds', 'consentSiteId'],\n writeOnly: {\n mediaIds: stringListField('Media library files attached to this deal, by id, at most 20. An empty array clears them.'),\n consentSiteId: stringField('The site the deal is created on behalf of.'),\n },\n writeNote: '`pipelineId` and `consentSiteId` are accepted on create only; a `PATCH` that names either is a `400`.',\n fields: {\n id: stringField('Deal id.'),\n object: objectKindField('deal'),\n title: stringField('Deal title.'),\n pipelineId: stringField('Pipeline the deal sits in.'),\n stageId: stringField('Stage within that pipeline.'),\n status: stringField('`open`, `won` or `lost`.'),\n amountCents: integerField('Value in the smallest unit of `currency`.'),\n currency: stringField('ISO 4217 code.'),\n lineItems: { type: 'array', description: 'Line items, when the deal carries them.', items: { type: 'object', additionalProperties: true } },\n expectedCloseAt: nullableField(isoField('Forecast close date.')),\n closedAt: nullableField(isoField('When it was actually closed.')),\n stageChangedAt: nullableField(isoField('When the stage last moved.')),\n ownerUid: nullableField(stringField('Owning user.')),\n contactId: nullableField(stringField('Associated contact.')),\n companyId: nullableField(stringField('Associated company.')),\n lostReason: nullableField(stringField('Why it was lost.')),\n notes: nullableField(stringField('Free-form notes.')),\n custom: openObjectField('Customer-defined fields.'),\n nextTaskAt: nullableField(isoField('When the next open task on this deal is due.')),\n siteId: nullableField(stringField('Site the record originated on.')),\n ...RECORD_STAMPS,\n },\n ops: [\n { path: '/v1/deals', method: 'get', operationId: 'listDeals', summary: 'List deals', list: true, returns: 'Deal', entitlement: 'crm', filters: [UPDATED_AFTER_PARAM, queryParam('pipelineId', 'Pipeline.'), queryParam('stageId', 'Stage.'), queryParam('status', 'Deal status.'), queryParam('ownerUid', 'Owning user.')] },\n { path: '/v1/deals', method: 'post', operationId: 'createDeal', summary: 'Create a deal', accepts: 'DealWrite', returns: 'Deal', entitlement: 'crm', creates: true },\n { path: '/v1/deals/{dealId}', method: 'get', operationId: 'getDeal', summary: 'Retrieve a deal', returns: 'Deal', entitlement: 'crm', pathParams: [{ name: 'dealId', description: 'Deal id.' }] },\n { path: '/v1/deals/{dealId}', method: 'patch', operationId: 'updateDeal', summary: 'Update a deal', accepts: 'DealWrite', returns: 'Deal', entitlement: 'crm', pathParams: [{ name: 'dealId', description: 'Deal id.' }] },\n { path: '/v1/deals/{dealId}', method: 'delete', operationId: 'deleteDeal', summary: 'Delete a deal', returns: 'Deleted', entitlement: 'crm', pathParams: [{ name: 'dealId', description: 'Deal id.' }] },\n ],\n },\n tasks: {\n tag: 'Tasks',\n description: 'Follow-ups attached to CRM records.',\n schemaName: 'Task',\n required: ['id', 'object', 'title'],\n writable: ['title', 'notes', 'kind', 'priority', 'status', 'dueAt', 'remindAt', 'assigneeUid', 'contactId', 'companyId', 'dealId', 'consentSiteId'],\n writeOnly: {\n consentSiteId: stringField('The site the task is created on behalf of.'),\n },\n writeNote: 'A create needs `title` and `consentSiteId`; a `PATCH` that names `consentSiteId` is a `400`.',\n fields: {\n id: stringField('Task id.'),\n object: objectKindField('task'),\n title: stringField('Task title.'),\n notes: nullableField(stringField('Free-form notes.')),\n kind: stringField('Task kind, e.g. `call` or `email`.'),\n priority: stringField('Priority label.'),\n status: stringField('`open` or `done`.'),\n dueAt: nullableField(isoField('When the task is due.')),\n remindAt: nullableField(isoField('When a reminder is scheduled.')),\n reminderSentAt: nullableField(isoField('When the reminder was sent.')),\n completedAt: nullableField(isoField('When it was completed.')),\n assigneeUid: nullableField(stringField('Assigned user.')),\n contactId: nullableField(stringField('Associated contact.')),\n companyId: nullableField(stringField('Associated company.')),\n dealId: nullableField(stringField('Associated deal.')),\n siteId: nullableField(stringField('Site the record originated on.')),\n ...RECORD_STAMPS,\n },\n ops: [\n { path: '/v1/tasks', method: 'get', operationId: 'listTasks', summary: 'List tasks', list: true, returns: 'Task', entitlement: 'crm', filters: [UPDATED_AFTER_PARAM, queryParam('status', 'Task status.'), queryParam('assigneeUid', 'Assigned user.'), queryParam('contactId', 'Associated contact.'), queryParam('dealId', 'Associated deal.')] },\n { path: '/v1/tasks', method: 'post', operationId: 'createTask', summary: 'Create a task', accepts: 'TaskWrite', returns: 'Task', entitlement: 'crm', creates: true },\n { path: '/v1/tasks/{taskId}', method: 'get', operationId: 'getTask', summary: 'Retrieve a task', returns: 'Task', entitlement: 'crm', pathParams: [{ name: 'taskId', description: 'Task id.' }] },\n { path: '/v1/tasks/{taskId}', method: 'patch', operationId: 'updateTask', summary: 'Update a task', accepts: 'TaskWrite', returns: 'Task', entitlement: 'crm', pathParams: [{ name: 'taskId', description: 'Task id.' }] },\n { path: '/v1/tasks/{taskId}', method: 'delete', operationId: 'deleteTask', summary: 'Delete a task', returns: 'Deleted', entitlement: 'crm', pathParams: [{ name: 'taskId', description: 'Task id.' }] },\n ],\n },\n activities: {\n tag: 'Activities',\n description: 'Logged interactions. Append-only: no PATCH.',\n schemaName: 'Activity',\n required: ['id', 'object', 'kind', 'at'],\n writable: ['kind', 'body', 'at', 'byUid', 'contactId', 'companyId', 'dealId', 'outcome', 'durationMinutes', 'consentSiteId'],\n writeOnly: {\n consentSiteId: stringField('The site the activity is logged on behalf of.'),\n },\n writeRequired: ['body', 'consentSiteId'],\n fields: {\n id: stringField('Activity id.'),\n object: objectKindField('activity'),\n kind: stringField('What happened, e.g. `call`, `email`, `note`.'),\n body: stringField('Free-form body.'),\n at: isoField('When the interaction happened — not when it was logged.'),\n byUid: nullableField(stringField('User who logged it.')),\n contactId: nullableField(stringField('Associated contact.')),\n companyId: nullableField(stringField('Associated company.')),\n dealId: nullableField(stringField('Associated deal.')),\n outcome: nullableField(stringField('Outcome label.')),\n durationMinutes: nullableField(integerField('Duration, for calls and meetings.')),\n siteId: nullableField(stringField('Site the record originated on.')),\n ...RECORD_STAMPS,\n },\n ops: [\n { path: '/v1/activities', method: 'get', operationId: 'listActivities', summary: 'List activities', list: true, returns: 'Activity', entitlement: 'crm', filters: [UPDATED_AFTER_PARAM, queryParam('kind', 'Activity kind.'), queryParam('contactId', 'Associated contact.'), queryParam('dealId', 'Associated deal.')] },\n { path: '/v1/activities', method: 'post', operationId: 'createActivity', summary: 'Log an activity', accepts: 'ActivityWrite', returns: 'Activity', entitlement: 'crm', creates: true },\n { path: '/v1/activities/{activityId}', method: 'get', operationId: 'getActivity', summary: 'Retrieve an activity', returns: 'Activity', entitlement: 'crm', pathParams: [{ name: 'activityId', description: 'Activity id.' }] },\n { path: '/v1/activities/{activityId}', method: 'delete', operationId: 'deleteActivity', summary: 'Delete an activity', returns: 'Deleted', entitlement: 'crm', pathParams: [{ name: 'activityId', description: 'Activity id.' }] },\n ],\n },\n leads: {\n tag: 'Leads',\n description: 'Unqualified interest, before it becomes a contact. A lead is a record of its own: the person and their company as text, until converting makes the contact and the company.',\n schemaName: 'Lead',\n required: ['id', 'object', 'siteId'],\n writable: ['siteId', 'email', 'name', 'status', 'ownerUid', 'ownerEmail', 'notes', 'unqualifiedReason', 'company', 'jobTitle', 'phone', 'website', 'address', 'tags', 'leadSource'],\n writeNote: '`email` and `name` are taken on a create only; a `PATCH` cannot change the address, which is the lead’s identity within its site.',\n writeRequired: ['email'],\n writeOnly: {\n siteId: stringField('The site the lead belongs to, instead of the `siteId` query parameter.'),\n status: stringField('`new`, `nurturing`, `working` or `unqualified` (`nurturing` and `unqualified` on a `PATCH` only). A lead becomes `qualified` by being converted.'),\n ownerEmail: stringField('A member’s address, resolved against the organization’s roster. Not with `ownerUid` in the same request.'),\n },\n fields: {\n id: stringField('Lead id.'),\n object: objectKindField('lead'),\n siteId: stringField('Site the lead arrived on.'),\n email: nullableField(stringField('Email — the lead’s identity within its site.')),\n name: nullableField(stringField('Name, when supplied.')),\n status: stringField('Lead status.'),\n ownerUid: nullableField(stringField('Owning user.')),\n notes: nullableField(stringField('Free-form notes.')),\n unqualifiedReason: nullableField(stringField('Why the lead was disqualified.')),\n company: nullableField(stringField('The company’s name, as text. Converting the lead is what links or creates the company record.')),\n jobTitle: nullableField(stringField('Job title.')),\n phone: nullableField(stringField('E.164 phone number.')),\n website: nullableField(stringField('An http(s) URL.')),\n address: nullableField(postalAddressField()),\n tags: stringListField('Lower-cased tags.'),\n leadSource: nullableField(\n stringField(\n \"Where the lead came from: one of the organization's active lead source values \" +\n '(CRM › Fields › Leads), matched without regard to case. Any other value is refused ' +\n 'with a 400 naming the values allowed; the value a lead already holds is kept even ' +\n \"after it is deactivated. A create that names none starts from the list's default.\",\n ),\n ),\n sources: stringListField('The surfaces that captured the lead: `signup`, `booking`, `form:{formId}`, `import`, `manual`, `api`.'),\n submissionCount: integerField('How many form submissions this lead has made.'),\n firstSeen: isoField('First interaction.'),\n lastSeen: isoField('Most recent interaction.'),\n marketingConsent: booleanField('Whether marketing consent was given.'),\n marketingConsentAt: nullableField(isoField('When consent was given.')),\n convertedContactId: nullableField(stringField('Contact created by conversion.')),\n convertedAt: nullableField(isoField('When it was converted.')),\n companyId: nullableField(stringField('Company created or matched by conversion.')),\n dealId: nullableField(stringField('Deal created by conversion.')),\n ...RECORD_STAMPS,\n },\n ops: [\n { path: '/v1/leads', method: 'get', operationId: 'listLeads', summary: 'List leads', list: true, returns: 'Lead', entitlement: 'crm', filters: [UPDATED_AFTER_PARAM, queryParam('siteId', 'Site the lead arrived on.'), queryParam('status', 'Lead status.'), queryParam('ownerUid', 'Owning user.')] },\n { path: '/v1/leads', method: 'post', operationId: 'createLead', summary: 'Create a lead', accepts: 'LeadWrite', returns: 'Lead', entitlement: 'crm', creates: true, description: 'A lead sourced outside the site, entered before anyone has qualified it. One address is one lead per site: creating one the site already holds updates it and answers 200. No contact and no company are created — converting the lead does that — and no marketing consent is recorded.' },\n { path: '/v1/leads/{leadId}', method: 'get', operationId: 'getLead', summary: 'Retrieve a lead', returns: 'Lead', entitlement: 'crm', pathParams: [{ name: 'leadId', description: 'Lead id.' }] },\n { path: '/v1/leads/{leadId}', method: 'patch', operationId: 'updateLead', summary: 'Update a lead', accepts: 'LeadWrite', returns: 'Lead', entitlement: 'crm', pathParams: [{ name: 'leadId', description: 'Lead id.' }] },\n { path: '/v1/leads/{leadId}/convert', method: 'post', operationId: 'convertLead', summary: 'Convert a lead', returns: 'LeadConversion', entitlement: 'crm', description: 'Creates a contact, and optionally a company and a deal. Idempotent on the lead: converting an already-converted lead returns the existing ids.', pathParams: [{ name: 'leadId', description: 'Lead id.' }] },\n ],\n components: {\n LeadConversion: {\n type: 'object',\n description:\n 'What the conversion produced. Idempotent on the lead: converting an ' +\n 'already-converted lead returns the existing ids rather than creating ' +\n 'a second set.',\n properties: {\n object: { type: 'string', const: 'lead_conversion' },\n contactId: { type: 'string' },\n companyId: { type: ['string', 'null'] },\n dealId: { type: ['string', 'null'] },\n },\n additionalProperties: true,\n },\n },\n },\n 'email-templates': {\n tag: 'Email templates',\n description: 'Reusable email bodies.',\n schemaName: 'EmailTemplate',\n required: ['id', 'object', 'name'],\n writable: ['name', 'kind', 'visibility', 'ownerUid', 'subject', 'body', 'consentSiteId'],\n writeOnly: {\n consentSiteId: stringField('The site the template is created on behalf of.'),\n },\n writeNote: 'A create needs `name`, `body` and `consentSiteId`; a `PATCH` that names `consentSiteId` is a `400`.',\n fields: {\n id: stringField('Template id.'),\n object: objectKindField('email_template'),\n name: stringField('Template name.'),\n kind: stringField('Template kind.'),\n visibility: stringField('`org` or `private`.'),\n ownerUid: nullableField(stringField('Owner, for a private template.')),\n subject: stringField('Subject line.'),\n body: stringField('Body. May contain merge tokens.'),\n siteId: nullableField(stringField('Site the template belongs to, when scoped.')),\n ...RECORD_STAMPS,\n },\n ops: [\n { path: '/v1/email-templates', method: 'get', operationId: 'listEmailTemplates', summary: 'List email templates', list: true, returns: 'EmailTemplate', entitlement: 'crm', filters: [UPDATED_AFTER_PARAM, queryParam('kind', 'Template kind.'), queryParam('visibility', 'Visibility.')] },\n { path: '/v1/email-templates', method: 'post', operationId: 'createEmailTemplate', summary: 'Create a template', accepts: 'EmailTemplateWrite', returns: 'EmailTemplate', entitlement: 'crm', creates: true },\n { path: '/v1/email-templates/{templateId}', method: 'get', operationId: 'getEmailTemplate', summary: 'Retrieve a template', returns: 'EmailTemplate', entitlement: 'crm', pathParams: [{ name: 'templateId', description: 'Template id.' }] },\n { path: '/v1/email-templates/{templateId}', method: 'patch', operationId: 'updateEmailTemplate', summary: 'Update a template', accepts: 'EmailTemplateWrite', returns: 'EmailTemplate', entitlement: 'crm', pathParams: [{ name: 'templateId', description: 'Template id.' }] },\n { path: '/v1/email-templates/{templateId}', method: 'delete', operationId: 'deleteEmailTemplate', summary: 'Delete a template', returns: 'Deleted', entitlement: 'crm', pathParams: [{ name: 'templateId', description: 'Template id.' }] },\n ],\n },\n}\n"],"names":["booleanField","integerField","isoField","nullableField","objectKindField","openObjectField","postalAddressField","queryParam","RECORD_STAMPS","stringField","stringListField","UPDATED_AFTER_PARAM","CRM_API_V1_DESCRIPTIONS","contacts","tag","description","schemaName","required","writable","writeOnly","consentSiteId","consentGroupId","custom","mediaIds","writeNote","fields","id","object","email","name","tags","notes","marketingConsent","consentSites","sources","phone","jobTitle","companyId","address","ownerUid","lifecycleStage","companyIds","alternateEmails","ops","path","method","operationId","summary","list","returns","entitlement","filters","accepts","creates","pathParams","components","ContactMerge","type","properties","sourceContactId","additionalProperties","companies","domain","website","industry","nextTaskAt","siteId","pipelines","isDefault","archived","archivedAt","stages","items","order","deals","title","pipelineId","stageId","status","amountCents","currency","lineItems","expectedCloseAt","closedAt","stageChangedAt","contactId","lostReason","tasks","kind","priority","dueAt","remindAt","reminderSentAt","completedAt","assigneeUid","dealId","activities","writeRequired","body","at","byUid","outcome","durationMinutes","leads","ownerEmail","unqualifiedReason","company","leadSource","submissionCount","firstSeen","lastSeen","marketingConsentAt","convertedContactId","convertedAt","LeadConversion","const","visibility","subject"],"mappings":";AAAA;;;;;;;;;;;;;;;CAeC,GAED,SAEEA,YAAY,EACZC,YAAY,EACZC,QAAQ,EACRC,aAAa,EACbC,eAAe,EACfC,eAAe,EACfC,kBAAkB,EAClBC,UAAU,EACVC,aAAa,EACbC,WAAW,EACXC,eAAe,EACfC,mBAAmB,QACd,qDAAoD;AAE3D;;;;;;;;;;CAUC,GACD,OAAO,MAAMC,0BAA8E;IACzFC,UAAU;QACRC,KAAK;QACLC,aAAa;QACbC,YAAY;QACZC,UAAU;YAAC;YAAM;YAAU;SAAQ;QACnCC,UAAU;YACR;YAAS;YAAQ;YAAQ;YAAS;YAAoB;YAAiB;YAAkB;YACzF;YAAS;YAAY;YAAa;YAAW;YAAY;YAAkB;SAC5E;QACDC,WAAW;YACTC,eAAeX,YAAY;YAC3BY,gBAAgBZ,YAAY;YAC5Ba,QAAQjB,gBAAgB;YACxBkB,UAAUb,gBAAgB;QAC5B;QACAc,WAAW;QACXC,QAAQ;YACNC,IAAIjB,YAAY;YAChBkB,QAAQvB,gBAAgB;YACxBwB,OAAOnB,YAAY;YACnBoB,MAAMpB,YAAY;YAClBqB,MAAMpB,gBAAgB;YACtBqB,OAAOtB,YAAY;YACnBuB,kBAAkBhC,aAAa;YAC/BiC,cAAcvB,gBAAgB;YAC9BwB,SAASxB,gBAAgB;YACzByB,OAAO1B,YAAY;YACnB2B,UAAU3B,YAAY;YACtB4B,WAAWlC,cAAcM,YAAY;YACrC6B,SAAShC;YACTiC,UAAUpC,cAAcM,YAAY;YACpC+B,gBAAgBrC,cAAcM,YAAY;YAC1CgC,YAAY/B,gBAAgB;YAC5BgC,iBAAiBhC,gBAAgB;WAC9BF;QAELmC,KAAK;YACH;gBACEC,MAAM;gBAAgBC,QAAQ;gBAAOC,aAAa;gBAAgBC,SAAS;gBAAiBC,MAAM;gBAAMC,SAAS;gBAAWC,aAAa;gBACzInC,aAAa;gBACboC,SAAS;oBACP5C,WAAW,SAAS;oBACpBA,WAAW,OAAO;oBAClBA,WAAW,kBAAkB;oBAC7BA,WAAW,YAAY;iBACxB;YACH;YACA;gBAAEqC,MAAM;gBAAgBC,QAAQ;gBAAQC,aAAa;gBAAiBC,SAAS;gBAAoBK,SAAS;gBAAgBH,SAAS;gBAAWC,aAAa;gBAAOG,SAAS;gBAAMtC,aAAa;YAAyG;YACzS;gBAAE6B,MAAM;gBAA4BC,QAAQ;gBAAOC,aAAa;gBAAcC,SAAS;gBAAsBE,SAAS;gBAAWC,aAAa;gBAAOI,YAAY;oBAAC;wBAAEzB,MAAM;wBAAad,aAAa;oBAAc;iBAAE;YAAC;YACrN;gBAAE6B,MAAM;gBAA4BC,QAAQ;gBAASC,aAAa;gBAAiBC,SAAS;gBAAoBK,SAAS;gBAAgBH,SAAS;gBAAWC,aAAa;gBAAOI,YAAY;oBAAC;wBAAEzB,MAAM;wBAAad,aAAa;oBAAc;iBAAE;YAAC;YACjP;gBAAE6B,MAAM;gBAA4BC,QAAQ;gBAAUC,aAAa;gBAAiBC,SAAS;gBAAoBE,SAAS;gBAAWC,aAAa;gBAAOI,YAAY;oBAAC;wBAAEzB,MAAM;wBAAad,aAAa;oBAAc;iBAAE;YAAC;YACzN;gBAAE6B,MAAM;gBAAkCC,QAAQ;gBAAQC,aAAa;gBAAgBC,SAAS;gBAAsBK,SAAS;gBAAgBH,SAAS;gBAAWC,aAAa;gBAAOI,YAAY;oBAAC;wBAAEzB,MAAM;wBAAad,aAAa;oBAA6B;iBAAE;YAAC;SACvQ;QACDwC,YAAY;YACVC,cAAc;gBACZC,MAAM;gBACNxC,UAAU;oBAAC;iBAAkB;gBAC7BF,aACE,2EACA;gBACF2C,YAAY;oBACVC,iBAAiB;wBACfF,MAAM;wBACN1C,aACE,wEACA;oBACJ;gBACF;gBACA6C,sBAAsB;YACxB;QACF;IACF;IACAC,WAAW;QACT/C,KAAK;QACLC,aAAa;QACbC,YAAY;QACZC,UAAU;YAAC;YAAM;YAAU;SAAO;QAClCC,UAAU;YAAC;YAAQ;YAAU;YAAW;YAAS;YAAW;YAAY;YAAY;YAAS;YAAU;YAAY;SAAgB;QACnIC,WAAW;YACTI,UAAUb,gBAAgB;YAC1BU,eAAeX,YAAY;QAC7B;QACAe,WAAW;QACXC,QAAQ;YACNC,IAAIjB,YAAY;YAChBkB,QAAQvB,gBAAgB;YACxByB,MAAMpB,YAAY;YAClBqD,QAAQ3D,cAAcM,YAAY;YAClCsD,SAAS5D,cAAcM,YAAY;YACnC0B,OAAOhC,cAAcM,YAAY;YACjC6B,SAAShC;YACT0D,UAAU7D,cAAcM,YAAY;YACpC8B,UAAUpC,cAAcM,YAAY;YACpCsB,OAAO5B,cAAcM,YAAY;YACjCa,QAAQjB,gBAAgB;YACxB4D,YAAY9D,cAAcD,SAAS;YACnCgE,QAAQ/D,cAAcM,YAAY;WAC/BD;QAELmC,KAAK;YACH;gBAAEC,MAAM;gBAAiBC,QAAQ;gBAAOC,aAAa;gBAAiBC,SAAS;gBAAkBC,MAAM;gBAAMC,SAAS;gBAAWC,aAAa;gBAAOC,SAAS;oBAACxC;oBAAqBJ,WAAW,UAAU;oBAAiBA,WAAW,YAAY;iBAAgB;YAAC;YAClQ;gBAAEqC,MAAM;gBAAiBC,QAAQ;gBAAQC,aAAa;gBAAiBC,SAAS;gBAAoBK,SAAS;gBAAgBH,SAAS;gBAAWC,aAAa;gBAAOG,SAAS;gBAAMtC,aAAa;YAA2F;YAC5R;gBAAE6B,MAAM;gBAA6BC,QAAQ;gBAAOC,aAAa;gBAAcC,SAAS;gBAAsBE,SAAS;gBAAWC,aAAa;gBAAOI,YAAY;oBAAC;wBAAEzB,MAAM;wBAAad,aAAa;oBAAc;iBAAE;YAAC;YACtN;gBAAE6B,MAAM;gBAA6BC,QAAQ;gBAASC,aAAa;gBAAiBC,SAAS;gBAAoBK,SAAS;gBAAgBH,SAAS;gBAAWC,aAAa;gBAAOI,YAAY;oBAAC;wBAAEzB,MAAM;wBAAad,aAAa;oBAAc;iBAAE;YAAC;YAClP;gBAAE6B,MAAM;gBAA6BC,QAAQ;gBAAUC,aAAa;gBAAiBC,SAAS;gBAAoBE,SAAS;gBAAWC,aAAa;gBAAOI,YAAY;oBAAC;wBAAEzB,MAAM;wBAAad,aAAa;oBAAc;iBAAE;YAAC;SAC3N;IACH;IACAoD,WAAW;QACTrD,KAAK;QACLC,aAAa;QACbC,YAAY;QACZC,UAAU;YAAC;YAAM;YAAU;YAAQ;SAAS;QAC5CQ,QAAQ;YACNC,IAAIjB,YAAY;YAChBkB,QAAQvB,gBAAgB;YACxByB,MAAMpB,YAAY;YAClB2D,WAAWpE,aAAa;YACxBqE,UAAUrE,aAAa;YACvBsE,YAAYnE,cAAcD,SAAS;YACnCqE,QAAQ;gBACNd,MAAM;gBACN1C,aAAa;gBACbyD,OAAO;oBACLf,MAAM;oBACNC,YAAY;wBAAEhC,IAAI;4BAAE+B,MAAM;wBAAS;wBAAG5B,MAAM;4BAAE4B,MAAM;wBAAS;wBAAGgB,OAAO;4BAAEhB,MAAM;wBAAU;oBAAE;oBAC3FG,sBAAsB;gBACxB;YACF;YACAM,QAAQ/D,cAAcM,YAAY;WAC/BD;QAELmC,KAAK;YACH;gBAAEC,MAAM;gBAAiBC,QAAQ;gBAAOC,aAAa;gBAAiBC,SAAS;gBAAkBC,MAAM;gBAAMC,SAAS;gBAAYC,aAAa;gBAAOC,SAAS;oBAACxC;iBAAoB;YAAC;YACrL;gBAAEiC,MAAM;gBAA8BC,QAAQ;gBAAOC,aAAa;gBAAeC,SAAS;gBAAuBE,SAAS;gBAAYC,aAAa;gBAAOI,YAAY;oBAAC;wBAAEzB,MAAM;wBAAcd,aAAa;oBAAe;iBAAE;YAAC;SAC7N;IACH;IACA2D,OAAO;QACL5D,KAAK;QACLC,aAAa;QACbC,YAAY;QACZC,UAAU;YAAC;YAAM;YAAU;YAAS;YAAc;SAAU;QAC5DC,UAAU;YAAC;YAAS;YAAc;YAAW;YAAU;YAAe;YAAY;YAAa;YAAmB;YAAY;YAAa;YAAa;YAAc;YAAS;YAAU;YAAY;SAAgB;QACrNC,WAAW;YACTI,UAAUb,gBAAgB;YAC1BU,eAAeX,YAAY;QAC7B;QACAe,WAAW;QACXC,QAAQ;YACNC,IAAIjB,YAAY;YAChBkB,QAAQvB,gBAAgB;YACxBuE,OAAOlE,YAAY;YACnBmE,YAAYnE,YAAY;YACxBoE,SAASpE,YAAY;YACrBqE,QAAQrE,YAAY;YACpBsE,aAAa9E,aAAa;YAC1B+E,UAAUvE,YAAY;YACtBwE,WAAW;gBAAExB,MAAM;gBAAS1C,aAAa;gBAA2CyD,OAAO;oBAAEf,MAAM;oBAAUG,sBAAsB;gBAAK;YAAE;YAC1IsB,iBAAiB/E,cAAcD,SAAS;YACxCiF,UAAUhF,cAAcD,SAAS;YACjCkF,gBAAgBjF,cAAcD,SAAS;YACvCqC,UAAUpC,cAAcM,YAAY;YACpC4E,WAAWlF,cAAcM,YAAY;YACrC4B,WAAWlC,cAAcM,YAAY;YACrC6E,YAAYnF,cAAcM,YAAY;YACtCsB,OAAO5B,cAAcM,YAAY;YACjCa,QAAQjB,gBAAgB;YACxB4D,YAAY9D,cAAcD,SAAS;YACnCgE,QAAQ/D,cAAcM,YAAY;WAC/BD;QAELmC,KAAK;YACH;gBAAEC,MAAM;gBAAaC,QAAQ;gBAAOC,aAAa;gBAAaC,SAAS;gBAAcC,MAAM;gBAAMC,SAAS;gBAAQC,aAAa;gBAAOC,SAAS;oBAACxC;oBAAqBJ,WAAW,cAAc;oBAAcA,WAAW,WAAW;oBAAWA,WAAW,UAAU;oBAAiBA,WAAW,YAAY;iBAAgB;YAAC;YAC3T;gBAAEqC,MAAM;gBAAaC,QAAQ;gBAAQC,aAAa;gBAAcC,SAAS;gBAAiBK,SAAS;gBAAaH,SAAS;gBAAQC,aAAa;gBAAOG,SAAS;YAAK;YACnK;gBAAET,MAAM;gBAAsBC,QAAQ;gBAAOC,aAAa;gBAAWC,SAAS;gBAAmBE,SAAS;gBAAQC,aAAa;gBAAOI,YAAY;oBAAC;wBAAEzB,MAAM;wBAAUd,aAAa;oBAAW;iBAAE;YAAC;YAChM;gBAAE6B,MAAM;gBAAsBC,QAAQ;gBAASC,aAAa;gBAAcC,SAAS;gBAAiBK,SAAS;gBAAaH,SAAS;gBAAQC,aAAa;gBAAOI,YAAY;oBAAC;wBAAEzB,MAAM;wBAAUd,aAAa;oBAAW;iBAAE;YAAC;YACzN;gBAAE6B,MAAM;gBAAsBC,QAAQ;gBAAUC,aAAa;gBAAcC,SAAS;gBAAiBE,SAAS;gBAAWC,aAAa;gBAAOI,YAAY;oBAAC;wBAAEzB,MAAM;wBAAUd,aAAa;oBAAW;iBAAE;YAAC;SACxM;IACH;IACAwE,OAAO;QACLzE,KAAK;QACLC,aAAa;QACbC,YAAY;QACZC,UAAU;YAAC;YAAM;YAAU;SAAQ;QACnCC,UAAU;YAAC;YAAS;YAAS;YAAQ;YAAY;YAAU;YAAS;YAAY;YAAe;YAAa;YAAa;YAAU;SAAgB;QACnJC,WAAW;YACTC,eAAeX,YAAY;QAC7B;QACAe,WAAW;QACXC,QAAQ;YACNC,IAAIjB,YAAY;YAChBkB,QAAQvB,gBAAgB;YACxBuE,OAAOlE,YAAY;YACnBsB,OAAO5B,cAAcM,YAAY;YACjC+E,MAAM/E,YAAY;YAClBgF,UAAUhF,YAAY;YACtBqE,QAAQrE,YAAY;YACpBiF,OAAOvF,cAAcD,SAAS;YAC9ByF,UAAUxF,cAAcD,SAAS;YACjC0F,gBAAgBzF,cAAcD,SAAS;YACvC2F,aAAa1F,cAAcD,SAAS;YACpC4F,aAAa3F,cAAcM,YAAY;YACvC4E,WAAWlF,cAAcM,YAAY;YACrC4B,WAAWlC,cAAcM,YAAY;YACrCsF,QAAQ5F,cAAcM,YAAY;YAClCyD,QAAQ/D,cAAcM,YAAY;WAC/BD;QAELmC,KAAK;YACH;gBAAEC,MAAM;gBAAaC,QAAQ;gBAAOC,aAAa;gBAAaC,SAAS;gBAAcC,MAAM;gBAAMC,SAAS;gBAAQC,aAAa;gBAAOC,SAAS;oBAACxC;oBAAqBJ,WAAW,UAAU;oBAAiBA,WAAW,eAAe;oBAAmBA,WAAW,aAAa;oBAAwBA,WAAW,UAAU;iBAAoB;YAAC;YAClV;gBAAEqC,MAAM;gBAAaC,QAAQ;gBAAQC,aAAa;gBAAcC,SAAS;gBAAiBK,SAAS;gBAAaH,SAAS;gBAAQC,aAAa;gBAAOG,SAAS;YAAK;YACnK;gBAAET,MAAM;gBAAsBC,QAAQ;gBAAOC,aAAa;gBAAWC,SAAS;gBAAmBE,SAAS;gBAAQC,aAAa;gBAAOI,YAAY;oBAAC;wBAAEzB,MAAM;wBAAUd,aAAa;oBAAW;iBAAE;YAAC;YAChM;gBAAE6B,MAAM;gBAAsBC,QAAQ;gBAASC,aAAa;gBAAcC,SAAS;gBAAiBK,SAAS;gBAAaH,SAAS;gBAAQC,aAAa;gBAAOI,YAAY;oBAAC;wBAAEzB,MAAM;wBAAUd,aAAa;oBAAW;iBAAE;YAAC;YACzN;gBAAE6B,MAAM;gBAAsBC,QAAQ;gBAAUC,aAAa;gBAAcC,SAAS;gBAAiBE,SAAS;gBAAWC,aAAa;gBAAOI,YAAY;oBAAC;wBAAEzB,MAAM;wBAAUd,aAAa;oBAAW;iBAAE;YAAC;SACxM;IACH;IACAiF,YAAY;QACVlF,KAAK;QACLC,aAAa;QACbC,YAAY;QACZC,UAAU;YAAC;YAAM;YAAU;YAAQ;SAAK;QACxCC,UAAU;YAAC;YAAQ;YAAQ;YAAM;YAAS;YAAa;YAAa;YAAU;YAAW;YAAmB;SAAgB;QAC5HC,WAAW;YACTC,eAAeX,YAAY;QAC7B;QACAwF,eAAe;YAAC;YAAQ;SAAgB;QACxCxE,QAAQ;YACNC,IAAIjB,YAAY;YAChBkB,QAAQvB,gBAAgB;YACxBoF,MAAM/E,YAAY;YAClByF,MAAMzF,YAAY;YAClB0F,IAAIjG,SAAS;YACbkG,OAAOjG,cAAcM,YAAY;YACjC4E,WAAWlF,cAAcM,YAAY;YACrC4B,WAAWlC,cAAcM,YAAY;YACrCsF,QAAQ5F,cAAcM,YAAY;YAClC4F,SAASlG,cAAcM,YAAY;YACnC6F,iBAAiBnG,cAAcF,aAAa;YAC5CiE,QAAQ/D,cAAcM,YAAY;WAC/BD;QAELmC,KAAK;YACH;gBAAEC,MAAM;gBAAkBC,QAAQ;gBAAOC,aAAa;gBAAkBC,SAAS;gBAAmBC,MAAM;gBAAMC,SAAS;gBAAYC,aAAa;gBAAOC,SAAS;oBAACxC;oBAAqBJ,WAAW,QAAQ;oBAAmBA,WAAW,aAAa;oBAAwBA,WAAW,UAAU;iBAAoB;YAAC;YACxT;gBAAEqC,MAAM;gBAAkBC,QAAQ;gBAAQC,aAAa;gBAAkBC,SAAS;gBAAmBK,SAAS;gBAAiBH,SAAS;gBAAYC,aAAa;gBAAOG,SAAS;YAAK;YACtL;gBAAET,MAAM;gBAA+BC,QAAQ;gBAAOC,aAAa;gBAAeC,SAAS;gBAAwBE,SAAS;gBAAYC,aAAa;gBAAOI,YAAY;oBAAC;wBAAEzB,MAAM;wBAAcd,aAAa;oBAAe;iBAAE;YAAC;YAC9N;gBAAE6B,MAAM;gBAA+BC,QAAQ;gBAAUC,aAAa;gBAAkBC,SAAS;gBAAsBE,SAAS;gBAAWC,aAAa;gBAAOI,YAAY;oBAAC;wBAAEzB,MAAM;wBAAcd,aAAa;oBAAe;iBAAE;YAAC;SAClO;IACH;IACAwF,OAAO;QACLzF,KAAK;QACLC,aAAa;QACbC,YAAY;QACZC,UAAU;YAAC;YAAM;YAAU;SAAS;QACpCC,UAAU;YAAC;YAAU;YAAS;YAAQ;YAAU;YAAY;YAAc;YAAS;YAAqB;YAAW;YAAY;YAAS;YAAW;YAAW;YAAQ;SAAa;QACnLM,WAAW;QACXyE,eAAe;YAAC;SAAQ;QACxB9E,WAAW;YACT+C,QAAQzD,YAAY;YACpBqE,QAAQrE,YAAY;YACpB+F,YAAY/F,YAAY;QAC1B;QACAgB,QAAQ;YACNC,IAAIjB,YAAY;YAChBkB,QAAQvB,gBAAgB;YACxB8D,QAAQzD,YAAY;YACpBmB,OAAOzB,cAAcM,YAAY;YACjCoB,MAAM1B,cAAcM,YAAY;YAChCqE,QAAQrE,YAAY;YACpB8B,UAAUpC,cAAcM,YAAY;YACpCsB,OAAO5B,cAAcM,YAAY;YACjCgG,mBAAmBtG,cAAcM,YAAY;YAC7CiG,SAASvG,cAAcM,YAAY;YACnC2B,UAAUjC,cAAcM,YAAY;YACpC0B,OAAOhC,cAAcM,YAAY;YACjCsD,SAAS5D,cAAcM,YAAY;YACnC6B,SAASnC,cAAcG;YACvBwB,MAAMpB,gBAAgB;YACtBiG,YAAYxG,cACVM,YACE,mFACE,wFACA,uFACA;YAGNyB,SAASxB,gBAAgB;YACzBkG,iBAAiB3G,aAAa;YAC9B4G,WAAW3G,SAAS;YACpB4G,UAAU5G,SAAS;YACnB8B,kBAAkBhC,aAAa;YAC/B+G,oBAAoB5G,cAAcD,SAAS;YAC3C8G,oBAAoB7G,cAAcM,YAAY;YAC9CwG,aAAa9G,cAAcD,SAAS;YACpCmC,WAAWlC,cAAcM,YAAY;YACrCsF,QAAQ5F,cAAcM,YAAY;WAC/BD;QAELmC,KAAK;YACH;gBAAEC,MAAM;gBAAaC,QAAQ;gBAAOC,aAAa;gBAAaC,SAAS;gBAAcC,MAAM;gBAAMC,SAAS;gBAAQC,aAAa;gBAAOC,SAAS;oBAACxC;oBAAqBJ,WAAW,UAAU;oBAA8BA,WAAW,UAAU;oBAAiBA,WAAW,YAAY;iBAAgB;YAAC;YACtS;gBAAEqC,MAAM;gBAAaC,QAAQ;gBAAQC,aAAa;gBAAcC,SAAS;gBAAiBK,SAAS;gBAAaH,SAAS;gBAAQC,aAAa;gBAAOG,SAAS;gBAAMtC,aAAa;YAA2R;YAC5c;gBAAE6B,MAAM;gBAAsBC,QAAQ;gBAAOC,aAAa;gBAAWC,SAAS;gBAAmBE,SAAS;gBAAQC,aAAa;gBAAOI,YAAY;oBAAC;wBAAEzB,MAAM;wBAAUd,aAAa;oBAAW;iBAAE;YAAC;YAChM;gBAAE6B,MAAM;gBAAsBC,QAAQ;gBAASC,aAAa;gBAAcC,SAAS;gBAAiBK,SAAS;gBAAaH,SAAS;gBAAQC,aAAa;gBAAOI,YAAY;oBAAC;wBAAEzB,MAAM;wBAAUd,aAAa;oBAAW;iBAAE;YAAC;YACzN;gBAAE6B,MAAM;gBAA8BC,QAAQ;gBAAQC,aAAa;gBAAeC,SAAS;gBAAkBE,SAAS;gBAAkBC,aAAa;gBAAOnC,aAAa;gBAAkJuC,YAAY;oBAAC;wBAAEzB,MAAM;wBAAUd,aAAa;oBAAW;iBAAE;YAAC;SACtX;QACDwC,YAAY;YACV2D,gBAAgB;gBACdzD,MAAM;gBACN1C,aACE,yEACA,0EACA;gBACF2C,YAAY;oBACV/B,QAAQ;wBAAE8B,MAAM;wBAAU0D,OAAO;oBAAkB;oBACnD9B,WAAW;wBAAE5B,MAAM;oBAAS;oBAC5BpB,WAAW;wBAAEoB,MAAM;4BAAC;4BAAU;yBAAO;oBAAC;oBACtCsC,QAAQ;wBAAEtC,MAAM;4BAAC;4BAAU;yBAAO;oBAAC;gBACrC;gBACAG,sBAAsB;YACxB;QACF;IACF;IACA,mBAAmB;QACjB9C,KAAK;QACLC,aAAa;QACbC,YAAY;QACZC,UAAU;YAAC;YAAM;YAAU;SAAO;QAClCC,UAAU;YAAC;YAAQ;YAAQ;YAAc;YAAY;YAAW;YAAQ;SAAgB;QACxFC,WAAW;YACTC,eAAeX,YAAY;QAC7B;QACAe,WAAW;QACXC,QAAQ;YACNC,IAAIjB,YAAY;YAChBkB,QAAQvB,gBAAgB;YACxByB,MAAMpB,YAAY;YAClB+E,MAAM/E,YAAY;YAClB2G,YAAY3G,YAAY;YACxB8B,UAAUpC,cAAcM,YAAY;YACpC4G,SAAS5G,YAAY;YACrByF,MAAMzF,YAAY;YAClByD,QAAQ/D,cAAcM,YAAY;WAC/BD;QAELmC,KAAK;YACH;gBAAEC,MAAM;gBAAuBC,QAAQ;gBAAOC,aAAa;gBAAsBC,SAAS;gBAAwBC,MAAM;gBAAMC,SAAS;gBAAiBC,aAAa;gBAAOC,SAAS;oBAACxC;oBAAqBJ,WAAW,QAAQ;oBAAmBA,WAAW,cAAc;iBAAe;YAAC;YAC1R;gBAAEqC,MAAM;gBAAuBC,QAAQ;gBAAQC,aAAa;gBAAuBC,SAAS;gBAAqBK,SAAS;gBAAsBH,SAAS;gBAAiBC,aAAa;gBAAOG,SAAS;YAAK;YAC5M;gBAAET,MAAM;gBAAoCC,QAAQ;gBAAOC,aAAa;gBAAoBC,SAAS;gBAAuBE,SAAS;gBAAiBC,aAAa;gBAAOI,YAAY;oBAAC;wBAAEzB,MAAM;wBAAcd,aAAa;oBAAe;iBAAE;YAAC;YAC5O;gBAAE6B,MAAM;gBAAoCC,QAAQ;gBAASC,aAAa;gBAAuBC,SAAS;gBAAqBK,SAAS;gBAAsBH,SAAS;gBAAiBC,aAAa;gBAAOI,YAAY;oBAAC;wBAAEzB,MAAM;wBAAcd,aAAa;oBAAe;iBAAE;YAAC;YAC9Q;gBAAE6B,MAAM;gBAAoCC,QAAQ;gBAAUC,aAAa;gBAAuBC,SAAS;gBAAqBE,SAAS;gBAAWC,aAAa;gBAAOI,YAAY;oBAAC;wBAAEzB,MAAM;wBAAcd,aAAa;oBAAe;iBAAE;YAAC;SAC3O;IACH;AACF,EAAC"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../libs/plugins/crm/src/lib/server/api-v1/openapi.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n type ApiV1ResourceDescription,\n booleanField,\n integerField,\n isoField,\n nullableField,\n objectKindField,\n openObjectField,\n postalAddressField,\n queryParam,\n RECORD_STAMPS,\n stringField,\n stringListField,\n UPDATED_AFTER_PARAM,\n} from '@aglyn/tenant-data-admin/server/api-v1-description'\n\n/**\n * The CRM's resources as the customer API's OpenAPI document describes them\n * (AGL-2733), keyed by the resource each describes — what the console's\n * builder turns into their paths, tags and schemas, and the MCP tools derive\n * from.\n *\n * Transcribed from the response examples in `apps/docs/api/resources/*.md`,\n * the customer-facing contract, as the platform's own resources are; each\n * write body lists its handler's own writable set. `api-v1-openapi.spec.ts`\n * holds the document to every endpoint the documentation promises.\n */\n/** How a company picklist field reads in the description (AGL-3514). */\nfunction companyPicklistNote(label: string, plural: string): string {\n return (\n `${label}: one of the organization's active ${plural} (CRM › Fields › Companies), matched ` +\n 'without regard to case. Any other value is refused with a 400 naming the values allowed; ' +\n 'the value a company already holds is kept even after it is deactivated.'\n )\n}\n\nexport const CRM_API_V1_DESCRIPTIONS: Readonly<Record<string, ApiV1ResourceDescription>> = {\n contacts: {\n tag: 'Contacts',\n description: 'People, organization-wide. Part of the CRM, which is included from Starter.',\n schemaName: 'Contact',\n required: ['id', 'object', 'email'],\n writable: [\n 'email', 'name', 'tags', 'notes', 'marketingConsent', 'consentSiteId', 'consentGroupId', 'custom',\n 'phone', 'jobTitle', 'companyId', 'address', 'ownerUid', 'lifecycleStage', 'mediaIds',\n 'leadSource',\n // Salesforce's standard contact fields (AGL-3515).\n 'salutation', 'firstName', 'lastName', 'department', 'mobilePhone', 'homePhone', 'otherPhone',\n 'fax', 'birthdate', 'assistantName', 'assistantPhone', 'reportsToContactId', 'otherAddress', 'doNotCall',\n ],\n writeOnly: {\n consentSiteId: stringField('The site this write is made on behalf of: where the person opted in, and whose profile the profile fields land on.'),\n consentGroupId: stringField('With `marketingConsent: true`: the consent group the person was shown when they opted in. The opt-in then covers every site of that group; without it, or when the site is no longer in that group, it covers `consentSiteId` alone.'),\n custom: openObjectField('Contact custom fields, keyed by field key.'),\n mediaIds: stringListField('Media library files attached by the named site, by id, at most 20. An empty array clears them.'),\n },\n writeNote: '`email` is accepted on create only — a `PATCH` that names it is a `400`, because a contact is identified by its email.',\n fields: {\n id: stringField('Contact id.'),\n object: objectKindField('contact'),\n email: stringField('Primary email. Unique per organization.'),\n name: stringField('Display name.'),\n tags: stringListField('Free-form tags.'),\n notes: stringField('Free-form notes.'),\n marketingConsent: booleanField('Whether the contact accepted marketing email.'),\n consentSites: stringListField('Site ids the consent was given on.'),\n sources: stringListField('Where this contact came from.'),\n phone: stringField('Telephone number.'),\n jobTitle: stringField('Job title.'),\n companyId: nullableField(stringField('Primary company.')),\n address: postalAddressField(),\n ownerUid: nullableField(stringField('Owning user. Checked on the page, not the query.')),\n lifecycleStage: nullableField(stringField('CRM lifecycle stage.')),\n leadSource: nullableField(stringField('Lead source: one of the organization’s Lead source values (CRM › Fields › Leads), stored on the named site’s profile. A value the list does not hold is a `400` naming the values it allows.')),\n // Salesforce's standard contact fields (AGL-3515).\n salutation: nullableField(stringField(\"One of the organization's salutation values (Mr., Ms., Mrs., Dr., Prof. and its own).\")),\n firstName: nullableField(stringField('First name. With `lastName`, it makes the name the named site shows.')),\n lastName: nullableField(stringField('Last name.')),\n department: nullableField(stringField('Department.')),\n mobilePhone: nullableField(stringField('Mobile phone, E.164.')),\n homePhone: nullableField(stringField('Home phone, E.164.')),\n otherPhone: nullableField(stringField('Other phone, E.164.')),\n fax: nullableField(stringField('Fax, E.164.')),\n birthdate: nullableField(stringField('Birthdate, `YYYY-MM-DD`, never in the future.')),\n assistantName: nullableField(stringField(\"Assistant's name.\")),\n assistantPhone: nullableField(stringField(\"Assistant's phone, E.164.\")),\n reportsToContactId: nullableField(stringField('The contact this person reports to. Never the contact itself, and never one that already reports to it.')),\n otherAddress: nullableField(postalAddressField()),\n doNotCall: booleanField('The person asked not to be phoned.'),\n companyIds: stringListField('Every company this contact belongs to.'),\n alternateEmails: stringListField('Other addresses that resolve to this contact.'),\n ...RECORD_STAMPS,\n },\n ops: [\n {\n path: '/v1/contacts', method: 'get', operationId: 'listContacts', summary: 'List contacts', list: true, returns: 'Contact', entitlement: 'crm',\n description: 'Combining `email` with `tag` narrows on `email` and checks `tag` on the page, so pages can come back short. `lifecycleStage` and `ownerUid` live on a per-site profile and are ALWAYS checked on the page.',\n filters: [\n queryParam('email', 'Exact match, normalized the way the write path normalizes it. An unusable value is a 400.'),\n queryParam('tag', 'Checked on the page when combined with `email`.'),\n queryParam('lifecycleStage', 'Always checked on the page.'),\n queryParam('ownerUid', 'Always checked on the page.'),\n ],\n },\n { path: '/v1/contacts', method: 'post', operationId: 'createContact', summary: 'Create a contact', accepts: 'ContactWrite', returns: 'Contact', entitlement: 'crm', creates: true, description: 'A duplicate email is `409 conflict` (`code: \"contact_exists\"`), and the message names the existing id.' },\n { path: '/v1/contacts/{contactId}', method: 'get', operationId: 'getContact', summary: 'Retrieve a contact', returns: 'Contact', entitlement: 'crm', pathParams: [{ name: 'contactId', description: 'Contact id.' }] },\n { path: '/v1/contacts/{contactId}', method: 'patch', operationId: 'updateContact', summary: 'Update a contact', accepts: 'ContactWrite', returns: 'Contact', entitlement: 'crm', pathParams: [{ name: 'contactId', description: 'Contact id.' }] },\n { path: '/v1/contacts/{contactId}', method: 'delete', operationId: 'deleteContact', summary: 'Delete a contact', returns: 'Deleted', entitlement: 'crm', pathParams: [{ name: 'contactId', description: 'Contact id.' }] },\n { path: '/v1/contacts/{contactId}/merge', method: 'post', operationId: 'mergeContact', summary: 'Merge two contacts', accepts: 'ContactMerge', returns: 'Contact', entitlement: 'crm', pathParams: [{ name: 'contactId', description: 'The contact that survives.' }] },\n ],\n components: {\n ContactMerge: {\n type: 'object',\n required: ['sourceContactId'],\n description:\n 'Merge another contact into this one. The source is removed. Any other ' +\n 'member is a `400`.',\n properties: {\n sourceContactId: {\n type: 'string',\n description:\n 'The contact to merge FROM. It does not survive, and it must not be ' +\n 'the contact in the path.',\n },\n },\n additionalProperties: false,\n },\n },\n },\n companies: {\n tag: 'Companies',\n description: 'Organizations in the CRM.',\n schemaName: 'Company',\n required: ['id', 'object', 'name'],\n writable: [\n 'name', 'domain', 'website', 'phone', 'address', 'industry', 'ownerUid', 'notes', 'custom', 'mediaIds', 'consentSiteId',\n // Salesforce's Account fields (AGL-3514).\n 'type', 'rating', 'ownership', 'accountSource', 'annualRevenueCents', 'currency', 'numberOfEmployees', 'fax',\n 'accountNumber', 'site', 'tickerSymbol', 'sicCode', 'shippingAddress', 'parentCompanyId',\n ],\n writeOnly: {\n mediaIds: stringListField('Media library files attached to this company, by id, at most 20. An empty array clears them.'),\n consentSiteId: stringField('The site the company is created on behalf of.'),\n },\n writeNote: 'A create needs `name` and `consentSiteId`; a `PATCH` that names `consentSiteId` is a `400`.',\n fields: {\n id: stringField('Company id.'),\n object: objectKindField('company'),\n name: stringField('Company name.'),\n domain: nullableField(stringField('Primary domain. Unique per organization.')),\n website: nullableField(stringField('Website URL.')),\n phone: nullableField(stringField('Telephone number.')),\n address: { ...postalAddressField(), description: 'Billing address. Members are optional and free-form.' },\n industry: nullableField(stringField(companyPicklistNote('Industry', 'industries'))),\n // Salesforce's Account fields (AGL-3514).\n type: nullableField(stringField(companyPicklistNote('Account type', 'types'))),\n rating: nullableField(stringField(companyPicklistNote('Rating', 'ratings'))),\n ownership: nullableField(stringField(companyPicklistNote('Ownership', 'ownership values'))),\n accountSource: nullableField(\n stringField(\n \"Where the account came from: one of the organization's active lead source values \" +\n '(CRM › Fields › Leads), matched without regard to case. Any other value is refused ' +\n 'with a 400 naming the values allowed; the value a company already holds is kept.',\n ),\n ),\n annualRevenueCents: nullableField(integerField('Annual revenue in the minor unit of `currency`, 0 or more.')),\n currency: stringField('Lowercase ISO 4217 code of the annual revenue. `usd` when unset.'),\n numberOfEmployees: nullableField(integerField('Number of employees, 0 to 99,999,999.')),\n fax: nullableField(stringField('E.164 fax number.')),\n accountNumber: nullableField(stringField('Account number, at most 40 characters.')),\n site: nullableField(stringField('Which of the company’s locations this record is, at most 80 characters.')),\n tickerSymbol: nullableField(stringField('Stock ticker symbol, at most 20 characters.')),\n sicCode: nullableField(stringField('Standard Industrial Classification code, at most 20 characters.')),\n shippingAddress: { ...postalAddressField(), description: 'Shipping address. Members are optional and free-form.' },\n parentCompanyId: nullableField(\n stringField('The company this one sits under. Never itself or a company below it; deleting the parent clears it.'),\n ),\n ownerUid: nullableField(stringField('Owning user.')),\n notes: nullableField(stringField('Free-form notes.')),\n custom: openObjectField('Customer-defined fields.'),\n nextTaskAt: nullableField(isoField('When the next open task on this company is due.')),\n siteId: nullableField(stringField('Site the record originated on.')),\n ...RECORD_STAMPS,\n },\n ops: [\n { path: '/v1/companies', method: 'get', operationId: 'listCompanies', summary: 'List companies', list: true, returns: 'Company', entitlement: 'crm', filters: [UPDATED_AFTER_PARAM, queryParam('domain', 'Exact match.'), queryParam('ownerUid', 'Owning user.')] },\n { path: '/v1/companies', method: 'post', operationId: 'createCompany', summary: 'Create a company', accepts: 'CompanyWrite', returns: 'Company', entitlement: 'crm', creates: true, description: 'A duplicate domain is `409 conflict` (`code: \"company_exists\"`), naming the existing id.' },\n { path: '/v1/companies/{companyId}', method: 'get', operationId: 'getCompany', summary: 'Retrieve a company', returns: 'Company', entitlement: 'crm', pathParams: [{ name: 'companyId', description: 'Company id.' }] },\n { path: '/v1/companies/{companyId}', method: 'patch', operationId: 'updateCompany', summary: 'Update a company', accepts: 'CompanyWrite', returns: 'Company', entitlement: 'crm', pathParams: [{ name: 'companyId', description: 'Company id.' }] },\n { path: '/v1/companies/{companyId}', method: 'delete', operationId: 'deleteCompany', summary: 'Delete a company', returns: 'Deleted', entitlement: 'crm', pathParams: [{ name: 'companyId', description: 'Company id.' }] },\n ],\n },\n pipelines: {\n tag: 'Pipelines',\n description: 'Deal pipelines and their stages. Read-only over the API.',\n schemaName: 'Pipeline',\n required: ['id', 'object', 'name', 'stages'],\n fields: {\n id: stringField('Pipeline id.'),\n object: objectKindField('pipeline'),\n name: stringField('Pipeline name.'),\n isDefault: booleanField('Whether new deals land here when none is named.'),\n archived: booleanField('Whether the pipeline is archived.'),\n archivedAt: nullableField(isoField('When it was archived.')),\n stages: {\n type: 'array',\n description: 'Ordered stages. A deal’s `stageId` names one of these.',\n items: {\n type: 'object',\n properties: {\n id: { type: 'string' },\n name: { type: 'string' },\n order: { type: 'integer' },\n probability: { type: 'integer', description: 'Chance of closing from this stage, 0–100.' },\n kind: { type: 'string', enum: ['open', 'won', 'lost'] },\n forecastCategory: {\n type: 'string',\n enum: ['omitted', 'pipeline', 'bestCase', 'commit', 'closed'],\n description: 'The forecast category a deal takes on landing in this stage.',\n },\n },\n additionalProperties: true,\n },\n },\n siteId: nullableField(stringField('Site the pipeline belongs to, when scoped.')),\n ...RECORD_STAMPS,\n },\n ops: [\n { path: '/v1/pipelines', method: 'get', operationId: 'listPipelines', summary: 'List pipelines', list: true, returns: 'Pipeline', entitlement: 'crm', filters: [UPDATED_AFTER_PARAM] },\n { path: '/v1/pipelines/{pipelineId}', method: 'get', operationId: 'getPipeline', summary: 'Retrieve a pipeline', returns: 'Pipeline', entitlement: 'crm', pathParams: [{ name: 'pipelineId', description: 'Pipeline id.' }] },\n ],\n },\n deals: {\n tag: 'Deals',\n description: 'Opportunities moving through a pipeline.',\n schemaName: 'Deal',\n required: ['id', 'object', 'title', 'pipelineId', 'stageId'],\n writable: ['title', 'pipelineId', 'stageId', 'status', 'amountCents', 'currency', 'lineItems', 'expectedCloseAt', 'ownerUid', 'contactId', 'companyId', 'lostReason', 'notes', 'custom', 'mediaIds', 'consentSiteId', 'type', 'leadSource', 'nextStep', 'probability', 'forecastCategory', 'campaignId', 'contactRoles'],\n writeOnly: {\n mediaIds: stringListField('Media library files attached to this deal, by id, at most 20. An empty array clears them.'),\n consentSiteId: stringField('The site the deal is created on behalf of.'),\n },\n writeNote:\n '`pipelineId` and `consentSiteId` are accepted on create only; a `PATCH` that names either is a `400`. ' +\n '`type` and `leadSource` must be active values of the organization’s lists (a deal keeps the value it holds). ' +\n 'A stage move sets `forecastCategory` from the new stage and clears `probability`, unless the same body sets them. ' +\n '`contactRoles` replaces the whole list: each contact once, at most 50, at most one `primary`, each `role` an active value of the organization’s contact roles. ' +\n 'The Primary is `contactId`: a body sending both must agree, and `contactId` alone makes that contact Primary.',\n fields: {\n id: stringField('Deal id.'),\n object: objectKindField('deal'),\n title: stringField('Deal title.'),\n pipelineId: stringField('Pipeline the deal sits in.'),\n stageId: stringField('Stage within that pipeline.'),\n status: stringField('`open`, `won` or `lost`.'),\n amountCents: integerField('Value in the smallest unit of `currency`.'),\n currency: stringField('ISO 4217 code.'),\n lineItems: { type: 'array', description: 'Line items, when the deal carries them.', items: { type: 'object', additionalProperties: true } },\n expectedCloseAt: nullableField(isoField('Forecast close date.')),\n closedAt: nullableField(isoField('When it was actually closed.')),\n stageChangedAt: nullableField(isoField('When the stage last moved.')),\n ownerUid: nullableField(stringField('Owning user.')),\n contactId: nullableField(stringField('Associated contact — the Primary of `contactRoles`.')),\n contactRoles: {\n type: 'array',\n description:\n 'Every contact on the deal and the part each plays (Salesforce’s Opportunity Contact Roles). At most one is `primary`, and it is `contactId`.',\n items: {\n type: 'object',\n required: ['contactId', 'primary'],\n properties: {\n contactId: stringField('The contact.'),\n role: nullableField(stringField('One of the organization’s contact roles (Decision Maker, Evaluator, …), or `null` for none.')),\n primary: booleanField('Whether this is the deal’s Primary contact.'),\n },\n },\n },\n companyId: nullableField(stringField('Associated company.')),\n lostReason: nullableField(stringField('Why it was lost.')),\n notes: nullableField(stringField('Free-form notes.')),\n type: nullableField(stringField('Type — one of the organization’s deal types (New Business, Existing Business, …).')),\n leadSource: nullableField(stringField('Lead source — one of the organization’s lead sources.')),\n nextStep: nullableField(stringField('What happens next. At most 255 characters.')),\n probability: nullableField(integerField('This deal’s own chance of closing, 0–100; `null` uses its stage’s. A stage move clears it.')),\n forecastCategory: nullableField(stringField('`omitted`, `pipeline`, `bestCase`, `commit` or `closed`. Every stage move sets it from the new stage.')),\n campaignId: nullableField(stringField('The campaign the deal is attributed to.')),\n custom: openObjectField('Customer-defined fields.'),\n nextTaskAt: nullableField(isoField('When the next open task on this deal is due.')),\n siteId: nullableField(stringField('Site the record originated on.')),\n ...RECORD_STAMPS,\n },\n ops: [\n { path: '/v1/deals', method: 'get', operationId: 'listDeals', summary: 'List deals', list: true, returns: 'Deal', entitlement: 'crm', filters: [UPDATED_AFTER_PARAM, queryParam('pipelineId', 'Pipeline.'), queryParam('stageId', 'Stage.'), queryParam('status', 'Deal status.'), queryParam('ownerUid', 'Owning user.'), queryParam('type', 'Type, exactly as stored.'), queryParam('leadSource', 'Lead source, exactly as stored.'), queryParam('forecastCategory', 'Forecast category.'), queryParam('campaignId', 'Campaign.')] },\n { path: '/v1/deals', method: 'post', operationId: 'createDeal', summary: 'Create a deal', accepts: 'DealWrite', returns: 'Deal', entitlement: 'crm', creates: true },\n { path: '/v1/deals/{dealId}', method: 'get', operationId: 'getDeal', summary: 'Retrieve a deal', returns: 'Deal', entitlement: 'crm', pathParams: [{ name: 'dealId', description: 'Deal id.' }] },\n { path: '/v1/deals/{dealId}', method: 'patch', operationId: 'updateDeal', summary: 'Update a deal', accepts: 'DealWrite', returns: 'Deal', entitlement: 'crm', pathParams: [{ name: 'dealId', description: 'Deal id.' }] },\n { path: '/v1/deals/{dealId}', method: 'delete', operationId: 'deleteDeal', summary: 'Delete a deal', returns: 'Deleted', entitlement: 'crm', pathParams: [{ name: 'dealId', description: 'Deal id.' }] },\n ],\n },\n tasks: {\n tag: 'Tasks',\n description: 'Follow-ups attached to CRM records.',\n schemaName: 'Task',\n required: ['id', 'object', 'title'],\n writable: ['title', 'notes', 'kind', 'priority', 'status', 'dueAt', 'remindAt', 'assigneeUid', 'contactId', 'companyId', 'dealId', 'consentSiteId'],\n writeOnly: {\n consentSiteId: stringField('The site the task is created on behalf of.'),\n },\n writeNote: 'A create needs `title` and `consentSiteId`; a `PATCH` that names `consentSiteId` is a `400`.',\n fields: {\n id: stringField('Task id.'),\n object: objectKindField('task'),\n title: stringField('Task title.'),\n notes: nullableField(stringField('Free-form notes.')),\n kind: stringField('Task type as its meaning: `call`, `email`, `meeting` or `todo`. A write takes the meaning or a label of the Type picklist.'),\n typeLabel: stringField('The organization’s Type picklist label, e.g. `Call`. Read-only; set through `kind`.'),\n priority: stringField('`low`, `normal` or `high`. A write takes the meaning or a label of the Priority picklist.'),\n priorityLabel: stringField('The organization’s Priority picklist label, e.g. `High`. Read-only; set through `priority`.'),\n status: stringField('`open` or `done`. A write takes the meaning or a label of the Status picklist, e.g. `In Progress`.'),\n statusLabel: stringField('The organization’s Status picklist label, e.g. `Not Started`. Read-only; set through `status`.'),\n dueAt: nullableField(isoField('When the task is due.')),\n remindAt: nullableField(isoField('When a reminder is scheduled.')),\n reminderSentAt: nullableField(isoField('When the reminder was sent.')),\n completedAt: nullableField(isoField('When it was completed.')),\n assigneeUid: nullableField(stringField('Assigned user.')),\n contactId: nullableField(stringField('Associated contact.')),\n companyId: nullableField(stringField('Associated company.')),\n dealId: nullableField(stringField('Associated deal.')),\n siteId: nullableField(stringField('Site the record originated on.')),\n ...RECORD_STAMPS,\n },\n ops: [\n { path: '/v1/tasks', method: 'get', operationId: 'listTasks', summary: 'List tasks', list: true, returns: 'Task', entitlement: 'crm', filters: [UPDATED_AFTER_PARAM, queryParam('status', 'Task status.'), queryParam('assigneeUid', 'Assigned user.'), queryParam('contactId', 'Associated contact.'), queryParam('dealId', 'Associated deal.')] },\n { path: '/v1/tasks', method: 'post', operationId: 'createTask', summary: 'Create a task', accepts: 'TaskWrite', returns: 'Task', entitlement: 'crm', creates: true },\n { path: '/v1/tasks/{taskId}', method: 'get', operationId: 'getTask', summary: 'Retrieve a task', returns: 'Task', entitlement: 'crm', pathParams: [{ name: 'taskId', description: 'Task id.' }] },\n { path: '/v1/tasks/{taskId}', method: 'patch', operationId: 'updateTask', summary: 'Update a task', accepts: 'TaskWrite', returns: 'Task', entitlement: 'crm', pathParams: [{ name: 'taskId', description: 'Task id.' }] },\n { path: '/v1/tasks/{taskId}', method: 'delete', operationId: 'deleteTask', summary: 'Delete a task', returns: 'Deleted', entitlement: 'crm', pathParams: [{ name: 'taskId', description: 'Task id.' }] },\n ],\n },\n activities: {\n tag: 'Activities',\n description: 'Logged interactions. Append-only: no PATCH.',\n schemaName: 'Activity',\n required: ['id', 'object', 'kind', 'at'],\n writable: ['kind', 'body', 'at', 'byUid', 'contactId', 'companyId', 'dealId', 'outcome', 'durationMinutes', 'direction', 'consentSiteId'],\n writeOnly: {\n consentSiteId: stringField('The site the activity is logged on behalf of.'),\n },\n writeRequired: ['body', 'consentSiteId'],\n fields: {\n id: stringField('Activity id.'),\n object: objectKindField('activity'),\n kind: stringField('What happened, e.g. `call`, `email`, `note`.'),\n body: stringField('Free-form body.'),\n at: isoField('When the interaction happened — not when it was logged.'),\n byUid: nullableField(stringField('User who logged it.')),\n contactId: nullableField(stringField('Associated contact.')),\n companyId: nullableField(stringField('Associated company.')),\n dealId: nullableField(stringField('Associated deal.')),\n outcome: nullableField(stringField('Outcome label.')),\n durationMinutes: nullableField(integerField('Duration, for calls and meetings.')),\n direction: nullableField(stringField('Which way it went: `inbound`, `outbound` or `internal` for a call, `inbound` or `outbound` for an email.')),\n siteId: nullableField(stringField('Site the record originated on.')),\n ...RECORD_STAMPS,\n },\n ops: [\n { path: '/v1/activities', method: 'get', operationId: 'listActivities', summary: 'List activities', list: true, returns: 'Activity', entitlement: 'crm', filters: [UPDATED_AFTER_PARAM, queryParam('kind', 'Activity kind.'), queryParam('contactId', 'Associated contact.'), queryParam('dealId', 'Associated deal.')] },\n { path: '/v1/activities', method: 'post', operationId: 'createActivity', summary: 'Log an activity', accepts: 'ActivityWrite', returns: 'Activity', entitlement: 'crm', creates: true },\n { path: '/v1/activities/{activityId}', method: 'get', operationId: 'getActivity', summary: 'Retrieve an activity', returns: 'Activity', entitlement: 'crm', pathParams: [{ name: 'activityId', description: 'Activity id.' }] },\n { path: '/v1/activities/{activityId}', method: 'delete', operationId: 'deleteActivity', summary: 'Delete an activity', returns: 'Deleted', entitlement: 'crm', pathParams: [{ name: 'activityId', description: 'Activity id.' }] },\n ],\n },\n leads: {\n tag: 'Leads',\n description: 'Unqualified interest, before it becomes a contact. A lead is a record of its own: the person and their company as text, until converting makes the contact and the company.',\n schemaName: 'Lead',\n required: ['id', 'object', 'siteId'],\n writable: [\n 'siteId', 'email', 'name', 'status', 'ownerUid', 'ownerEmail', 'notes', 'unqualifiedReason', 'company', 'jobTitle', 'phone', 'website', 'address', 'tags', 'leadSource',\n // Salesforce's standard lead fields (AGL-3513).\n 'salutation', 'firstName', 'lastName', 'mobilePhone', 'fax', 'doNotCall', 'industry', 'rating', 'annualRevenueCents', 'currency', 'numberOfEmployees',\n ],\n writeNote: '`email` and `name` are taken on a create only; a `PATCH` cannot change the address, which is the lead’s identity within its site. While `firstName` or `lastName` is set, `name` is their composition, \"First Last\", and follows them.',\n writeRequired: ['email'],\n writeOnly: {\n siteId: stringField('The site the lead belongs to, instead of the `siteId` query parameter.'),\n status: stringField('One of the organization’s active lead status values by its label (CRM › Fields › Leads), or a meaning — `new`, `nurturing`, `working` or `unqualified` (`nurturing` and `unqualified` on a `PATCH` only). Stored as the meaning and the label together. A lead becomes `qualified` by being converted.'),\n ownerEmail: stringField('A member’s address, resolved against the organization’s roster. Not with `ownerUid` in the same request.'),\n },\n fields: {\n id: stringField('Lead id.'),\n object: objectKindField('lead'),\n siteId: stringField('Site the lead arrived on.'),\n email: nullableField(stringField('Email — the lead’s identity within its site.')),\n name: nullableField(stringField('Name, when supplied.')),\n status: stringField('What the lead status means: `new`, `nurturing`, `working`, `qualified` or `unqualified`. What every filter and automation reads.'),\n statusLabel: stringField('The organization’s label for the lead status value the lead holds — one of `status`’s meaning. Read-only; set it through `status`.'),\n ownerUid: nullableField(stringField('Owning user.')),\n notes: nullableField(stringField('Free-form notes.')),\n unqualifiedReason: nullableField(stringField('Why the lead was disqualified.')),\n company: nullableField(stringField('The company’s name, as text. Converting the lead is what links or creates the company record.')),\n jobTitle: nullableField(stringField('Job title.')),\n phone: nullableField(stringField('E.164 phone number.')),\n website: nullableField(stringField('An http(s) URL.')),\n address: nullableField(postalAddressField()),\n tags: stringListField('Lower-cased tags.'),\n leadSource: nullableField(\n stringField(\n \"Where the lead came from: one of the organization's active lead source values \" +\n '(CRM › Fields › Leads), matched without regard to case. Any other value is refused ' +\n 'with a 400 naming the values allowed; the value a lead already holds is kept even ' +\n \"after it is deactivated. A create that names none starts from the list's default.\",\n ),\n ),\n // Salesforce's standard lead fields (AGL-3513).\n salutation: nullableField(stringField('Salutation: one of the organization’s active Salutation values (CRM › Fields › Contacts), matched without regard to case. Any other value is a `400` naming the values allowed; the value a lead already holds is kept.')),\n firstName: nullableField(stringField('First name, at most 59 characters. While it or `lastName` is set, `name` is \"First Last\".')),\n lastName: nullableField(stringField('Last name, at most 59 characters.')),\n mobilePhone: nullableField(stringField('E.164 mobile phone number.')),\n fax: nullableField(stringField('E.164 fax number.')),\n doNotCall: booleanField('The person asked not to be phoned. A hint on every call control, never a block. `false` clears it.'),\n industry: nullableField(stringField('Industry: one of the organization’s active Industry values (CRM › Fields › Companies) — the list companies keep, so converting carries it. Any other value is a `400` naming the values allowed; the value a lead already holds is kept.')),\n rating: nullableField(stringField('Rating: one of the organization’s active Rating values (CRM › Fields › Companies). Any other value is a `400` naming the values allowed.')),\n annualRevenueCents: nullableField(integerField('Annual revenue in the minor unit of `currency`, 0 or more.')),\n currency: stringField('Lowercase ISO 4217 code of the annual revenue. `usd` when unset.'),\n numberOfEmployees: nullableField(integerField('Number of employees, 0 to 99,999,999.')),\n sources: stringListField('The surfaces that captured the lead: `signup`, `booking`, `form:{formId}`, `import`, `manual`, `api`.'),\n submissionCount: integerField('How many form submissions this lead has made.'),\n firstSeen: isoField('First interaction.'),\n lastSeen: isoField('Most recent interaction.'),\n marketingConsent: booleanField('Whether marketing consent was given.'),\n marketingConsentAt: nullableField(isoField('When consent was given.')),\n convertedContactId: nullableField(stringField('Contact created by conversion.')),\n convertedAt: nullableField(isoField('When it was converted.')),\n companyId: nullableField(stringField('Company created or matched by conversion.')),\n dealId: nullableField(stringField('Deal created by conversion.')),\n ...RECORD_STAMPS,\n },\n ops: [\n { path: '/v1/leads', method: 'get', operationId: 'listLeads', summary: 'List leads', list: true, returns: 'Lead', entitlement: 'crm', filters: [UPDATED_AFTER_PARAM, queryParam('siteId', 'Site the lead arrived on.'), queryParam('status', 'Lead status.'), queryParam('ownerUid', 'Owning user.')] },\n { path: '/v1/leads', method: 'post', operationId: 'createLead', summary: 'Create a lead', accepts: 'LeadWrite', returns: 'Lead', entitlement: 'crm', creates: true, description: 'A lead sourced outside the site, entered before anyone has qualified it. One address is one lead per site: creating one the site already holds updates it and answers 200. No contact and no company are created — converting the lead does that — and no marketing consent is recorded.' },\n { path: '/v1/leads/{leadId}', method: 'get', operationId: 'getLead', summary: 'Retrieve a lead', returns: 'Lead', entitlement: 'crm', pathParams: [{ name: 'leadId', description: 'Lead id.' }] },\n { path: '/v1/leads/{leadId}', method: 'patch', operationId: 'updateLead', summary: 'Update a lead', accepts: 'LeadWrite', returns: 'Lead', entitlement: 'crm', pathParams: [{ name: 'leadId', description: 'Lead id.' }] },\n { path: '/v1/leads/{leadId}/convert', method: 'post', operationId: 'convertLead', summary: 'Convert a lead', returns: 'LeadConversion', entitlement: 'crm', description: 'Creates a contact, and optionally a company and a deal. Idempotent on the lead: converting an already-converted lead returns the existing ids.', pathParams: [{ name: 'leadId', description: 'Lead id.' }] },\n ],\n components: {\n LeadConversion: {\n type: 'object',\n description:\n 'What the conversion produced. Idempotent on the lead: converting an ' +\n 'already-converted lead returns the existing ids rather than creating ' +\n 'a second set.',\n properties: {\n object: { type: 'string', const: 'lead_conversion' },\n contactId: { type: 'string' },\n companyId: { type: ['string', 'null'] },\n dealId: { type: ['string', 'null'] },\n },\n additionalProperties: true,\n },\n },\n },\n 'email-templates': {\n tag: 'Email templates',\n description: 'Reusable email bodies.',\n schemaName: 'EmailTemplate',\n required: ['id', 'object', 'name'],\n writable: ['name', 'kind', 'visibility', 'ownerUid', 'subject', 'body', 'consentSiteId'],\n writeOnly: {\n consentSiteId: stringField('The site the template is created on behalf of.'),\n },\n writeNote: 'A create needs `name`, `body` and `consentSiteId`; a `PATCH` that names `consentSiteId` is a `400`.',\n fields: {\n id: stringField('Template id.'),\n object: objectKindField('email_template'),\n name: stringField('Template name.'),\n kind: stringField('Template kind.'),\n visibility: stringField('`org` or `private`.'),\n ownerUid: nullableField(stringField('Owner, for a private template.')),\n subject: stringField('Subject line.'),\n body: stringField('Body. May contain merge tokens.'),\n siteId: nullableField(stringField('Site the template belongs to, when scoped.')),\n ...RECORD_STAMPS,\n },\n ops: [\n { path: '/v1/email-templates', method: 'get', operationId: 'listEmailTemplates', summary: 'List email templates', list: true, returns: 'EmailTemplate', entitlement: 'crm', filters: [UPDATED_AFTER_PARAM, queryParam('kind', 'Template kind.'), queryParam('visibility', 'Visibility.')] },\n { path: '/v1/email-templates', method: 'post', operationId: 'createEmailTemplate', summary: 'Create a template', accepts: 'EmailTemplateWrite', returns: 'EmailTemplate', entitlement: 'crm', creates: true },\n { path: '/v1/email-templates/{templateId}', method: 'get', operationId: 'getEmailTemplate', summary: 'Retrieve a template', returns: 'EmailTemplate', entitlement: 'crm', pathParams: [{ name: 'templateId', description: 'Template id.' }] },\n { path: '/v1/email-templates/{templateId}', method: 'patch', operationId: 'updateEmailTemplate', summary: 'Update a template', accepts: 'EmailTemplateWrite', returns: 'EmailTemplate', entitlement: 'crm', pathParams: [{ name: 'templateId', description: 'Template id.' }] },\n { path: '/v1/email-templates/{templateId}', method: 'delete', operationId: 'deleteEmailTemplate', summary: 'Delete a template', returns: 'Deleted', entitlement: 'crm', pathParams: [{ name: 'templateId', description: 'Template id.' }] },\n ],\n },\n}\n"],"names":["booleanField","integerField","isoField","nullableField","objectKindField","openObjectField","postalAddressField","queryParam","RECORD_STAMPS","stringField","stringListField","UPDATED_AFTER_PARAM","companyPicklistNote","label","plural","CRM_API_V1_DESCRIPTIONS","contacts","tag","description","schemaName","required","writable","writeOnly","consentSiteId","consentGroupId","custom","mediaIds","writeNote","fields","id","object","email","name","tags","notes","marketingConsent","consentSites","sources","phone","jobTitle","companyId","address","ownerUid","lifecycleStage","leadSource","salutation","firstName","lastName","department","mobilePhone","homePhone","otherPhone","fax","birthdate","assistantName","assistantPhone","reportsToContactId","otherAddress","doNotCall","companyIds","alternateEmails","ops","path","method","operationId","summary","list","returns","entitlement","filters","accepts","creates","pathParams","components","ContactMerge","type","properties","sourceContactId","additionalProperties","companies","domain","website","industry","rating","ownership","accountSource","annualRevenueCents","currency","numberOfEmployees","accountNumber","site","tickerSymbol","sicCode","shippingAddress","parentCompanyId","nextTaskAt","siteId","pipelines","isDefault","archived","archivedAt","stages","items","order","probability","kind","enum","forecastCategory","deals","title","pipelineId","stageId","status","amountCents","lineItems","expectedCloseAt","closedAt","stageChangedAt","contactId","contactRoles","role","primary","lostReason","nextStep","campaignId","tasks","typeLabel","priority","priorityLabel","statusLabel","dueAt","remindAt","reminderSentAt","completedAt","assigneeUid","dealId","activities","writeRequired","body","at","byUid","outcome","durationMinutes","direction","leads","ownerEmail","unqualifiedReason","company","submissionCount","firstSeen","lastSeen","marketingConsentAt","convertedContactId","convertedAt","LeadConversion","const","visibility","subject"],"mappings":"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"}
|