@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.
Files changed (679) hide show
  1. package/dist/lib/consumerEmailDomains.d.ts +2 -0
  2. package/dist/lib/consumerEmailDomains.d.ts.map +1 -0
  3. package/dist/lib/consumerEmailDomains.js +62 -0
  4. package/dist/lib/consumerEmailDomains.js.map +1 -0
  5. package/dist/lib/email.d.ts +7 -0
  6. package/dist/lib/email.d.ts.map +1 -1
  7. package/dist/lib/email.js.map +1 -1
  8. package/dist/lib/emailContent.d.ts +33 -0
  9. package/dist/lib/emailContent.d.ts.map +1 -0
  10. package/dist/lib/emailContent.js +54 -0
  11. package/dist/lib/emailContent.js.map +1 -0
  12. package/dist/lib/emailDomainAutoLink.d.ts +27 -0
  13. package/dist/lib/emailDomainAutoLink.d.ts.map +1 -0
  14. package/dist/lib/emailDomainAutoLink.js +119 -0
  15. package/dist/lib/emailDomainAutoLink.js.map +1 -0
  16. package/dist/lib/ids.d.ts +13 -0
  17. package/dist/lib/ids.d.ts.map +1 -1
  18. package/dist/lib/ids.js +13 -0
  19. package/dist/lib/ids.js.map +1 -1
  20. package/dist/modules/activities/repository.d.ts.map +1 -1
  21. package/dist/modules/activities/repository.js +19 -20
  22. package/dist/modules/activities/repository.js.map +1 -1
  23. package/dist/modules/activities/wording.d.ts +12 -0
  24. package/dist/modules/activities/wording.d.ts.map +1 -1
  25. package/dist/modules/activities/wording.js +16 -0
  26. package/dist/modules/activities/wording.js.map +1 -1
  27. package/dist/modules/agent-tasks/catalog.d.ts.map +1 -1
  28. package/dist/modules/agent-tasks/catalog.js +62 -0
  29. package/dist/modules/agent-tasks/catalog.js.map +1 -1
  30. package/dist/modules/agent-tasks/resolve.d.ts.map +1 -1
  31. package/dist/modules/agent-tasks/resolve.js +42 -9
  32. package/dist/modules/agent-tasks/resolve.js.map +1 -1
  33. package/dist/modules/agent-tasks/routes.d.ts +2 -0
  34. package/dist/modules/agent-tasks/routes.d.ts.map +1 -1
  35. package/dist/modules/attachedRecords.d.ts +6 -1
  36. package/dist/modules/attachedRecords.d.ts.map +1 -1
  37. package/dist/modules/attachedRecords.js +18 -2
  38. package/dist/modules/attachedRecords.js.map +1 -1
  39. package/dist/modules/auth/preferences.d.ts +11 -1
  40. package/dist/modules/auth/preferences.d.ts.map +1 -1
  41. package/dist/modules/auth/preferences.js +11 -0
  42. package/dist/modules/auth/preferences.js.map +1 -1
  43. package/dist/modules/auth/routes.d.ts.map +1 -1
  44. package/dist/modules/auth/routes.js +18 -0
  45. package/dist/modules/auth/routes.js.map +1 -1
  46. package/dist/modules/auth/schema.d.ts +20 -0
  47. package/dist/modules/auth/schema.d.ts.map +1 -1
  48. package/dist/modules/auth/schema.js +11 -1
  49. package/dist/modules/auth/schema.js.map +1 -1
  50. package/dist/modules/auth/service.d.ts.map +1 -1
  51. package/dist/modules/auth/service.js +27 -3
  52. package/dist/modules/auth/service.js.map +1 -1
  53. package/dist/modules/companies/index.d.ts.map +1 -1
  54. package/dist/modules/companies/index.js +3 -1
  55. package/dist/modules/companies/index.js.map +1 -1
  56. package/dist/modules/companies/repository.d.ts +2 -0
  57. package/dist/modules/companies/repository.d.ts.map +1 -1
  58. package/dist/modules/companies/repository.js +1 -0
  59. package/dist/modules/companies/repository.js.map +1 -1
  60. package/dist/modules/companies/routes.d.ts +16 -0
  61. package/dist/modules/companies/routes.d.ts.map +1 -1
  62. package/dist/modules/companies/routes.js +18 -0
  63. package/dist/modules/companies/routes.js.map +1 -1
  64. package/dist/modules/companies/schema.d.ts +37 -0
  65. package/dist/modules/companies/schema.d.ts.map +1 -1
  66. package/dist/modules/companies/schema.js +10 -1
  67. package/dist/modules/companies/schema.js.map +1 -1
  68. package/dist/modules/companies/service.d.ts +6 -0
  69. package/dist/modules/companies/service.d.ts.map +1 -1
  70. package/dist/modules/companies/service.js +45 -11
  71. package/dist/modules/companies/service.js.map +1 -1
  72. package/dist/modules/consent-purposes/capabilities.d.ts +7 -0
  73. package/dist/modules/consent-purposes/capabilities.d.ts.map +1 -0
  74. package/dist/modules/consent-purposes/capabilities.js +10 -0
  75. package/dist/modules/consent-purposes/capabilities.js.map +1 -0
  76. package/dist/modules/consent-purposes/events.d.ts +38 -0
  77. package/dist/modules/consent-purposes/events.d.ts.map +1 -0
  78. package/dist/modules/consent-purposes/events.js +17 -0
  79. package/dist/modules/consent-purposes/events.js.map +1 -0
  80. package/dist/modules/consent-purposes/index.d.ts +13 -0
  81. package/dist/modules/consent-purposes/index.d.ts.map +1 -0
  82. package/dist/modules/consent-purposes/index.js +41 -0
  83. package/dist/modules/consent-purposes/index.js.map +1 -0
  84. package/dist/modules/consent-purposes/repository.d.ts +21 -0
  85. package/dist/modules/consent-purposes/repository.d.ts.map +1 -0
  86. package/dist/modules/consent-purposes/repository.js +98 -0
  87. package/dist/modules/consent-purposes/repository.js.map +1 -0
  88. package/dist/modules/consent-purposes/routes.d.ts +39 -0
  89. package/dist/modules/consent-purposes/routes.d.ts.map +1 -0
  90. package/dist/modules/consent-purposes/routes.js +79 -0
  91. package/dist/modules/consent-purposes/routes.js.map +1 -0
  92. package/dist/modules/consent-purposes/schema.d.ts +175 -0
  93. package/dist/modules/consent-purposes/schema.d.ts.map +1 -0
  94. package/dist/modules/consent-purposes/schema.js +35 -0
  95. package/dist/modules/consent-purposes/schema.js.map +1 -0
  96. package/dist/modules/consent-purposes/service.d.ts +50 -0
  97. package/dist/modules/consent-purposes/service.d.ts.map +1 -0
  98. package/dist/modules/consent-purposes/service.js +263 -0
  99. package/dist/modules/consent-purposes/service.js.map +1 -0
  100. package/dist/modules/consent-purposes/starters.d.ts +17 -0
  101. package/dist/modules/consent-purposes/starters.d.ts.map +1 -0
  102. package/dist/modules/consent-purposes/starters.js +15 -0
  103. package/dist/modules/consent-purposes/starters.js.map +1 -0
  104. package/dist/modules/consent-purposes/tools.d.ts +4 -0
  105. package/dist/modules/consent-purposes/tools.d.ts.map +1 -0
  106. package/dist/modules/consent-purposes/tools.js +29 -0
  107. package/dist/modules/consent-purposes/tools.js.map +1 -0
  108. package/dist/modules/core.d.ts.map +1 -1
  109. package/dist/modules/core.js +21 -0
  110. package/dist/modules/core.js.map +1 -1
  111. package/dist/modules/custom-fields/capabilities.d.ts +12 -0
  112. package/dist/modules/custom-fields/capabilities.d.ts.map +1 -0
  113. package/dist/modules/custom-fields/capabilities.js +15 -0
  114. package/dist/modules/custom-fields/capabilities.js.map +1 -0
  115. package/dist/modules/custom-fields/events.d.ts +49 -0
  116. package/dist/modules/custom-fields/events.d.ts.map +1 -0
  117. package/dist/modules/custom-fields/events.js +25 -0
  118. package/dist/modules/custom-fields/events.js.map +1 -0
  119. package/dist/modules/custom-fields/index.d.ts +19 -0
  120. package/dist/modules/custom-fields/index.d.ts.map +1 -0
  121. package/dist/modules/custom-fields/index.js +46 -0
  122. package/dist/modules/custom-fields/index.js.map +1 -0
  123. package/dist/modules/custom-fields/repository.d.ts +37 -0
  124. package/dist/modules/custom-fields/repository.d.ts.map +1 -0
  125. package/dist/modules/custom-fields/repository.js +144 -0
  126. package/dist/modules/custom-fields/repository.js.map +1 -0
  127. package/dist/modules/custom-fields/routes.d.ts +44 -0
  128. package/dist/modules/custom-fields/routes.d.ts.map +1 -0
  129. package/dist/modules/custom-fields/routes.js +103 -0
  130. package/dist/modules/custom-fields/routes.js.map +1 -0
  131. package/dist/modules/custom-fields/schema.d.ts +215 -0
  132. package/dist/modules/custom-fields/schema.d.ts.map +1 -0
  133. package/dist/modules/custom-fields/schema.js +43 -0
  134. package/dist/modules/custom-fields/schema.js.map +1 -0
  135. package/dist/modules/custom-fields/service.d.ts +57 -0
  136. package/dist/modules/custom-fields/service.d.ts.map +1 -0
  137. package/dist/modules/custom-fields/service.js +273 -0
  138. package/dist/modules/custom-fields/service.js.map +1 -0
  139. package/dist/modules/custom-fields/tools.d.ts +4 -0
  140. package/dist/modules/custom-fields/tools.d.ts.map +1 -0
  141. package/dist/modules/custom-fields/tools.js +38 -0
  142. package/dist/modules/custom-fields/tools.js.map +1 -0
  143. package/dist/modules/custom-fields/values.d.ts +49 -0
  144. package/dist/modules/custom-fields/values.d.ts.map +1 -0
  145. package/dist/modules/custom-fields/values.js +249 -0
  146. package/dist/modules/custom-fields/values.js.map +1 -0
  147. package/dist/modules/custom-fields/wire.d.ts +12 -0
  148. package/dist/modules/custom-fields/wire.d.ts.map +1 -0
  149. package/dist/modules/custom-fields/wire.js +30 -0
  150. package/dist/modules/custom-fields/wire.js.map +1 -0
  151. package/dist/modules/dashboard/repository.d.ts.map +1 -1
  152. package/dist/modules/dashboard/repository.js +4 -3
  153. package/dist/modules/dashboard/repository.js.map +1 -1
  154. package/dist/modules/deals/index.d.ts +2 -1
  155. package/dist/modules/deals/index.d.ts.map +1 -1
  156. package/dist/modules/deals/index.js +5 -2
  157. package/dist/modules/deals/index.js.map +1 -1
  158. package/dist/modules/deals/repository.d.ts +0 -16
  159. package/dist/modules/deals/repository.d.ts.map +1 -1
  160. package/dist/modules/deals/repository.js +6 -76
  161. package/dist/modules/deals/repository.js.map +1 -1
  162. package/dist/modules/deals/routes.d.ts +14 -0
  163. package/dist/modules/deals/routes.d.ts.map +1 -1
  164. package/dist/modules/deals/routes.js +7 -0
  165. package/dist/modules/deals/routes.js.map +1 -1
  166. package/dist/modules/deals/schema.d.ts +20 -42
  167. package/dist/modules/deals/schema.d.ts.map +1 -1
  168. package/dist/modules/deals/schema.js +6 -11
  169. package/dist/modules/deals/schema.js.map +1 -1
  170. package/dist/modules/deals/service.d.ts +13 -2
  171. package/dist/modules/deals/service.d.ts.map +1 -1
  172. package/dist/modules/deals/service.js +43 -20
  173. package/dist/modules/deals/service.js.map +1 -1
  174. package/dist/modules/decisions/repository.d.ts.map +1 -1
  175. package/dist/modules/decisions/repository.js +2 -0
  176. package/dist/modules/decisions/repository.js.map +1 -1
  177. package/dist/modules/decisions/routes.d.ts +1 -0
  178. package/dist/modules/decisions/routes.d.ts.map +1 -1
  179. package/dist/modules/email-domain-linker/index.d.ts +12 -0
  180. package/dist/modules/email-domain-linker/index.d.ts.map +1 -0
  181. package/dist/modules/email-domain-linker/index.js +34 -0
  182. package/dist/modules/email-domain-linker/index.js.map +1 -0
  183. package/dist/modules/email-domain-linker/routes.d.ts +14 -0
  184. package/dist/modules/email-domain-linker/routes.d.ts.map +1 -0
  185. package/dist/modules/email-domain-linker/routes.js +15 -0
  186. package/dist/modules/email-domain-linker/routes.js.map +1 -0
  187. package/dist/modules/email-domain-linker/service.d.ts +37 -0
  188. package/dist/modules/email-domain-linker/service.d.ts.map +1 -0
  189. package/dist/modules/email-domain-linker/service.js +63 -0
  190. package/dist/modules/email-domain-linker/service.js.map +1 -0
  191. package/dist/modules/enquiries/events.d.ts +44 -0
  192. package/dist/modules/enquiries/events.d.ts.map +1 -0
  193. package/dist/modules/enquiries/events.js +19 -0
  194. package/dist/modules/enquiries/events.js.map +1 -0
  195. package/dist/modules/enquiries/index.d.ts +13 -0
  196. package/dist/modules/enquiries/index.d.ts.map +1 -0
  197. package/dist/modules/enquiries/index.js +44 -0
  198. package/dist/modules/enquiries/index.js.map +1 -0
  199. package/dist/modules/enquiries/repository.d.ts +30 -0
  200. package/dist/modules/enquiries/repository.d.ts.map +1 -0
  201. package/dist/modules/enquiries/repository.js +94 -0
  202. package/dist/modules/enquiries/repository.js.map +1 -0
  203. package/dist/modules/enquiries/routes.d.ts +52 -0
  204. package/dist/modules/enquiries/routes.d.ts.map +1 -0
  205. package/dist/modules/enquiries/routes.js +127 -0
  206. package/dist/modules/enquiries/routes.js.map +1 -0
  207. package/dist/modules/enquiries/schema.d.ts +290 -0
  208. package/dist/modules/enquiries/schema.d.ts.map +1 -0
  209. package/dist/modules/enquiries/schema.js +52 -0
  210. package/dist/modules/enquiries/schema.js.map +1 -0
  211. package/dist/modules/enquiries/service.d.ts +85 -0
  212. package/dist/modules/enquiries/service.d.ts.map +1 -0
  213. package/dist/modules/enquiries/service.js +370 -0
  214. package/dist/modules/enquiries/service.js.map +1 -0
  215. package/dist/modules/enquiries/tools.d.ts +4 -0
  216. package/dist/modules/enquiries/tools.d.ts.map +1 -0
  217. package/dist/modules/enquiries/tools.js +50 -0
  218. package/dist/modules/enquiries/tools.js.map +1 -0
  219. package/dist/modules/eventCatalogs.d.ts +4 -0
  220. package/dist/modules/eventCatalogs.d.ts.map +1 -1
  221. package/dist/modules/eventCatalogs.js +4 -0
  222. package/dist/modules/eventCatalogs.js.map +1 -1
  223. package/dist/modules/forms/embed.d.ts +20 -6
  224. package/dist/modules/forms/embed.d.ts.map +1 -1
  225. package/dist/modules/forms/embed.js +359 -43
  226. package/dist/modules/forms/embed.js.map +1 -1
  227. package/dist/modules/forms/events.d.ts +20 -7
  228. package/dist/modules/forms/events.d.ts.map +1 -1
  229. package/dist/modules/forms/events.js +20 -2
  230. package/dist/modules/forms/events.js.map +1 -1
  231. package/dist/modules/forms/fields.d.ts +14 -1
  232. package/dist/modules/forms/fields.d.ts.map +1 -1
  233. package/dist/modules/forms/fields.js +87 -3
  234. package/dist/modules/forms/fields.js.map +1 -1
  235. package/dist/modules/forms/index.d.ts.map +1 -1
  236. package/dist/modules/forms/index.js +12 -1
  237. package/dist/modules/forms/index.js.map +1 -1
  238. package/dist/modules/forms/mapping.d.ts +62 -5
  239. package/dist/modules/forms/mapping.d.ts.map +1 -1
  240. package/dist/modules/forms/mapping.js +139 -5
  241. package/dist/modules/forms/mapping.js.map +1 -1
  242. package/dist/modules/forms/publicRoutes.d.ts.map +1 -1
  243. package/dist/modules/forms/publicRoutes.js +29 -1
  244. package/dist/modules/forms/publicRoutes.js.map +1 -1
  245. package/dist/modules/forms/repository.d.ts +31 -0
  246. package/dist/modules/forms/repository.d.ts.map +1 -1
  247. package/dist/modules/forms/repository.js +90 -1
  248. package/dist/modules/forms/repository.js.map +1 -1
  249. package/dist/modules/forms/routes.d.ts +83 -1
  250. package/dist/modules/forms/routes.d.ts.map +1 -1
  251. package/dist/modules/forms/routes.js +185 -2
  252. package/dist/modules/forms/routes.js.map +1 -1
  253. package/dist/modules/forms/schema.d.ts +672 -1
  254. package/dist/modules/forms/schema.d.ts.map +1 -1
  255. package/dist/modules/forms/schema.js +146 -3
  256. package/dist/modules/forms/schema.js.map +1 -1
  257. package/dist/modules/forms/service.d.ts +54 -1
  258. package/dist/modules/forms/service.d.ts.map +1 -1
  259. package/dist/modules/forms/service.js +338 -28
  260. package/dist/modules/forms/service.js.map +1 -1
  261. package/dist/modules/forms/submission.d.ts +15 -0
  262. package/dist/modules/forms/submission.d.ts.map +1 -1
  263. package/dist/modules/forms/submission.js +418 -40
  264. package/dist/modules/forms/submission.js.map +1 -1
  265. package/dist/modules/import-export/drafts.d.ts +10 -0
  266. package/dist/modules/import-export/drafts.d.ts.map +1 -1
  267. package/dist/modules/import-export/drafts.js +16 -2
  268. package/dist/modules/import-export/drafts.js.map +1 -1
  269. package/dist/modules/import-export/exportRows.d.ts +7 -4
  270. package/dist/modules/import-export/exportRows.d.ts.map +1 -1
  271. package/dist/modules/import-export/exportRows.js +20 -5
  272. package/dist/modules/import-export/exportRows.js.map +1 -1
  273. package/dist/modules/import-export/plan.d.ts +12 -1
  274. package/dist/modules/import-export/plan.d.ts.map +1 -1
  275. package/dist/modules/import-export/plan.js +29 -2
  276. package/dist/modules/import-export/plan.js.map +1 -1
  277. package/dist/modules/import-export/presets.d.ts.map +1 -1
  278. package/dist/modules/import-export/presets.js +10 -0
  279. package/dist/modules/import-export/presets.js.map +1 -1
  280. package/dist/modules/import-export/repository.d.ts +11 -1
  281. package/dist/modules/import-export/repository.d.ts.map +1 -1
  282. package/dist/modules/import-export/repository.js +42 -9
  283. package/dist/modules/import-export/repository.js.map +1 -1
  284. package/dist/modules/import-export/routes.d.ts.map +1 -1
  285. package/dist/modules/import-export/routes.js +4 -0
  286. package/dist/modules/import-export/routes.js.map +1 -1
  287. package/dist/modules/import-export/schema.d.ts +17 -0
  288. package/dist/modules/import-export/schema.d.ts.map +1 -1
  289. package/dist/modules/import-export/schema.js +11 -0
  290. package/dist/modules/import-export/schema.js.map +1 -1
  291. package/dist/modules/import-export/service.d.ts +6 -0
  292. package/dist/modules/import-export/service.d.ts.map +1 -1
  293. package/dist/modules/import-export/service.js +14 -2
  294. package/dist/modules/import-export/service.js.map +1 -1
  295. package/dist/modules/import-export/streams.d.ts.map +1 -1
  296. package/dist/modules/import-export/streams.js +3 -3
  297. package/dist/modules/import-export/streams.js.map +1 -1
  298. package/dist/modules/import-export/tools.d.ts.map +1 -1
  299. package/dist/modules/import-export/tools.js +8 -0
  300. package/dist/modules/import-export/tools.js.map +1 -1
  301. package/dist/modules/import-export/validation.d.ts.map +1 -1
  302. package/dist/modules/import-export/validation.js +22 -1
  303. package/dist/modules/import-export/validation.js.map +1 -1
  304. package/dist/modules/import-export/writes.d.ts.map +1 -1
  305. package/dist/modules/import-export/writes.js +37 -4
  306. package/dist/modules/import-export/writes.js.map +1 -1
  307. package/dist/modules/lists/events.d.ts +42 -0
  308. package/dist/modules/lists/events.d.ts.map +1 -0
  309. package/dist/modules/lists/events.js +16 -0
  310. package/dist/modules/lists/events.js.map +1 -0
  311. package/dist/modules/lists/index.d.ts +10 -0
  312. package/dist/modules/lists/index.d.ts.map +1 -0
  313. package/dist/modules/lists/index.js +35 -0
  314. package/dist/modules/lists/index.js.map +1 -0
  315. package/dist/modules/lists/repository.d.ts +80 -0
  316. package/dist/modules/lists/repository.d.ts.map +1 -0
  317. package/dist/modules/lists/repository.js +178 -0
  318. package/dist/modules/lists/repository.js.map +1 -0
  319. package/dist/modules/lists/routes.d.ts +55 -0
  320. package/dist/modules/lists/routes.d.ts.map +1 -0
  321. package/dist/modules/lists/routes.js +168 -0
  322. package/dist/modules/lists/routes.js.map +1 -0
  323. package/dist/modules/lists/schema.d.ts +281 -0
  324. package/dist/modules/lists/schema.d.ts.map +1 -0
  325. package/dist/modules/lists/schema.js +83 -0
  326. package/dist/modules/lists/schema.js.map +1 -0
  327. package/dist/modules/lists/service.d.ts +82 -0
  328. package/dist/modules/lists/service.d.ts.map +1 -0
  329. package/dist/modules/lists/service.js +262 -0
  330. package/dist/modules/lists/service.js.map +1 -0
  331. package/dist/modules/lists/tools.d.ts +4 -0
  332. package/dist/modules/lists/tools.d.ts.map +1 -0
  333. package/dist/modules/lists/tools.js +86 -0
  334. package/dist/modules/lists/tools.js.map +1 -0
  335. package/dist/modules/mcp/index.d.ts.map +1 -1
  336. package/dist/modules/mcp/index.js +5 -0
  337. package/dist/modules/mcp/index.js.map +1 -1
  338. package/dist/modules/notes/routes.d.ts +1 -0
  339. package/dist/modules/notes/routes.d.ts.map +1 -1
  340. package/dist/modules/opportunities/index.d.ts.map +1 -1
  341. package/dist/modules/opportunities/index.js +3 -1
  342. package/dist/modules/opportunities/index.js.map +1 -1
  343. package/dist/modules/opportunities/repository.d.ts +2 -0
  344. package/dist/modules/opportunities/repository.d.ts.map +1 -1
  345. package/dist/modules/opportunities/repository.js +4 -0
  346. package/dist/modules/opportunities/repository.js.map +1 -1
  347. package/dist/modules/opportunities/routes.d.ts +16 -0
  348. package/dist/modules/opportunities/routes.d.ts.map +1 -1
  349. package/dist/modules/opportunities/routes.js +13 -0
  350. package/dist/modules/opportunities/routes.js.map +1 -1
  351. package/dist/modules/opportunities/schema.d.ts +20 -0
  352. package/dist/modules/opportunities/schema.d.ts.map +1 -1
  353. package/dist/modules/opportunities/schema.js +6 -1
  354. package/dist/modules/opportunities/schema.js.map +1 -1
  355. package/dist/modules/opportunities/service.d.ts +20 -3
  356. package/dist/modules/opportunities/service.d.ts.map +1 -1
  357. package/dist/modules/opportunities/service.js +99 -18
  358. package/dist/modules/opportunities/service.js.map +1 -1
  359. package/dist/modules/opportunities/tools.d.ts.map +1 -1
  360. package/dist/modules/opportunities/tools.js +2 -0
  361. package/dist/modules/opportunities/tools.js.map +1 -1
  362. package/dist/modules/partnerships/index.d.ts.map +1 -1
  363. package/dist/modules/partnerships/index.js +3 -1
  364. package/dist/modules/partnerships/index.js.map +1 -1
  365. package/dist/modules/partnerships/repository.d.ts +0 -17
  366. package/dist/modules/partnerships/repository.d.ts.map +1 -1
  367. package/dist/modules/partnerships/repository.js +6 -82
  368. package/dist/modules/partnerships/repository.js.map +1 -1
  369. package/dist/modules/partnerships/routes.d.ts +14 -0
  370. package/dist/modules/partnerships/routes.d.ts.map +1 -1
  371. package/dist/modules/partnerships/routes.js +7 -0
  372. package/dist/modules/partnerships/routes.js.map +1 -1
  373. package/dist/modules/partnerships/schema.d.ts +20 -41
  374. package/dist/modules/partnerships/schema.d.ts.map +1 -1
  375. package/dist/modules/partnerships/schema.js +6 -10
  376. package/dist/modules/partnerships/schema.js.map +1 -1
  377. package/dist/modules/partnerships/service.d.ts +11 -1
  378. package/dist/modules/partnerships/service.d.ts.map +1 -1
  379. package/dist/modules/partnerships/service.js +43 -20
  380. package/dist/modules/partnerships/service.js.map +1 -1
  381. package/dist/modules/people/consentHydration.d.ts +26 -0
  382. package/dist/modules/people/consentHydration.d.ts.map +1 -0
  383. package/dist/modules/people/consentHydration.js +100 -0
  384. package/dist/modules/people/consentHydration.js.map +1 -0
  385. package/dist/modules/people/index.d.ts.map +1 -1
  386. package/dist/modules/people/index.js +3 -1
  387. package/dist/modules/people/index.js.map +1 -1
  388. package/dist/modules/people/personConsentWrites.d.ts +40 -0
  389. package/dist/modules/people/personConsentWrites.d.ts.map +1 -0
  390. package/dist/modules/people/personConsentWrites.js +98 -0
  391. package/dist/modules/people/personConsentWrites.js.map +1 -0
  392. package/dist/modules/people/repository.d.ts +11 -0
  393. package/dist/modules/people/repository.d.ts.map +1 -1
  394. package/dist/modules/people/repository.js +21 -1
  395. package/dist/modules/people/repository.js.map +1 -1
  396. package/dist/modules/people/routes.d.ts +57 -4
  397. package/dist/modules/people/routes.d.ts.map +1 -1
  398. package/dist/modules/people/routes.js +104 -5
  399. package/dist/modules/people/routes.js.map +1 -1
  400. package/dist/modules/people/schema.d.ts +366 -1
  401. package/dist/modules/people/schema.d.ts.map +1 -1
  402. package/dist/modules/people/schema.js +92 -2
  403. package/dist/modules/people/schema.js.map +1 -1
  404. package/dist/modules/people/service.d.ts +30 -1
  405. package/dist/modules/people/service.d.ts.map +1 -1
  406. package/dist/modules/people/service.js +131 -36
  407. package/dist/modules/people/service.js.map +1 -1
  408. package/dist/modules/people/tools.d.ts.map +1 -1
  409. package/dist/modules/people/tools.js +4 -1
  410. package/dist/modules/people/tools.js.map +1 -1
  411. package/dist/modules/personLinks.d.ts +79 -0
  412. package/dist/modules/personLinks.d.ts.map +1 -0
  413. package/dist/modules/personLinks.js +155 -0
  414. package/dist/modules/personLinks.js.map +1 -0
  415. package/dist/modules/pipelines/routes.d.ts +1 -0
  416. package/dist/modules/pipelines/routes.d.ts.map +1 -1
  417. package/dist/modules/plans/routes.d.ts +1 -0
  418. package/dist/modules/plans/routes.d.ts.map +1 -1
  419. package/dist/modules/positions/routes.d.ts.map +1 -1
  420. package/dist/modules/positions/routes.js +4 -2
  421. package/dist/modules/positions/routes.js.map +1 -1
  422. package/dist/modules/raises/index.d.ts.map +1 -1
  423. package/dist/modules/raises/index.js +3 -1
  424. package/dist/modules/raises/index.js.map +1 -1
  425. package/dist/modules/raises/repository.d.ts +0 -17
  426. package/dist/modules/raises/repository.d.ts.map +1 -1
  427. package/dist/modules/raises/repository.js +6 -77
  428. package/dist/modules/raises/repository.js.map +1 -1
  429. package/dist/modules/raises/routes.d.ts +14 -0
  430. package/dist/modules/raises/routes.d.ts.map +1 -1
  431. package/dist/modules/raises/routes.js +7 -0
  432. package/dist/modules/raises/routes.js.map +1 -1
  433. package/dist/modules/raises/schema.d.ts +20 -41
  434. package/dist/modules/raises/schema.d.ts.map +1 -1
  435. package/dist/modules/raises/schema.js +6 -10
  436. package/dist/modules/raises/schema.js.map +1 -1
  437. package/dist/modules/raises/service.d.ts +11 -1
  438. package/dist/modules/raises/service.d.ts.map +1 -1
  439. package/dist/modules/raises/service.js +41 -18
  440. package/dist/modules/raises/service.js.map +1 -1
  441. package/dist/modules/recordTargets.d.ts.map +1 -1
  442. package/dist/modules/recordTargets.js +2 -0
  443. package/dist/modules/recordTargets.js.map +1 -1
  444. package/dist/modules/references.d.ts +10 -0
  445. package/dist/modules/references.d.ts.map +1 -1
  446. package/dist/modules/references.js +27 -4
  447. package/dist/modules/references.js.map +1 -1
  448. package/dist/modules/sample-data/fixture.d.ts +160 -0
  449. package/dist/modules/sample-data/fixture.d.ts.map +1 -0
  450. package/dist/modules/sample-data/fixture.js +501 -0
  451. package/dist/modules/sample-data/fixture.js.map +1 -0
  452. package/dist/modules/sample-data/index.d.ts +11 -0
  453. package/dist/modules/sample-data/index.d.ts.map +1 -0
  454. package/dist/modules/sample-data/index.js +44 -0
  455. package/dist/modules/sample-data/index.js.map +1 -0
  456. package/dist/modules/sample-data/routes.d.ts +15 -0
  457. package/dist/modules/sample-data/routes.d.ts.map +1 -0
  458. package/dist/modules/sample-data/routes.js +25 -0
  459. package/dist/modules/sample-data/routes.js.map +1 -0
  460. package/dist/modules/sample-data/service.d.ts +39 -0
  461. package/dist/modules/sample-data/service.d.ts.map +1 -0
  462. package/dist/modules/sample-data/service.js +481 -0
  463. package/dist/modules/sample-data/service.js.map +1 -0
  464. package/dist/modules/sample-data/tools.d.ts +4 -0
  465. package/dist/modules/sample-data/tools.d.ts.map +1 -0
  466. package/dist/modules/sample-data/tools.js +22 -0
  467. package/dist/modules/sample-data/tools.js.map +1 -0
  468. package/dist/modules/search/index.d.ts +1 -1
  469. package/dist/modules/search/index.d.ts.map +1 -1
  470. package/dist/modules/search/index.js +2 -1
  471. package/dist/modules/search/index.js.map +1 -1
  472. package/dist/modules/search/repository.d.ts +1 -0
  473. package/dist/modules/search/repository.d.ts.map +1 -1
  474. package/dist/modules/search/repository.js +23 -0
  475. package/dist/modules/search/repository.js.map +1 -1
  476. package/dist/modules/search/service.d.ts +3 -3
  477. package/dist/modules/search/service.d.ts.map +1 -1
  478. package/dist/modules/search/service.js +5 -4
  479. package/dist/modules/search/service.js.map +1 -1
  480. package/dist/modules/smtp-email/index.d.ts +1 -0
  481. package/dist/modules/smtp-email/index.d.ts.map +1 -1
  482. package/dist/modules/smtp-email/index.js +1 -0
  483. package/dist/modules/smtp-email/index.js.map +1 -1
  484. package/dist/modules/stagedRecords.d.ts +3 -3
  485. package/dist/modules/stagedRecords.d.ts.map +1 -1
  486. package/dist/modules/stagedRecords.js +9 -0
  487. package/dist/modules/stagedRecords.js.map +1 -1
  488. package/dist/modules/webhooks/payloads.d.ts.map +1 -1
  489. package/dist/modules/webhooks/payloads.js +15 -2
  490. package/dist/modules/webhooks/payloads.js.map +1 -1
  491. package/dist/modules/workspace/repository.d.ts +2 -0
  492. package/dist/modules/workspace/repository.d.ts.map +1 -1
  493. package/dist/modules/workspace/repository.js +7 -0
  494. package/dist/modules/workspace/repository.js.map +1 -1
  495. package/dist/modules/workspace/service.d.ts.map +1 -1
  496. package/dist/modules/workspace/service.js +20 -1
  497. package/dist/modules/workspace/service.js.map +1 -1
  498. package/dist/modules/workspace/starters.d.ts.map +1 -1
  499. package/dist/modules/workspace/starters.js +5 -0
  500. package/dist/modules/workspace/starters.js.map +1 -1
  501. package/dist/runtime/events.d.ts +1 -1
  502. package/dist/runtime/events.d.ts.map +1 -1
  503. package/dist/runtime/events.js +1 -0
  504. package/dist/runtime/events.js.map +1 -1
  505. package/dist/schema/index.d.ts +4 -0
  506. package/dist/schema/index.d.ts.map +1 -1
  507. package/dist/schema/index.js +4 -0
  508. package/dist/schema/index.js.map +1 -1
  509. package/dist/testing/database.d.ts +5 -1
  510. package/dist/testing/database.d.ts.map +1 -1
  511. package/dist/testing/database.js +81 -10
  512. package/dist/testing/database.js.map +1 -1
  513. package/migrations/0021_certain_maggott.sql +30 -0
  514. package/migrations/0022_stormy_manta.sql +1 -0
  515. package/migrations/0023_funny_maddog.sql +1 -0
  516. package/migrations/0024_third_king_cobra.sql +46 -0
  517. package/migrations/0025_worthless_chimera.sql +3 -0
  518. package/migrations/0026_late_aqueduct.sql +46 -0
  519. package/migrations/0027_brainy_silver_sable.sql +3 -0
  520. package/migrations/0028_freezing_scrambler.sql +19 -0
  521. package/migrations/0029_custom_fields.sql +26 -0
  522. package/migrations/0030_enquiries.sql +79 -0
  523. package/migrations/0031_consent.sql +45 -0
  524. package/migrations/0032_form_field_statement.sql +1 -0
  525. package/migrations/0033_form_field_consent_purpose_ids.sql +5 -0
  526. package/migrations/0034_drop_form_field_consent_purpose_id.sql +1 -0
  527. package/migrations/0035_form_field_consent_purpose_labels.sql +1 -0
  528. package/migrations/0036_form_field_notice_type.sql +2 -0
  529. package/migrations/meta/0021_snapshot.json +5389 -0
  530. package/migrations/meta/0022_snapshot.json +5396 -0
  531. package/migrations/meta/0023_snapshot.json +5403 -0
  532. package/migrations/meta/0024_snapshot.json +5516 -0
  533. package/migrations/meta/0025_snapshot.json +5336 -0
  534. package/migrations/meta/0026_snapshot.json +5710 -0
  535. package/migrations/meta/0027_snapshot.json +5716 -0
  536. package/migrations/meta/0028_snapshot.json +5740 -0
  537. package/migrations/meta/0029_snapshot.json +5935 -0
  538. package/migrations/meta/0030_snapshot.json +6245 -0
  539. package/migrations/meta/0031_snapshot.json +6572 -0
  540. package/migrations/meta/0032_snapshot.json +6578 -0
  541. package/migrations/meta/0033_snapshot.json +6572 -0
  542. package/migrations/meta/0034_snapshot.json +6566 -0
  543. package/migrations/meta/0035_snapshot.json +6573 -0
  544. package/migrations/meta/0036_snapshot.json +6573 -0
  545. package/migrations/meta/_journal.json +112 -0
  546. package/package.json +3 -2
  547. package/src/lib/consumerEmailDomains.ts +62 -0
  548. package/src/lib/email.ts +7 -0
  549. package/src/lib/emailContent.ts +91 -0
  550. package/src/lib/emailDomainAutoLink.ts +165 -0
  551. package/src/lib/ids.ts +13 -0
  552. package/src/modules/activities/repository.ts +22 -23
  553. package/src/modules/activities/wording.ts +18 -0
  554. package/src/modules/agent-tasks/catalog.ts +63 -0
  555. package/src/modules/agent-tasks/resolve.ts +64 -24
  556. package/src/modules/attachedRecords.ts +37 -3
  557. package/src/modules/auth/preferences.ts +13 -1
  558. package/src/modules/auth/routes.ts +22 -0
  559. package/src/modules/auth/schema.ts +12 -2
  560. package/src/modules/auth/service.ts +37 -3
  561. package/src/modules/companies/index.ts +3 -1
  562. package/src/modules/companies/repository.ts +3 -0
  563. package/src/modules/companies/routes.ts +20 -0
  564. package/src/modules/companies/schema.ts +11 -1
  565. package/src/modules/companies/service.ts +72 -12
  566. package/src/modules/consent-purposes/capabilities.ts +12 -0
  567. package/src/modules/consent-purposes/events.ts +38 -0
  568. package/src/modules/consent-purposes/index.ts +48 -0
  569. package/src/modules/consent-purposes/repository.ts +163 -0
  570. package/src/modules/consent-purposes/routes.ts +122 -0
  571. package/src/modules/consent-purposes/schema.ts +46 -0
  572. package/src/modules/consent-purposes/service.ts +423 -0
  573. package/src/modules/consent-purposes/starters.ts +32 -0
  574. package/src/modules/consent-purposes/tools.ts +44 -0
  575. package/src/modules/core.ts +21 -0
  576. package/src/modules/custom-fields/capabilities.ts +17 -0
  577. package/src/modules/custom-fields/events.ts +51 -0
  578. package/src/modules/custom-fields/index.ts +61 -0
  579. package/src/modules/custom-fields/repository.ts +225 -0
  580. package/src/modules/custom-fields/routes.ts +155 -0
  581. package/src/modules/custom-fields/schema.ts +61 -0
  582. package/src/modules/custom-fields/service.ts +439 -0
  583. package/src/modules/custom-fields/tools.ts +53 -0
  584. package/src/modules/custom-fields/values.ts +352 -0
  585. package/src/modules/custom-fields/wire.ts +32 -0
  586. package/src/modules/dashboard/repository.ts +4 -3
  587. package/src/modules/deals/index.ts +5 -2
  588. package/src/modules/deals/repository.ts +6 -106
  589. package/src/modules/deals/routes.ts +7 -0
  590. package/src/modules/deals/schema.ts +7 -15
  591. package/src/modules/deals/service.ts +92 -23
  592. package/src/modules/decisions/repository.ts +2 -0
  593. package/src/modules/email-domain-linker/index.ts +40 -0
  594. package/src/modules/email-domain-linker/routes.ts +40 -0
  595. package/src/modules/email-domain-linker/service.ts +122 -0
  596. package/src/modules/enquiries/events.ts +45 -0
  597. package/src/modules/enquiries/index.ts +50 -0
  598. package/src/modules/enquiries/repository.ts +164 -0
  599. package/src/modules/enquiries/routes.ts +172 -0
  600. package/src/modules/enquiries/schema.ts +59 -0
  601. package/src/modules/enquiries/service.ts +644 -0
  602. package/src/modules/enquiries/tools.ts +66 -0
  603. package/src/modules/eventCatalogs.ts +4 -0
  604. package/src/modules/forms/embed.ts +391 -44
  605. package/src/modules/forms/events.ts +30 -2
  606. package/src/modules/forms/fields.ts +102 -2
  607. package/src/modules/forms/index.ts +12 -1
  608. package/src/modules/forms/mapping.ts +183 -6
  609. package/src/modules/forms/publicRoutes.ts +43 -1
  610. package/src/modules/forms/repository.ts +162 -1
  611. package/src/modules/forms/routes.ts +212 -2
  612. package/src/modules/forms/schema.ts +166 -4
  613. package/src/modules/forms/service.ts +565 -41
  614. package/src/modules/forms/submission.ts +718 -44
  615. package/src/modules/import-export/drafts.ts +20 -1
  616. package/src/modules/import-export/exportRows.ts +21 -5
  617. package/src/modules/import-export/plan.ts +47 -2
  618. package/src/modules/import-export/presets.ts +10 -0
  619. package/src/modules/import-export/repository.ts +73 -8
  620. package/src/modules/import-export/routes.ts +4 -0
  621. package/src/modules/import-export/schema.ts +11 -0
  622. package/src/modules/import-export/service.ts +28 -2
  623. package/src/modules/import-export/streams.ts +3 -1
  624. package/src/modules/import-export/tools.ts +10 -0
  625. package/src/modules/import-export/validation.ts +28 -0
  626. package/src/modules/import-export/writes.ts +70 -5
  627. package/src/modules/lists/events.ts +41 -0
  628. package/src/modules/lists/index.ts +41 -0
  629. package/src/modules/lists/repository.ts +343 -0
  630. package/src/modules/lists/routes.ts +255 -0
  631. package/src/modules/lists/schema.ts +95 -0
  632. package/src/modules/lists/service.ts +505 -0
  633. package/src/modules/lists/tools.ts +128 -0
  634. package/src/modules/mcp/index.ts +5 -0
  635. package/src/modules/opportunities/index.ts +3 -1
  636. package/src/modules/opportunities/repository.ts +11 -0
  637. package/src/modules/opportunities/routes.ts +13 -0
  638. package/src/modules/opportunities/schema.ts +7 -1
  639. package/src/modules/opportunities/service.ts +188 -22
  640. package/src/modules/opportunities/tools.ts +2 -0
  641. package/src/modules/partnerships/index.ts +3 -1
  642. package/src/modules/partnerships/repository.ts +6 -117
  643. package/src/modules/partnerships/routes.ts +7 -0
  644. package/src/modules/partnerships/schema.ts +7 -14
  645. package/src/modules/partnerships/service.ts +93 -22
  646. package/src/modules/people/consentHydration.ts +167 -0
  647. package/src/modules/people/index.ts +3 -1
  648. package/src/modules/people/personConsentWrites.ts +177 -0
  649. package/src/modules/people/repository.ts +31 -0
  650. package/src/modules/people/routes.ts +127 -18
  651. package/src/modules/people/schema.ts +109 -3
  652. package/src/modules/people/service.ts +205 -39
  653. package/src/modules/people/tools.ts +5 -1
  654. package/src/modules/personLinks.ts +278 -0
  655. package/src/modules/positions/routes.ts +4 -2
  656. package/src/modules/raises/index.ts +3 -1
  657. package/src/modules/raises/repository.ts +6 -107
  658. package/src/modules/raises/routes.ts +7 -0
  659. package/src/modules/raises/schema.ts +7 -14
  660. package/src/modules/raises/service.ts +91 -20
  661. package/src/modules/recordTargets.ts +2 -0
  662. package/src/modules/references.ts +43 -4
  663. package/src/modules/sample-data/fixture.ts +690 -0
  664. package/src/modules/sample-data/index.ts +51 -0
  665. package/src/modules/sample-data/routes.ts +50 -0
  666. package/src/modules/sample-data/service.ts +679 -0
  667. package/src/modules/sample-data/tools.ts +32 -0
  668. package/src/modules/search/index.ts +2 -1
  669. package/src/modules/search/repository.ts +33 -1
  670. package/src/modules/search/service.ts +7 -5
  671. package/src/modules/smtp-email/index.ts +8 -1
  672. package/src/modules/stagedRecords.ts +18 -3
  673. package/src/modules/webhooks/payloads.ts +20 -2
  674. package/src/modules/workspace/repository.ts +12 -0
  675. package/src/modules/workspace/service.ts +27 -1
  676. package/src/modules/workspace/starters.ts +5 -0
  677. package/src/runtime/events.ts +1 -0
  678. package/src/schema/index.ts +4 -0
  679. package/src/testing/database.ts +97 -11
