@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
|
@@ -4,7 +4,7 @@ import { createSearchService } from './service.ts'
|
|
|
4
4
|
import { registerSearchTools } from './tools.ts'
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
* One box across
|
|
7
|
+
* One box across ten collections.
|
|
8
8
|
*
|
|
9
9
|
* It contributes no tables and calls no `context.schema`. The `search_vector`
|
|
10
10
|
* column each searchable table carries belongs to that table's own module, which
|
|
@@ -30,6 +30,7 @@ export function createSearchModule(): KelpieModule {
|
|
|
30
30
|
'positions',
|
|
31
31
|
'companies',
|
|
32
32
|
'deals',
|
|
33
|
+
'enquiries',
|
|
33
34
|
'opportunities',
|
|
34
35
|
'partnerships',
|
|
35
36
|
'raises',
|
|
@@ -8,6 +8,7 @@ import type { Queryable } from '../../runtime/transaction.ts'
|
|
|
8
8
|
import { companies } from '../companies/schema.ts'
|
|
9
9
|
import { deals } from '../deals/schema.ts'
|
|
10
10
|
import { decisions } from '../decisions/schema.ts'
|
|
11
|
+
import { enquiries } from '../enquiries/schema.ts'
|
|
11
12
|
import { handbookPages } from '../handbook/schema.ts'
|
|
12
13
|
import { roles } from '../hiring/schema.ts'
|
|
13
14
|
import { opportunities } from '../opportunities/schema.ts'
|
|
@@ -210,7 +211,7 @@ function byPlanItem(
|
|
|
210
211
|
db: Queryable,
|
|
211
212
|
workspaceId: string,
|
|
212
213
|
query: SQL,
|
|
213
|
-
targetType: 'deal' | 'opportunity' | 'raise',
|
|
214
|
+
targetType: 'deal' | 'opportunity' | 'raise' | 'enquiry',
|
|
214
215
|
) {
|
|
215
216
|
return db
|
|
216
217
|
.select({ id: planItems.targetId, rank: relatedRank(planItems.searchVector, query).as('rank') })
|
|
@@ -224,6 +225,37 @@ function byPlanItem(
|
|
|
224
225
|
)
|
|
225
226
|
}
|
|
226
227
|
|
|
228
|
+
export async function searchEnquiries(
|
|
229
|
+
db: Queryable,
|
|
230
|
+
workspaceId: string,
|
|
231
|
+
query: SQL,
|
|
232
|
+
limit: number,
|
|
233
|
+
): Promise<CollectionHits> {
|
|
234
|
+
const own = db
|
|
235
|
+
.select({ id: enquiries.id, rank: rank(enquiries.searchVector, query).as('rank') })
|
|
236
|
+
.from(enquiries)
|
|
237
|
+
.where(and(eq(enquiries.workspaceId, workspaceId), matches(enquiries.searchVector, query)))
|
|
238
|
+
|
|
239
|
+
const hits = unionAll(own, byPlanItem(db, workspaceId, query, 'enquiry')).as('hits')
|
|
240
|
+
|
|
241
|
+
const rows = await db
|
|
242
|
+
.select({
|
|
243
|
+
id: enquiries.id,
|
|
244
|
+
title: enquiries.name,
|
|
245
|
+
subtitle: pipelineStages.label,
|
|
246
|
+
snippetSource: enquiries.summary,
|
|
247
|
+
total,
|
|
248
|
+
})
|
|
249
|
+
.from(hits)
|
|
250
|
+
.innerJoin(enquiries, eq(enquiries.id, hits.id))
|
|
251
|
+
.innerJoin(pipelineStages, eq(pipelineStages.id, enquiries.stageId))
|
|
252
|
+
.groupBy(enquiries.id, pipelineStages.label)
|
|
253
|
+
.orderBy(desc(bestRank(hits.rank)), asc(enquiries.id))
|
|
254
|
+
.limit(limit)
|
|
255
|
+
|
|
256
|
+
return collect('enquiry', rows)
|
|
257
|
+
}
|
|
258
|
+
|
|
227
259
|
export async function searchDeals(
|
|
228
260
|
db: Queryable,
|
|
229
261
|
workspaceId: string,
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
searchCompanies,
|
|
11
11
|
searchDeals,
|
|
12
12
|
searchDecisions,
|
|
13
|
+
searchEnquiries,
|
|
13
14
|
searchHandbookPages,
|
|
14
15
|
searchOpportunities,
|
|
15
16
|
searchPartnerships,
|
|
@@ -20,7 +21,7 @@ import {
|
|
|
20
21
|
import type { CollectionHits } from './repository.ts'
|
|
21
22
|
|
|
22
23
|
/**
|
|
23
|
-
* One box across
|
|
24
|
+
* One box across ten collections, ranked per collection rather than merged.
|
|
24
25
|
*
|
|
25
26
|
* A single merged ranking would need `ts_rank` values from different tables to
|
|
26
27
|
* mean the same thing, and they do not: a handbook page is a thousand words and a
|
|
@@ -49,7 +50,7 @@ export interface SearchResults {
|
|
|
49
50
|
readonly limit: number
|
|
50
51
|
/** Across every group. The number a "12 results" heading is built from. */
|
|
51
52
|
readonly total: number
|
|
52
|
-
/** Always all
|
|
53
|
+
/** Always all ten, in `SEARCH_COLLECTIONS` order, empty ones included. */
|
|
53
54
|
readonly groups: readonly SearchGroup[]
|
|
54
55
|
}
|
|
55
56
|
|
|
@@ -71,7 +72,7 @@ export interface SearchServiceDependencies {
|
|
|
71
72
|
/**
|
|
72
73
|
* How many rows a group carries when the caller does not say.
|
|
73
74
|
*
|
|
74
|
-
* Small on purpose:
|
|
75
|
+
* Small on purpose: ten groups on one page, and a reader scanning them wants the
|
|
75
76
|
* best few of each rather than a page of People they have to scroll past to reach
|
|
76
77
|
* the handbook. The exact total sits beside each group regardless.
|
|
77
78
|
*/
|
|
@@ -89,6 +90,7 @@ const SEARCHES: Readonly<Record<SearchCollection, CollectionSearch>> = {
|
|
|
89
90
|
person: searchPeople,
|
|
90
91
|
role: searchRoles,
|
|
91
92
|
company: searchCompanies,
|
|
93
|
+
enquiry: searchEnquiries,
|
|
92
94
|
deal: searchDeals,
|
|
93
95
|
opportunity: searchOpportunities,
|
|
94
96
|
raise: searchRaises,
|
|
@@ -134,8 +136,8 @@ export function createSearchService(dependencies: SearchServiceDependencies): Se
|
|
|
134
136
|
const query = compileQuery(tsQuery)
|
|
135
137
|
const words = searchWords(request.term)
|
|
136
138
|
|
|
137
|
-
//
|
|
138
|
-
// in sequence they would be
|
|
139
|
+
// Ten independent reads with nothing to share but the compiled query. Run
|
|
140
|
+
// in sequence they would be ten round trips deep rather than wide.
|
|
139
141
|
const groups = await Promise.all(
|
|
140
142
|
wanted.map(async (collection) =>
|
|
141
143
|
toGroup(await SEARCHES[collection](dependencies.db, workspaceId, query, limit), words),
|
|
@@ -44,7 +44,13 @@ export type SmtpEmailConfig = z.infer<typeof smtpEmailConfigSchema>
|
|
|
44
44
|
* sender is verifiable without a container running a real SMTP conversation.
|
|
45
45
|
*/
|
|
46
46
|
export interface SmtpTransport {
|
|
47
|
-
sendMail(message: {
|
|
47
|
+
sendMail(message: {
|
|
48
|
+
from: string
|
|
49
|
+
to: string
|
|
50
|
+
subject: string
|
|
51
|
+
text: string
|
|
52
|
+
html?: string
|
|
53
|
+
}): Promise<unknown>
|
|
48
54
|
}
|
|
49
55
|
|
|
50
56
|
function createNodemailerTransport(config: SmtpEmailConfig): SmtpTransport {
|
|
@@ -70,6 +76,7 @@ export function createSmtpEmailSender(
|
|
|
70
76
|
to: message.to,
|
|
71
77
|
subject: message.subject,
|
|
72
78
|
text: message.body,
|
|
79
|
+
...(message.html === undefined ? {} : { html: message.html }),
|
|
73
80
|
})
|
|
74
81
|
} catch (cause) {
|
|
75
82
|
const reason = describeThrown(cause)
|
|
@@ -2,20 +2,21 @@ import { and, eq } from 'drizzle-orm'
|
|
|
2
2
|
|
|
3
3
|
import type { Queryable } from '../runtime/transaction.ts'
|
|
4
4
|
import { deals } from './deals/schema.ts'
|
|
5
|
+
import { enquiries } from './enquiries/schema.ts'
|
|
5
6
|
import { opportunities } from './opportunities/schema.ts'
|
|
6
7
|
import { partnerships } from './partnerships/schema.ts'
|
|
7
8
|
import type { PipelineKind } from './pipelines/schema.ts'
|
|
8
9
|
import { raises } from './raises/schema.ts'
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
|
-
* The
|
|
12
|
+
* The five tables whose rows sit in a pipeline stage, for the one operation that
|
|
12
13
|
* spans them all: removing a stage moves whatever still references it.
|
|
13
14
|
*
|
|
14
|
-
* Touching
|
|
15
|
+
* Touching five modules' tables here rather than composing five services follows
|
|
15
16
|
* `attachedRecords.ts`: the alternative is a stage removal that imports every
|
|
16
17
|
* staged service to ask each for a bulk move it exists for nowhere else.
|
|
17
18
|
*
|
|
18
|
-
*
|
|
19
|
+
* Five written-out branches rather than a table-of-tables, because Drizzle's
|
|
19
20
|
* `update().set()` needs the concrete table type to check the column names.
|
|
20
21
|
*/
|
|
21
22
|
|
|
@@ -87,5 +88,19 @@ export async function reassignStagedRecords(
|
|
|
87
88
|
|
|
88
89
|
return moved.map((row) => row.id)
|
|
89
90
|
}
|
|
91
|
+
case 'enquiry': {
|
|
92
|
+
const moved = await db
|
|
93
|
+
.update(enquiries)
|
|
94
|
+
.set(changes)
|
|
95
|
+
.where(
|
|
96
|
+
and(
|
|
97
|
+
eq(enquiries.workspaceId, move.workspaceId),
|
|
98
|
+
eq(enquiries.stageId, move.fromStageId),
|
|
99
|
+
),
|
|
100
|
+
)
|
|
101
|
+
.returning({ id: enquiries.id })
|
|
102
|
+
|
|
103
|
+
return moved.map((row) => row.id)
|
|
104
|
+
}
|
|
90
105
|
}
|
|
91
106
|
}
|
|
@@ -41,6 +41,10 @@ interface RecordUpdatedData {
|
|
|
41
41
|
interface FormSubmittedData {
|
|
42
42
|
readonly formId?: string
|
|
43
43
|
readonly submissionId?: string
|
|
44
|
+
readonly opportunityId?: string | null
|
|
45
|
+
readonly partnershipId?: string | null
|
|
46
|
+
readonly enquiryId?: string | null
|
|
47
|
+
readonly actions?: readonly { readonly action: string; readonly status: string }[]
|
|
44
48
|
}
|
|
45
49
|
|
|
46
50
|
/**
|
|
@@ -90,7 +94,11 @@ export function translateEnvelopeEvent(
|
|
|
90
94
|
|
|
91
95
|
if (suffix === 'submitted') {
|
|
92
96
|
// Form submission is the only `.submitted` wire event today. The forms
|
|
93
|
-
// module emits its envelope with `formId` and `submissionId` in `data
|
|
97
|
+
// module emits its envelope with `formId` and `submissionId` in `data`,
|
|
98
|
+
// plus (per forms.md §Webhooks) the opportunity/partnership ids the
|
|
99
|
+
// post-submit runner created and one status per configured action. The
|
|
100
|
+
// per-action `detail` string is deliberately omitted — the authenticated
|
|
101
|
+
// Submissions read carries it in full, the webhook only says what ran.
|
|
94
102
|
const data = event.data as FormSubmittedData
|
|
95
103
|
if (data.formId === undefined || data.submissionId === undefined) {
|
|
96
104
|
return undefined
|
|
@@ -99,7 +107,17 @@ export function translateEnvelopeEvent(
|
|
|
99
107
|
return {
|
|
100
108
|
workspaceId: event.workspaceId,
|
|
101
109
|
event: 'form.submitted',
|
|
102
|
-
data: {
|
|
110
|
+
data: {
|
|
111
|
+
form_id: data.formId,
|
|
112
|
+
submission_id: data.submissionId,
|
|
113
|
+
opportunity_id: data.opportunityId ?? null,
|
|
114
|
+
partnership_id: data.partnershipId ?? null,
|
|
115
|
+
enquiry_id: data.enquiryId ?? null,
|
|
116
|
+
actions:
|
|
117
|
+
data.actions === undefined
|
|
118
|
+
? []
|
|
119
|
+
: data.actions.map((entry) => ({ action: entry.action, status: entry.status })),
|
|
120
|
+
},
|
|
103
121
|
}
|
|
104
122
|
}
|
|
105
123
|
|
|
@@ -3,6 +3,7 @@ import { and, asc, count, eq, gt } from 'drizzle-orm'
|
|
|
3
3
|
import type { Database } from '../../lib/database.ts'
|
|
4
4
|
import type { Transaction } from '../../runtime/transaction.ts'
|
|
5
5
|
import { users } from '../auth/schema.ts'
|
|
6
|
+
import { consentPurposes } from '../consent-purposes/schema.ts'
|
|
6
7
|
import { deals } from '../deals/schema.ts'
|
|
7
8
|
import { decisions } from '../decisions/schema.ts'
|
|
8
9
|
import { handbookPages } from '../handbook/schema.ts'
|
|
@@ -387,6 +388,17 @@ export async function insertPipelineStages(
|
|
|
387
388
|
await db.insert(pipelineStages).values([...values])
|
|
388
389
|
}
|
|
389
390
|
|
|
391
|
+
export async function insertConsentPurposes(
|
|
392
|
+
db: Queryable,
|
|
393
|
+
values: readonly (typeof consentPurposes.$inferInsert)[],
|
|
394
|
+
): Promise<void> {
|
|
395
|
+
if (values.length === 0) {
|
|
396
|
+
return
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
await db.insert(consentPurposes).values([...values])
|
|
400
|
+
}
|
|
401
|
+
|
|
390
402
|
export type ModuleSettingRecord = typeof workspaceModuleSettings.$inferSelect
|
|
391
403
|
|
|
392
404
|
export async function listModuleSettings(db: Queryable, workspaceId: string): Promise<ModuleSettingRecord[]> {
|
|
@@ -2,6 +2,7 @@ import { APP_LINK_PATHS, buildAppLink } from '../../lib/appUrl.ts'
|
|
|
2
2
|
import { UNIQUE_VIOLATION, isReferenceViolation, postgresErrorCode } from '../../lib/database.ts'
|
|
3
3
|
import type { Database } from '../../lib/database.ts'
|
|
4
4
|
import type { EmailSender } from '../../lib/email.ts'
|
|
5
|
+
import { renderEmail } from '../../lib/emailContent.ts'
|
|
5
6
|
import { AppError } from '../../lib/errors.ts'
|
|
6
7
|
import type { IdFactory } from '../../lib/ids.ts'
|
|
7
8
|
import { generateToken, hashToken } from '../../lib/tokens.ts'
|
|
@@ -14,6 +15,7 @@ import type { Actor, SessionActor } from '../auth/actor.ts'
|
|
|
14
15
|
import './events.ts'
|
|
15
16
|
import * as authRepository from '../auth/repository.ts'
|
|
16
17
|
import { SEATS_LIMIT } from './capabilities.ts'
|
|
18
|
+
import { STARTER_CONSENT_PURPOSES } from '../consent-purposes/starters.ts'
|
|
17
19
|
import * as repository from './repository.ts'
|
|
18
20
|
import { parseInvitableRole, parseMemberRole, roleAllows } from './roles.ts'
|
|
19
21
|
import type { InvitableRole, InviteStatus, MemberRole } from './roles.ts'
|
|
@@ -336,11 +338,22 @@ export function createWorkspaceService(dependencies: WorkspaceDependencies): Wor
|
|
|
336
338
|
|
|
337
339
|
function sendInviteEmail(to: string, token: string): Promise<void> {
|
|
338
340
|
const link = buildAppLink(dependencies.appBaseUrl, APP_LINK_PATHS.inviteAccept, token)
|
|
341
|
+
const { text, html } = renderEmail(
|
|
342
|
+
{
|
|
343
|
+
action: {
|
|
344
|
+
instructions: 'Accept the invitation within seven days:',
|
|
345
|
+
buttonText: 'Accept invitation',
|
|
346
|
+
link,
|
|
347
|
+
},
|
|
348
|
+
},
|
|
349
|
+
dependencies.appBaseUrl,
|
|
350
|
+
)
|
|
339
351
|
|
|
340
352
|
return dependencies.email.send({
|
|
341
353
|
to,
|
|
342
354
|
subject: 'You have been invited to a Kelpie workspace',
|
|
343
|
-
body:
|
|
355
|
+
body: text,
|
|
356
|
+
html,
|
|
344
357
|
})
|
|
345
358
|
}
|
|
346
359
|
|
|
@@ -459,6 +472,19 @@ export function createWorkspaceService(dependencies: WorkspaceDependencies): Wor
|
|
|
459
472
|
),
|
|
460
473
|
)
|
|
461
474
|
|
|
475
|
+
await repository.insertConsentPurposes(
|
|
476
|
+
tx,
|
|
477
|
+
STARTER_CONSENT_PURPOSES.map((purpose, index) => ({
|
|
478
|
+
id: dependencies.createId('consentPurpose'),
|
|
479
|
+
workspaceId,
|
|
480
|
+
slug: purpose.slug,
|
|
481
|
+
label: purpose.label,
|
|
482
|
+
description: purpose.description,
|
|
483
|
+
defaultStatus: purpose.defaultStatus,
|
|
484
|
+
sortOrder: index,
|
|
485
|
+
})),
|
|
486
|
+
)
|
|
487
|
+
|
|
462
488
|
// The session that created the workspace should land in it.
|
|
463
489
|
await authRepository.setActiveWorkspace(tx, actor.sessionId, workspaceId)
|
|
464
490
|
|
|
@@ -37,6 +37,11 @@ export interface StarterStage {
|
|
|
37
37
|
|
|
38
38
|
/** `open: false` hides a stage from the Open scope filter; it is not a delete. */
|
|
39
39
|
export const STARTER_PIPELINE_STAGES: Readonly<Record<string, readonly StarterStage[]>> = {
|
|
40
|
+
enquiry: [
|
|
41
|
+
{ slug: 'new', label: 'New', open: true },
|
|
42
|
+
{ slug: 'in_progress', label: 'In progress', open: true },
|
|
43
|
+
{ slug: 'closed', label: 'Closed', open: false },
|
|
44
|
+
],
|
|
40
45
|
deal: [
|
|
41
46
|
{ slug: 'qualifying', label: 'Qualifying', open: true },
|
|
42
47
|
{ slug: 'proposal', label: 'Proposal', open: true },
|
package/src/runtime/events.ts
CHANGED
package/src/schema/index.ts
CHANGED
|
@@ -9,11 +9,13 @@
|
|
|
9
9
|
export * from '../modules/auth/schema.ts'
|
|
10
10
|
export * from '../modules/workspace/schema.ts'
|
|
11
11
|
export * from '../modules/api-keys/schema.ts'
|
|
12
|
+
export * from '../modules/consent-purposes/schema.ts'
|
|
12
13
|
export * from '../modules/people/schema.ts'
|
|
13
14
|
export * from '../modules/companies/schema.ts'
|
|
14
15
|
export * from '../modules/positions/schema.ts'
|
|
15
16
|
export * from '../modules/pipelines/schema.ts'
|
|
16
17
|
export * from '../modules/deals/schema.ts'
|
|
18
|
+
export * from '../modules/enquiries/schema.ts'
|
|
17
19
|
export * from '../modules/opportunities/schema.ts'
|
|
18
20
|
export * from '../modules/partnerships/schema.ts'
|
|
19
21
|
export * from '../modules/raises/schema.ts'
|
|
@@ -21,7 +23,9 @@ export * from '../modules/hiring/schema.ts'
|
|
|
21
23
|
export * from '../modules/plans/schema.ts'
|
|
22
24
|
export * from '../modules/decisions/schema.ts'
|
|
23
25
|
export * from '../modules/notes/schema.ts'
|
|
26
|
+
export * from '../modules/lists/schema.ts'
|
|
24
27
|
export * from '../modules/activities/schema.ts'
|
|
28
|
+
export * from '../modules/custom-fields/schema.ts'
|
|
25
29
|
export * from '../modules/handbook/schema.ts'
|
|
26
30
|
export * from '../modules/forms/schema.ts'
|
|
27
31
|
export * from '../modules/import-export/schema.ts'
|
package/src/testing/database.ts
CHANGED
|
@@ -15,24 +15,42 @@ import { TEST_EMAIL_FROM, TEST_EMAIL_PROVIDER, createTestServices } from './serv
|
|
|
15
15
|
* A migrated database for integration tests.
|
|
16
16
|
*
|
|
17
17
|
* Tests connect to the same local Postgres the dev server uses, on a database
|
|
18
|
-
* named by `TEST_DATABASE_URL
|
|
19
|
-
*
|
|
20
|
-
*
|
|
18
|
+
* named by `TEST_DATABASE_URL` — suffixed per Vitest worker, so test files can
|
|
19
|
+
* run in parallel without sharing tables. Migrations run once per process;
|
|
20
|
+
* between tests `truncateAll` empties the tables rather than re-migrating.
|
|
21
|
+
*
|
|
22
|
+
* The reset deletes rather than truncates. TRUNCATE rebuilds every relation
|
|
23
|
+
* file and syncs it to disk, which measured 590-830ms per call against
|
|
24
|
+
* Dockerised Postgres; DELETE across the same mostly-empty tables is under a
|
|
25
|
+
* millisecond. Deletes run children-first so no foreign key is ever violated.
|
|
21
26
|
*/
|
|
22
27
|
|
|
23
28
|
const silentLogger = createLogger({ level: 'error', transports: [] })
|
|
24
29
|
|
|
25
30
|
export interface TestDatabase extends DatabaseConnection {
|
|
26
|
-
/** Empties every table. Cheaper than re-
|
|
31
|
+
/** Empties every table. Cheaper than truncating or re-migrating between tests. */
|
|
27
32
|
readonly truncateAll: () => Promise<void>
|
|
28
33
|
}
|
|
29
34
|
|
|
30
35
|
/**
|
|
31
36
|
* Reads the test database location. Integration tests are skipped rather than
|
|
32
37
|
* failed when it is absent, so `npm test` still works without Postgres running.
|
|
38
|
+
*
|
|
39
|
+
* Inside a Vitest worker the configured name gains the worker's pool id, so
|
|
40
|
+
* every worker owns its own database and test files can run in parallel.
|
|
41
|
+
* `connectTestDatabase` creates and migrates a missing database on first use.
|
|
33
42
|
*/
|
|
34
43
|
export function testDatabaseUrl(environment: Environment): string | undefined {
|
|
35
|
-
|
|
44
|
+
const configured = environment.TEST_DATABASE_URL
|
|
45
|
+
const poolId = environment.VITEST_POOL_ID
|
|
46
|
+
|
|
47
|
+
if (configured === undefined || poolId === undefined) {
|
|
48
|
+
return configured
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const url = new URL(configured)
|
|
52
|
+
url.pathname = `${url.pathname}_${poolId}`
|
|
53
|
+
return url.toString()
|
|
36
54
|
}
|
|
37
55
|
|
|
38
56
|
/**
|
|
@@ -85,10 +103,18 @@ export async function connectTestDatabase(connectionString: string): Promise<Tes
|
|
|
85
103
|
|
|
86
104
|
await runMigrations(connection.db, contributions.schemas, silentLogger)
|
|
87
105
|
|
|
88
|
-
|
|
106
|
+
let cachedReset: string | undefined
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Builds one `DO` block that deletes from every table, each table after
|
|
110
|
+
* every table that references it, so a plain DELETE never trips a foreign
|
|
111
|
+
* key. Built once per connection: the table set only changes with the
|
|
112
|
+
* migrations, which already ran.
|
|
113
|
+
*/
|
|
114
|
+
async function buildResetStatement(): Promise<string | undefined> {
|
|
89
115
|
// Names come from the catalog, not from user input, and every migrations
|
|
90
|
-
// table is excluded so
|
|
91
|
-
const
|
|
116
|
+
// table is excluded so the reset does not undo the migration record.
|
|
117
|
+
const tables = await connection.db.execute<{ table_name: string }>(sql`
|
|
92
118
|
select table_name
|
|
93
119
|
from information_schema.tables
|
|
94
120
|
where table_schema = 'public'
|
|
@@ -96,13 +122,73 @@ export async function connectTestDatabase(connectionString: string): Promise<Tes
|
|
|
96
122
|
and table_name not like '\\_\\_drizzle\\_%'
|
|
97
123
|
`)
|
|
98
124
|
|
|
99
|
-
const names = [...
|
|
125
|
+
const names = [...tables].map((row) => row.table_name)
|
|
100
126
|
|
|
101
127
|
if (names.length === 0) {
|
|
102
|
-
return
|
|
128
|
+
return undefined
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// Distinct pairs, so two foreign keys between the same tables do not
|
|
132
|
+
// count twice. Self-references are dropped: deleting every row of a table
|
|
133
|
+
// in one statement satisfies its own constraint.
|
|
134
|
+
const references = await connection.db.execute<{ child: string; parent: string }>(sql`
|
|
135
|
+
select distinct child.relname as child, parent.relname as parent
|
|
136
|
+
from pg_constraint con
|
|
137
|
+
join pg_class child on child.oid = con.conrelid
|
|
138
|
+
join pg_class parent on parent.oid = con.confrelid
|
|
139
|
+
where con.contype = 'f'
|
|
140
|
+
and con.connamespace = 'public'::regnamespace
|
|
141
|
+
and con.conrelid <> con.confrelid
|
|
142
|
+
`)
|
|
143
|
+
|
|
144
|
+
const included = new Set(names)
|
|
145
|
+
const parentsOf = new Map<string, string[]>()
|
|
146
|
+
const inboundReferences = new Map<string, number>(names.map((name) => [name, 0]))
|
|
147
|
+
|
|
148
|
+
for (const { child, parent } of references) {
|
|
149
|
+
if (!included.has(child) || !included.has(parent)) {
|
|
150
|
+
continue
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
parentsOf.set(child, [...(parentsOf.get(child) ?? []), parent])
|
|
154
|
+
inboundReferences.set(parent, (inboundReferences.get(parent) ?? 0) + 1)
|
|
103
155
|
}
|
|
104
156
|
|
|
105
|
-
|
|
157
|
+
// Kahn's algorithm. A table joins the order once every table referencing
|
|
158
|
+
// it is already in it, which is exactly when deleting from it is safe.
|
|
159
|
+
const ordered = names.filter((name) => inboundReferences.get(name) === 0)
|
|
160
|
+
|
|
161
|
+
for (let index = 0; index < ordered.length; index += 1) {
|
|
162
|
+
const table = ordered[index]
|
|
163
|
+
|
|
164
|
+
if (table === undefined) {
|
|
165
|
+
continue
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
for (const parent of parentsOf.get(table) ?? []) {
|
|
169
|
+
const remaining = (inboundReferences.get(parent) ?? 0) - 1
|
|
170
|
+
inboundReferences.set(parent, remaining)
|
|
171
|
+
|
|
172
|
+
if (remaining === 0) {
|
|
173
|
+
ordered.push(parent)
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
if (ordered.length !== names.length) {
|
|
179
|
+
throw new Error('cannot order the table deletes: the foreign keys form a cycle')
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
const deletes = ordered.map((name) => `delete from "${name.replace(/"/gu, '""')}";`).join(' ')
|
|
183
|
+
return `do $reset$ begin ${deletes} end $reset$;`
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
async function truncateAll(): Promise<void> {
|
|
187
|
+
cachedReset ??= await buildResetStatement()
|
|
188
|
+
|
|
189
|
+
if (cachedReset !== undefined) {
|
|
190
|
+
await connection.db.execute(sql.raw(cachedReset))
|
|
191
|
+
}
|
|
106
192
|
}
|
|
107
193
|
|
|
108
194
|
return { ...connection, truncateAll }
|