@kelpie/server 0.8.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/ids.d.ts +11 -0
- package/dist/lib/ids.d.ts.map +1 -1
- package/dist/lib/ids.js +11 -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 +15 -1
- package/dist/modules/attachedRecords.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/routes.d.ts +14 -0
- package/dist/modules/companies/routes.d.ts.map +1 -1
- package/dist/modules/companies/routes.js +7 -0
- package/dist/modules/companies/routes.js.map +1 -1
- package/dist/modules/companies/schema.d.ts +20 -0
- package/dist/modules/companies/schema.d.ts.map +1 -1
- package/dist/modules/companies/schema.js +6 -1
- package/dist/modules/companies/schema.js.map +1 -1
- package/dist/modules/companies/service.d.ts +5 -0
- package/dist/modules/companies/service.d.ts.map +1 -1
- package/dist/modules/companies/service.js +24 -12
- 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 +10 -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/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 +3 -0
- package/dist/modules/eventCatalogs.d.ts.map +1 -1
- package/dist/modules/eventCatalogs.js +3 -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/repository.d.ts +11 -0
- package/dist/modules/lists/repository.d.ts.map +1 -1
- package/dist/modules/lists/repository.js +13 -0
- package/dist/modules/lists/repository.js.map +1 -1
- package/dist/modules/lists/routes.d.ts +4 -0
- package/dist/modules/lists/routes.d.ts.map +1 -1
- package/dist/modules/lists/routes.js +8 -0
- package/dist/modules/lists/routes.js.map +1 -1
- package/dist/modules/lists/schema.d.ts +17 -0
- package/dist/modules/lists/schema.d.ts.map +1 -1
- package/dist/modules/lists/schema.js +10 -0
- package/dist/modules/lists/schema.js.map +1 -1
- package/dist/modules/lists/service.d.ts +14 -2
- package/dist/modules/lists/service.d.ts.map +1 -1
- package/dist/modules/lists/service.js +55 -7
- package/dist/modules/lists/service.js.map +1 -1
- 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.map +1 -1
- package/dist/modules/people/repository.js +5 -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 +115 -38
- 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/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 +21 -0
- package/dist/modules/sample-data/fixture.d.ts.map +1 -1
- package/dist/modules/sample-data/fixture.js +40 -0
- package/dist/modules/sample-data/fixture.js.map +1 -1
- package/dist/modules/sample-data/index.d.ts.map +1 -1
- package/dist/modules/sample-data/index.js +1 -0
- package/dist/modules/sample-data/index.js.map +1 -1
- package/dist/modules/sample-data/routes.d.ts.map +1 -1
- package/dist/modules/sample-data/routes.js +1 -0
- package/dist/modules/sample-data/routes.js.map +1 -1
- package/dist/modules/sample-data/service.d.ts +1 -0
- package/dist/modules/sample-data/service.d.ts.map +1 -1
- package/dist/modules/sample-data/service.js +77 -8
- package/dist/modules/sample-data/service.js.map +1 -1
- 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/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 +10 -0
- 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 +3 -0
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +3 -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/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/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 +91 -0
- package/package.json +2 -2
- package/src/lib/ids.ts +11 -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 +29 -2
- package/src/modules/companies/index.ts +3 -1
- package/src/modules/companies/routes.ts +7 -0
- package/src/modules/companies/schema.ts +7 -1
- package/src/modules/companies/service.ts +48 -13
- 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 +10 -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/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 +3 -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/repository.ts +30 -0
- package/src/modules/lists/routes.ts +8 -0
- package/src/modules/lists/schema.ts +10 -0
- package/src/modules/lists/service.ts +110 -9
- 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 +5 -0
- package/src/modules/people/routes.ts +127 -18
- package/src/modules/people/schema.ts +109 -3
- package/src/modules/people/service.ts +186 -40
- package/src/modules/people/tools.ts +5 -1
- package/src/modules/personLinks.ts +278 -0
- 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 +63 -0
- package/src/modules/sample-data/index.ts +1 -0
- package/src/modules/sample-data/routes.ts +1 -0
- package/src/modules/sample-data/service.ts +97 -8
- 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/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 +14 -0
- package/src/modules/workspace/starters.ts +5 -0
- package/src/runtime/events.ts +1 -0
- package/src/schema/index.ts +3 -0
- package/src/testing/database.ts +97 -11
|
@@ -5,6 +5,11 @@
|
|
|
5
5
|
* frames a page from the Kelpie origin, and that page must not drag the CRM's
|
|
6
6
|
* React bundle into somebody else's marketing site to draw five inputs.
|
|
7
7
|
*
|
|
8
|
+
* The hosted layout carries Kelpie's look. The iframe layout is intentionally
|
|
9
|
+
* unbranded (system font, Field colours) so it does not paint Kelpie onto the
|
|
10
|
+
* host site — an iframe cannot inherit the host's CSS, so staying neutral is
|
|
11
|
+
* the alternative.
|
|
12
|
+
*
|
|
8
13
|
* Everything here is pure: a form, its fields, and a URL in; a string out. That
|
|
9
14
|
* is what makes the escaping testable, which for a page built by string
|
|
10
15
|
* concatenation is the part worth testing.
|
|
@@ -62,8 +67,50 @@ function renderControl(field) {
|
|
|
62
67
|
// round trip. The server validates the address regardless.
|
|
63
68
|
return `<input ${shared} type="${field.type === 'email' ? 'email' : 'text'}">`;
|
|
64
69
|
}
|
|
65
|
-
function renderField(field) {
|
|
70
|
+
function renderField(field, consentPurposeLabels) {
|
|
66
71
|
const required = field.required ? '<span class="req" aria-hidden="true">*</span>' : '';
|
|
72
|
+
if (field.type === 'notice') {
|
|
73
|
+
// Text-only: prose the visitor reads before submitting. Submission is the
|
|
74
|
+
// consent (see readConsentGrants), so no input is rendered. `label` is
|
|
75
|
+
// the heading; `statement` is the prose.
|
|
76
|
+
const statement = field.statement ?? '';
|
|
77
|
+
return [
|
|
78
|
+
'<div class="field notice">',
|
|
79
|
+
`<div class="field-label">${escapeHtml(field.label)}</div>`,
|
|
80
|
+
`<p class="notice-body">${escapeHtml(statement)}</p>`,
|
|
81
|
+
'</div>',
|
|
82
|
+
].join('');
|
|
83
|
+
}
|
|
84
|
+
if (field.type === 'consent') {
|
|
85
|
+
// Layout: the field label above (heading, e.g. "Consent"), the intro
|
|
86
|
+
// statement, then one checkbox per configured purpose. The submit reads
|
|
87
|
+
// the ticked checkboxes' values (purpose ids) from EMBED_SCRIPT and
|
|
88
|
+
// sends them as a comma-separated string under the field id.
|
|
89
|
+
const statement = field.statement ?? field.label;
|
|
90
|
+
const rows = field.consentPurposeIds
|
|
91
|
+
.map((purposeId, index) => {
|
|
92
|
+
const boxId = `${field.id}__${String(index)}`;
|
|
93
|
+
// Field-level override wins over the workspace's default label. Falls
|
|
94
|
+
// back to the workspace label, then the raw id — the id only shows up
|
|
95
|
+
// when a purpose has been deleted and its label was never overridden.
|
|
96
|
+
const override = field.consentPurposeLabels[purposeId];
|
|
97
|
+
const label = override ?? consentPurposeLabels.get(purposeId) ?? purposeId;
|
|
98
|
+
return [
|
|
99
|
+
'<div class="consent-row">',
|
|
100
|
+
`<input type="checkbox" id="${escapeHtml(boxId)}" data-consent-field="${escapeHtml(field.id)}" value="${escapeHtml(purposeId)}">`,
|
|
101
|
+
`<label for="${escapeHtml(boxId)}">${escapeHtml(label)}</label>`,
|
|
102
|
+
'</div>',
|
|
103
|
+
].join('');
|
|
104
|
+
})
|
|
105
|
+
.join('');
|
|
106
|
+
return [
|
|
107
|
+
'<div class="field consent">',
|
|
108
|
+
`<div class="field-label">${escapeHtml(field.label)}${required}</div>`,
|
|
109
|
+
`<p class="consent-statement">${escapeHtml(statement)}</p>`,
|
|
110
|
+
rows,
|
|
111
|
+
'</div>',
|
|
112
|
+
].join('');
|
|
113
|
+
}
|
|
67
114
|
return [
|
|
68
115
|
'<div class="field">',
|
|
69
116
|
`<label for="${escapeHtml(field.id)}">${escapeHtml(field.label)}${required}</label>`,
|
|
@@ -72,26 +119,246 @@ function renderField(field) {
|
|
|
72
119
|
].join('');
|
|
73
120
|
}
|
|
74
121
|
/**
|
|
75
|
-
* Styles for the page
|
|
76
|
-
|
|
77
|
-
|
|
122
|
+
* Styles for the standalone hosted page — Kelpie tokens, brand chrome, card.
|
|
123
|
+
*/
|
|
124
|
+
const HOSTED_STYLES = `
|
|
125
|
+
:root {
|
|
126
|
+
color-scheme: light;
|
|
127
|
+
--surface: #fafafa;
|
|
128
|
+
--surface-raised: #ffffff;
|
|
129
|
+
--ink: #18181b;
|
|
130
|
+
--ink-muted: #52525b;
|
|
131
|
+
--ink-faint: #71717a;
|
|
132
|
+
--border: #e4e4e7;
|
|
133
|
+
--accent: #0f766e;
|
|
134
|
+
--accent-hover: #0d9488;
|
|
135
|
+
--accent-soft: #f0fdfa;
|
|
136
|
+
--accent-fg: #ffffff;
|
|
137
|
+
--danger: #dc2626;
|
|
138
|
+
--font: "IBM Plex Sans", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
139
|
+
}
|
|
140
|
+
@media (prefers-color-scheme: dark) {
|
|
141
|
+
:root {
|
|
142
|
+
color-scheme: dark;
|
|
143
|
+
--surface: #0c0c0d;
|
|
144
|
+
--surface-raised: #141416;
|
|
145
|
+
--ink: #fafafa;
|
|
146
|
+
--ink-muted: #a1a1aa;
|
|
147
|
+
--ink-faint: #71717a;
|
|
148
|
+
--border: #27272a;
|
|
149
|
+
--accent: #2dd4bf;
|
|
150
|
+
--accent-hover: #5eead4;
|
|
151
|
+
--accent-soft: #134e4a;
|
|
152
|
+
--accent-fg: #042f2e;
|
|
153
|
+
--danger: #f87171;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
* { box-sizing: border-box; }
|
|
157
|
+
html { background: var(--surface); }
|
|
158
|
+
body {
|
|
159
|
+
margin: 0;
|
|
160
|
+
min-height: 100vh;
|
|
161
|
+
font: 14px/1.5 var(--font);
|
|
162
|
+
color: var(--ink);
|
|
163
|
+
-webkit-font-smoothing: antialiased;
|
|
164
|
+
background:
|
|
165
|
+
radial-gradient(ellipse at top, color-mix(in srgb, var(--accent-soft) 85%, transparent), transparent 55%),
|
|
166
|
+
var(--surface);
|
|
167
|
+
}
|
|
168
|
+
.shell {
|
|
169
|
+
width: 100%;
|
|
170
|
+
max-width: 28rem;
|
|
171
|
+
margin: 0 auto;
|
|
172
|
+
padding: 2.5rem 1rem 3rem;
|
|
173
|
+
}
|
|
174
|
+
.brand { text-align: center; margin-bottom: 1.5rem; }
|
|
175
|
+
.eyebrow {
|
|
176
|
+
font-size: 11px;
|
|
177
|
+
font-weight: 600;
|
|
178
|
+
letter-spacing: 0.06em;
|
|
179
|
+
text-transform: uppercase;
|
|
180
|
+
color: var(--accent);
|
|
181
|
+
}
|
|
182
|
+
.brand h1 {
|
|
183
|
+
margin: 0.25rem 0 0;
|
|
184
|
+
font-size: 1.375rem;
|
|
185
|
+
font-weight: 600;
|
|
186
|
+
letter-spacing: -0.02em;
|
|
187
|
+
line-height: 1.25;
|
|
188
|
+
color: var(--ink);
|
|
189
|
+
}
|
|
190
|
+
.lead {
|
|
191
|
+
margin: 0.35rem 0 0;
|
|
192
|
+
font-size: 13px;
|
|
193
|
+
color: var(--ink-muted);
|
|
194
|
+
}
|
|
195
|
+
.card {
|
|
196
|
+
border: 1px solid var(--border);
|
|
197
|
+
border-radius: 8px;
|
|
198
|
+
background: var(--surface-raised);
|
|
199
|
+
padding: 1.5rem;
|
|
200
|
+
}
|
|
201
|
+
form { display: grid; gap: 1rem; margin: 0; }
|
|
202
|
+
.field { display: grid; gap: 0.35rem; }
|
|
203
|
+
label { font-weight: 500; font-size: 12px; color: var(--ink); }
|
|
204
|
+
.req { color: var(--danger); margin-left: 2px; }
|
|
205
|
+
input, textarea, select {
|
|
206
|
+
width: 100%;
|
|
207
|
+
padding: 0.5rem 0.75rem;
|
|
208
|
+
border: 1px solid var(--border);
|
|
209
|
+
border-radius: 6px;
|
|
210
|
+
font: inherit;
|
|
211
|
+
font-size: 14px;
|
|
212
|
+
color: var(--ink);
|
|
213
|
+
background: var(--surface);
|
|
214
|
+
outline: none;
|
|
215
|
+
transition: border-color 120ms ease, box-shadow 120ms ease;
|
|
216
|
+
}
|
|
217
|
+
input::placeholder, textarea::placeholder { color: var(--ink-faint); }
|
|
218
|
+
input:focus-visible, textarea:focus-visible, select:focus-visible {
|
|
219
|
+
border-color: var(--accent);
|
|
220
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 20%, transparent);
|
|
221
|
+
}
|
|
222
|
+
textarea { resize: vertical; min-height: 6.5rem; }
|
|
223
|
+
/* Consent field: label above (heading), a statement, then a checkbox per purpose. */
|
|
224
|
+
.field.consent { gap: 0.35rem; }
|
|
225
|
+
.field.consent .field-label {
|
|
226
|
+
font-weight: 500;
|
|
227
|
+
font-size: 12px;
|
|
228
|
+
color: var(--ink);
|
|
229
|
+
}
|
|
230
|
+
.field.consent .consent-statement {
|
|
231
|
+
margin: 0 0 0.35rem;
|
|
232
|
+
font-size: 12px;
|
|
233
|
+
color: var(--ink-muted);
|
|
234
|
+
}
|
|
235
|
+
.field.consent .consent-row {
|
|
236
|
+
display: grid;
|
|
237
|
+
grid-template-columns: auto 1fr;
|
|
238
|
+
align-items: start;
|
|
239
|
+
gap: 0.5rem;
|
|
240
|
+
padding: 0.15rem 0;
|
|
241
|
+
}
|
|
242
|
+
.field.consent input[type="checkbox"] {
|
|
243
|
+
width: 1rem;
|
|
244
|
+
height: 1rem;
|
|
245
|
+
margin-top: 0.2rem;
|
|
246
|
+
padding: 0;
|
|
247
|
+
background: var(--surface);
|
|
248
|
+
}
|
|
249
|
+
.field.consent .consent-row label {
|
|
250
|
+
font-weight: 400;
|
|
251
|
+
color: var(--ink);
|
|
252
|
+
}
|
|
253
|
+
.field.notice { gap: 0.35rem; }
|
|
254
|
+
.field.notice .field-label {
|
|
255
|
+
font-weight: 500;
|
|
256
|
+
font-size: 12px;
|
|
257
|
+
color: var(--ink);
|
|
258
|
+
}
|
|
259
|
+
.field.notice .notice-body {
|
|
260
|
+
margin: 0;
|
|
261
|
+
padding: 0.5rem 0.75rem;
|
|
262
|
+
font-size: 12px;
|
|
263
|
+
color: var(--ink-muted);
|
|
264
|
+
background: var(--surface);
|
|
265
|
+
border: 1px solid var(--border);
|
|
266
|
+
border-radius: 6px;
|
|
267
|
+
white-space: pre-line;
|
|
268
|
+
}
|
|
269
|
+
button[type="submit"] {
|
|
270
|
+
width: 100%;
|
|
271
|
+
padding: 0.625rem 0.875rem;
|
|
272
|
+
border: 0;
|
|
273
|
+
border-radius: 6px;
|
|
274
|
+
background: var(--accent);
|
|
275
|
+
color: var(--accent-fg);
|
|
276
|
+
font: inherit;
|
|
277
|
+
font-size: 13px;
|
|
278
|
+
font-weight: 600;
|
|
279
|
+
cursor: pointer;
|
|
280
|
+
transition: background 120ms ease;
|
|
281
|
+
}
|
|
282
|
+
button[type="submit"]:hover:not([disabled]) { background: var(--accent-hover); }
|
|
283
|
+
button[type="submit"][disabled] { opacity: 0.55; cursor: progress; }
|
|
284
|
+
.note { margin: 0; font-size: 12px; color: var(--ink-muted); }
|
|
285
|
+
.error { color: var(--danger); font-weight: 500; }
|
|
286
|
+
.done {
|
|
287
|
+
margin: 0;
|
|
288
|
+
text-align: center;
|
|
289
|
+
font-size: 15px;
|
|
290
|
+
font-weight: 500;
|
|
291
|
+
line-height: 1.45;
|
|
292
|
+
color: var(--ink);
|
|
293
|
+
}
|
|
294
|
+
.paused {
|
|
295
|
+
margin: 0;
|
|
296
|
+
font-size: 13px;
|
|
297
|
+
color: var(--ink-muted);
|
|
298
|
+
text-align: center;
|
|
299
|
+
}
|
|
300
|
+
`;
|
|
301
|
+
/**
|
|
302
|
+
* Styles for the iframe document.
|
|
303
|
+
*
|
|
304
|
+
* Deliberately not Kelpie: system font, browser field colours, a plain button.
|
|
305
|
+
* An iframe cannot pick up the host page's CSS, so the only way not to fight
|
|
306
|
+
* the host is to stay neutral and leave the background transparent.
|
|
78
307
|
*/
|
|
79
|
-
const
|
|
80
|
-
:root { color-scheme: light dark; }
|
|
308
|
+
const IFRAME_STYLES = `
|
|
81
309
|
* { box-sizing: border-box; }
|
|
82
|
-
body {
|
|
83
|
-
|
|
310
|
+
html, body { background: transparent; }
|
|
311
|
+
body {
|
|
312
|
+
margin: 0;
|
|
313
|
+
padding: 12px;
|
|
314
|
+
font: 15px/1.5 system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
|
|
315
|
+
color: CanvasText;
|
|
316
|
+
-webkit-font-smoothing: antialiased;
|
|
317
|
+
}
|
|
318
|
+
.shell { margin: 0; padding: 0; }
|
|
319
|
+
form { display: grid; gap: 14px; margin: 0; }
|
|
84
320
|
.field { display: grid; gap: 5px; }
|
|
85
321
|
label { font-weight: 600; font-size: 0.875rem; }
|
|
86
322
|
.req { color: #b4232c; margin-left: 2px; }
|
|
87
|
-
input, textarea, select {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
323
|
+
input, textarea, select {
|
|
324
|
+
width: 100%;
|
|
325
|
+
padding: 9px 10px;
|
|
326
|
+
border: 1px solid #b9bfc9;
|
|
327
|
+
border-radius: 6px;
|
|
328
|
+
font: inherit;
|
|
329
|
+
background: Field;
|
|
330
|
+
color: FieldText;
|
|
331
|
+
}
|
|
332
|
+
input:focus-visible, textarea:focus-visible, select:focus-visible {
|
|
333
|
+
outline: 2px solid #2f6feb;
|
|
334
|
+
outline-offset: 1px;
|
|
335
|
+
}
|
|
336
|
+
textarea { resize: vertical; min-height: 6rem; }
|
|
337
|
+
.field.consent { gap: 5px; }
|
|
338
|
+
.field.consent .field-label { font-weight: 600; font-size: 0.875rem; color: CanvasText; }
|
|
339
|
+
.field.consent .consent-statement { margin: 0 0 5px; font-size: 0.8125rem; color: #5c6570; }
|
|
340
|
+
.field.consent .consent-row { display: grid; grid-template-columns: auto 1fr; align-items: start; gap: 8px; padding: 2px 0; }
|
|
341
|
+
.field.consent input[type="checkbox"] { width: 1rem; height: 1rem; margin-top: 3px; padding: 0; background: Field; }
|
|
342
|
+
.field.consent .consent-row label { font-weight: 400; }
|
|
343
|
+
.field.notice { gap: 5px; }
|
|
344
|
+
.field.notice .field-label { font-weight: 600; font-size: 0.875rem; color: CanvasText; }
|
|
345
|
+
.field.notice .notice-body { margin: 0; padding: 9px 10px; font-size: 0.8125rem; color: CanvasText; background: Field; border: 1px solid #b9bfc9; border-radius: 6px; white-space: pre-line; }
|
|
346
|
+
button[type="submit"] {
|
|
347
|
+
width: 100%;
|
|
348
|
+
padding: 10px 16px;
|
|
349
|
+
border: 0;
|
|
350
|
+
border-radius: 6px;
|
|
351
|
+
background: #2f6feb;
|
|
352
|
+
color: #fff;
|
|
353
|
+
font: inherit;
|
|
354
|
+
font-weight: 600;
|
|
355
|
+
cursor: pointer;
|
|
356
|
+
}
|
|
357
|
+
button[type="submit"][disabled] { opacity: 0.6; cursor: progress; }
|
|
358
|
+
.note { margin: 0; font-size: 0.875rem; color: #5c6570; }
|
|
359
|
+
.error { color: #b4232c; font-weight: 500; }
|
|
360
|
+
.done { margin: 0; font-size: 15px; font-weight: 500; line-height: 1.45; }
|
|
361
|
+
.paused { margin: 0; font-size: 13px; color: #5c6570; }
|
|
95
362
|
`;
|
|
96
363
|
/**
|
|
97
364
|
* The browser half of the page.
|
|
@@ -121,8 +388,28 @@ const EMBED_SCRIPT = `
|
|
|
121
388
|
button.disabled = true;
|
|
122
389
|
|
|
123
390
|
var answers = {};
|
|
391
|
+
// Consent fields render a checkbox per purpose, each tagged with
|
|
392
|
+
// data-consent-field=<field_id> and value=<purpose_id>. Collect the
|
|
393
|
+
// ticked ones into a comma-separated list under the field id — the
|
|
394
|
+
// server parses that back into a set of ticked purpose ids.
|
|
395
|
+
var consentBoxes = form.querySelectorAll('input[type="checkbox"][data-consent-field]');
|
|
396
|
+
var consentByField = {};
|
|
397
|
+
for (var i = 0; i < consentBoxes.length; i += 1) {
|
|
398
|
+
var box = consentBoxes[i];
|
|
399
|
+
var fieldId = box.getAttribute('data-consent-field');
|
|
400
|
+
if (!consentByField[fieldId]) { consentByField[fieldId] = []; }
|
|
401
|
+
if (box.checked) { consentByField[fieldId].push(box.value); }
|
|
402
|
+
}
|
|
403
|
+
for (var fieldId in consentByField) {
|
|
404
|
+
if (consentByField[fieldId].length > 0) {
|
|
405
|
+
answers[fieldId] = consentByField[fieldId].join(',');
|
|
406
|
+
}
|
|
407
|
+
}
|
|
124
408
|
config.fieldIds.forEach(function (id) {
|
|
125
|
-
|
|
409
|
+
if (consentByField[id] !== undefined) { return; }
|
|
410
|
+
var element = form.elements[id];
|
|
411
|
+
if (!element) { return; }
|
|
412
|
+
var value = element.value.trim();
|
|
126
413
|
if (value) { answers[id] = value; }
|
|
127
414
|
});
|
|
128
415
|
|
|
@@ -150,6 +437,28 @@ const EMBED_SCRIPT = `
|
|
|
150
437
|
});
|
|
151
438
|
})();
|
|
152
439
|
`;
|
|
440
|
+
/**
|
|
441
|
+
* Public heading for the hosted page: the form's `title`, falling back to
|
|
442
|
+
* `name` if somehow blank (legacy rows, a cleared field).
|
|
443
|
+
*/
|
|
444
|
+
function displayTitle(form) {
|
|
445
|
+
const title = form.title.trim();
|
|
446
|
+
return title.length > 0 ? title : form.name;
|
|
447
|
+
}
|
|
448
|
+
function renderFormBody(form, fields, consentPurposeLabels, config, nonce) {
|
|
449
|
+
if (form.status === 'paused') {
|
|
450
|
+
return `<p class="paused">This form is not accepting submissions right now.</p>`;
|
|
451
|
+
}
|
|
452
|
+
return [
|
|
453
|
+
'<form id="kelpie-form" novalidate>',
|
|
454
|
+
fields.map((field) => renderField(field, consentPurposeLabels)).join(''),
|
|
455
|
+
'<div><button id="kelpie-submit" type="submit">Submit</button></div>',
|
|
456
|
+
'<p id="kelpie-status" class="note" role="status" aria-live="polite"></p>',
|
|
457
|
+
'</form>',
|
|
458
|
+
`<script type="application/json" id="kelpie-config">${config}</script>`,
|
|
459
|
+
`<script nonce="${escapeHtml(nonce)}">${EMBED_SCRIPT}</script>`,
|
|
460
|
+
].join('');
|
|
461
|
+
}
|
|
153
462
|
/**
|
|
154
463
|
* The whole page, as one document.
|
|
155
464
|
*
|
|
@@ -158,37 +467,43 @@ const EMBED_SCRIPT = `
|
|
|
158
467
|
* form whose submit answers 409.
|
|
159
468
|
*/
|
|
160
469
|
export function renderEmbedPage(options) {
|
|
161
|
-
const { form, fields, submitUrl, nonce } = options;
|
|
470
|
+
const { form, fields, consentPurposeLabels, submitUrl, nonce, workspaceName, layout } = options;
|
|
471
|
+
const heading = displayTitle(form);
|
|
162
472
|
const config = escapeScriptJson({
|
|
163
473
|
formId: form.id,
|
|
164
474
|
submitUrl,
|
|
165
475
|
thankYou: form.thankYouMessage,
|
|
166
476
|
fieldIds: fields.map((field) => field.id),
|
|
167
477
|
});
|
|
168
|
-
const
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
'<
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
478
|
+
const formBody = renderFormBody(form, fields, consentPurposeLabels, config, nonce);
|
|
479
|
+
const styles = layout === 'page' ? HOSTED_STYLES : IFRAME_STYLES;
|
|
480
|
+
const shell = layout === 'page'
|
|
481
|
+
? [
|
|
482
|
+
'<div class="shell">',
|
|
483
|
+
'<header class="brand">',
|
|
484
|
+
`<div class="eyebrow">${escapeHtml(workspaceName)}</div>`,
|
|
485
|
+
`<h1>${escapeHtml(heading)}</h1>`,
|
|
486
|
+
form.description === null || form.description.trim().length === 0
|
|
487
|
+
? ''
|
|
488
|
+
: `<p class="lead">${escapeHtml(form.description)}</p>`,
|
|
489
|
+
'</header>',
|
|
490
|
+
`<div class="card">${formBody}</div>`,
|
|
491
|
+
'</div>',
|
|
492
|
+
].join('')
|
|
493
|
+
: `<div class="shell">${formBody}</div>`;
|
|
179
494
|
return [
|
|
180
495
|
'<!doctype html>',
|
|
181
|
-
|
|
496
|
+
`<html lang="en" class="layout-${layout}">`,
|
|
182
497
|
'<head>',
|
|
183
498
|
'<meta charset="utf-8">',
|
|
184
499
|
'<meta name="viewport" content="width=device-width, initial-scale=1">',
|
|
185
500
|
// Not indexed: the canonical page for this form is the customer's own, and
|
|
186
501
|
// a bare embed ranking above it would be a worse result for a reader.
|
|
187
502
|
'<meta name="robots" content="noindex">',
|
|
188
|
-
`<title>${escapeHtml(
|
|
189
|
-
`<style nonce="${escapeHtml(nonce)}">${
|
|
503
|
+
`<title>${escapeHtml(heading)}</title>`,
|
|
504
|
+
`<style nonce="${escapeHtml(nonce)}">${styles}</style>`,
|
|
190
505
|
'</head>',
|
|
191
|
-
`<body>${
|
|
506
|
+
`<body class="layout-${layout}">${shell}</body>`,
|
|
192
507
|
'</html>',
|
|
193
508
|
].join('');
|
|
194
509
|
}
|
|
@@ -211,18 +526,19 @@ export function embedContentSecurityPolicy(nonce) {
|
|
|
211
526
|
].join('; ');
|
|
212
527
|
}
|
|
213
528
|
/**
|
|
214
|
-
* The two ways to embed.
|
|
529
|
+
* The two ways to embed, plus the hosted page URL.
|
|
215
530
|
*
|
|
216
|
-
*
|
|
217
|
-
*
|
|
218
|
-
*
|
|
531
|
+
* Hosted `url` is the full page. The iframe snippets point at `embedUrl`, which
|
|
532
|
+
* is the same form without page chrome — what belongs inside somebody else's
|
|
533
|
+
* site. The plain iframe is fixed height; the script listens for height
|
|
534
|
+
* messages as fields appear and as the thank-you replaces the form.
|
|
219
535
|
*/
|
|
220
|
-
export function embedSnippets(
|
|
221
|
-
const iframe = `<iframe src="${escapeHtml(
|
|
222
|
-
`style="width:100%;border:0;height:
|
|
536
|
+
export function embedSnippets(hostedUrl, embedUrl, formId) {
|
|
537
|
+
const iframe = `<iframe src="${escapeHtml(embedUrl)}" title="Contact form" ` +
|
|
538
|
+
`style="width:100%;border:0;height:720px" loading="lazy"></iframe>`;
|
|
223
539
|
const script = [
|
|
224
|
-
`<iframe id="kelpie-${formId}" src="${escapeHtml(
|
|
225
|
-
` style="width:100%;border:0;height:
|
|
540
|
+
`<iframe id="kelpie-${formId}" src="${escapeHtml(embedUrl)}" title="Contact form"`,
|
|
541
|
+
` style="width:100%;border:0;height:720px" loading="lazy"></iframe>`,
|
|
226
542
|
`<script>`,
|
|
227
543
|
` window.addEventListener('message', function (event) {`,
|
|
228
544
|
` if (event.data && event.data.kelpie === 'height' && event.data.formId === '${formId}') {`,
|
|
@@ -231,6 +547,6 @@ export function embedSnippets(url, formId) {
|
|
|
231
547
|
` });`,
|
|
232
548
|
`</script>`,
|
|
233
549
|
].join('\n');
|
|
234
|
-
return { url, iframe, script };
|
|
550
|
+
return { url: hostedUrl, embedUrl, iframe, script };
|
|
235
551
|
}
|
|
236
552
|
//# sourceMappingURL=embed.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embed.js","sourceRoot":"","sources":["../../../src/modules/forms/embed.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"embed.js","sourceRoot":"","sources":["../../../src/modules/forms/embed.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,5 @@
|
|
|
1
|
+
import type { FormActionStatus } from '@kelpie/schemas';
|
|
1
2
|
import { z } from 'zod';
|
|
2
|
-
/**
|
|
3
|
-
* Domain events published by the forms module.
|
|
4
|
-
*
|
|
5
|
-
* `forms.form.*` cover the form definition CRUD. `forms.submission.submitted`
|
|
6
|
-
* fires once per submission; the webhooks bridge translates it to the wire
|
|
7
|
-
* `form.submitted` event (the ids live in `data`).
|
|
8
|
-
*/
|
|
9
3
|
export declare const formsEvents: {
|
|
10
4
|
'forms.form.created': z.ZodObject<{}, z.core.$strict>;
|
|
11
5
|
'forms.form.updated': z.ZodObject<{
|
|
@@ -15,6 +9,17 @@ export declare const formsEvents: {
|
|
|
15
9
|
'forms.submission.submitted': z.ZodObject<{
|
|
16
10
|
formId: z.ZodString;
|
|
17
11
|
submissionId: z.ZodString;
|
|
12
|
+
opportunityId: z.ZodNullable<z.ZodString>;
|
|
13
|
+
partnershipId: z.ZodNullable<z.ZodString>;
|
|
14
|
+
enquiryId: z.ZodNullable<z.ZodString>;
|
|
15
|
+
actions: z.ZodReadonly<z.ZodArray<z.ZodReadonly<z.ZodObject<{
|
|
16
|
+
action: z.ZodString;
|
|
17
|
+
status: z.ZodEnum<{
|
|
18
|
+
error: "error";
|
|
19
|
+
ok: "ok";
|
|
20
|
+
skipped: "skipped";
|
|
21
|
+
}>;
|
|
22
|
+
}, z.core.$strip>>>>;
|
|
18
23
|
}, z.core.$strip>;
|
|
19
24
|
};
|
|
20
25
|
export type FormCreatedData = Record<string, never>;
|
|
@@ -22,9 +27,17 @@ export interface FormUpdatedData {
|
|
|
22
27
|
readonly changed: readonly string[];
|
|
23
28
|
}
|
|
24
29
|
export type FormDeletedData = Record<string, never>;
|
|
30
|
+
export interface FormSubmissionActionSummary {
|
|
31
|
+
readonly action: string;
|
|
32
|
+
readonly status: FormActionStatus;
|
|
33
|
+
}
|
|
25
34
|
export interface FormSubmissionData {
|
|
26
35
|
readonly formId: string;
|
|
27
36
|
readonly submissionId: string;
|
|
37
|
+
readonly opportunityId: string | null;
|
|
38
|
+
readonly partnershipId: string | null;
|
|
39
|
+
readonly enquiryId: string | null;
|
|
40
|
+
readonly actions: readonly FormSubmissionActionSummary[];
|
|
28
41
|
}
|
|
29
42
|
declare module '../../runtime/events.ts' {
|
|
30
43
|
interface KelpieEventMap {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/modules/forms/events.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/modules/forms/events.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAuBvB,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;CAYM,CAAA;AAE9B,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;AACnD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CACpC;AACD,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;AACnD,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAA;CAClC;AACD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IACrC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,QAAQ,CAAC,OAAO,EAAE,SAAS,2BAA2B,EAAE,CAAA;CACzD;AAED,OAAO,QAAQ,yBAAyB,CAAC;IACvC,UAAU,cAAc;QACtB,oBAAoB,EAAE,eAAe,CAAA;QACrC,oBAAoB,EAAE,eAAe,CAAA;QACrC,oBAAoB,EAAE,eAAe,CAAA;QACrC,4BAA4B,EAAE,kBAAkB,CAAA;KACjD;CACF"}
|
|
@@ -1,15 +1,33 @@
|
|
|
1
|
+
import { FORM_ACTION_STATUSES } from '@kelpie/schemas';
|
|
1
2
|
import { z } from 'zod';
|
|
2
3
|
/**
|
|
3
4
|
* Domain events published by the forms module.
|
|
4
5
|
*
|
|
5
6
|
* `forms.form.*` cover the form definition CRUD. `forms.submission.submitted`
|
|
6
7
|
* fires once per submission; the webhooks bridge translates it to the wire
|
|
7
|
-
* `form.submitted` event (the ids live in `data`).
|
|
8
|
+
* `form.submitted` event (the ids and per-action statuses live in `data`).
|
|
9
|
+
*
|
|
10
|
+
* The action summary carries statuses only, no detail strings: the webhook
|
|
11
|
+
* receiver learns whether each action ran; the authenticated Submissions
|
|
12
|
+
* reader gets the full detail from `action_log` on the row.
|
|
8
13
|
*/
|
|
14
|
+
const actionSummarySchema = z
|
|
15
|
+
.object({
|
|
16
|
+
action: z.string(),
|
|
17
|
+
status: z.enum(FORM_ACTION_STATUSES),
|
|
18
|
+
})
|
|
19
|
+
.readonly();
|
|
9
20
|
export const formsEvents = {
|
|
10
21
|
'forms.form.created': z.object({}).strict(),
|
|
11
22
|
'forms.form.updated': z.object({ changed: z.array(z.string()).readonly() }),
|
|
12
23
|
'forms.form.deleted': z.object({}).strict(),
|
|
13
|
-
'forms.submission.submitted': z.object({
|
|
24
|
+
'forms.submission.submitted': z.object({
|
|
25
|
+
formId: z.string(),
|
|
26
|
+
submissionId: z.string(),
|
|
27
|
+
opportunityId: z.string().nullable(),
|
|
28
|
+
partnershipId: z.string().nullable(),
|
|
29
|
+
enquiryId: z.string().nullable(),
|
|
30
|
+
actions: z.array(actionSummarySchema).readonly(),
|
|
31
|
+
}),
|
|
14
32
|
};
|
|
15
33
|
//# sourceMappingURL=events.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/modules/forms/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/modules/forms/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAEtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB;;;;;;;;;;GAUG;AAEH,MAAM,mBAAmB,GAAG,CAAC;KAC1B,MAAM,CAAC;IACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC;CACrC,CAAC;KACD,QAAQ,EAAE,CAAA;AAEb,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,oBAAoB,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;IAC3C,oBAAoB,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC3E,oBAAoB,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;IAC3C,4BAA4B,EAAE,CAAC,CAAC,MAAM,CAAC;QACrC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;QACxB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACpC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACpC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE;KACjD,CAAC;CAC0B,CAAA"}
|
|
@@ -17,6 +17,12 @@ export interface FieldDraft {
|
|
|
17
17
|
readonly mapTo: FormFieldMapTarget;
|
|
18
18
|
readonly options: readonly OptionDraft[];
|
|
19
19
|
readonly placeholder: string | null;
|
|
20
|
+
/** The intro sentence for a `consent` field. Ignored for every other type. */
|
|
21
|
+
readonly statement: string | null;
|
|
22
|
+
/** Non-empty for `consent` fields; one checkbox per id in display order. */
|
|
23
|
+
readonly consentPurposeIds: readonly string[];
|
|
24
|
+
/** Per-purpose override for the checkbox text. Falls back to the workspace label. */
|
|
25
|
+
readonly consentPurposeLabels: Readonly<Record<string, string>>;
|
|
20
26
|
}
|
|
21
27
|
export interface OptionDraft {
|
|
22
28
|
readonly key: string;
|
|
@@ -35,8 +41,12 @@ export interface OptionDraft {
|
|
|
35
41
|
* or `company.domain` answer, so a deal-creating form without either would
|
|
36
42
|
* quietly never create a deal. Refused here rather than discovered later by
|
|
37
43
|
* somebody wondering where their inbound pipeline went.
|
|
44
|
+
* @param createsPartnership Same rule for partnerships: a Partnership belongs
|
|
45
|
+
* to a Company. Opportunities are exempt because `opportunities.company_id`
|
|
46
|
+
* is nullable — a form that creates an opportunity without resolving a
|
|
47
|
+
* company creates an opportunity without one, which is a valid state.
|
|
38
48
|
*/
|
|
39
|
-
export declare function findFieldProblems(fields: readonly FieldShape[], createsDeal: boolean): readonly ErrorDetail[];
|
|
49
|
+
export declare function findFieldProblems(fields: readonly FieldShape[], createsDeal: boolean, createsPartnership?: boolean): readonly ErrorDetail[];
|
|
40
50
|
/** A field's options as they are stored. Structurally the drafts, narrowed to the stored type. */
|
|
41
51
|
export declare function storedOptions(options: readonly OptionDraft[]): readonly StoredFormFieldOption[];
|
|
42
52
|
/**
|
|
@@ -56,6 +66,9 @@ export interface FieldShape {
|
|
|
56
66
|
readonly mapTo: string;
|
|
57
67
|
readonly options: readonly StoredFormFieldOption[];
|
|
58
68
|
readonly placeholder: string | null;
|
|
69
|
+
readonly statement: string | null;
|
|
70
|
+
readonly consentPurposeIds: readonly string[];
|
|
71
|
+
readonly consentPurposeLabels: Readonly<Record<string, string>>;
|
|
59
72
|
}
|
|
60
73
|
/**
|
|
61
74
|
* Whether a submitted field list differs from the stored one.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../../src/modules/forms/fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAExD,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../../src/modules/forms/fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAExD,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAKzF;;;;;;;GAOG;AAEH,+EAA+E;AAC/E,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAA;IAClC,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAA;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,8EAA8E;IAC9E,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,4EAA4E;IAC5E,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAA;IAC7C,qFAAqF;IACrF,QAAQ,CAAC,oBAAoB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAChE;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAA;CACxC;AAcD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,UAAU,EAAE,EAC7B,WAAW,EAAE,OAAO,EACpB,kBAAkB,UAAQ,GACzB,SAAS,WAAW,EAAE,CA+FxB;AAiCD,kGAAkG;AAClG,wBAAgB,aAAa,CAC3B,OAAO,EAAE,SAAS,WAAW,EAAE,GAC9B,SAAS,qBAAqB,EAAE,CAMlC;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,EAAE,SAAS,qBAAqB,EAAE,CAAA;IAClD,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAA;IAC7C,QAAQ,CAAC,oBAAoB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAChE;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,SAAS,UAAU,EAAE,EAC7B,MAAM,EAAE,SAAS,UAAU,EAAE,GAC5B,OAAO,CAqBT"}
|