@@ -6,18 +6,19 @@ import type { PgColumn, PgTable } from 'drizzle-orm/pg-core'
6
6
 
7
7
  import type { Queryable } from '../../runtime/transaction.ts'
8
8
  import { companies } from '../companies/schema.ts'
9
- import { dealPeople, deals } from '../deals/schema.ts'
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 { candidates, roles } from '../hiring/schema.ts'
13
14
  import { notes } from '../notes/schema.ts'
14
15
  import { opportunities } from '../opportunities/schema.ts'
15
- import { partnershipPeople, partnerships } from '../partnerships/schema.ts'
16
- import { people } from '../people/schema.ts'
16
+ import { partnerships } from '../partnerships/schema.ts'
17
+ import { people, personLinks } from '../people/schema.ts'
17
18
  import { pipelineStages } from '../pipelines/schema.ts'
18
19
  import { planItems } from '../plans/schema.ts'
19
20
  import { positions } from '../positions/schema.ts'
20
- import { raisePeople, raises } from '../raises/schema.ts'
21
+ import { raises } from '../raises/schema.ts'
21
22
  import { isRecordTargetType, resolveTargetNames, targetKey } from '../recordTargets.ts'
22
23
  import { workspaces } from '../workspace/schema.ts'
23
24
  import type { HandbookPageReference, PromptInputs, RelatedIdList, WorkspaceSignal } from './prompt.ts'
