@kelpie/server 0.7.0 → 0.9.0
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/dist/lib/consumerEmailDomains.d.ts +2 -0
- package/dist/lib/consumerEmailDomains.d.ts.map +1 -0
- package/dist/lib/consumerEmailDomains.js +62 -0
- package/dist/lib/consumerEmailDomains.js.map +1 -0
- package/dist/lib/email.d.ts +7 -0
- package/dist/lib/email.d.ts.map +1 -1
- package/dist/lib/email.js.map +1 -1
- package/dist/lib/emailContent.d.ts +33 -0
- package/dist/lib/emailContent.d.ts.map +1 -0
- package/dist/lib/emailContent.js +54 -0
- package/dist/lib/emailContent.js.map +1 -0
- package/dist/lib/emailDomainAutoLink.d.ts +27 -0
- package/dist/lib/emailDomainAutoLink.d.ts.map +1 -0
- package/dist/lib/emailDomainAutoLink.js +119 -0
- package/dist/lib/emailDomainAutoLink.js.map +1 -0
- package/dist/lib/ids.d.ts +13 -0
- package/dist/lib/ids.d.ts.map +1 -1
- package/dist/lib/ids.js +13 -0
- package/dist/lib/ids.js.map +1 -1
- package/dist/modules/activities/repository.d.ts.map +1 -1
- package/dist/modules/activities/repository.js +19 -20
- package/dist/modules/activities/repository.js.map +1 -1
- package/dist/modules/activities/wording.d.ts +12 -0
- package/dist/modules/activities/wording.d.ts.map +1 -1
- package/dist/modules/activities/wording.js +16 -0
- package/dist/modules/activities/wording.js.map +1 -1
- package/dist/modules/agent-tasks/catalog.d.ts.map +1 -1
- package/dist/modules/agent-tasks/catalog.js +62 -0
- package/dist/modules/agent-tasks/catalog.js.map +1 -1
- package/dist/modules/agent-tasks/resolve.d.ts.map +1 -1
- package/dist/modules/agent-tasks/resolve.js +42 -9
- package/dist/modules/agent-tasks/resolve.js.map +1 -1
- package/dist/modules/agent-tasks/routes.d.ts +2 -0
- package/dist/modules/agent-tasks/routes.d.ts.map +1 -1
- package/dist/modules/attachedRecords.d.ts +6 -1
- package/dist/modules/attachedRecords.d.ts.map +1 -1
- package/dist/modules/attachedRecords.js +18 -2
- package/dist/modules/attachedRecords.js.map +1 -1
- package/dist/modules/auth/preferences.d.ts +11 -1
- package/dist/modules/auth/preferences.d.ts.map +1 -1
- package/dist/modules/auth/preferences.js +11 -0
- package/dist/modules/auth/preferences.js.map +1 -1
- package/dist/modules/auth/routes.d.ts.map +1 -1
- package/dist/modules/auth/routes.js +18 -0
- package/dist/modules/auth/routes.js.map +1 -1
- package/dist/modules/auth/schema.d.ts +20 -0
- package/dist/modules/auth/schema.d.ts.map +1 -1
- package/dist/modules/auth/schema.js +11 -1
- package/dist/modules/auth/schema.js.map +1 -1
- package/dist/modules/auth/service.d.ts.map +1 -1
- package/dist/modules/auth/service.js +27 -3
- package/dist/modules/auth/service.js.map +1 -1
- package/dist/modules/companies/index.d.ts.map +1 -1
- package/dist/modules/companies/index.js +3 -1
- package/dist/modules/companies/index.js.map +1 -1
- package/dist/modules/companies/repository.d.ts +2 -0
- package/dist/modules/companies/repository.d.ts.map +1 -1
- package/dist/modules/companies/repository.js +1 -0
- package/dist/modules/companies/repository.js.map +1 -1
- package/dist/modules/companies/routes.d.ts +16 -0
- package/dist/modules/companies/routes.d.ts.map +1 -1
- package/dist/modules/companies/routes.js +18 -0
- package/dist/modules/companies/routes.js.map +1 -1
- package/dist/modules/companies/schema.d.ts +37 -0
- package/dist/modules/companies/schema.d.ts.map +1 -1
- package/dist/modules/companies/schema.js +10 -1
- package/dist/modules/companies/schema.js.map +1 -1
- package/dist/modules/companies/service.d.ts +6 -0
- package/dist/modules/companies/service.d.ts.map +1 -1
- package/dist/modules/companies/service.js +45 -11
- package/dist/modules/companies/service.js.map +1 -1
- package/dist/modules/consent-purposes/capabilities.d.ts +7 -0
- package/dist/modules/consent-purposes/capabilities.d.ts.map +1 -0
- package/dist/modules/consent-purposes/capabilities.js +10 -0
- package/dist/modules/consent-purposes/capabilities.js.map +1 -0
- package/dist/modules/consent-purposes/events.d.ts +38 -0
- package/dist/modules/consent-purposes/events.d.ts.map +1 -0
- package/dist/modules/consent-purposes/events.js +17 -0
- package/dist/modules/consent-purposes/events.js.map +1 -0
- package/dist/modules/consent-purposes/index.d.ts +13 -0
- package/dist/modules/consent-purposes/index.d.ts.map +1 -0
- package/dist/modules/consent-purposes/index.js +41 -0
- package/dist/modules/consent-purposes/index.js.map +1 -0
- package/dist/modules/consent-purposes/repository.d.ts +21 -0
- package/dist/modules/consent-purposes/repository.d.ts.map +1 -0
- package/dist/modules/consent-purposes/repository.js +98 -0
- package/dist/modules/consent-purposes/repository.js.map +1 -0
- package/dist/modules/consent-purposes/routes.d.ts +39 -0
- package/dist/modules/consent-purposes/routes.d.ts.map +1 -0
- package/dist/modules/consent-purposes/routes.js +79 -0
- package/dist/modules/consent-purposes/routes.js.map +1 -0
- package/dist/modules/consent-purposes/schema.d.ts +175 -0
- package/dist/modules/consent-purposes/schema.d.ts.map +1 -0
- package/dist/modules/consent-purposes/schema.js +35 -0
- package/dist/modules/consent-purposes/schema.js.map +1 -0
- package/dist/modules/consent-purposes/service.d.ts +50 -0
- package/dist/modules/consent-purposes/service.d.ts.map +1 -0
- package/dist/modules/consent-purposes/service.js +263 -0
- package/dist/modules/consent-purposes/service.js.map +1 -0
- package/dist/modules/consent-purposes/starters.d.ts +17 -0
- package/dist/modules/consent-purposes/starters.d.ts.map +1 -0
- package/dist/modules/consent-purposes/starters.js +15 -0
- package/dist/modules/consent-purposes/starters.js.map +1 -0
- package/dist/modules/consent-purposes/tools.d.ts +4 -0
- package/dist/modules/consent-purposes/tools.d.ts.map +1 -0
- package/dist/modules/consent-purposes/tools.js +29 -0
- package/dist/modules/consent-purposes/tools.js.map +1 -0
- package/dist/modules/core.d.ts.map +1 -1
- package/dist/modules/core.js +21 -0
- package/dist/modules/core.js.map +1 -1
- package/dist/modules/custom-fields/capabilities.d.ts +12 -0
- package/dist/modules/custom-fields/capabilities.d.ts.map +1 -0
- package/dist/modules/custom-fields/capabilities.js +15 -0
- package/dist/modules/custom-fields/capabilities.js.map +1 -0
- package/dist/modules/custom-fields/events.d.ts +49 -0
- package/dist/modules/custom-fields/events.d.ts.map +1 -0
- package/dist/modules/custom-fields/events.js +25 -0
- package/dist/modules/custom-fields/events.js.map +1 -0
- package/dist/modules/custom-fields/index.d.ts +19 -0
- package/dist/modules/custom-fields/index.d.ts.map +1 -0
- package/dist/modules/custom-fields/index.js +46 -0
- package/dist/modules/custom-fields/index.js.map +1 -0
- package/dist/modules/custom-fields/repository.d.ts +37 -0
- package/dist/modules/custom-fields/repository.d.ts.map +1 -0
- package/dist/modules/custom-fields/repository.js +144 -0
- package/dist/modules/custom-fields/repository.js.map +1 -0
- package/dist/modules/custom-fields/routes.d.ts +44 -0
- package/dist/modules/custom-fields/routes.d.ts.map +1 -0
- package/dist/modules/custom-fields/routes.js +103 -0
- package/dist/modules/custom-fields/routes.js.map +1 -0
- package/dist/modules/custom-fields/schema.d.ts +215 -0
- package/dist/modules/custom-fields/schema.d.ts.map +1 -0
- package/dist/modules/custom-fields/schema.js +43 -0
- package/dist/modules/custom-fields/schema.js.map +1 -0
- package/dist/modules/custom-fields/service.d.ts +57 -0
- package/dist/modules/custom-fields/service.d.ts.map +1 -0
- package/dist/modules/custom-fields/service.js +273 -0
- package/dist/modules/custom-fields/service.js.map +1 -0
- package/dist/modules/custom-fields/tools.d.ts +4 -0
- package/dist/modules/custom-fields/tools.d.ts.map +1 -0
- package/dist/modules/custom-fields/tools.js +38 -0
- package/dist/modules/custom-fields/tools.js.map +1 -0
- package/dist/modules/custom-fields/values.d.ts +49 -0
- package/dist/modules/custom-fields/values.d.ts.map +1 -0
- package/dist/modules/custom-fields/values.js +249 -0
- package/dist/modules/custom-fields/values.js.map +1 -0
- package/dist/modules/custom-fields/wire.d.ts +12 -0
- package/dist/modules/custom-fields/wire.d.ts.map +1 -0
- package/dist/modules/custom-fields/wire.js +30 -0
- package/dist/modules/custom-fields/wire.js.map +1 -0
- package/dist/modules/dashboard/repository.d.ts.map +1 -1
- package/dist/modules/dashboard/repository.js +4 -3
- package/dist/modules/dashboard/repository.js.map +1 -1
- package/dist/modules/deals/index.d.ts +2 -1
- package/dist/modules/deals/index.d.ts.map +1 -1
- package/dist/modules/deals/index.js +5 -2
- package/dist/modules/deals/index.js.map +1 -1
- package/dist/modules/deals/repository.d.ts +0 -16
- package/dist/modules/deals/repository.d.ts.map +1 -1
- package/dist/modules/deals/repository.js +6 -76
- package/dist/modules/deals/repository.js.map +1 -1
- package/dist/modules/deals/routes.d.ts +14 -0
- package/dist/modules/deals/routes.d.ts.map +1 -1
- package/dist/modules/deals/routes.js +7 -0
- package/dist/modules/deals/routes.js.map +1 -1
- package/dist/modules/deals/schema.d.ts +20 -42
- package/dist/modules/deals/schema.d.ts.map +1 -1
- package/dist/modules/deals/schema.js +6 -11
- package/dist/modules/deals/schema.js.map +1 -1
- package/dist/modules/deals/service.d.ts +13 -2
- package/dist/modules/deals/service.d.ts.map +1 -1
- package/dist/modules/deals/service.js +43 -20
- package/dist/modules/deals/service.js.map +1 -1
- package/dist/modules/decisions/repository.d.ts.map +1 -1
- package/dist/modules/decisions/repository.js +2 -0
- package/dist/modules/decisions/repository.js.map +1 -1
- package/dist/modules/decisions/routes.d.ts +1 -0
- package/dist/modules/decisions/routes.d.ts.map +1 -1
- package/dist/modules/email-domain-linker/index.d.ts +12 -0
- package/dist/modules/email-domain-linker/index.d.ts.map +1 -0
- package/dist/modules/email-domain-linker/index.js +34 -0
- package/dist/modules/email-domain-linker/index.js.map +1 -0
- package/dist/modules/email-domain-linker/routes.d.ts +14 -0
- package/dist/modules/email-domain-linker/routes.d.ts.map +1 -0
- package/dist/modules/email-domain-linker/routes.js +15 -0
- package/dist/modules/email-domain-linker/routes.js.map +1 -0
- package/dist/modules/email-domain-linker/service.d.ts +37 -0
- package/dist/modules/email-domain-linker/service.d.ts.map +1 -0
- package/dist/modules/email-domain-linker/service.js +63 -0
- package/dist/modules/email-domain-linker/service.js.map +1 -0
- package/dist/modules/enquiries/events.d.ts +44 -0
- package/dist/modules/enquiries/events.d.ts.map +1 -0
- package/dist/modules/enquiries/events.js +19 -0
- package/dist/modules/enquiries/events.js.map +1 -0
- package/dist/modules/enquiries/index.d.ts +13 -0
- package/dist/modules/enquiries/index.d.ts.map +1 -0
- package/dist/modules/enquiries/index.js +44 -0
- package/dist/modules/enquiries/index.js.map +1 -0
- package/dist/modules/enquiries/repository.d.ts +30 -0
- package/dist/modules/enquiries/repository.d.ts.map +1 -0
- package/dist/modules/enquiries/repository.js +94 -0
- package/dist/modules/enquiries/repository.js.map +1 -0
- package/dist/modules/enquiries/routes.d.ts +52 -0
- package/dist/modules/enquiries/routes.d.ts.map +1 -0
- package/dist/modules/enquiries/routes.js +127 -0
- package/dist/modules/enquiries/routes.js.map +1 -0
- package/dist/modules/enquiries/schema.d.ts +290 -0
- package/dist/modules/enquiries/schema.d.ts.map +1 -0
- package/dist/modules/enquiries/schema.js +52 -0
- package/dist/modules/enquiries/schema.js.map +1 -0
- package/dist/modules/enquiries/service.d.ts +85 -0
- package/dist/modules/enquiries/service.d.ts.map +1 -0
- package/dist/modules/enquiries/service.js +370 -0
- package/dist/modules/enquiries/service.js.map +1 -0
- package/dist/modules/enquiries/tools.d.ts +4 -0
- package/dist/modules/enquiries/tools.d.ts.map +1 -0
- package/dist/modules/enquiries/tools.js +50 -0
- package/dist/modules/enquiries/tools.js.map +1 -0
- package/dist/modules/eventCatalogs.d.ts +4 -0
- package/dist/modules/eventCatalogs.d.ts.map +1 -1
- package/dist/modules/eventCatalogs.js +4 -0
- package/dist/modules/eventCatalogs.js.map +1 -1
- package/dist/modules/forms/embed.d.ts +20 -6
- package/dist/modules/forms/embed.d.ts.map +1 -1
- package/dist/modules/forms/embed.js +359 -43
- package/dist/modules/forms/embed.js.map +1 -1
- package/dist/modules/forms/events.d.ts +20 -7
- package/dist/modules/forms/events.d.ts.map +1 -1
- package/dist/modules/forms/events.js +20 -2
- package/dist/modules/forms/events.js.map +1 -1
- package/dist/modules/forms/fields.d.ts +14 -1
- package/dist/modules/forms/fields.d.ts.map +1 -1
- package/dist/modules/forms/fields.js +87 -3
- package/dist/modules/forms/fields.js.map +1 -1
- package/dist/modules/forms/index.d.ts.map +1 -1
- package/dist/modules/forms/index.js +12 -1
- package/dist/modules/forms/index.js.map +1 -1
- package/dist/modules/forms/mapping.d.ts +62 -5
- package/dist/modules/forms/mapping.d.ts.map +1 -1
- package/dist/modules/forms/mapping.js +139 -5
- package/dist/modules/forms/mapping.js.map +1 -1
- package/dist/modules/forms/publicRoutes.d.ts.map +1 -1
- package/dist/modules/forms/publicRoutes.js +29 -1
- package/dist/modules/forms/publicRoutes.js.map +1 -1
- package/dist/modules/forms/repository.d.ts +31 -0
- package/dist/modules/forms/repository.d.ts.map +1 -1
- package/dist/modules/forms/repository.js +90 -1
- package/dist/modules/forms/repository.js.map +1 -1
- package/dist/modules/forms/routes.d.ts +83 -1
- package/dist/modules/forms/routes.d.ts.map +1 -1
- package/dist/modules/forms/routes.js +185 -2
- package/dist/modules/forms/routes.js.map +1 -1
- package/dist/modules/forms/schema.d.ts +672 -1
- package/dist/modules/forms/schema.d.ts.map +1 -1
- package/dist/modules/forms/schema.js +146 -3
- package/dist/modules/forms/schema.js.map +1 -1
- package/dist/modules/forms/service.d.ts +54 -1
- package/dist/modules/forms/service.d.ts.map +1 -1
- package/dist/modules/forms/service.js +338 -28
- package/dist/modules/forms/service.js.map +1 -1
- package/dist/modules/forms/submission.d.ts +15 -0
- package/dist/modules/forms/submission.d.ts.map +1 -1
- package/dist/modules/forms/submission.js +418 -40
- package/dist/modules/forms/submission.js.map +1 -1
- package/dist/modules/import-export/drafts.d.ts +10 -0
- package/dist/modules/import-export/drafts.d.ts.map +1 -1
- package/dist/modules/import-export/drafts.js +16 -2
- package/dist/modules/import-export/drafts.js.map +1 -1
- package/dist/modules/import-export/exportRows.d.ts +7 -4
- package/dist/modules/import-export/exportRows.d.ts.map +1 -1
- package/dist/modules/import-export/exportRows.js +20 -5
- package/dist/modules/import-export/exportRows.js.map +1 -1
- package/dist/modules/import-export/plan.d.ts +12 -1
- package/dist/modules/import-export/plan.d.ts.map +1 -1
- package/dist/modules/import-export/plan.js +29 -2
- package/dist/modules/import-export/plan.js.map +1 -1
- package/dist/modules/import-export/presets.d.ts.map +1 -1
- package/dist/modules/import-export/presets.js +10 -0
- package/dist/modules/import-export/presets.js.map +1 -1
- package/dist/modules/import-export/repository.d.ts +11 -1
- package/dist/modules/import-export/repository.d.ts.map +1 -1
- package/dist/modules/import-export/repository.js +42 -9
- package/dist/modules/import-export/repository.js.map +1 -1
- package/dist/modules/import-export/routes.d.ts.map +1 -1
- package/dist/modules/import-export/routes.js +4 -0
- package/dist/modules/import-export/routes.js.map +1 -1
- package/dist/modules/import-export/schema.d.ts +17 -0
- package/dist/modules/import-export/schema.d.ts.map +1 -1
- package/dist/modules/import-export/schema.js +11 -0
- package/dist/modules/import-export/schema.js.map +1 -1
- package/dist/modules/import-export/service.d.ts +6 -0
- package/dist/modules/import-export/service.d.ts.map +1 -1
- package/dist/modules/import-export/service.js +14 -2
- package/dist/modules/import-export/service.js.map +1 -1
- package/dist/modules/import-export/streams.d.ts.map +1 -1
- package/dist/modules/import-export/streams.js +3 -3
- package/dist/modules/import-export/streams.js.map +1 -1
- package/dist/modules/import-export/tools.d.ts.map +1 -1
- package/dist/modules/import-export/tools.js +8 -0
- package/dist/modules/import-export/tools.js.map +1 -1
- package/dist/modules/import-export/validation.d.ts.map +1 -1
- package/dist/modules/import-export/validation.js +22 -1
- package/dist/modules/import-export/validation.js.map +1 -1
- package/dist/modules/import-export/writes.d.ts.map +1 -1
- package/dist/modules/import-export/writes.js +37 -4
- package/dist/modules/import-export/writes.js.map +1 -1
- package/dist/modules/lists/events.d.ts +42 -0
- package/dist/modules/lists/events.d.ts.map +1 -0
- package/dist/modules/lists/events.js +16 -0
- package/dist/modules/lists/events.js.map +1 -0
- package/dist/modules/lists/index.d.ts +10 -0
- package/dist/modules/lists/index.d.ts.map +1 -0
- package/dist/modules/lists/index.js +35 -0
- package/dist/modules/lists/index.js.map +1 -0
- package/dist/modules/lists/repository.d.ts +80 -0
- package/dist/modules/lists/repository.d.ts.map +1 -0
- package/dist/modules/lists/repository.js +178 -0
- package/dist/modules/lists/repository.js.map +1 -0
- package/dist/modules/lists/routes.d.ts +55 -0
- package/dist/modules/lists/routes.d.ts.map +1 -0
- package/dist/modules/lists/routes.js +168 -0
- package/dist/modules/lists/routes.js.map +1 -0
- package/dist/modules/lists/schema.d.ts +281 -0
- package/dist/modules/lists/schema.d.ts.map +1 -0
- package/dist/modules/lists/schema.js +83 -0
- package/dist/modules/lists/schema.js.map +1 -0
- package/dist/modules/lists/service.d.ts +82 -0
- package/dist/modules/lists/service.d.ts.map +1 -0
- package/dist/modules/lists/service.js +262 -0
- package/dist/modules/lists/service.js.map +1 -0
- package/dist/modules/lists/tools.d.ts +4 -0
- package/dist/modules/lists/tools.d.ts.map +1 -0
- package/dist/modules/lists/tools.js +86 -0
- package/dist/modules/lists/tools.js.map +1 -0
- package/dist/modules/mcp/index.d.ts.map +1 -1
- package/dist/modules/mcp/index.js +5 -0
- package/dist/modules/mcp/index.js.map +1 -1
- package/dist/modules/notes/routes.d.ts +1 -0
- package/dist/modules/notes/routes.d.ts.map +1 -1
- package/dist/modules/opportunities/index.d.ts.map +1 -1
- package/dist/modules/opportunities/index.js +3 -1
- package/dist/modules/opportunities/index.js.map +1 -1
- package/dist/modules/opportunities/repository.d.ts +2 -0
- package/dist/modules/opportunities/repository.d.ts.map +1 -1
- package/dist/modules/opportunities/repository.js +4 -0
- package/dist/modules/opportunities/repository.js.map +1 -1
- package/dist/modules/opportunities/routes.d.ts +16 -0
- package/dist/modules/opportunities/routes.d.ts.map +1 -1
- package/dist/modules/opportunities/routes.js +13 -0
- package/dist/modules/opportunities/routes.js.map +1 -1
- package/dist/modules/opportunities/schema.d.ts +20 -0
- package/dist/modules/opportunities/schema.d.ts.map +1 -1
- package/dist/modules/opportunities/schema.js +6 -1
- package/dist/modules/opportunities/schema.js.map +1 -1
- package/dist/modules/opportunities/service.d.ts +20 -3
- package/dist/modules/opportunities/service.d.ts.map +1 -1
- package/dist/modules/opportunities/service.js +99 -18
- package/dist/modules/opportunities/service.js.map +1 -1
- package/dist/modules/opportunities/tools.d.ts.map +1 -1
- package/dist/modules/opportunities/tools.js +2 -0
- package/dist/modules/opportunities/tools.js.map +1 -1
- package/dist/modules/partnerships/index.d.ts.map +1 -1
- package/dist/modules/partnerships/index.js +3 -1
- package/dist/modules/partnerships/index.js.map +1 -1
- package/dist/modules/partnerships/repository.d.ts +0 -17
- package/dist/modules/partnerships/repository.d.ts.map +1 -1
- package/dist/modules/partnerships/repository.js +6 -82
- package/dist/modules/partnerships/repository.js.map +1 -1
- package/dist/modules/partnerships/routes.d.ts +14 -0
- package/dist/modules/partnerships/routes.d.ts.map +1 -1
- package/dist/modules/partnerships/routes.js +7 -0
- package/dist/modules/partnerships/routes.js.map +1 -1
- package/dist/modules/partnerships/schema.d.ts +20 -41
- package/dist/modules/partnerships/schema.d.ts.map +1 -1
- package/dist/modules/partnerships/schema.js +6 -10
- package/dist/modules/partnerships/schema.js.map +1 -1
- package/dist/modules/partnerships/service.d.ts +11 -1
- package/dist/modules/partnerships/service.d.ts.map +1 -1
- package/dist/modules/partnerships/service.js +43 -20
- package/dist/modules/partnerships/service.js.map +1 -1
- package/dist/modules/people/consentHydration.d.ts +26 -0
- package/dist/modules/people/consentHydration.d.ts.map +1 -0
- package/dist/modules/people/consentHydration.js +100 -0
- package/dist/modules/people/consentHydration.js.map +1 -0
- package/dist/modules/people/index.d.ts.map +1 -1
- package/dist/modules/people/index.js +3 -1
- package/dist/modules/people/index.js.map +1 -1
- package/dist/modules/people/personConsentWrites.d.ts +40 -0
- package/dist/modules/people/personConsentWrites.d.ts.map +1 -0
- package/dist/modules/people/personConsentWrites.js +98 -0
- package/dist/modules/people/personConsentWrites.js.map +1 -0
- package/dist/modules/people/repository.d.ts +11 -0
- package/dist/modules/people/repository.d.ts.map +1 -1
- package/dist/modules/people/repository.js +21 -1
- package/dist/modules/people/repository.js.map +1 -1
- package/dist/modules/people/routes.d.ts +57 -4
- package/dist/modules/people/routes.d.ts.map +1 -1
- package/dist/modules/people/routes.js +104 -5
- package/dist/modules/people/routes.js.map +1 -1
- package/dist/modules/people/schema.d.ts +366 -1
- package/dist/modules/people/schema.d.ts.map +1 -1
- package/dist/modules/people/schema.js +92 -2
- package/dist/modules/people/schema.js.map +1 -1
- package/dist/modules/people/service.d.ts +30 -1
- package/dist/modules/people/service.d.ts.map +1 -1
- package/dist/modules/people/service.js +131 -36
- package/dist/modules/people/service.js.map +1 -1
- package/dist/modules/people/tools.d.ts.map +1 -1
- package/dist/modules/people/tools.js +4 -1
- package/dist/modules/people/tools.js.map +1 -1
- package/dist/modules/personLinks.d.ts +79 -0
- package/dist/modules/personLinks.d.ts.map +1 -0
- package/dist/modules/personLinks.js +155 -0
- package/dist/modules/personLinks.js.map +1 -0
- package/dist/modules/pipelines/routes.d.ts +1 -0
- package/dist/modules/pipelines/routes.d.ts.map +1 -1
- package/dist/modules/plans/routes.d.ts +1 -0
- package/dist/modules/plans/routes.d.ts.map +1 -1
- package/dist/modules/positions/routes.d.ts.map +1 -1
- package/dist/modules/positions/routes.js +4 -2
- package/dist/modules/positions/routes.js.map +1 -1
- package/dist/modules/raises/index.d.ts.map +1 -1
- package/dist/modules/raises/index.js +3 -1
- package/dist/modules/raises/index.js.map +1 -1
- package/dist/modules/raises/repository.d.ts +0 -17
- package/dist/modules/raises/repository.d.ts.map +1 -1
- package/dist/modules/raises/repository.js +6 -77
- package/dist/modules/raises/repository.js.map +1 -1
- package/dist/modules/raises/routes.d.ts +14 -0
- package/dist/modules/raises/routes.d.ts.map +1 -1
- package/dist/modules/raises/routes.js +7 -0
- package/dist/modules/raises/routes.js.map +1 -1
- package/dist/modules/raises/schema.d.ts +20 -41
- package/dist/modules/raises/schema.d.ts.map +1 -1
- package/dist/modules/raises/schema.js +6 -10
- package/dist/modules/raises/schema.js.map +1 -1
- package/dist/modules/raises/service.d.ts +11 -1
- package/dist/modules/raises/service.d.ts.map +1 -1
- package/dist/modules/raises/service.js +41 -18
- package/dist/modules/raises/service.js.map +1 -1
- package/dist/modules/recordTargets.d.ts.map +1 -1
- package/dist/modules/recordTargets.js +2 -0
- package/dist/modules/recordTargets.js.map +1 -1
- package/dist/modules/references.d.ts +10 -0
- package/dist/modules/references.d.ts.map +1 -1
- package/dist/modules/references.js +27 -4
- package/dist/modules/references.js.map +1 -1
- package/dist/modules/sample-data/fixture.d.ts +160 -0
- package/dist/modules/sample-data/fixture.d.ts.map +1 -0
- package/dist/modules/sample-data/fixture.js +501 -0
- package/dist/modules/sample-data/fixture.js.map +1 -0
- package/dist/modules/sample-data/index.d.ts +11 -0
- package/dist/modules/sample-data/index.d.ts.map +1 -0
- package/dist/modules/sample-data/index.js +44 -0
- package/dist/modules/sample-data/index.js.map +1 -0
- package/dist/modules/sample-data/routes.d.ts +15 -0
- package/dist/modules/sample-data/routes.d.ts.map +1 -0
- package/dist/modules/sample-data/routes.js +25 -0
- package/dist/modules/sample-data/routes.js.map +1 -0
- package/dist/modules/sample-data/service.d.ts +39 -0
- package/dist/modules/sample-data/service.d.ts.map +1 -0
- package/dist/modules/sample-data/service.js +481 -0
- package/dist/modules/sample-data/service.js.map +1 -0
- package/dist/modules/sample-data/tools.d.ts +4 -0
- package/dist/modules/sample-data/tools.d.ts.map +1 -0
- package/dist/modules/sample-data/tools.js +22 -0
- package/dist/modules/sample-data/tools.js.map +1 -0
- package/dist/modules/search/index.d.ts +1 -1
- package/dist/modules/search/index.d.ts.map +1 -1
- package/dist/modules/search/index.js +2 -1
- package/dist/modules/search/index.js.map +1 -1
- package/dist/modules/search/repository.d.ts +1 -0
- package/dist/modules/search/repository.d.ts.map +1 -1
- package/dist/modules/search/repository.js +23 -0
- package/dist/modules/search/repository.js.map +1 -1
- package/dist/modules/search/service.d.ts +3 -3
- package/dist/modules/search/service.d.ts.map +1 -1
- package/dist/modules/search/service.js +5 -4
- package/dist/modules/search/service.js.map +1 -1
- package/dist/modules/smtp-email/index.d.ts +1 -0
- package/dist/modules/smtp-email/index.d.ts.map +1 -1
- package/dist/modules/smtp-email/index.js +1 -0
- package/dist/modules/smtp-email/index.js.map +1 -1
- package/dist/modules/stagedRecords.d.ts +3 -3
- package/dist/modules/stagedRecords.d.ts.map +1 -1
- package/dist/modules/stagedRecords.js +9 -0
- package/dist/modules/stagedRecords.js.map +1 -1
- package/dist/modules/webhooks/payloads.d.ts.map +1 -1
- package/dist/modules/webhooks/payloads.js +15 -2
- package/dist/modules/webhooks/payloads.js.map +1 -1
- package/dist/modules/workspace/repository.d.ts +2 -0
- package/dist/modules/workspace/repository.d.ts.map +1 -1
- package/dist/modules/workspace/repository.js +7 -0
- package/dist/modules/workspace/repository.js.map +1 -1
- package/dist/modules/workspace/service.d.ts.map +1 -1
- package/dist/modules/workspace/service.js +20 -1
- package/dist/modules/workspace/service.js.map +1 -1
- package/dist/modules/workspace/starters.d.ts.map +1 -1
- package/dist/modules/workspace/starters.js +5 -0
- package/dist/modules/workspace/starters.js.map +1 -1
- package/dist/runtime/events.d.ts +1 -1
- package/dist/runtime/events.d.ts.map +1 -1
- package/dist/runtime/events.js +1 -0
- package/dist/runtime/events.js.map +1 -1
- package/dist/schema/index.d.ts +4 -0
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +4 -0
- package/dist/schema/index.js.map +1 -1
- package/dist/testing/database.d.ts +5 -1
- package/dist/testing/database.d.ts.map +1 -1
- package/dist/testing/database.js +81 -10
- package/dist/testing/database.js.map +1 -1
- package/migrations/0021_certain_maggott.sql +30 -0
- package/migrations/0022_stormy_manta.sql +1 -0
- package/migrations/0023_funny_maddog.sql +1 -0
- package/migrations/0024_third_king_cobra.sql +46 -0
- package/migrations/0025_worthless_chimera.sql +3 -0
- package/migrations/0026_late_aqueduct.sql +46 -0
- package/migrations/0027_brainy_silver_sable.sql +3 -0
- package/migrations/0028_freezing_scrambler.sql +19 -0
- package/migrations/0029_custom_fields.sql +26 -0
- package/migrations/0030_enquiries.sql +79 -0
- package/migrations/0031_consent.sql +45 -0
- package/migrations/0032_form_field_statement.sql +1 -0
- package/migrations/0033_form_field_consent_purpose_ids.sql +5 -0
- package/migrations/0034_drop_form_field_consent_purpose_id.sql +1 -0
- package/migrations/0035_form_field_consent_purpose_labels.sql +1 -0
- package/migrations/0036_form_field_notice_type.sql +2 -0
- package/migrations/meta/0021_snapshot.json +5389 -0
- package/migrations/meta/0022_snapshot.json +5396 -0
- package/migrations/meta/0023_snapshot.json +5403 -0
- package/migrations/meta/0024_snapshot.json +5516 -0
- package/migrations/meta/0025_snapshot.json +5336 -0
- package/migrations/meta/0026_snapshot.json +5710 -0
- package/migrations/meta/0027_snapshot.json +5716 -0
- package/migrations/meta/0028_snapshot.json +5740 -0
- package/migrations/meta/0029_snapshot.json +5935 -0
- package/migrations/meta/0030_snapshot.json +6245 -0
- package/migrations/meta/0031_snapshot.json +6572 -0
- package/migrations/meta/0032_snapshot.json +6578 -0
- package/migrations/meta/0033_snapshot.json +6572 -0
- package/migrations/meta/0034_snapshot.json +6566 -0
- package/migrations/meta/0035_snapshot.json +6573 -0
- package/migrations/meta/0036_snapshot.json +6573 -0
- package/migrations/meta/_journal.json +112 -0
- package/package.json +3 -2
- package/src/lib/consumerEmailDomains.ts +62 -0
- package/src/lib/email.ts +7 -0
- package/src/lib/emailContent.ts +91 -0
- package/src/lib/emailDomainAutoLink.ts +165 -0
- package/src/lib/ids.ts +13 -0
- package/src/modules/activities/repository.ts +22 -23
- package/src/modules/activities/wording.ts +18 -0
- package/src/modules/agent-tasks/catalog.ts +63 -0
- package/src/modules/agent-tasks/resolve.ts +64 -24
- package/src/modules/attachedRecords.ts +37 -3
- package/src/modules/auth/preferences.ts +13 -1
- package/src/modules/auth/routes.ts +22 -0
- package/src/modules/auth/schema.ts +12 -2
- package/src/modules/auth/service.ts +37 -3
- package/src/modules/companies/index.ts +3 -1
- package/src/modules/companies/repository.ts +3 -0
- package/src/modules/companies/routes.ts +20 -0
- package/src/modules/companies/schema.ts +11 -1
- package/src/modules/companies/service.ts +72 -12
- package/src/modules/consent-purposes/capabilities.ts +12 -0
- package/src/modules/consent-purposes/events.ts +38 -0
- package/src/modules/consent-purposes/index.ts +48 -0
- package/src/modules/consent-purposes/repository.ts +163 -0
- package/src/modules/consent-purposes/routes.ts +122 -0
- package/src/modules/consent-purposes/schema.ts +46 -0
- package/src/modules/consent-purposes/service.ts +423 -0
- package/src/modules/consent-purposes/starters.ts +32 -0
- package/src/modules/consent-purposes/tools.ts +44 -0
- package/src/modules/core.ts +21 -0
- package/src/modules/custom-fields/capabilities.ts +17 -0
- package/src/modules/custom-fields/events.ts +51 -0
- package/src/modules/custom-fields/index.ts +61 -0
- package/src/modules/custom-fields/repository.ts +225 -0
- package/src/modules/custom-fields/routes.ts +155 -0
- package/src/modules/custom-fields/schema.ts +61 -0
- package/src/modules/custom-fields/service.ts +439 -0
- package/src/modules/custom-fields/tools.ts +53 -0
- package/src/modules/custom-fields/values.ts +352 -0
- package/src/modules/custom-fields/wire.ts +32 -0
- package/src/modules/dashboard/repository.ts +4 -3
- package/src/modules/deals/index.ts +5 -2
- package/src/modules/deals/repository.ts +6 -106
- package/src/modules/deals/routes.ts +7 -0
- package/src/modules/deals/schema.ts +7 -15
- package/src/modules/deals/service.ts +92 -23
- package/src/modules/decisions/repository.ts +2 -0
- package/src/modules/email-domain-linker/index.ts +40 -0
- package/src/modules/email-domain-linker/routes.ts +40 -0
- package/src/modules/email-domain-linker/service.ts +122 -0
- package/src/modules/enquiries/events.ts +45 -0
- package/src/modules/enquiries/index.ts +50 -0
- package/src/modules/enquiries/repository.ts +164 -0
- package/src/modules/enquiries/routes.ts +172 -0
- package/src/modules/enquiries/schema.ts +59 -0
- package/src/modules/enquiries/service.ts +644 -0
- package/src/modules/enquiries/tools.ts +66 -0
- package/src/modules/eventCatalogs.ts +4 -0
- package/src/modules/forms/embed.ts +391 -44
- package/src/modules/forms/events.ts +30 -2
- package/src/modules/forms/fields.ts +102 -2
- package/src/modules/forms/index.ts +12 -1
- package/src/modules/forms/mapping.ts +183 -6
- package/src/modules/forms/publicRoutes.ts +43 -1
- package/src/modules/forms/repository.ts +162 -1
- package/src/modules/forms/routes.ts +212 -2
- package/src/modules/forms/schema.ts +166 -4
- package/src/modules/forms/service.ts +565 -41
- package/src/modules/forms/submission.ts +718 -44
- package/src/modules/import-export/drafts.ts +20 -1
- package/src/modules/import-export/exportRows.ts +21 -5
- package/src/modules/import-export/plan.ts +47 -2
- package/src/modules/import-export/presets.ts +10 -0
- package/src/modules/import-export/repository.ts +73 -8
- package/src/modules/import-export/routes.ts +4 -0
- package/src/modules/import-export/schema.ts +11 -0
- package/src/modules/import-export/service.ts +28 -2
- package/src/modules/import-export/streams.ts +3 -1
- package/src/modules/import-export/tools.ts +10 -0
- package/src/modules/import-export/validation.ts +28 -0
- package/src/modules/import-export/writes.ts +70 -5
- package/src/modules/lists/events.ts +41 -0
- package/src/modules/lists/index.ts +41 -0
- package/src/modules/lists/repository.ts +343 -0
- package/src/modules/lists/routes.ts +255 -0
- package/src/modules/lists/schema.ts +95 -0
- package/src/modules/lists/service.ts +505 -0
- package/src/modules/lists/tools.ts +128 -0
- package/src/modules/mcp/index.ts +5 -0
- package/src/modules/opportunities/index.ts +3 -1
- package/src/modules/opportunities/repository.ts +11 -0
- package/src/modules/opportunities/routes.ts +13 -0
- package/src/modules/opportunities/schema.ts +7 -1
- package/src/modules/opportunities/service.ts +188 -22
- package/src/modules/opportunities/tools.ts +2 -0
- package/src/modules/partnerships/index.ts +3 -1
- package/src/modules/partnerships/repository.ts +6 -117
- package/src/modules/partnerships/routes.ts +7 -0
- package/src/modules/partnerships/schema.ts +7 -14
- package/src/modules/partnerships/service.ts +93 -22
- package/src/modules/people/consentHydration.ts +167 -0
- package/src/modules/people/index.ts +3 -1
- package/src/modules/people/personConsentWrites.ts +177 -0
- package/src/modules/people/repository.ts +31 -0
- package/src/modules/people/routes.ts +127 -18
- package/src/modules/people/schema.ts +109 -3
- package/src/modules/people/service.ts +205 -39
- package/src/modules/people/tools.ts +5 -1
- package/src/modules/personLinks.ts +278 -0
- package/src/modules/positions/routes.ts +4 -2
- package/src/modules/raises/index.ts +3 -1
- package/src/modules/raises/repository.ts +6 -107
- package/src/modules/raises/routes.ts +7 -0
- package/src/modules/raises/schema.ts +7 -14
- package/src/modules/raises/service.ts +91 -20
- package/src/modules/recordTargets.ts +2 -0
- package/src/modules/references.ts +43 -4
- package/src/modules/sample-data/fixture.ts +690 -0
- package/src/modules/sample-data/index.ts +51 -0
- package/src/modules/sample-data/routes.ts +50 -0
- package/src/modules/sample-data/service.ts +679 -0
- package/src/modules/sample-data/tools.ts +32 -0
- package/src/modules/search/index.ts +2 -1
- package/src/modules/search/repository.ts +33 -1
- package/src/modules/search/service.ts +7 -5
- package/src/modules/smtp-email/index.ts +8 -1
- package/src/modules/stagedRecords.ts +18 -3
- package/src/modules/webhooks/payloads.ts +20 -2
- package/src/modules/workspace/repository.ts +12 -0
- package/src/modules/workspace/service.ts +27 -1
- package/src/modules/workspace/starters.ts +5 -0
- package/src/runtime/events.ts +1 -0
- package/src/schema/index.ts +4 -0
- package/src/testing/database.ts +97 -11
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { customFieldsPatchShape } from '@kelpie/schemas'
|
|
1
2
|
import type { Context, Hono } from 'hono'
|
|
2
3
|
import { z } from 'zod'
|
|
3
4
|
|
|
@@ -6,6 +7,7 @@ import { pageBody, readIdFilter, readJsonBody, readListParameters } from '../../
|
|
|
6
7
|
import type { Actor } from '../auth/actor.ts'
|
|
7
8
|
import { resolveActorFrom } from '../auth/credentials.ts'
|
|
8
9
|
import type { CredentialDependencies } from '../auth/credentials.ts'
|
|
10
|
+
import { renderCustomFieldsForWire } from '../custom-fields/wire.ts'
|
|
9
11
|
import type {
|
|
10
12
|
CreatePartnershipInput,
|
|
11
13
|
PartnershipView,
|
|
@@ -28,6 +30,7 @@ const partnershipShape = {
|
|
|
28
30
|
person_ids: z.array(z.string().min(1)),
|
|
29
31
|
summary: z.string(),
|
|
30
32
|
tags: z.array(z.string().min(1)),
|
|
33
|
+
custom_fields: customFieldsPatchShape,
|
|
31
34
|
}
|
|
32
35
|
|
|
33
36
|
/**
|
|
@@ -49,6 +52,7 @@ export const createBody = z.strictObject({
|
|
|
49
52
|
person_ids: partnershipShape.person_ids.default([]),
|
|
50
53
|
summary: partnershipShape.summary.default(''),
|
|
51
54
|
tags: partnershipShape.tags.default([]),
|
|
55
|
+
custom_fields: partnershipShape.custom_fields.default({}),
|
|
52
56
|
})
|
|
53
57
|
|
|
54
58
|
export const updateBody = z.strictObject(partnershipShape).partial()
|
|
@@ -70,6 +74,7 @@ export function toCreateInput(body: z.infer<typeof createBody>): CreatePartnersh
|
|
|
70
74
|
personIds: body.person_ids,
|
|
71
75
|
summary: body.summary,
|
|
72
76
|
tags: body.tags,
|
|
77
|
+
customFields: body.custom_fields,
|
|
73
78
|
}
|
|
74
79
|
}
|
|
75
80
|
|
|
@@ -88,6 +93,7 @@ export function toUpdateInput(body: z.infer<typeof updateBody>): UpdatePartnersh
|
|
|
88
93
|
...(body.person_ids === undefined ? {} : { personIds: body.person_ids }),
|
|
89
94
|
...(body.summary === undefined ? {} : { summary: body.summary }),
|
|
90
95
|
...(body.tags === undefined ? {} : { tags: body.tags }),
|
|
96
|
+
...(body.custom_fields === undefined ? {} : { customFields: body.custom_fields }),
|
|
91
97
|
}
|
|
92
98
|
}
|
|
93
99
|
|
|
@@ -105,6 +111,7 @@ export function partnershipResponse(partnership: PartnershipView): Record<string
|
|
|
105
111
|
person_ids: partnership.personIds,
|
|
106
112
|
summary: partnership.summary,
|
|
107
113
|
tags: partnership.tags,
|
|
114
|
+
custom_fields: renderCustomFieldsForWire(partnership.customFields),
|
|
108
115
|
created_at: partnership.createdAt.toISOString(),
|
|
109
116
|
updated_at: partnership.updatedAt.toISOString(),
|
|
110
117
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { CustomFieldValue } from '@kelpie/schemas'
|
|
2
|
+
import { date, index, jsonb, pgTable, text } from 'drizzle-orm/pg-core'
|
|
2
3
|
|
|
3
4
|
import { createdAt, primaryId, searchVector, updatedAt } from '../../lib/columns.ts'
|
|
4
5
|
import type { SearchVectorPart } from '../../lib/columns.ts'
|
|
5
6
|
import { companies } from '../companies/schema.ts'
|
|
6
|
-
import { people } from '../people/schema.ts'
|
|
7
7
|
import { pipelineStages } from '../pipelines/schema.ts'
|
|
8
8
|
import { workspaceMembers, workspaces } from '../workspace/schema.ts'
|
|
9
9
|
|
|
@@ -32,6 +32,11 @@ export const partnerships = pgTable(
|
|
|
32
32
|
successLooksLike: text('success_looks_like').notNull().default(''),
|
|
33
33
|
summary: text('summary').notNull().default(''),
|
|
34
34
|
tags: text('tags').array().notNull().default([]),
|
|
35
|
+
// Workspace-defined fields, keyed by definition key. See people/schema.ts.
|
|
36
|
+
customFields: jsonb('custom_fields')
|
|
37
|
+
.$type<Readonly<Record<string, CustomFieldValue>>>()
|
|
38
|
+
.notNull()
|
|
39
|
+
.default({}),
|
|
35
40
|
createdAt: createdAt(),
|
|
36
41
|
updatedAt: updatedAt(),
|
|
37
42
|
searchVector: searchVector((): readonly SearchVectorPart[] => [
|
|
@@ -51,15 +56,3 @@ export const partnerships = pgTable(
|
|
|
51
56
|
],
|
|
52
57
|
)
|
|
53
58
|
|
|
54
|
-
export const partnershipPeople = pgTable(
|
|
55
|
-
'partnership_people',
|
|
56
|
-
{
|
|
57
|
-
partnershipId: text('partnership_id')
|
|
58
|
-
.notNull()
|
|
59
|
-
.references(() => partnerships.id, { onDelete: 'cascade' }),
|
|
60
|
-
personId: text('person_id')
|
|
61
|
-
.notNull()
|
|
62
|
-
.references(() => people.id, { onDelete: 'restrict' }),
|
|
63
|
-
},
|
|
64
|
-
(table) => [primaryKey({ columns: [table.partnershipId, table.personId] })],
|
|
65
|
-
)
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { CustomFieldWireValue } from '@kelpie/schemas'
|
|
2
|
+
|
|
1
3
|
import { changedKeys } from '../../lib/changes.ts'
|
|
2
4
|
import type { Database } from '../../lib/database.ts'
|
|
3
5
|
import { AppError } from '../../lib/errors.ts'
|
|
@@ -20,6 +22,8 @@ import { actorMemberId, requireWorkspaceId } from '../auth/actor.ts'
|
|
|
20
22
|
import './events.ts'
|
|
21
23
|
import { deleteRecordsAttachedTo } from '../attachedRecords.ts'
|
|
22
24
|
import * as companyRepository from '../companies/repository.ts'
|
|
25
|
+
import type { CustomFieldValuesValidator } from '../custom-fields/values.ts'
|
|
26
|
+
import * as personLinks from '../personLinks.ts'
|
|
23
27
|
import * as pipelineRepository from '../pipelines/repository.ts'
|
|
24
28
|
import type { PipelineStageRecord } from '../pipelines/repository.ts'
|
|
25
29
|
import * as repository from './repository.ts'
|
|
@@ -30,7 +34,7 @@ import type { PartnershipFilters, PartnershipRecord } from './repository.ts'
|
|
|
30
34
|
* Partnerships: ongoing two-way relationships. Status is a stage of the
|
|
31
35
|
* `partnership` pipeline; there is no favour ledger (`brief.md` non-goal).
|
|
32
36
|
*
|
|
33
|
-
* Key people attach through `
|
|
37
|
+
* Key people attach through `person_links` and appear as `person_ids` on
|
|
34
38
|
* the wire, the Deals mechanics; kind is free text, the Opportunities mechanics.
|
|
35
39
|
* A stage move is an ordinary PATCH of `stage_id`, and it is the one change that
|
|
36
40
|
* files a `stage_changed` activity and a `stage.changed` event instead of the
|
|
@@ -43,6 +47,7 @@ export interface PartnershipsDependencies {
|
|
|
43
47
|
readonly createId: IdFactory
|
|
44
48
|
readonly now: () => Date
|
|
45
49
|
readonly recordActivity: ActivityRecorder
|
|
50
|
+
readonly customFields: CustomFieldValuesValidator
|
|
46
51
|
}
|
|
47
52
|
|
|
48
53
|
/** What a changed column is called on a timeline. `successLooksLike` is why these are written out. */
|
|
@@ -81,6 +86,8 @@ export interface CreatePartnershipInput {
|
|
|
81
86
|
readonly personIds: readonly string[]
|
|
82
87
|
readonly summary: string
|
|
83
88
|
readonly tags: readonly string[]
|
|
89
|
+
/** Wire shape for a create body: `null` values are ignored, non-null are validated. */
|
|
90
|
+
readonly customFields: Readonly<Record<string, CustomFieldWireValue | null>> | undefined
|
|
84
91
|
}
|
|
85
92
|
|
|
86
93
|
/** PATCH semantics: an absent field is left alone, and null clears a nullable one. */
|
|
@@ -97,6 +104,11 @@ export interface UpdatePartnershipInput {
|
|
|
97
104
|
readonly personIds?: readonly string[] | undefined
|
|
98
105
|
readonly summary?: string | undefined
|
|
99
106
|
readonly tags?: readonly string[] | undefined
|
|
107
|
+
/**
|
|
108
|
+
* Partial merge patch (wire shape): sent keys change, `null` clears a key,
|
|
109
|
+
* absent keys are left alone. Unknown keys are `422`.
|
|
110
|
+
*/
|
|
111
|
+
readonly customFields?: Readonly<Record<string, CustomFieldWireValue | null>> | undefined
|
|
100
112
|
}
|
|
101
113
|
|
|
102
114
|
export interface PartnershipsService {
|
|
@@ -208,7 +220,7 @@ export function createPartnershipsService(
|
|
|
208
220
|
workspaceId: string,
|
|
209
221
|
personIds: readonly string[],
|
|
210
222
|
): Promise<ReadonlyMap<string, string>> {
|
|
211
|
-
const named = await
|
|
223
|
+
const named = await personLinks.findPeopleNamed(dependencies.db, workspaceId, personIds)
|
|
212
224
|
const missing = personIds.filter((id) => !named.has(id))
|
|
213
225
|
|
|
214
226
|
if (missing.length > 0) {
|
|
@@ -223,9 +235,14 @@ export function createPartnershipsService(
|
|
|
223
235
|
}
|
|
224
236
|
|
|
225
237
|
/** @returns The page's views, with every partnership's people fetched in one query. */
|
|
226
|
-
async function toViews(
|
|
227
|
-
|
|
238
|
+
async function toViews(
|
|
239
|
+
workspaceId: string,
|
|
240
|
+
records: readonly PartnershipRecord[],
|
|
241
|
+
): Promise<PartnershipView[]> {
|
|
242
|
+
const peopleByPartnership = await personLinks.listPersonIdsFor(
|
|
228
243
|
dependencies.db,
|
|
244
|
+
workspaceId,
|
|
245
|
+
'partnership',
|
|
229
246
|
records.map((record) => record.id),
|
|
230
247
|
)
|
|
231
248
|
|
|
@@ -239,14 +256,20 @@ export function createPartnershipsService(
|
|
|
239
256
|
const rows = await repository.listPartnerships(dependencies.db, workspaceId, filters, window)
|
|
240
257
|
const page = toPage(rows, window, (partnership) => partnership.id)
|
|
241
258
|
|
|
242
|
-
return { items: await toViews(page.items), nextCursor: page.nextCursor }
|
|
259
|
+
return { items: await toViews(workspaceId, page.items), nextCursor: page.nextCursor }
|
|
243
260
|
},
|
|
244
261
|
|
|
245
262
|
async get(actor, id) {
|
|
246
263
|
const workspaceId = requireWorkspaceId(actor)
|
|
247
264
|
const partnership = await require(workspaceId, id)
|
|
248
265
|
|
|
249
|
-
return toView(
|
|
266
|
+
return toView(
|
|
267
|
+
partnership,
|
|
268
|
+
await personLinks.listPersonIds(dependencies.db, workspaceId, {
|
|
269
|
+
targetType: 'partnership',
|
|
270
|
+
targetId: id,
|
|
271
|
+
}),
|
|
272
|
+
)
|
|
250
273
|
},
|
|
251
274
|
|
|
252
275
|
async create(actor, input) {
|
|
@@ -269,6 +292,12 @@ export function createPartnershipsService(
|
|
|
269
292
|
const id = dependencies.createId('partnership')
|
|
270
293
|
|
|
271
294
|
return dependencies.transaction(async ({ tx, events }) => {
|
|
295
|
+
const customFields = await dependencies.customFields.forCreate(
|
|
296
|
+
tx,
|
|
297
|
+
workspaceId,
|
|
298
|
+
'partnership',
|
|
299
|
+
input.customFields,
|
|
300
|
+
)
|
|
272
301
|
const created = await repository.insertPartnership(tx, {
|
|
273
302
|
id,
|
|
274
303
|
workspaceId,
|
|
@@ -282,9 +311,16 @@ export function createPartnershipsService(
|
|
|
282
311
|
successLooksLike: input.successLooksLike,
|
|
283
312
|
summary: input.summary,
|
|
284
313
|
tags: [...input.tags],
|
|
314
|
+
customFields,
|
|
285
315
|
})
|
|
286
316
|
|
|
287
|
-
await
|
|
317
|
+
await personLinks.linkPeople(
|
|
318
|
+
tx,
|
|
319
|
+
dependencies.createId,
|
|
320
|
+
workspaceId,
|
|
321
|
+
{ targetType: 'partnership', targetId: id },
|
|
322
|
+
personIds,
|
|
323
|
+
)
|
|
288
324
|
|
|
289
325
|
await dependencies.recordActivity(tx, workspaceId, actor, {
|
|
290
326
|
targetType: 'partnership',
|
|
@@ -329,7 +365,10 @@ export function createPartnershipsService(
|
|
|
329
365
|
await requireOwner(workspaceId, changes.ownerId)
|
|
330
366
|
}
|
|
331
367
|
|
|
332
|
-
const currentPeople = await
|
|
368
|
+
const currentPeople = await personLinks.listPersonIds(dependencies.db, workspaceId, {
|
|
369
|
+
targetType: 'partnership',
|
|
370
|
+
targetId: id,
|
|
371
|
+
})
|
|
333
372
|
const nextPeople =
|
|
334
373
|
changes.personIds === undefined ? undefined : [...new Set(changes.personIds)]
|
|
335
374
|
const added =
|
|
@@ -343,16 +382,26 @@ export function createPartnershipsService(
|
|
|
343
382
|
const named = await requirePeople(workspaceId, [...added, ...removed])
|
|
344
383
|
|
|
345
384
|
const columns = toStoredColumns(changes)
|
|
346
|
-
const
|
|
385
|
+
const scalarChanged = changedKeys(existing, columns)
|
|
347
386
|
const linksChanged = added.length > 0 || removed.length > 0
|
|
348
387
|
|
|
349
|
-
if (changed.length === 0 && !linksChanged) {
|
|
350
|
-
return toView(existing, currentPeople)
|
|
351
|
-
}
|
|
352
|
-
|
|
353
388
|
return dependencies.transaction(async ({ tx, events }) => {
|
|
389
|
+
const cf = await dependencies.customFields.forUpdate(
|
|
390
|
+
tx,
|
|
391
|
+
workspaceId,
|
|
392
|
+
'partnership',
|
|
393
|
+
existing.customFields,
|
|
394
|
+
changes.customFields,
|
|
395
|
+
)
|
|
396
|
+
const customFieldsChanged = cf !== undefined && cf.changedPaths.length > 0
|
|
397
|
+
|
|
398
|
+
if (scalarChanged.length === 0 && !linksChanged && !customFieldsChanged) {
|
|
399
|
+
return toView(existing, currentPeople)
|
|
400
|
+
}
|
|
401
|
+
|
|
354
402
|
const updated = await repository.updatePartnership(tx, workspaceId, id, {
|
|
355
403
|
...columns,
|
|
404
|
+
...(customFieldsChanged ? { customFields: cf.merged } : {}),
|
|
356
405
|
updatedAt: dependencies.now(),
|
|
357
406
|
})
|
|
358
407
|
|
|
@@ -360,8 +409,19 @@ export function createPartnershipsService(
|
|
|
360
409
|
throw AppError.notFound('Partnership not found')
|
|
361
410
|
}
|
|
362
411
|
|
|
363
|
-
await
|
|
364
|
-
|
|
412
|
+
await personLinks.linkPeople(
|
|
413
|
+
tx,
|
|
414
|
+
dependencies.createId,
|
|
415
|
+
workspaceId,
|
|
416
|
+
{ targetType: 'partnership', targetId: id },
|
|
417
|
+
added,
|
|
418
|
+
)
|
|
419
|
+
await personLinks.unlinkPeople(
|
|
420
|
+
tx,
|
|
421
|
+
workspaceId,
|
|
422
|
+
{ targetType: 'partnership', targetId: id },
|
|
423
|
+
removed,
|
|
424
|
+
)
|
|
365
425
|
|
|
366
426
|
if (stageMove !== undefined) {
|
|
367
427
|
await dependencies.recordActivity(tx, workspaceId, actor, {
|
|
@@ -372,14 +432,19 @@ export function createPartnershipsService(
|
|
|
372
432
|
})
|
|
373
433
|
}
|
|
374
434
|
|
|
375
|
-
const otherChanged =
|
|
435
|
+
const otherChanged = scalarChanged.filter((field) => field !== 'stageId')
|
|
436
|
+
const customFieldPaths = cf?.changedPaths ?? []
|
|
437
|
+
const activityChanged = [...otherChanged, ...customFieldPaths]
|
|
376
438
|
|
|
377
|
-
if (
|
|
439
|
+
if (activityChanged.length > 0) {
|
|
440
|
+
const labels: Record<string, string> = { ...PARTNERSHIP_FIELD_LABELS, ...cf?.labels }
|
|
441
|
+
const before: Record<string, unknown> = { ...existing, ...cf?.flatBefore }
|
|
442
|
+
const after: Record<string, unknown> = { ...columns, ...cf?.flatAfter }
|
|
378
443
|
await dependencies.recordActivity(tx, workspaceId, actor, {
|
|
379
444
|
targetType: 'partnership',
|
|
380
445
|
targetId: id,
|
|
381
446
|
kind: 'updated',
|
|
382
|
-
...describeUpdate(
|
|
447
|
+
...describeUpdate(activityChanged, labels, before, after),
|
|
383
448
|
})
|
|
384
449
|
}
|
|
385
450
|
|
|
@@ -407,7 +472,13 @@ export function createPartnershipsService(
|
|
|
407
472
|
events.emit(
|
|
408
473
|
'partnerships.partnership.updated',
|
|
409
474
|
{ type: 'partnership', id },
|
|
410
|
-
{
|
|
475
|
+
{
|
|
476
|
+
changed: [
|
|
477
|
+
...scalarChanged,
|
|
478
|
+
...(linksChanged ? ['personIds'] : []),
|
|
479
|
+
...customFieldPaths,
|
|
480
|
+
],
|
|
481
|
+
},
|
|
411
482
|
)
|
|
412
483
|
|
|
413
484
|
if (stageMove !== undefined) {
|
|
@@ -428,9 +499,9 @@ export function createPartnershipsService(
|
|
|
428
499
|
await dependencies.transaction(async ({ tx, events }) => {
|
|
429
500
|
await require(workspaceId, id)
|
|
430
501
|
|
|
431
|
-
//
|
|
432
|
-
//
|
|
433
|
-
//
|
|
502
|
+
// Notes, activities, decisions, plan items, and person_links have no
|
|
503
|
+
// key back to the partnership, so they are removed here, in the same
|
|
504
|
+
// transaction.
|
|
434
505
|
await deleteRecordsAttachedTo(tx, workspaceId, 'partnership', id)
|
|
435
506
|
await repository.deletePartnership(tx, workspaceId, id)
|
|
436
507
|
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import type { ConsentPurposeStatus } from '@kelpie/schemas'
|
|
2
|
+
import { and, asc, eq, inArray } from 'drizzle-orm'
|
|
3
|
+
|
|
4
|
+
import type { Queryable } from '../../runtime/transaction.ts'
|
|
5
|
+
import { consentPurposes } from '../consent-purposes/schema.ts'
|
|
6
|
+
import { personConsents } from './schema.ts'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Merges a workspace's consent purposes with any explicit `person_consents`
|
|
10
|
+
* rows into the effective status agents and humans read on a Person.
|
|
11
|
+
*
|
|
12
|
+
* The rule is simple: an explicit row wins; absence means "inherits the
|
|
13
|
+
* purpose's `default_status`". This helper does the join and the merge in one
|
|
14
|
+
* place so every read of a Person resolves it the same way.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
export interface EffectiveConsent {
|
|
18
|
+
readonly purposeSlug: string
|
|
19
|
+
readonly purposeLabel: string
|
|
20
|
+
readonly status: ConsentPurposeStatus
|
|
21
|
+
readonly source: string | null
|
|
22
|
+
readonly notedAt: Date | null
|
|
23
|
+
readonly inherited: boolean
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** The workspace purposes and any person-level rows, in one shape. */
|
|
27
|
+
interface PurposeRow {
|
|
28
|
+
readonly id: string
|
|
29
|
+
readonly slug: string
|
|
30
|
+
readonly label: string
|
|
31
|
+
readonly defaultStatus: ConsentPurposeStatus
|
|
32
|
+
readonly sortOrder: number
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
interface PersonConsentRow {
|
|
36
|
+
readonly personId: string
|
|
37
|
+
readonly purposeId: string
|
|
38
|
+
readonly status: 'granted' | 'withdrawn'
|
|
39
|
+
readonly source: string
|
|
40
|
+
readonly notedAt: Date
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async function loadPurposes(
|
|
44
|
+
db: Queryable,
|
|
45
|
+
workspaceId: string,
|
|
46
|
+
): Promise<readonly PurposeRow[]> {
|
|
47
|
+
const rows = await db
|
|
48
|
+
.select({
|
|
49
|
+
id: consentPurposes.id,
|
|
50
|
+
slug: consentPurposes.slug,
|
|
51
|
+
label: consentPurposes.label,
|
|
52
|
+
defaultStatus: consentPurposes.defaultStatus,
|
|
53
|
+
sortOrder: consentPurposes.sortOrder,
|
|
54
|
+
})
|
|
55
|
+
.from(consentPurposes)
|
|
56
|
+
.where(eq(consentPurposes.workspaceId, workspaceId))
|
|
57
|
+
.orderBy(asc(consentPurposes.sortOrder), asc(consentPurposes.id))
|
|
58
|
+
|
|
59
|
+
return rows.map((row) => ({
|
|
60
|
+
id: row.id,
|
|
61
|
+
slug: row.slug,
|
|
62
|
+
label: row.label,
|
|
63
|
+
defaultStatus: row.defaultStatus as ConsentPurposeStatus,
|
|
64
|
+
sortOrder: row.sortOrder,
|
|
65
|
+
}))
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
async function loadConsentsFor(
|
|
69
|
+
db: Queryable,
|
|
70
|
+
workspaceId: string,
|
|
71
|
+
personIds: readonly string[],
|
|
72
|
+
): Promise<readonly PersonConsentRow[]> {
|
|
73
|
+
if (personIds.length === 0) return []
|
|
74
|
+
const rows = await db
|
|
75
|
+
.select({
|
|
76
|
+
personId: personConsents.personId,
|
|
77
|
+
purposeId: personConsents.purposeId,
|
|
78
|
+
status: personConsents.status,
|
|
79
|
+
source: personConsents.source,
|
|
80
|
+
notedAt: personConsents.notedAt,
|
|
81
|
+
})
|
|
82
|
+
.from(personConsents)
|
|
83
|
+
.where(
|
|
84
|
+
and(
|
|
85
|
+
eq(personConsents.workspaceId, workspaceId),
|
|
86
|
+
inArray(personConsents.personId, [...personIds]),
|
|
87
|
+
),
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
return rows.map((row) => ({
|
|
91
|
+
personId: row.personId,
|
|
92
|
+
purposeId: row.purposeId,
|
|
93
|
+
status: row.status as 'granted' | 'withdrawn',
|
|
94
|
+
source: row.source,
|
|
95
|
+
notedAt: row.notedAt,
|
|
96
|
+
}))
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
function mergeFor(
|
|
100
|
+
purposes: readonly PurposeRow[],
|
|
101
|
+
explicitByPurpose: ReadonlyMap<string, PersonConsentRow>,
|
|
102
|
+
): readonly EffectiveConsent[] {
|
|
103
|
+
return purposes.map((purpose) => {
|
|
104
|
+
const explicit = explicitByPurpose.get(purpose.id)
|
|
105
|
+
if (explicit === undefined) {
|
|
106
|
+
return {
|
|
107
|
+
purposeSlug: purpose.slug,
|
|
108
|
+
purposeLabel: purpose.label,
|
|
109
|
+
status: purpose.defaultStatus,
|
|
110
|
+
source: null,
|
|
111
|
+
notedAt: null,
|
|
112
|
+
inherited: true,
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
purposeSlug: purpose.slug,
|
|
117
|
+
purposeLabel: purpose.label,
|
|
118
|
+
status: explicit.status,
|
|
119
|
+
source: explicit.source,
|
|
120
|
+
notedAt: explicit.notedAt,
|
|
121
|
+
inherited: false,
|
|
122
|
+
}
|
|
123
|
+
})
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/** Consents for one person. */
|
|
127
|
+
export async function readConsentsFor(
|
|
128
|
+
db: Queryable,
|
|
129
|
+
workspaceId: string,
|
|
130
|
+
personId: string,
|
|
131
|
+
): Promise<readonly EffectiveConsent[]> {
|
|
132
|
+
const [purposes, explicit] = await Promise.all([
|
|
133
|
+
loadPurposes(db, workspaceId),
|
|
134
|
+
loadConsentsFor(db, workspaceId, [personId]),
|
|
135
|
+
])
|
|
136
|
+
const byPurpose = new Map(explicit.map((row) => [row.purposeId, row]))
|
|
137
|
+
return mergeFor(purposes, byPurpose)
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Consents for many people. Loads purposes once and person rows once, then
|
|
142
|
+
* merges in memory — cheaper than a per-row read for a paged list.
|
|
143
|
+
*/
|
|
144
|
+
export async function readConsentsForMany(
|
|
145
|
+
db: Queryable,
|
|
146
|
+
workspaceId: string,
|
|
147
|
+
personIds: readonly string[],
|
|
148
|
+
): Promise<ReadonlyMap<string, readonly EffectiveConsent[]>> {
|
|
149
|
+
if (personIds.length === 0) return new Map()
|
|
150
|
+
const [purposes, explicit] = await Promise.all([
|
|
151
|
+
loadPurposes(db, workspaceId),
|
|
152
|
+
loadConsentsFor(db, workspaceId, personIds),
|
|
153
|
+
])
|
|
154
|
+
|
|
155
|
+
const byPerson = new Map<string, Map<string, PersonConsentRow>>()
|
|
156
|
+
for (const row of explicit) {
|
|
157
|
+
const map = byPerson.get(row.personId) ?? new Map<string, PersonConsentRow>()
|
|
158
|
+
map.set(row.purposeId, row)
|
|
159
|
+
byPerson.set(row.personId, map)
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
const out = new Map<string, readonly EffectiveConsent[]>()
|
|
163
|
+
for (const personId of personIds) {
|
|
164
|
+
out.set(personId, mergeFor(purposes, byPerson.get(personId) ?? new Map()))
|
|
165
|
+
}
|
|
166
|
+
return out
|
|
167
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { KelpieModule } from '../../runtime/module.ts'
|
|
2
2
|
import { createActivityRecorder } from '../activities/index.ts'
|
|
3
|
+
import { createCustomFieldValues } from '../custom-fields/index.ts'
|
|
3
4
|
import { peopleEvents } from './events.ts'
|
|
4
5
|
import { mountPeopleRoutes } from './routes.ts'
|
|
5
6
|
import * as schema from './schema.ts'
|
|
@@ -15,7 +16,7 @@ import { registerPeopleTools } from './tools.ts'
|
|
|
15
16
|
export function createPeopleModule(migrationsDirectory: string): KelpieModule {
|
|
16
17
|
return {
|
|
17
18
|
id: 'people',
|
|
18
|
-
requires: ['workspace', 'activities'],
|
|
19
|
+
requires: ['workspace', 'activities', 'custom-fields'],
|
|
19
20
|
structural: true,
|
|
20
21
|
events: peopleEvents,
|
|
21
22
|
|
|
@@ -29,6 +30,7 @@ export function createPeopleModule(migrationsDirectory: string): KelpieModule {
|
|
|
29
30
|
createId: context.createId,
|
|
30
31
|
now: context.now,
|
|
31
32
|
}),
|
|
33
|
+
customFields: createCustomFieldValues({ db: context.db }),
|
|
32
34
|
})
|
|
33
35
|
|
|
34
36
|
context.schema(schema, migrationsDirectory)
|