@@ -47,6 +48,7 @@ const DEEP_LINKS: Readonly<Partial<Record<AgentTaskTargetType, string>>> = {
47
48
  person: '/people',
48
49
  company: '/companies',
49
50
  deal: '/deals',
51
+ enquiry: '/enquiries',
50
52
  opportunity: '/opportunities',
51
53
  partnership: '/partnerships',
52
54
  raise: '/fundraising',
@@ -253,6 +255,33 @@ async function relatedFrom(
253
255
  return limitedIds(rows.map((row) => row.id))
254
256
  }
255
257
 
258
+ /**
259
+ * The people on one pipeline record, capped and truncation-aware. Uses
260
+ * `person_links` directly rather than the shared helper because it needs the
261
+ * limit + 1 semantics of `relatedFrom`.
262
+ */
263
+ async function personLinkIds(
264
+ db: Queryable,
265
+ workspaceId: string,
266
+ targetType: 'deal' | 'enquiry' | 'opportunity' | 'partnership' | 'raise',
267
+ targetId: string,
268
+ ): Promise<RelatedIdList> {
269
+ const rows = await db
270
+ .select({ id: personLinks.personId })
271
+ .from(personLinks)
272
+ .where(
273
+ and(
274
+ eq(personLinks.workspaceId, workspaceId),
275
+ eq(personLinks.targetType, targetType),
276
+ eq(personLinks.targetId, targetId),
277
+ ),
278
+ )
279
+ .orderBy(asc(personLinks.personId))
280
+ .limit(RELATED_ID_LIMIT + 1)
281
+
282
+ return limitedIds(rows.map((row) => row.id))
283
+ }
284
+
256
285
  /**
257
286
  * The related record ids `agent-tasks.md`'s context recipe names, per target
258
287
  * type: positions for a person, people on a deal, the company behind a raise,
@@ -297,6 +326,12 @@ async function collectRelated(
297
326
  deals.id,
298
327
  workspaceScoped(deals.workspaceId, deals.companyId),
299
328
  ),
329
+ enquiry_ids: await relatedFrom(
330
+ db,
331
+ enquiries,
332
+ enquiries.id,
333
+ workspaceScoped(enquiries.workspaceId, enquiries.companyId),
334
+ ),
300
335
  opportunity_ids: await relatedFrom(
301
336
  db,
302
337
  opportunities,
@@ -326,14 +361,7 @@ async function collectRelated(
326
361
 
327
362
  return {
328
363
  company_ids: wholeList(deal === undefined ? [] : [deal.companyId]),
329
- // The link table has no workspace column; the parent deal was already
330
- // resolved inside this workspace, which is what scopes the join.
331
- person_ids: await relatedFrom(
332
- db,
333
- dealPeople,
334
- dealPeople.personId,
335
- eq(dealPeople.dealId, targetId),
336
- ),
364
+ person_ids: await personLinkIds(db, workspaceId, 'deal', targetId),
337
365
  }
338
366
  }
339
367
 
@@ -349,6 +377,21 @@ async function collectRelated(
349
377
  ? []
350
378
  : [opportunity.companyId],
351
379
  ),
380
+ person_ids: await personLinkIds(db, workspaceId, 'opportunity', targetId),
381
+ }
382
+ }
383
+
384
+ case 'enquiry': {
385
+ const [enquiry] = await db
386
+ .select({ companyId: enquiries.companyId })
387
+ .from(enquiries)
388
+ .where(and(eq(enquiries.workspaceId, workspaceId), eq(enquiries.id, targetId)))
389
+
390
+ return {
391
+ company_ids: wholeList(
392
+ enquiry?.companyId === null || enquiry === undefined ? [] : [enquiry.companyId],
393
+ ),
394
+ person_ids: await personLinkIds(db, workspaceId, 'enquiry', targetId),
352
395
  }
353
396
  }
354
397
 
@@ -360,12 +403,7 @@ async function collectRelated(
360
403
 
361
404
  return {
362
405
  company_ids: wholeList(partnership === undefined ? [] : [partnership.companyId]),
363
- person_ids: await relatedFrom(
364
- db,
365
- partnershipPeople,
366
- partnershipPeople.personId,
367
- eq(partnershipPeople.partnershipId, targetId),
368
- ),
406
+ person_ids: await personLinkIds(db, workspaceId, 'partnership', targetId),
369
407
  }
370
408
  }
371
409
 
@@ -377,12 +415,7 @@ async function collectRelated(
377
415
 
378
416
  return {
379
417
  company_ids: wholeList(raise === undefined ? [] : [raise.companyId]),
380
- person_ids: await relatedFrom(
381
- db,
382
- raisePeople,
383
- raisePeople.personId,
384
- eq(raisePeople.raiseId, targetId),
385
- ),
418
+ person_ids: await personLinkIds(db, workspaceId, 'raise', targetId),
386
419
  }
387
420
  }
388
421
 
@@ -433,6 +466,13 @@ const SWEEP_TABLES = {
433
466
  stageId: deals.stageId,
434
467
  summary: deals.summary,
435
468
  },
469
+ enquiry: {
470
+ table: enquiries,
471
+ id: enquiries.id,
472
+ workspaceId: enquiries.workspaceId,
473
+ stageId: enquiries.stageId,
474
+ summary: enquiries.summary,
475
+ },
436
476
  opportunity: {
437
477
  table: opportunities,
438
478
  id: opportunities.id,
@@ -5,8 +5,11 @@ import { and, eq } from 'drizzle-orm'
5
5
  import type { Queryable } from '../runtime/transaction.ts'
6
6
  import * as activityRepository from './activities/repository.ts'
7
7
  import * as decisionRepository from './decisions/repository.ts'
8
+ import { formAttachTargets } from './forms/schema.ts'
8
9
  import { candidates } from './hiring/schema.ts'
10
+ import * as listRepository from './lists/repository.ts'
9
11
  import * as noteRepository from './notes/repository.ts'
12
+ import * as personLinks from './personLinks.ts'
10
13
  import * as planRepository from './plans/repository.ts'
11
14
 
12
15
  /**
@@ -18,7 +21,12 @@ import * as planRepository from './plans/repository.ts'
18
21
  * record they described and reappear the day an id is reused.
19
22
  *
20
23
  * `plan_items` attach the same way but their check constraint allows only the
21
- * four pipeline types, so they are removed only for those targets.
24
+ * four pipeline types, so they are removed only for those targets. `person_links`
25
+ * follows the same rule: it holds a person's involvement in a pipeline record
26
+ * and its check constraint allows only the four pipeline types, so a deleted
27
+ * deal/opportunity/raise/partnership sheds its people here. `form_attach_targets`
28
+ * is the same shape: forms pinning submitters into a pre-existing pipeline
29
+ * record shed the mapping when the target goes.
22
30
  */
23
31
 
24
32
  /** Target types that can own attached records here. */
@@ -37,7 +45,7 @@ export async function deleteRecordsAttachedTo(
37
45
  targetType: AttachableTargetType,
38
46
  targetId: string,
39
47
  ): Promise<number> {
40
- // Sequential, not concurrent: a transaction is one connection, and four
48
+ // Sequential, not concurrent: a transaction is one connection, and five
41
49
  // statements racing down it is not something to rely on for a cheap delete.
42
50
  const notes = await noteRepository.deleteForTarget(db, workspaceId, targetType, targetId)
43
51
  const activities = await activityRepository.deleteForTarget(db, workspaceId, targetType, targetId)
@@ -45,8 +53,34 @@ export async function deleteRecordsAttachedTo(
45
53
  const plans = PLAN_TARGET_TYPES.has(targetType)
46
54
  ? await planRepository.deleteForTarget(db, workspaceId, targetType, targetId)
47
55
  : 0
56
+ const links = PLAN_TARGET_TYPES.has(targetType)
57
+ ? await personLinks.deleteLinksForTarget(db, workspaceId, {
58
+ targetType: targetType as PipelineKind,
59
+ targetId,
60
+ })
61
+ : 0
62
+ const attachTargets = PLAN_TARGET_TYPES.has(targetType)
63
+ ? (
64
+ await db
65
+ .delete(formAttachTargets)
66
+ .where(
67
+ and(
68
+ eq(formAttachTargets.workspaceId, workspaceId),
69
+ eq(formAttachTargets.targetType, targetType),
70
+ eq(formAttachTargets.targetId, targetId),
71
+ ),
72
+ )
73
+ .returning({ formId: formAttachTargets.formId })
74
+ ).length
75
+ : 0
76
+ const memberships = await listRepository.deleteMembershipsForTarget(
77
+ db,
78
+ workspaceId,
79
+ targetType,
80
+ targetId,
81
+ )
48
82
 
49
- return notes + activities + decisions + plans
83
+ return notes + activities + decisions + plans + links + attachTargets + memberships
50
84
  }
51
85
 
52
86
  /**
@@ -1,4 +1,4 @@
1
- import type { ThemePreference } from '@kelpie/schemas'
1
+ import type { ListViewPreference, ThemePreference } from '@kelpie/schemas'
2
2
 
3
3
  /**
4
4
  * What an account's preferences are before anyone has saved any, and how a
@@ -17,12 +17,17 @@ export interface PreferenceValues {
17
17
  readonly emailDigest: boolean
18
18
  readonly mentionEmails: boolean
19
19
  readonly productUpdates: boolean
20
+ readonly listViews: Readonly<Record<string, ListViewPreference>>
20
21
  }
21
22
 
22
23
  /**
23
24
  * UTC, not the workspace's zone. An account is global and may belong to several
24
25
  * workspaces in different zones, so deriving from one of them would be picking
25
26
  * arbitrarily and calling it the person's answer.
27
+ *
28
+ * `listViews` starts empty. Each list page falls back to its own default when
29
+ * the map holds no entry for it, so the person sees the page's built-in shape
30
+ * until they change it.
26
31
  */
27
32
  export const DEFAULT_PREFERENCES: PreferenceValues = {
28
33
  timezone: 'UTC',
@@ -30,6 +35,7 @@ export const DEFAULT_PREFERENCES: PreferenceValues = {
30
35
  emailDigest: true,
31
36
  mentionEmails: true,
32
37
  productUpdates: false,
38
+ listViews: {},
33
39
  }
34
40
 
35
41
  export type PreferenceChanges = Partial<PreferenceValues>
@@ -40,6 +46,11 @@ export type PreferenceChanges = Partial<PreferenceValues>
40
46
  * The result is always a complete row, which is what makes the write an upsert
41
47
  * with no read-modify-write hazard in the caller: the same request applied twice
42
48
  * produces the same row.
49
+ *
50
+ * `listViews` is treated as one field, so the caller replaces the whole map
51
+ * rather than merging by key. The UI already holds the current map in the
52
+ * account-preferences query, so a per-view change becomes a PATCH of the merged
53
+ * map — the merge lives where the choice was made.
43
54
  */
44
55
  export function applyPreferenceChanges(
45
56
  stored: PreferenceValues | undefined,
@@ -53,5 +64,6 @@ export function applyPreferenceChanges(
53
64
  emailDigest: changes.emailDigest ?? current.emailDigest,
54
65
  mentionEmails: changes.mentionEmails ?? current.mentionEmails,
55
66
  productUpdates: changes.productUpdates ?? current.productUpdates,
67
+ listViews: changes.listViews ?? current.listViews,
56
68
  }
57
69
  }
@@ -1,4 +1,5 @@
1
1
  import { THEME_PREFERENCES } from '@kelpie/schemas'
2
+ import type { ListViewPreference } from '@kelpie/schemas'
2
3
  import type { Context, Hono } from 'hono'
3
4
  import { z } from 'zod'
4
5
 
@@ -59,6 +60,24 @@ const updateAccountBody = z
59
60
  path: ['current_password'],
60
61
  })
61
62
 
63
+ const listViewBody: z.ZodType<ListViewPreference, unknown> = z
64
+ .strictObject({
65
+ columns: z.array(z.string()).optional(),
66
+ mode: z.enum(['list', 'columns']).optional(),
67
+ grouping: z.string().optional(),
68
+ scope: z.string().optional(),
69
+ sort: z.string().optional(),
70
+ })
71
+ .transform(
72
+ (wire): ListViewPreference => ({
73
+ ...(wire.columns === undefined ? {} : { columns: wire.columns }),
74
+ ...(wire.mode === undefined ? {} : { mode: wire.mode }),
75
+ ...(wire.grouping === undefined ? {} : { grouping: wire.grouping }),
76
+ ...(wire.scope === undefined ? {} : { scope: wire.scope }),
77
+ ...(wire.sort === undefined ? {} : { sort: wire.sort }),
78
+ }),
79
+ )
80
+
62
81
  const updatePreferencesBody = z
63
82
  .strictObject({
64
83
  timezone: timezoneSchema,
@@ -66,6 +85,7 @@ const updatePreferencesBody = z
66
85
  email_digest: z.boolean(),
67
86
  mention_emails: z.boolean(),
68
87
  product_updates: z.boolean(),
88
+ list_views: z.record(z.string(), listViewBody),
69
89
  })
70
90
  .partial()
71
91
 
@@ -118,6 +138,7 @@ function preferencesResponse(preferences: PreferenceValues): Record<string, unkn
118
138
  email_digest: preferences.emailDigest,
119
139
  mention_emails: preferences.mentionEmails,
120
140
  product_updates: preferences.productUpdates,
141
+ list_views: preferences.listViews,
121
142
  }
122
143
  }
123
144
 
@@ -213,6 +234,7 @@ export function mountAuthRoutes(router: Hono, dependencies: AuthRoutesDependenci
213
234
  ...(body.email_digest === undefined ? {} : { emailDigest: body.email_digest }),
214
235
  ...(body.mention_emails === undefined ? {} : { mentionEmails: body.mention_emails }),
215
236
  ...(body.product_updates === undefined ? {} : { productUpdates: body.product_updates }),
237
+ ...(body.list_views === undefined ? {} : { listViews: body.list_views }),
216
238
  })
217
239
 
218
240
  return context.json(preferencesResponse(preferences))
@@ -1,6 +1,6 @@
1
1
  import { THEME_PREFERENCES } from '@kelpie/schemas'
2
- import type { ThemePreference } from '@kelpie/schemas'
3
- import { boolean, pgTable, text } from 'drizzle-orm/pg-core'
2
+ import type { ListViewPreference, ThemePreference } from '@kelpie/schemas'
3
+ import { boolean, jsonb, pgTable, text } from 'drizzle-orm/pg-core'
4
4
 
5
5
  import { checkOneOf, citext, createdAt, moment, primaryId, updatedAt } from '../../lib/columns.ts'
6
6
 
@@ -57,6 +57,16 @@ export const userPreferences = pgTable(
57
57
  emailDigest: boolean('email_digest').notNull(),
58
58
  mentionEmails: boolean('mention_emails').notNull(),
59
59
  productUpdates: boolean('product_updates').notNull(),
60
+ /**
61
+ * Per-list column choices, keyed on a stable view id (`people`, `deals`, …).
62
+ * A view id the client no longer recognises stays untouched here rather than
63
+ * being cleaned up: the map is small, and the write path is the client
64
+ * merging its current choice into what it read.
65
+ */
66
+ listViews: jsonb('list_views')
67
+ .$type<Readonly<Record<string, ListViewPreference>>>()
68
+ .notNull()
69
+ .default({}),
60
70
  updatedAt: updatedAt(),
61
71
  },
62
72
  (table) => [checkOneOf('user_preferences_theme_check', table.theme, THEME_PREFERENCES)],
@@ -1,5 +1,6 @@
1
1
  import { APP_LINK_PATHS, buildAppLink } from '../../lib/appUrl.ts'
2
2
  import type { EmailSender } from '../../lib/email.ts'
3
+ import { renderEmail } from '../../lib/emailContent.ts'
3
4
  import { AppError } from '../../lib/errors.ts'
4
5
  import type { IdFactory } from '../../lib/ids.ts'
5
6
  import { UNIQUE_VIOLATION, postgresErrorCode } from '../../lib/database.ts'
@@ -95,6 +96,7 @@ function toPreferenceValues(record: repository.UserPreferencesRecord): Preferenc
95
96
  emailDigest: record.emailDigest,
96
97
  mentionEmails: record.mentionEmails,
97
98
  productUpdates: record.productUpdates,
99
+ listViews: record.listViews,
98
100
  }
99
101
  }
100
102
 
@@ -192,11 +194,23 @@ export function createAuthService(dependencies: AuthDependencies): AuthService {
192
194
 
193
195
  function sendVerificationEmail(to: string, token: string): Promise<void> {
194
196
  const link = buildAppLink(dependencies.appBaseUrl, APP_LINK_PATHS.verifyEmail, token)
197
+ const { text, html } = renderEmail(
198
+ {
199
+ action: {
200
+ instructions: 'Confirm this address to finish setting up your account:',
201
+ buttonText: 'Verify email address',
202
+ link,
203
+ },
204
+ outro: 'The link expires in 24 hours.',
205
+ },
206
+ dependencies.appBaseUrl,
207
+ )
195
208
 
196
209
  return dependencies.email.send({
197
210
  to,
198
211
  subject: 'Verify your Kelpie email address',
199
- body: `Confirm this address to finish setting up your account:\n\n${link}\n\nThe link expires in 24 hours.`,
212
+ body: text,
213
+ html,
200
214
  })
201
215
  }
202
216
 
@@ -320,10 +334,18 @@ export function createAuthService(dependencies: AuthDependencies): AuthService {
320
334
  })
321
335
 
322
336
  if (changes.email !== undefined) {
337
+ const { text, html } = renderEmail(
338
+ {
339
+ intro: `Your Kelpie sign-in email changed from ${previousEmail} to ${updated.email}. If you did not make this change, reset your password right away.`,
340
+ },
341
+ dependencies.appBaseUrl,
342
+ )
343
+
323
344
  await dependencies.email.send({
324
345
  to: previousEmail,
325
346
  subject: 'Your Kelpie sign-in email changed',
326
- body: `Your Kelpie sign-in email changed from ${previousEmail} to ${updated.email}. If you did not make this change, reset your password right away.`,
347
+ body: text,
348
+ html,
327
349
  })
328
350
  }
329
351
 
@@ -418,11 +440,23 @@ export function createAuthService(dependencies: AuthDependencies): AuthService {
418
440
  })
419
441
 
420
442
  const link = buildAppLink(dependencies.appBaseUrl, APP_LINK_PATHS.passwordReset, token)
443
+ const { text, html } = renderEmail(
444
+ {
445
+ action: {
446
+ instructions: 'Use this link within the hour to choose a new password:',
447
+ buttonText: 'Reset password',
448
+ link,
449
+ },
450
+ outro: 'If you did not ask for this, ignore it.',
451
+ },
452
+ dependencies.appBaseUrl,
453
+ )
421
454
 
422
455
  await dependencies.email.send({
423
456
  to: user.email,
424
457
  subject: 'Reset your Kelpie password',
425
- body: `Use this link within the hour to choose a new password:\n\n${link}\n\nIf you did not ask for this, ignore it.`,
458
+ body: text,
459
+ html,
426
460
  })
427
461
  },
428
462
 
@@ -1,5 +1,6 @@
1
1
  import type { KelpieModule } from '../../runtime/module.ts'
2
2
  import { createActivityRecorder } from '../activities/index.ts'
3
+ import { createCustomFieldValues } from '../custom-fields/index.ts'
3
4
  import { companiesEvents } from './events.ts'
4
5
  import { mountCompaniesRoutes } from './routes.ts'
5
6
  import * as schema from './schema.ts'
@@ -15,7 +16,7 @@ import { registerCompaniesTools } from './tools.ts'
15
16
  export function createCompaniesModule(migrationsDirectory: string): KelpieModule {
16
17
  return {
17
18
  id: 'companies',
18
- requires: ['workspace', 'activities'],
19
+ requires: ['workspace', 'activities', 'custom-fields'],
19
20
  structural: true,
20
21
  events: companiesEvents,
21
22
 
@@ -29,6 +30,7 @@ export function createCompaniesModule(migrationsDirectory: string): KelpieModule
29
30
  createId: context.createId,
30
31
  now: context.now,
31
32
  }),
33
+ customFields: createCustomFieldValues({ db: context.db }),
32
34
  })
33
35
 
34
36
  context.schema(schema, migrationsDirectory)
@@ -27,6 +27,8 @@ export interface CompanyFilters {
27
27
  readonly term?: string | undefined
28
28
  /** `?person_id=`, repeatable: companies where any of these people holds a position. */
29
29
  readonly personIds?: readonly string[] | undefined
30
+ /** `?is_own=true` returns only the workspace's own companies; `false` returns everything else. */
31
+ readonly isOwn?: boolean | undefined
30
32
  }
31
33
 
32
34
  /**
@@ -64,6 +66,7 @@ function conditionsFor(workspaceId: string, filters: CompanyFilters): (SQL | und
64
66
  eq(companies.workspaceId, workspaceId),
65
67
  filters.term === undefined ? undefined : matchesTerm(filters.term),
66
68
  filters.personIds === undefined ? undefined : employsAnyOf(filters.personIds),
69
+ filters.isOwn === undefined ? undefined : eq(companies.isOwn, filters.isOwn),
67
70
  ]
68
71
  }
69
72
 
@@ -1,3 +1,4 @@
1
+ import { customFieldsPatchShape } from '@kelpie/schemas'
1
2
  import type { Context, Hono } from 'hono'
2
3
  import { z } from 'zod'
3
4
 
@@ -5,6 +6,7 @@ import { pageBody, readIdFilter, readJsonBody, readListParameters } from '../../
5
6
  import type { Actor } from '../auth/actor.ts'
6
7
  import { resolveActorFrom } from '../auth/credentials.ts'
7
8
  import type { CredentialDependencies } from '../auth/credentials.ts'
9
+ import { renderCustomFieldsForWire } from '../custom-fields/wire.ts'
8
10
  import { ACCOUNT_TYPES, COMPANY_STAGES, ICP_FITS, SIZE_BANDS } from './schema.ts'
9
11
  import type {
10
12
  CompaniesService,
@@ -30,6 +32,8 @@ const companyShape = {
30
32
  tech_stack: z.array(z.string().min(1)),
31
33
  summary: z.string(),
32
34
  tags: z.array(z.string().min(1)),
35
+ is_own: z.boolean(),
36
+ custom_fields: customFieldsPatchShape,
33
37
  }
34
38
 
35
39
  /**
@@ -51,6 +55,8 @@ export const createBody = z.strictObject({
51
55
  tech_stack: companyShape.tech_stack.default([]),
52
56
  summary: companyShape.summary.default(''),
53
57
  tags: companyShape.tags.default([]),
58
+ is_own: companyShape.is_own.default(false),
59
+ custom_fields: companyShape.custom_fields.default({}),
54
60
  })
55
61
 
56
62
  export const updateBody = z.strictObject(companyShape).partial()
@@ -74,6 +80,8 @@ export function toCreateInput(body: z.infer<typeof createBody>): CreateCompanyIn
74
80
  techStack: body.tech_stack,
75
81
  summary: body.summary,
76
82
  tags: body.tags,
83
+ isOwn: body.is_own,
84
+ customFields: body.custom_fields,
77
85
  }
78
86
  }
79
87
 
@@ -92,6 +100,8 @@ export function toUpdateInput(body: z.infer<typeof updateBody>): UpdateCompanyIn
92
100
  ...(body.tech_stack === undefined ? {} : { techStack: body.tech_stack }),
93
101
  ...(body.summary === undefined ? {} : { summary: body.summary }),
94
102
  ...(body.tags === undefined ? {} : { tags: body.tags }),
103
+ ...(body.is_own === undefined ? {} : { isOwn: body.is_own }),
104
+ ...(body.custom_fields === undefined ? {} : { customFields: body.custom_fields }),
95
105
  }
96
106
  }
97
107
 
@@ -111,6 +121,8 @@ export function companyResponse(company: CompanyView): Record<string, unknown> {
111
121
  tech_stack: company.techStack,
112
122
  summary: company.summary,
113
123
  tags: company.tags,
124
+ is_own: company.isOwn,
125
+ custom_fields: renderCustomFieldsForWire(company.customFields),
114
126
  created_at: company.createdAt.toISOString(),
115
127
  updated_at: company.updatedAt.toISOString(),
116
128
  }
@@ -120,11 +132,19 @@ export function mountCompaniesRoutes(router: Hono, dependencies: CompaniesRoutes
120
132
  const requireActor = (context: Context): Promise<Actor> => resolveActorFrom(dependencies, context)
121
133
 
122
134
  router.get('/companies', async (context) => {
135
+ // `?is_own=true|false` narrows to the workspace's own companies (or the
136
+ // rest). Anything else is treated as absent, so an unknown value never
137
+ // returns an accidental "everything".
138
+ const isOwnParam = context.req.query('is_own')
139
+ const isOwn =
140
+ isOwnParam === 'true' ? true : isOwnParam === 'false' ? false : undefined
141
+
123
142
  const page = await dependencies.service.list(
124
143
  await requireActor(context),
125
144
  {
126
145
  term: context.req.query('q'),
127
146
  personIds: readIdFilter(context, 'person_id'),
147
+ isOwn,
128
148
  },
129
149
  readListParameters(context),
130
150
  )
@@ -1,5 +1,6 @@
1
1
  import { ACCOUNT_TYPES, COMPANY_STAGES, ICP_FITS, SIZE_BANDS } from '@kelpie/schemas'
2
- import { index, pgTable, text, unique } from 'drizzle-orm/pg-core'
2
+ import type { CustomFieldValue } from '@kelpie/schemas'
3
+ import { boolean, index, jsonb, pgTable, text, unique } from 'drizzle-orm/pg-core'
3
4
 
4
5
  import {
5
6
  checkOneOf,
@@ -42,6 +43,15 @@ export const companies = pgTable(
42
43
  techStack: text('tech_stack').array().notNull().default([]),
43
44
  summary: text('summary').notNull().default(''),
44
45
  tags: text('tags').array().notNull().default([]),
46
+ // "This is us": a workspace marks its own company (or several, e.g. parent
47
+ // and subsidiary) so downstream views can distinguish self from prospects.
48
+ // Loose semantics on purpose — zero or many rows may carry it.
49
+ isOwn: boolean('is_own').notNull().default(false),
50
+ // Workspace-defined fields, keyed by definition key. See people/schema.ts.
51
+ customFields: jsonb('custom_fields')
52
+ .$type<Readonly<Record<string, CustomFieldValue>>>()
53
+ .notNull()
54
+ .default({}),
45
55
  createdAt: createdAt(),
46
56
  updatedAt: updatedAt(),
47
57
  searchVector: searchVector((): readonly SearchVectorPart[] => [