@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.
Files changed (584) hide show
  1. package/dist/lib/ids.d.ts +11 -0
  2. package/dist/lib/ids.d.ts.map +1 -1
  3. package/dist/lib/ids.js +11 -0
  4. package/dist/lib/ids.js.map +1 -1
  5. package/dist/modules/activities/repository.d.ts.map +1 -1
  6. package/dist/modules/activities/repository.js +19 -20
  7. package/dist/modules/activities/repository.js.map +1 -1
  8. package/dist/modules/activities/wording.d.ts +12 -0
  9. package/dist/modules/activities/wording.d.ts.map +1 -1
  10. package/dist/modules/activities/wording.js +16 -0
  11. package/dist/modules/activities/wording.js.map +1 -1
  12. package/dist/modules/agent-tasks/catalog.d.ts.map +1 -1
  13. package/dist/modules/agent-tasks/catalog.js +62 -0
  14. package/dist/modules/agent-tasks/catalog.js.map +1 -1
  15. package/dist/modules/agent-tasks/resolve.d.ts.map +1 -1
  16. package/dist/modules/agent-tasks/resolve.js +42 -9
  17. package/dist/modules/agent-tasks/resolve.js.map +1 -1
  18. package/dist/modules/agent-tasks/routes.d.ts +2 -0
  19. package/dist/modules/agent-tasks/routes.d.ts.map +1 -1
  20. package/dist/modules/attachedRecords.d.ts +6 -1
  21. package/dist/modules/attachedRecords.d.ts.map +1 -1
  22. package/dist/modules/attachedRecords.js +15 -1
  23. package/dist/modules/attachedRecords.js.map +1 -1
  24. package/dist/modules/companies/index.d.ts.map +1 -1
  25. package/dist/modules/companies/index.js +3 -1
  26. package/dist/modules/companies/index.js.map +1 -1
  27. package/dist/modules/companies/routes.d.ts +14 -0
  28. package/dist/modules/companies/routes.d.ts.map +1 -1
  29. package/dist/modules/companies/routes.js +7 -0
  30. package/dist/modules/companies/routes.js.map +1 -1
  31. package/dist/modules/companies/schema.d.ts +20 -0
  32. package/dist/modules/companies/schema.d.ts.map +1 -1
  33. package/dist/modules/companies/schema.js +6 -1
  34. package/dist/modules/companies/schema.js.map +1 -1
  35. package/dist/modules/companies/service.d.ts +5 -0
  36. package/dist/modules/companies/service.d.ts.map +1 -1
  37. package/dist/modules/companies/service.js +24 -12
  38. package/dist/modules/companies/service.js.map +1 -1
  39. package/dist/modules/consent-purposes/capabilities.d.ts +7 -0
  40. package/dist/modules/consent-purposes/capabilities.d.ts.map +1 -0
  41. package/dist/modules/consent-purposes/capabilities.js +10 -0
  42. package/dist/modules/consent-purposes/capabilities.js.map +1 -0
  43. package/dist/modules/consent-purposes/events.d.ts +38 -0
  44. package/dist/modules/consent-purposes/events.d.ts.map +1 -0
  45. package/dist/modules/consent-purposes/events.js +17 -0
  46. package/dist/modules/consent-purposes/events.js.map +1 -0
  47. package/dist/modules/consent-purposes/index.d.ts +13 -0
  48. package/dist/modules/consent-purposes/index.d.ts.map +1 -0
  49. package/dist/modules/consent-purposes/index.js +41 -0
  50. package/dist/modules/consent-purposes/index.js.map +1 -0
  51. package/dist/modules/consent-purposes/repository.d.ts +21 -0
  52. package/dist/modules/consent-purposes/repository.d.ts.map +1 -0
  53. package/dist/modules/consent-purposes/repository.js +98 -0
  54. package/dist/modules/consent-purposes/repository.js.map +1 -0
  55. package/dist/modules/consent-purposes/routes.d.ts +39 -0
  56. package/dist/modules/consent-purposes/routes.d.ts.map +1 -0
  57. package/dist/modules/consent-purposes/routes.js +79 -0
  58. package/dist/modules/consent-purposes/routes.js.map +1 -0
  59. package/dist/modules/consent-purposes/schema.d.ts +175 -0
  60. package/dist/modules/consent-purposes/schema.d.ts.map +1 -0
  61. package/dist/modules/consent-purposes/schema.js +35 -0
  62. package/dist/modules/consent-purposes/schema.js.map +1 -0
  63. package/dist/modules/consent-purposes/service.d.ts +50 -0
  64. package/dist/modules/consent-purposes/service.d.ts.map +1 -0
  65. package/dist/modules/consent-purposes/service.js +263 -0
  66. package/dist/modules/consent-purposes/service.js.map +1 -0
  67. package/dist/modules/consent-purposes/starters.d.ts +17 -0
  68. package/dist/modules/consent-purposes/starters.d.ts.map +1 -0
  69. package/dist/modules/consent-purposes/starters.js +15 -0
  70. package/dist/modules/consent-purposes/starters.js.map +1 -0
  71. package/dist/modules/consent-purposes/tools.d.ts +4 -0
  72. package/dist/modules/consent-purposes/tools.d.ts.map +1 -0
  73. package/dist/modules/consent-purposes/tools.js +29 -0
  74. package/dist/modules/consent-purposes/tools.js.map +1 -0
  75. package/dist/modules/core.d.ts.map +1 -1
  76. package/dist/modules/core.js +10 -0
  77. package/dist/modules/core.js.map +1 -1
  78. package/dist/modules/custom-fields/capabilities.d.ts +12 -0
  79. package/dist/modules/custom-fields/capabilities.d.ts.map +1 -0
  80. package/dist/modules/custom-fields/capabilities.js +15 -0
  81. package/dist/modules/custom-fields/capabilities.js.map +1 -0
  82. package/dist/modules/custom-fields/events.d.ts +49 -0
  83. package/dist/modules/custom-fields/events.d.ts.map +1 -0
  84. package/dist/modules/custom-fields/events.js +25 -0
  85. package/dist/modules/custom-fields/events.js.map +1 -0
  86. package/dist/modules/custom-fields/index.d.ts +19 -0
  87. package/dist/modules/custom-fields/index.d.ts.map +1 -0
  88. package/dist/modules/custom-fields/index.js +46 -0
  89. package/dist/modules/custom-fields/index.js.map +1 -0
  90. package/dist/modules/custom-fields/repository.d.ts +37 -0
  91. package/dist/modules/custom-fields/repository.d.ts.map +1 -0
  92. package/dist/modules/custom-fields/repository.js +144 -0
  93. package/dist/modules/custom-fields/repository.js.map +1 -0
  94. package/dist/modules/custom-fields/routes.d.ts +44 -0
  95. package/dist/modules/custom-fields/routes.d.ts.map +1 -0
  96. package/dist/modules/custom-fields/routes.js +103 -0
  97. package/dist/modules/custom-fields/routes.js.map +1 -0
  98. package/dist/modules/custom-fields/schema.d.ts +215 -0
  99. package/dist/modules/custom-fields/schema.d.ts.map +1 -0
  100. package/dist/modules/custom-fields/schema.js +43 -0
  101. package/dist/modules/custom-fields/schema.js.map +1 -0
  102. package/dist/modules/custom-fields/service.d.ts +57 -0
  103. package/dist/modules/custom-fields/service.d.ts.map +1 -0
  104. package/dist/modules/custom-fields/service.js +273 -0
  105. package/dist/modules/custom-fields/service.js.map +1 -0
  106. package/dist/modules/custom-fields/tools.d.ts +4 -0
  107. package/dist/modules/custom-fields/tools.d.ts.map +1 -0
  108. package/dist/modules/custom-fields/tools.js +38 -0
  109. package/dist/modules/custom-fields/tools.js.map +1 -0
  110. package/dist/modules/custom-fields/values.d.ts +49 -0
  111. package/dist/modules/custom-fields/values.d.ts.map +1 -0
  112. package/dist/modules/custom-fields/values.js +249 -0
  113. package/dist/modules/custom-fields/values.js.map +1 -0
  114. package/dist/modules/custom-fields/wire.d.ts +12 -0
  115. package/dist/modules/custom-fields/wire.d.ts.map +1 -0
  116. package/dist/modules/custom-fields/wire.js +30 -0
  117. package/dist/modules/custom-fields/wire.js.map +1 -0
  118. package/dist/modules/dashboard/repository.d.ts.map +1 -1
  119. package/dist/modules/dashboard/repository.js +4 -3
  120. package/dist/modules/dashboard/repository.js.map +1 -1
  121. package/dist/modules/deals/index.d.ts +2 -1
  122. package/dist/modules/deals/index.d.ts.map +1 -1
  123. package/dist/modules/deals/index.js +5 -2
  124. package/dist/modules/deals/index.js.map +1 -1
  125. package/dist/modules/deals/repository.d.ts +0 -16
  126. package/dist/modules/deals/repository.d.ts.map +1 -1
  127. package/dist/modules/deals/repository.js +6 -76
  128. package/dist/modules/deals/repository.js.map +1 -1
  129. package/dist/modules/deals/routes.d.ts +14 -0
  130. package/dist/modules/deals/routes.d.ts.map +1 -1
  131. package/dist/modules/deals/routes.js +7 -0
  132. package/dist/modules/deals/routes.js.map +1 -1
  133. package/dist/modules/deals/schema.d.ts +20 -42
  134. package/dist/modules/deals/schema.d.ts.map +1 -1
  135. package/dist/modules/deals/schema.js +6 -11
  136. package/dist/modules/deals/schema.js.map +1 -1
  137. package/dist/modules/deals/service.d.ts +13 -2
  138. package/dist/modules/deals/service.d.ts.map +1 -1
  139. package/dist/modules/deals/service.js +43 -20
  140. package/dist/modules/deals/service.js.map +1 -1
  141. package/dist/modules/decisions/repository.d.ts.map +1 -1
  142. package/dist/modules/decisions/repository.js +2 -0
  143. package/dist/modules/decisions/repository.js.map +1 -1
  144. package/dist/modules/decisions/routes.d.ts +1 -0
  145. package/dist/modules/decisions/routes.d.ts.map +1 -1
  146. package/dist/modules/enquiries/events.d.ts +44 -0
  147. package/dist/modules/enquiries/events.d.ts.map +1 -0
  148. package/dist/modules/enquiries/events.js +19 -0
  149. package/dist/modules/enquiries/events.js.map +1 -0
  150. package/dist/modules/enquiries/index.d.ts +13 -0
  151. package/dist/modules/enquiries/index.d.ts.map +1 -0
  152. package/dist/modules/enquiries/index.js +44 -0
  153. package/dist/modules/enquiries/index.js.map +1 -0
  154. package/dist/modules/enquiries/repository.d.ts +30 -0
  155. package/dist/modules/enquiries/repository.d.ts.map +1 -0
  156. package/dist/modules/enquiries/repository.js +94 -0
  157. package/dist/modules/enquiries/repository.js.map +1 -0
  158. package/dist/modules/enquiries/routes.d.ts +52 -0
  159. package/dist/modules/enquiries/routes.d.ts.map +1 -0
  160. package/dist/modules/enquiries/routes.js +127 -0
  161. package/dist/modules/enquiries/routes.js.map +1 -0
  162. package/dist/modules/enquiries/schema.d.ts +290 -0
  163. package/dist/modules/enquiries/schema.d.ts.map +1 -0
  164. package/dist/modules/enquiries/schema.js +52 -0
  165. package/dist/modules/enquiries/schema.js.map +1 -0
  166. package/dist/modules/enquiries/service.d.ts +85 -0
  167. package/dist/modules/enquiries/service.d.ts.map +1 -0
  168. package/dist/modules/enquiries/service.js +370 -0
  169. package/dist/modules/enquiries/service.js.map +1 -0
  170. package/dist/modules/enquiries/tools.d.ts +4 -0
  171. package/dist/modules/enquiries/tools.d.ts.map +1 -0
  172. package/dist/modules/enquiries/tools.js +50 -0
  173. package/dist/modules/enquiries/tools.js.map +1 -0
  174. package/dist/modules/eventCatalogs.d.ts +3 -0
  175. package/dist/modules/eventCatalogs.d.ts.map +1 -1
  176. package/dist/modules/eventCatalogs.js +3 -0
  177. package/dist/modules/eventCatalogs.js.map +1 -1
  178. package/dist/modules/forms/embed.d.ts +20 -6
  179. package/dist/modules/forms/embed.d.ts.map +1 -1
  180. package/dist/modules/forms/embed.js +359 -43
  181. package/dist/modules/forms/embed.js.map +1 -1
  182. package/dist/modules/forms/events.d.ts +20 -7
  183. package/dist/modules/forms/events.d.ts.map +1 -1
  184. package/dist/modules/forms/events.js +20 -2
  185. package/dist/modules/forms/events.js.map +1 -1
  186. package/dist/modules/forms/fields.d.ts +14 -1
  187. package/dist/modules/forms/fields.d.ts.map +1 -1
  188. package/dist/modules/forms/fields.js +87 -3
  189. package/dist/modules/forms/fields.js.map +1 -1
  190. package/dist/modules/forms/index.d.ts.map +1 -1
  191. package/dist/modules/forms/index.js +12 -1
  192. package/dist/modules/forms/index.js.map +1 -1
  193. package/dist/modules/forms/mapping.d.ts +62 -5
  194. package/dist/modules/forms/mapping.d.ts.map +1 -1
  195. package/dist/modules/forms/mapping.js +139 -5
  196. package/dist/modules/forms/mapping.js.map +1 -1
  197. package/dist/modules/forms/publicRoutes.d.ts.map +1 -1
  198. package/dist/modules/forms/publicRoutes.js +29 -1
  199. package/dist/modules/forms/publicRoutes.js.map +1 -1
  200. package/dist/modules/forms/repository.d.ts +31 -0
  201. package/dist/modules/forms/repository.d.ts.map +1 -1
  202. package/dist/modules/forms/repository.js +90 -1
  203. package/dist/modules/forms/repository.js.map +1 -1
  204. package/dist/modules/forms/routes.d.ts +83 -1
  205. package/dist/modules/forms/routes.d.ts.map +1 -1
  206. package/dist/modules/forms/routes.js +185 -2
  207. package/dist/modules/forms/routes.js.map +1 -1
  208. package/dist/modules/forms/schema.d.ts +672 -1
  209. package/dist/modules/forms/schema.d.ts.map +1 -1
  210. package/dist/modules/forms/schema.js +146 -3
  211. package/dist/modules/forms/schema.js.map +1 -1
  212. package/dist/modules/forms/service.d.ts +54 -1
  213. package/dist/modules/forms/service.d.ts.map +1 -1
  214. package/dist/modules/forms/service.js +338 -28
  215. package/dist/modules/forms/service.js.map +1 -1
  216. package/dist/modules/forms/submission.d.ts +15 -0
  217. package/dist/modules/forms/submission.d.ts.map +1 -1
  218. package/dist/modules/forms/submission.js +418 -40
  219. package/dist/modules/forms/submission.js.map +1 -1
  220. package/dist/modules/import-export/drafts.d.ts +10 -0
  221. package/dist/modules/import-export/drafts.d.ts.map +1 -1
  222. package/dist/modules/import-export/drafts.js +16 -2
  223. package/dist/modules/import-export/drafts.js.map +1 -1
  224. package/dist/modules/import-export/exportRows.d.ts +7 -4
  225. package/dist/modules/import-export/exportRows.d.ts.map +1 -1
  226. package/dist/modules/import-export/exportRows.js +20 -5
  227. package/dist/modules/import-export/exportRows.js.map +1 -1
  228. package/dist/modules/import-export/plan.d.ts +12 -1
  229. package/dist/modules/import-export/plan.d.ts.map +1 -1
  230. package/dist/modules/import-export/plan.js +29 -2
  231. package/dist/modules/import-export/plan.js.map +1 -1
  232. package/dist/modules/import-export/presets.d.ts.map +1 -1
  233. package/dist/modules/import-export/presets.js +10 -0
  234. package/dist/modules/import-export/presets.js.map +1 -1
  235. package/dist/modules/import-export/repository.d.ts +11 -1
  236. package/dist/modules/import-export/repository.d.ts.map +1 -1
  237. package/dist/modules/import-export/repository.js +42 -9
  238. package/dist/modules/import-export/repository.js.map +1 -1
  239. package/dist/modules/import-export/routes.d.ts.map +1 -1
  240. package/dist/modules/import-export/routes.js +4 -0
  241. package/dist/modules/import-export/routes.js.map +1 -1
  242. package/dist/modules/import-export/schema.d.ts +17 -0
  243. package/dist/modules/import-export/schema.d.ts.map +1 -1
  244. package/dist/modules/import-export/schema.js +11 -0
  245. package/dist/modules/import-export/schema.js.map +1 -1
  246. package/dist/modules/import-export/service.d.ts +6 -0
  247. package/dist/modules/import-export/service.d.ts.map +1 -1
  248. package/dist/modules/import-export/service.js +14 -2
  249. package/dist/modules/import-export/service.js.map +1 -1
  250. package/dist/modules/import-export/streams.d.ts.map +1 -1
  251. package/dist/modules/import-export/streams.js +3 -3
  252. package/dist/modules/import-export/streams.js.map +1 -1
  253. package/dist/modules/import-export/tools.d.ts.map +1 -1
  254. package/dist/modules/import-export/tools.js +8 -0
  255. package/dist/modules/import-export/tools.js.map +1 -1
  256. package/dist/modules/import-export/validation.d.ts.map +1 -1
  257. package/dist/modules/import-export/validation.js +22 -1
  258. package/dist/modules/import-export/validation.js.map +1 -1
  259. package/dist/modules/import-export/writes.d.ts.map +1 -1
  260. package/dist/modules/import-export/writes.js +37 -4
  261. package/dist/modules/import-export/writes.js.map +1 -1
  262. package/dist/modules/lists/repository.d.ts +11 -0
  263. package/dist/modules/lists/repository.d.ts.map +1 -1
  264. package/dist/modules/lists/repository.js +13 -0
  265. package/dist/modules/lists/repository.js.map +1 -1
  266. package/dist/modules/lists/routes.d.ts +4 -0
  267. package/dist/modules/lists/routes.d.ts.map +1 -1
  268. package/dist/modules/lists/routes.js +8 -0
  269. package/dist/modules/lists/routes.js.map +1 -1
  270. package/dist/modules/lists/schema.d.ts +17 -0
  271. package/dist/modules/lists/schema.d.ts.map +1 -1
  272. package/dist/modules/lists/schema.js +10 -0
  273. package/dist/modules/lists/schema.js.map +1 -1
  274. package/dist/modules/lists/service.d.ts +14 -2
  275. package/dist/modules/lists/service.d.ts.map +1 -1
  276. package/dist/modules/lists/service.js +55 -7
  277. package/dist/modules/lists/service.js.map +1 -1
  278. package/dist/modules/mcp/index.d.ts.map +1 -1
  279. package/dist/modules/mcp/index.js +5 -0
  280. package/dist/modules/mcp/index.js.map +1 -1
  281. package/dist/modules/notes/routes.d.ts +1 -0
  282. package/dist/modules/notes/routes.d.ts.map +1 -1
  283. package/dist/modules/opportunities/index.d.ts.map +1 -1
  284. package/dist/modules/opportunities/index.js +3 -1
  285. package/dist/modules/opportunities/index.js.map +1 -1
  286. package/dist/modules/opportunities/repository.d.ts +2 -0
  287. package/dist/modules/opportunities/repository.d.ts.map +1 -1
  288. package/dist/modules/opportunities/repository.js +4 -0
  289. package/dist/modules/opportunities/repository.js.map +1 -1
  290. package/dist/modules/opportunities/routes.d.ts +16 -0
  291. package/dist/modules/opportunities/routes.d.ts.map +1 -1
  292. package/dist/modules/opportunities/routes.js +13 -0
  293. package/dist/modules/opportunities/routes.js.map +1 -1
  294. package/dist/modules/opportunities/schema.d.ts +20 -0
  295. package/dist/modules/opportunities/schema.d.ts.map +1 -1
  296. package/dist/modules/opportunities/schema.js +6 -1
  297. package/dist/modules/opportunities/schema.js.map +1 -1
  298. package/dist/modules/opportunities/service.d.ts +20 -3
  299. package/dist/modules/opportunities/service.d.ts.map +1 -1
  300. package/dist/modules/opportunities/service.js +99 -18
  301. package/dist/modules/opportunities/service.js.map +1 -1
  302. package/dist/modules/opportunities/tools.d.ts.map +1 -1
  303. package/dist/modules/opportunities/tools.js +2 -0
  304. package/dist/modules/opportunities/tools.js.map +1 -1
  305. package/dist/modules/partnerships/index.d.ts.map +1 -1
  306. package/dist/modules/partnerships/index.js +3 -1
  307. package/dist/modules/partnerships/index.js.map +1 -1
  308. package/dist/modules/partnerships/repository.d.ts +0 -17
  309. package/dist/modules/partnerships/repository.d.ts.map +1 -1
  310. package/dist/modules/partnerships/repository.js +6 -82
  311. package/dist/modules/partnerships/repository.js.map +1 -1
  312. package/dist/modules/partnerships/routes.d.ts +14 -0
  313. package/dist/modules/partnerships/routes.d.ts.map +1 -1
  314. package/dist/modules/partnerships/routes.js +7 -0
  315. package/dist/modules/partnerships/routes.js.map +1 -1
  316. package/dist/modules/partnerships/schema.d.ts +20 -41
  317. package/dist/modules/partnerships/schema.d.ts.map +1 -1
  318. package/dist/modules/partnerships/schema.js +6 -10
  319. package/dist/modules/partnerships/schema.js.map +1 -1
  320. package/dist/modules/partnerships/service.d.ts +11 -1
  321. package/dist/modules/partnerships/service.d.ts.map +1 -1
  322. package/dist/modules/partnerships/service.js +43 -20
  323. package/dist/modules/partnerships/service.js.map +1 -1
  324. package/dist/modules/people/consentHydration.d.ts +26 -0
  325. package/dist/modules/people/consentHydration.d.ts.map +1 -0
  326. package/dist/modules/people/consentHydration.js +100 -0
  327. package/dist/modules/people/consentHydration.js.map +1 -0
  328. package/dist/modules/people/index.d.ts.map +1 -1
  329. package/dist/modules/people/index.js +3 -1
  330. package/dist/modules/people/index.js.map +1 -1
  331. package/dist/modules/people/personConsentWrites.d.ts +40 -0
  332. package/dist/modules/people/personConsentWrites.d.ts.map +1 -0
  333. package/dist/modules/people/personConsentWrites.js +98 -0
  334. package/dist/modules/people/personConsentWrites.js.map +1 -0
  335. package/dist/modules/people/repository.d.ts.map +1 -1
  336. package/dist/modules/people/repository.js +5 -1
  337. package/dist/modules/people/repository.js.map +1 -1
  338. package/dist/modules/people/routes.d.ts +57 -4
  339. package/dist/modules/people/routes.d.ts.map +1 -1
  340. package/dist/modules/people/routes.js +104 -5
  341. package/dist/modules/people/routes.js.map +1 -1
  342. package/dist/modules/people/schema.d.ts +366 -1
  343. package/dist/modules/people/schema.d.ts.map +1 -1
  344. package/dist/modules/people/schema.js +92 -2
  345. package/dist/modules/people/schema.js.map +1 -1
  346. package/dist/modules/people/service.d.ts +30 -1
  347. package/dist/modules/people/service.d.ts.map +1 -1
  348. package/dist/modules/people/service.js +115 -38
  349. package/dist/modules/people/service.js.map +1 -1
  350. package/dist/modules/people/tools.d.ts.map +1 -1
  351. package/dist/modules/people/tools.js +4 -1
  352. package/dist/modules/people/tools.js.map +1 -1
  353. package/dist/modules/personLinks.d.ts +79 -0
  354. package/dist/modules/personLinks.d.ts.map +1 -0
  355. package/dist/modules/personLinks.js +155 -0
  356. package/dist/modules/personLinks.js.map +1 -0
  357. package/dist/modules/pipelines/routes.d.ts +1 -0
  358. package/dist/modules/pipelines/routes.d.ts.map +1 -1
  359. package/dist/modules/plans/routes.d.ts +1 -0
  360. package/dist/modules/plans/routes.d.ts.map +1 -1
  361. package/dist/modules/raises/index.d.ts.map +1 -1
  362. package/dist/modules/raises/index.js +3 -1
  363. package/dist/modules/raises/index.js.map +1 -1
  364. package/dist/modules/raises/repository.d.ts +0 -17
  365. package/dist/modules/raises/repository.d.ts.map +1 -1
  366. package/dist/modules/raises/repository.js +6 -77
  367. package/dist/modules/raises/repository.js.map +1 -1
  368. package/dist/modules/raises/routes.d.ts +14 -0
  369. package/dist/modules/raises/routes.d.ts.map +1 -1
  370. package/dist/modules/raises/routes.js +7 -0
  371. package/dist/modules/raises/routes.js.map +1 -1
  372. package/dist/modules/raises/schema.d.ts +20 -41
  373. package/dist/modules/raises/schema.d.ts.map +1 -1
  374. package/dist/modules/raises/schema.js +6 -10
  375. package/dist/modules/raises/schema.js.map +1 -1
  376. package/dist/modules/raises/service.d.ts +11 -1
  377. package/dist/modules/raises/service.d.ts.map +1 -1
  378. package/dist/modules/raises/service.js +41 -18
  379. package/dist/modules/raises/service.js.map +1 -1
  380. package/dist/modules/recordTargets.d.ts.map +1 -1
  381. package/dist/modules/recordTargets.js +2 -0
  382. package/dist/modules/recordTargets.js.map +1 -1
  383. package/dist/modules/references.d.ts +10 -0
  384. package/dist/modules/references.d.ts.map +1 -1
  385. package/dist/modules/references.js +27 -4
  386. package/dist/modules/references.js.map +1 -1
  387. package/dist/modules/sample-data/fixture.d.ts +21 -0
  388. package/dist/modules/sample-data/fixture.d.ts.map +1 -1
  389. package/dist/modules/sample-data/fixture.js +40 -0
  390. package/dist/modules/sample-data/fixture.js.map +1 -1
  391. package/dist/modules/sample-data/index.d.ts.map +1 -1
  392. package/dist/modules/sample-data/index.js +1 -0
  393. package/dist/modules/sample-data/index.js.map +1 -1
  394. package/dist/modules/sample-data/routes.d.ts.map +1 -1
  395. package/dist/modules/sample-data/routes.js +1 -0
  396. package/dist/modules/sample-data/routes.js.map +1 -1
  397. package/dist/modules/sample-data/service.d.ts +1 -0
  398. package/dist/modules/sample-data/service.d.ts.map +1 -1
  399. package/dist/modules/sample-data/service.js +77 -8
  400. package/dist/modules/sample-data/service.js.map +1 -1
  401. package/dist/modules/search/index.d.ts +1 -1
  402. package/dist/modules/search/index.d.ts.map +1 -1
  403. package/dist/modules/search/index.js +2 -1
  404. package/dist/modules/search/index.js.map +1 -1
  405. package/dist/modules/search/repository.d.ts +1 -0
  406. package/dist/modules/search/repository.d.ts.map +1 -1
  407. package/dist/modules/search/repository.js +23 -0
  408. package/dist/modules/search/repository.js.map +1 -1
  409. package/dist/modules/search/service.d.ts +3 -3
  410. package/dist/modules/search/service.d.ts.map +1 -1
  411. package/dist/modules/search/service.js +5 -4
  412. package/dist/modules/search/service.js.map +1 -1
  413. package/dist/modules/stagedRecords.d.ts +3 -3
  414. package/dist/modules/stagedRecords.d.ts.map +1 -1
  415. package/dist/modules/stagedRecords.js +9 -0
  416. package/dist/modules/stagedRecords.js.map +1 -1
  417. package/dist/modules/webhooks/payloads.d.ts.map +1 -1
  418. package/dist/modules/webhooks/payloads.js +15 -2
  419. package/dist/modules/webhooks/payloads.js.map +1 -1
  420. package/dist/modules/workspace/repository.d.ts +2 -0
  421. package/dist/modules/workspace/repository.d.ts.map +1 -1
  422. package/dist/modules/workspace/repository.js +7 -0
  423. package/dist/modules/workspace/repository.js.map +1 -1
  424. package/dist/modules/workspace/service.d.ts.map +1 -1
  425. package/dist/modules/workspace/service.js +10 -0
  426. package/dist/modules/workspace/service.js.map +1 -1
  427. package/dist/modules/workspace/starters.d.ts.map +1 -1
  428. package/dist/modules/workspace/starters.js +5 -0
  429. package/dist/modules/workspace/starters.js.map +1 -1
  430. package/dist/runtime/events.d.ts +1 -1
  431. package/dist/runtime/events.d.ts.map +1 -1
  432. package/dist/runtime/events.js +1 -0
  433. package/dist/runtime/events.js.map +1 -1
  434. package/dist/schema/index.d.ts +3 -0
  435. package/dist/schema/index.d.ts.map +1 -1
  436. package/dist/schema/index.js +3 -0
  437. package/dist/schema/index.js.map +1 -1
  438. package/dist/testing/database.d.ts +5 -1
  439. package/dist/testing/database.d.ts.map +1 -1
  440. package/dist/testing/database.js +81 -10
  441. package/dist/testing/database.js.map +1 -1
  442. package/migrations/0024_third_king_cobra.sql +46 -0
  443. package/migrations/0025_worthless_chimera.sql +3 -0
  444. package/migrations/0026_late_aqueduct.sql +46 -0
  445. package/migrations/0027_brainy_silver_sable.sql +3 -0
  446. package/migrations/0028_freezing_scrambler.sql +19 -0
  447. package/migrations/0029_custom_fields.sql +26 -0
  448. package/migrations/0030_enquiries.sql +79 -0
  449. package/migrations/0031_consent.sql +45 -0
  450. package/migrations/0032_form_field_statement.sql +1 -0
  451. package/migrations/0033_form_field_consent_purpose_ids.sql +5 -0
  452. package/migrations/0034_drop_form_field_consent_purpose_id.sql +1 -0
  453. package/migrations/0035_form_field_consent_purpose_labels.sql +1 -0
  454. package/migrations/0036_form_field_notice_type.sql +2 -0
  455. package/migrations/meta/0024_snapshot.json +5516 -0
  456. package/migrations/meta/0025_snapshot.json +5336 -0
  457. package/migrations/meta/0026_snapshot.json +5710 -0
  458. package/migrations/meta/0027_snapshot.json +5716 -0
  459. package/migrations/meta/0028_snapshot.json +5740 -0
  460. package/migrations/meta/0029_snapshot.json +5935 -0
  461. package/migrations/meta/0030_snapshot.json +6245 -0
  462. package/migrations/meta/0031_snapshot.json +6572 -0
  463. package/migrations/meta/0032_snapshot.json +6578 -0
  464. package/migrations/meta/0033_snapshot.json +6572 -0
  465. package/migrations/meta/0034_snapshot.json +6566 -0
  466. package/migrations/meta/0035_snapshot.json +6573 -0
  467. package/migrations/meta/0036_snapshot.json +6573 -0
  468. package/migrations/meta/_journal.json +91 -0
  469. package/package.json +2 -2
  470. package/src/lib/ids.ts +11 -0
  471. package/src/modules/activities/repository.ts +22 -23
  472. package/src/modules/activities/wording.ts +18 -0
  473. package/src/modules/agent-tasks/catalog.ts +63 -0
  474. package/src/modules/agent-tasks/resolve.ts +64 -24
  475. package/src/modules/attachedRecords.ts +29 -2
  476. package/src/modules/companies/index.ts +3 -1
  477. package/src/modules/companies/routes.ts +7 -0
  478. package/src/modules/companies/schema.ts +7 -1
  479. package/src/modules/companies/service.ts +48 -13
  480. package/src/modules/consent-purposes/capabilities.ts +12 -0
  481. package/src/modules/consent-purposes/events.ts +38 -0
  482. package/src/modules/consent-purposes/index.ts +48 -0
  483. package/src/modules/consent-purposes/repository.ts +163 -0
  484. package/src/modules/consent-purposes/routes.ts +122 -0
  485. package/src/modules/consent-purposes/schema.ts +46 -0
  486. package/src/modules/consent-purposes/service.ts +423 -0
  487. package/src/modules/consent-purposes/starters.ts +32 -0
  488. package/src/modules/consent-purposes/tools.ts +44 -0
  489. package/src/modules/core.ts +10 -0
  490. package/src/modules/custom-fields/capabilities.ts +17 -0
  491. package/src/modules/custom-fields/events.ts +51 -0
  492. package/src/modules/custom-fields/index.ts +61 -0
  493. package/src/modules/custom-fields/repository.ts +225 -0
  494. package/src/modules/custom-fields/routes.ts +155 -0
  495. package/src/modules/custom-fields/schema.ts +61 -0
  496. package/src/modules/custom-fields/service.ts +439 -0
  497. package/src/modules/custom-fields/tools.ts +53 -0
  498. package/src/modules/custom-fields/values.ts +352 -0
  499. package/src/modules/custom-fields/wire.ts +32 -0
  500. package/src/modules/dashboard/repository.ts +4 -3
  501. package/src/modules/deals/index.ts +5 -2
  502. package/src/modules/deals/repository.ts +6 -106
  503. package/src/modules/deals/routes.ts +7 -0
  504. package/src/modules/deals/schema.ts +7 -15
  505. package/src/modules/deals/service.ts +92 -23
  506. package/src/modules/decisions/repository.ts +2 -0
  507. package/src/modules/enquiries/events.ts +45 -0
  508. package/src/modules/enquiries/index.ts +50 -0
  509. package/src/modules/enquiries/repository.ts +164 -0
  510. package/src/modules/enquiries/routes.ts +172 -0
  511. package/src/modules/enquiries/schema.ts +59 -0
  512. package/src/modules/enquiries/service.ts +644 -0
  513. package/src/modules/enquiries/tools.ts +66 -0
  514. package/src/modules/eventCatalogs.ts +3 -0
  515. package/src/modules/forms/embed.ts +391 -44
  516. package/src/modules/forms/events.ts +30 -2
  517. package/src/modules/forms/fields.ts +102 -2
  518. package/src/modules/forms/index.ts +12 -1
  519. package/src/modules/forms/mapping.ts +183 -6
  520. package/src/modules/forms/publicRoutes.ts +43 -1
  521. package/src/modules/forms/repository.ts +162 -1
  522. package/src/modules/forms/routes.ts +212 -2
  523. package/src/modules/forms/schema.ts +166 -4
  524. package/src/modules/forms/service.ts +565 -41
  525. package/src/modules/forms/submission.ts +718 -44
  526. package/src/modules/import-export/drafts.ts +20 -1
  527. package/src/modules/import-export/exportRows.ts +21 -5
  528. package/src/modules/import-export/plan.ts +47 -2
  529. package/src/modules/import-export/presets.ts +10 -0
  530. package/src/modules/import-export/repository.ts +73 -8
  531. package/src/modules/import-export/routes.ts +4 -0
  532. package/src/modules/import-export/schema.ts +11 -0
  533. package/src/modules/import-export/service.ts +28 -2
  534. package/src/modules/import-export/streams.ts +3 -1
  535. package/src/modules/import-export/tools.ts +10 -0
  536. package/src/modules/import-export/validation.ts +28 -0
  537. package/src/modules/import-export/writes.ts +70 -5
  538. package/src/modules/lists/repository.ts +30 -0
  539. package/src/modules/lists/routes.ts +8 -0
  540. package/src/modules/lists/schema.ts +10 -0
  541. package/src/modules/lists/service.ts +110 -9
  542. package/src/modules/mcp/index.ts +5 -0
  543. package/src/modules/opportunities/index.ts +3 -1
  544. package/src/modules/opportunities/repository.ts +11 -0
  545. package/src/modules/opportunities/routes.ts +13 -0
  546. package/src/modules/opportunities/schema.ts +7 -1
  547. package/src/modules/opportunities/service.ts +188 -22
  548. package/src/modules/opportunities/tools.ts +2 -0
  549. package/src/modules/partnerships/index.ts +3 -1
  550. package/src/modules/partnerships/repository.ts +6 -117
  551. package/src/modules/partnerships/routes.ts +7 -0
  552. package/src/modules/partnerships/schema.ts +7 -14
  553. package/src/modules/partnerships/service.ts +93 -22
  554. package/src/modules/people/consentHydration.ts +167 -0
  555. package/src/modules/people/index.ts +3 -1
  556. package/src/modules/people/personConsentWrites.ts +177 -0
  557. package/src/modules/people/repository.ts +5 -0
  558. package/src/modules/people/routes.ts +127 -18
  559. package/src/modules/people/schema.ts +109 -3
  560. package/src/modules/people/service.ts +186 -40
  561. package/src/modules/people/tools.ts +5 -1
  562. package/src/modules/personLinks.ts +278 -0
  563. package/src/modules/raises/index.ts +3 -1
  564. package/src/modules/raises/repository.ts +6 -107
  565. package/src/modules/raises/routes.ts +7 -0
  566. package/src/modules/raises/schema.ts +7 -14
  567. package/src/modules/raises/service.ts +91 -20
  568. package/src/modules/recordTargets.ts +2 -0
  569. package/src/modules/references.ts +43 -4
  570. package/src/modules/sample-data/fixture.ts +63 -0
  571. package/src/modules/sample-data/index.ts +1 -0
  572. package/src/modules/sample-data/routes.ts +1 -0
  573. package/src/modules/sample-data/service.ts +97 -8
  574. package/src/modules/search/index.ts +2 -1
  575. package/src/modules/search/repository.ts +33 -1
  576. package/src/modules/search/service.ts +7 -5
  577. package/src/modules/stagedRecords.ts +18 -3
  578. package/src/modules/webhooks/payloads.ts +20 -2
  579. package/src/modules/workspace/repository.ts +12 -0
  580. package/src/modules/workspace/service.ts +14 -0
  581. package/src/modules/workspace/starters.ts +5 -0
  582. package/src/runtime/events.ts +1 -0
  583. package/src/schema/index.ts +3 -0
  584. package/src/testing/database.ts +97 -11
@@ -1,11 +1,15 @@
1
1
  import { and, asc, eq, ilike, inArray, or } from 'drizzle-orm'
2
2
  import type { SQL } from 'drizzle-orm'
3
+ import type { AnyPgColumn } from 'drizzle-orm/pg-core'
4
+ import type { FormSubmissionLinkTarget, PipelineKind } from '@kelpie/schemas'
3
5
 
4
6
  import { keysetCondition, orderByWindow, textSort, timestampSort } from '../../lib/pagination.ts'
5
7
  import type { ListWindow, SortableFields } from '../../lib/pagination.ts'
6
8
  import { containsPattern } from '../../lib/search.ts'
7
9
  import type { Queryable } from '../../runtime/transaction.ts'
8
- import { formFields, formSubmissions, forms } from './schema.ts'
10
+ import { lists } from '../lists/schema.ts'
11
+ import type { RecordTargetType } from '../recordTargets.ts'
12
+ import { formAttachTargets, formFields, formLists, formSubmissions, forms } from './schema.ts'
9
13
 
10
14
  export type FormRecord = typeof forms.$inferSelect
11
15
  export type FormFieldRecord = typeof formFields.$inferSelect
@@ -209,6 +213,72 @@ export function listSubmissions(
209
213
  .limit(window.fetchLimit)
210
214
  }
211
215
 
216
+ /**
217
+ * Maps each `FormSubmissionLinkTarget` (declared in `@kelpie/schemas`) to the
218
+ * drizzle column that names the record. Keeping the enum in schemas keeps the
219
+ * wire shape one source of truth; the column mapping lives here because it
220
+ * references types the schemas package cannot see.
221
+ */
222
+ const SUBMISSION_LINK_COLUMNS: Readonly<Record<FormSubmissionLinkTarget, AnyPgColumn>> = {
223
+ person: formSubmissions.personId,
224
+ company: formSubmissions.companyId,
225
+ position: formSubmissions.positionId,
226
+ deal: formSubmissions.dealId,
227
+ opportunity: formSubmissions.opportunityId,
228
+ partnership: formSubmissions.partnershipId,
229
+ enquiry: formSubmissions.enquiryId,
230
+ }
231
+
232
+ /**
233
+ * Lists submissions whose {target}_id points at `targetId`.
234
+ *
235
+ * The record itself is not checked here — the workspace scope and the FK
236
+ * filter are enough for a read. A caller reaching for a target from another
237
+ * workspace or one that no longer exists gets an empty page, which mirrors
238
+ * the answer any other cross-workspace read gives.
239
+ */
240
+ export function listSubmissionsLinkedTo(
241
+ db: Queryable,
242
+ workspaceId: string,
243
+ target: FormSubmissionLinkTarget,
244
+ targetId: string,
245
+ window: ListWindow<FormSubmissionRecord>,
246
+ ): Promise<FormSubmissionRecord[]> {
247
+ return db
248
+ .select()
249
+ .from(formSubmissions)
250
+ .where(
251
+ and(
252
+ eq(formSubmissions.workspaceId, workspaceId),
253
+ eq(SUBMISSION_LINK_COLUMNS[target], targetId),
254
+ keysetCondition(window, formSubmissions.id),
255
+ ),
256
+ )
257
+ .orderBy(...orderByWindow(window, formSubmissions.id))
258
+ .limit(window.fetchLimit)
259
+ }
260
+
261
+ export async function findSubmission(
262
+ db: Queryable,
263
+ workspaceId: string,
264
+ formId: string,
265
+ id: string,
266
+ ): Promise<FormSubmissionRecord | undefined> {
267
+ const [row] = await db
268
+ .select()
269
+ .from(formSubmissions)
270
+ .where(
271
+ and(
272
+ eq(formSubmissions.workspaceId, workspaceId),
273
+ eq(formSubmissions.formId, formId),
274
+ eq(formSubmissions.id, id),
275
+ ),
276
+ )
277
+ .limit(1)
278
+
279
+ return row
280
+ }
281
+
212
282
  export async function insertSubmission(
213
283
  db: Queryable,
214
284
  values: FormSubmissionColumns,
@@ -221,3 +291,94 @@ export async function insertSubmission(
221
291
 
222
292
  return created
223
293
  }
294
+
295
+ /** One form's configured list memberships, joined to the list for target-type. */
296
+ export interface FormListRow {
297
+ readonly listId: string
298
+ readonly targetType: RecordTargetType
299
+ /**
300
+ * When the list has a consent purpose, form-driven adds capture consent
301
+ * against it. Carried through so submission.ts needs no second query.
302
+ */
303
+ readonly consentPurposeId: string | null
304
+ }
305
+
306
+ export async function listFormLists(db: Queryable, formId: string): Promise<FormListRow[]> {
307
+ const rows = await db
308
+ .select({
309
+ listId: formLists.listId,
310
+ targetType: lists.targetType,
311
+ consentPurposeId: lists.consentPurposeId,
312
+ })
313
+ .from(formLists)
314
+ .innerJoin(lists, eq(lists.id, formLists.listId))
315
+ .where(eq(formLists.formId, formId))
316
+ .orderBy(asc(formLists.listId))
317
+
318
+ return rows.map((row) => ({
319
+ listId: row.listId,
320
+ targetType: row.targetType as RecordTargetType,
321
+ consentPurposeId: row.consentPurposeId,
322
+ }))
323
+ }
324
+
325
+ export async function replaceFormLists(
326
+ db: Queryable,
327
+ workspaceId: string,
328
+ formId: string,
329
+ listIds: readonly string[],
330
+ ): Promise<void> {
331
+ await db.delete(formLists).where(eq(formLists.formId, formId))
332
+
333
+ if (listIds.length === 0) {
334
+ return
335
+ }
336
+
337
+ await db.insert(formLists).values(listIds.map((listId) => ({ workspaceId, formId, listId })))
338
+ }
339
+
340
+ /** One form's configured attach targets, ordered so a resent identical set is not a write. */
341
+ export interface FormAttachTargetRow {
342
+ readonly targetType: PipelineKind
343
+ readonly targetId: string
344
+ }
345
+
346
+ export async function listAttachTargets(
347
+ db: Queryable,
348
+ formId: string,
349
+ ): Promise<FormAttachTargetRow[]> {
350
+ const rows = await db
351
+ .select({ targetType: formAttachTargets.targetType, targetId: formAttachTargets.targetId })
352
+ .from(formAttachTargets)
353
+ .where(eq(formAttachTargets.formId, formId))
354
+ .orderBy(asc(formAttachTargets.targetType), asc(formAttachTargets.targetId))
355
+
356
+ return rows.map((row) => ({
357
+ targetType: row.targetType as PipelineKind,
358
+ targetId: row.targetId,
359
+ }))
360
+ }
361
+
362
+ export async function replaceAttachTargets(
363
+ db: Queryable,
364
+ workspaceId: string,
365
+ formId: string,
366
+ targets: readonly FormAttachTargetRow[],
367
+ ): Promise<void> {
368
+ await db.delete(formAttachTargets).where(eq(formAttachTargets.formId, formId))
369
+
370
+ if (targets.length === 0) {
371
+ return
372
+ }
373
+
374
+ await db
375
+ .insert(formAttachTargets)
376
+ .values(
377
+ targets.map((target) => ({
378
+ workspaceId,
379
+ formId,
380
+ targetType: target.targetType,
381
+ targetId: target.targetId,
382
+ })),
383
+ )
384
+ }
@@ -1,5 +1,7 @@
1
1
  import type { Context, Hono } from 'hono'
2
2
  import { z } from 'zod'
3
+ import { FORM_SUBMISSION_LINK_TARGETS, PIPELINE_KINDS } from '@kelpie/schemas'
4
+ import type { FormAttachTarget, FormSubmissionLinkTarget } from '@kelpie/schemas'
3
5
 
4
6
  import { AppError } from '../../lib/errors.ts'
5
7
  import {
@@ -52,10 +54,19 @@ const fieldBody = z.strictObject({
52
54
  map_to: z.enum(FORM_FIELD_MAP_TARGETS),
53
55
  options: z.array(optionBody).default([]),
54
56
  placeholder: z.string().nullable().default(null),
57
+ statement: z.string().nullable().default(null),
58
+ consent_purpose_ids: z.array(z.string().min(1)).default([]),
59
+ consent_purpose_labels: z.record(z.string().min(1), z.string()).default({}),
60
+ })
61
+
62
+ const attachTargetBody = z.strictObject({
63
+ target_type: z.enum(PIPELINE_KINDS),
64
+ target_id: z.string().min(1),
55
65
  })
56
66
 
57
67
  const formShape = {
58
68
  name: z.string().min(1),
69
+ title: z.string().min(1),
59
70
  description: z.string().nullable(),
60
71
  status: z.enum(FORM_STATUSES),
61
72
  fields: z.array(fieldBody),
@@ -63,6 +74,25 @@ const formShape = {
63
74
  create_deal: z.boolean(),
64
75
  deal_stage_id: z.string().min(1).nullable(),
65
76
  deal_name_template: z.string().nullable(),
77
+ create_opportunity: z.boolean(),
78
+ opportunity_kind: z.string().nullable(),
79
+ opportunity_stage_id: z.string().min(1).nullable(),
80
+ opportunity_name_template: z.string().nullable(),
81
+ opportunity_owner_id: z.string().min(1).nullable(),
82
+ create_partnership: z.boolean(),
83
+ partnership_kind: z.string().nullable(),
84
+ partnership_stage_id: z.string().min(1).nullable(),
85
+ partnership_name_template: z.string().nullable(),
86
+ partnership_owner_id: z.string().min(1).nullable(),
87
+ create_enquiry: z.boolean(),
88
+ enquiry_source: z.string().nullable(),
89
+ enquiry_stage_id: z.string().min(1).nullable(),
90
+ enquiry_name_template: z.string().nullable(),
91
+ enquiry_owner_id: z.string().min(1).nullable(),
92
+ person_tags: z.array(z.string().min(1)),
93
+ company_tags: z.array(z.string().min(1)),
94
+ list_ids: z.array(z.string().min(1)),
95
+ attach_targets: z.array(attachTargetBody),
66
96
  }
67
97
 
68
98
  /**
@@ -76,12 +106,34 @@ const formShape = {
76
106
  */
77
107
  export const createBody = z.strictObject({
78
108
  ...formShape,
109
+ // Absent → copy of `name` in `toCreateInput`, so a create that only names the
110
+ // form still gets a public heading without a second field on every caller.
111
+ title: formShape.title.optional(),
79
112
  description: formShape.description.default(null),
80
113
  status: formShape.status.default('active'),
81
114
  thank_you_message: formShape.thank_you_message.default('Thanks. We will be in touch.'),
82
115
  create_deal: formShape.create_deal.default(false),
83
116
  deal_stage_id: formShape.deal_stage_id.default(null),
84
117
  deal_name_template: formShape.deal_name_template.default(null),
118
+ create_opportunity: formShape.create_opportunity.default(false),
119
+ opportunity_kind: formShape.opportunity_kind.default(null),
120
+ opportunity_stage_id: formShape.opportunity_stage_id.default(null),
121
+ opportunity_name_template: formShape.opportunity_name_template.default(null),
122
+ opportunity_owner_id: formShape.opportunity_owner_id.default(null),
123
+ create_partnership: formShape.create_partnership.default(false),
124
+ partnership_kind: formShape.partnership_kind.default(null),
125
+ partnership_stage_id: formShape.partnership_stage_id.default(null),
126
+ partnership_name_template: formShape.partnership_name_template.default(null),
127
+ partnership_owner_id: formShape.partnership_owner_id.default(null),
128
+ create_enquiry: formShape.create_enquiry.default(false),
129
+ enquiry_source: formShape.enquiry_source.default(null),
130
+ enquiry_stage_id: formShape.enquiry_stage_id.default(null),
131
+ enquiry_name_template: formShape.enquiry_name_template.default(null),
132
+ enquiry_owner_id: formShape.enquiry_owner_id.default(null),
133
+ person_tags: formShape.person_tags.default([]),
134
+ company_tags: formShape.company_tags.default([]),
135
+ list_ids: formShape.list_ids.default([]),
136
+ attach_targets: formShape.attach_targets.default([]),
85
137
  })
86
138
 
87
139
  export const updateBody = z.strictObject(formShape).partial()
@@ -123,12 +175,20 @@ function toFieldDraft(field: z.infer<typeof fieldBody>): FieldDraft {
123
175
  valueType: option.value_type,
124
176
  })),
125
177
  placeholder: field.placeholder,
178
+ statement: field.statement,
179
+ consentPurposeIds: field.consent_purpose_ids,
180
+ consentPurposeLabels: field.consent_purpose_labels,
126
181
  }
127
182
  }
128
183
 
184
+ function toAttachTarget(body: z.infer<typeof attachTargetBody>): FormAttachTarget {
185
+ return { targetType: body.target_type, targetId: body.target_id }
186
+ }
187
+
129
188
  export function toCreateInput(body: z.infer<typeof createBody>): CreateFormInput {
130
189
  return {
131
190
  name: body.name,
191
+ title: body.title ?? body.name,
132
192
  description: body.description,
133
193
  status: body.status,
134
194
  fields: body.fields.map(toFieldDraft),
@@ -136,12 +196,32 @@ export function toCreateInput(body: z.infer<typeof createBody>): CreateFormInput
136
196
  createDeal: body.create_deal,
137
197
  dealStageId: body.deal_stage_id,
138
198
  dealNameTemplate: body.deal_name_template,
199
+ createOpportunity: body.create_opportunity,
200
+ opportunityKind: body.opportunity_kind,
201
+ opportunityStageId: body.opportunity_stage_id,
202
+ opportunityNameTemplate: body.opportunity_name_template,
203
+ opportunityOwnerId: body.opportunity_owner_id,
204
+ createPartnership: body.create_partnership,
205
+ partnershipKind: body.partnership_kind,
206
+ partnershipStageId: body.partnership_stage_id,
207
+ partnershipNameTemplate: body.partnership_name_template,
208
+ partnershipOwnerId: body.partnership_owner_id,
209
+ createEnquiry: body.create_enquiry,
210
+ enquirySource: body.enquiry_source,
211
+ enquiryStageId: body.enquiry_stage_id,
212
+ enquiryNameTemplate: body.enquiry_name_template,
213
+ enquiryOwnerId: body.enquiry_owner_id,
214
+ personTags: body.person_tags,
215
+ companyTags: body.company_tags,
216
+ listIds: body.list_ids,
217
+ attachTargets: body.attach_targets.map(toAttachTarget),
139
218
  }
140
219
  }
141
220
 
142
221
  export function toUpdateInput(body: z.infer<typeof updateBody>): UpdateFormInput {
143
222
  return {
144
223
  ...(body.name === undefined ? {} : { name: body.name }),
224
+ ...(body.title === undefined ? {} : { title: body.title }),
145
225
  ...(body.description === undefined ? {} : { description: body.description }),
146
226
  ...(body.status === undefined ? {} : { status: body.status }),
147
227
  ...(body.fields === undefined ? {} : { fields: body.fields.map(toFieldDraft) }),
@@ -151,6 +231,45 @@ export function toUpdateInput(body: z.infer<typeof updateBody>): UpdateFormInput
151
231
  ...(body.deal_name_template === undefined
152
232
  ? {}
153
233
  : { dealNameTemplate: body.deal_name_template }),
234
+ ...(body.create_opportunity === undefined
235
+ ? {}
236
+ : { createOpportunity: body.create_opportunity }),
237
+ ...(body.opportunity_kind === undefined ? {} : { opportunityKind: body.opportunity_kind }),
238
+ ...(body.opportunity_stage_id === undefined
239
+ ? {}
240
+ : { opportunityStageId: body.opportunity_stage_id }),
241
+ ...(body.opportunity_name_template === undefined
242
+ ? {}
243
+ : { opportunityNameTemplate: body.opportunity_name_template }),
244
+ ...(body.opportunity_owner_id === undefined
245
+ ? {}
246
+ : { opportunityOwnerId: body.opportunity_owner_id }),
247
+ ...(body.create_partnership === undefined
248
+ ? {}
249
+ : { createPartnership: body.create_partnership }),
250
+ ...(body.partnership_kind === undefined ? {} : { partnershipKind: body.partnership_kind }),
251
+ ...(body.partnership_stage_id === undefined
252
+ ? {}
253
+ : { partnershipStageId: body.partnership_stage_id }),
254
+ ...(body.partnership_name_template === undefined
255
+ ? {}
256
+ : { partnershipNameTemplate: body.partnership_name_template }),
257
+ ...(body.partnership_owner_id === undefined
258
+ ? {}
259
+ : { partnershipOwnerId: body.partnership_owner_id }),
260
+ ...(body.create_enquiry === undefined ? {} : { createEnquiry: body.create_enquiry }),
261
+ ...(body.enquiry_source === undefined ? {} : { enquirySource: body.enquiry_source }),
262
+ ...(body.enquiry_stage_id === undefined ? {} : { enquiryStageId: body.enquiry_stage_id }),
263
+ ...(body.enquiry_name_template === undefined
264
+ ? {}
265
+ : { enquiryNameTemplate: body.enquiry_name_template }),
266
+ ...(body.enquiry_owner_id === undefined ? {} : { enquiryOwnerId: body.enquiry_owner_id }),
267
+ ...(body.person_tags === undefined ? {} : { personTags: body.person_tags }),
268
+ ...(body.company_tags === undefined ? {} : { companyTags: body.company_tags }),
269
+ ...(body.list_ids === undefined ? {} : { listIds: body.list_ids }),
270
+ ...(body.attach_targets === undefined
271
+ ? {}
272
+ : { attachTargets: body.attach_targets.map(toAttachTarget) }),
154
273
  }
155
274
  }
156
275
 
@@ -158,6 +277,7 @@ export function formResponse(form: FormView): Record<string, unknown> {
158
277
  return {
159
278
  id: form.id,
160
279
  name: form.name,
280
+ title: form.title,
161
281
  description: form.description,
162
282
  status: form.status,
163
283
  fields: form.fields.map((field) => ({
@@ -172,12 +292,37 @@ export function formResponse(form: FormView): Record<string, unknown> {
172
292
  value_type: option.valueType,
173
293
  })),
174
294
  placeholder: field.placeholder,
295
+ statement: field.statement,
296
+ consent_purpose_ids: field.consentPurposeIds,
297
+ consent_purpose_labels: field.consentPurposeLabels,
175
298
  sort_order: field.sortOrder,
176
299
  })),
177
300
  thank_you_message: form.thankYouMessage,
178
301
  create_deal: form.createDeal,
179
302
  deal_stage_id: form.dealStageId,
180
303
  deal_name_template: form.dealNameTemplate,
304
+ create_opportunity: form.createOpportunity,
305
+ opportunity_kind: form.opportunityKind,
306
+ opportunity_stage_id: form.opportunityStageId,
307
+ opportunity_name_template: form.opportunityNameTemplate,
308
+ opportunity_owner_id: form.opportunityOwnerId,
309
+ create_partnership: form.createPartnership,
310
+ partnership_kind: form.partnershipKind,
311
+ partnership_stage_id: form.partnershipStageId,
312
+ partnership_name_template: form.partnershipNameTemplate,
313
+ partnership_owner_id: form.partnershipOwnerId,
314
+ create_enquiry: form.createEnquiry,
315
+ enquiry_source: form.enquirySource,
316
+ enquiry_stage_id: form.enquiryStageId,
317
+ enquiry_name_template: form.enquiryNameTemplate,
318
+ enquiry_owner_id: form.enquiryOwnerId,
319
+ person_tags: form.personTags,
320
+ company_tags: form.companyTags,
321
+ list_ids: form.listIds,
322
+ attach_targets: form.attachTargets.map((target) => ({
323
+ target_type: target.targetType,
324
+ target_id: target.targetId,
325
+ })),
181
326
  public_key: form.publicKey,
182
327
  created_at: form.createdAt.toISOString(),
183
328
  updated_at: form.updatedAt.toISOString(),
@@ -194,15 +339,28 @@ export function formSubmissionResponse(submission: FormSubmissionView): Record<s
194
339
  company_id: submission.companyId,
195
340
  position_id: submission.positionId,
196
341
  deal_id: submission.dealId,
342
+ opportunity_id: submission.opportunityId,
343
+ partnership_id: submission.partnershipId,
344
+ enquiry_id: submission.enquiryId,
345
+ action_log: submission.actionLog.map((entry) => ({
346
+ action: entry.action,
347
+ status: entry.status,
348
+ detail: entry.detail,
349
+ })),
197
350
  created_at: submission.createdAt.toISOString(),
198
351
  }
199
352
  }
200
353
 
201
- /** The absolute URL of a form's hosted embed page, on the origin this request arrived at. */
354
+ /** The absolute URL of a form's bare iframe document (fields only). */
202
355
  export function embedUrlFor(context: Context, publicKey: string): string {
203
356
  return `${requestOrigin(context)}${PUBLIC_ROUTE_PREFIX}/forms/${publicKey}/embed`
204
357
  }
205
358
 
359
+ /** The absolute URL of a form's standalone hosted page (brand chrome). */
360
+ export function hostedUrlFor(context: Context, publicKey: string): string {
361
+ return `${embedUrlFor(context, publicKey)}?view=page`
362
+ }
363
+
206
364
  export function mountFormsRoutes(router: Hono, dependencies: FormsRoutesDependencies): void {
207
365
  const requireActor = (context: Context): Promise<Actor> => resolveActorFrom(dependencies, context)
208
366
 
@@ -256,6 +414,53 @@ export function mountFormsRoutes(router: Hono, dependencies: FormsRoutesDependen
256
414
  return context.json(pageBody(page, formSubmissionResponse))
257
415
  })
258
416
 
417
+ /**
418
+ * Submissions filtered by the record they touched.
419
+ *
420
+ * `target_type` names one of the seven FK columns a submission carries
421
+ * (person, company, position, deal, opportunity, partnership, enquiry) and
422
+ * `target_id` is the record's id. Both are required — an unfiltered global
423
+ * list of submissions is deliberately not a route here, since a workspace's
424
+ * submissions live under their form, not as a top-level browse.
425
+ */
426
+ router.get('/form-submissions', async (context) => {
427
+ const rawTargetType = context.req.query('target_type')
428
+ const targetId = context.req.query('target_id')
429
+
430
+ if (rawTargetType === undefined || targetId === undefined) {
431
+ throw AppError.validationFailed('target_type and target_id are required', [
432
+ { field: 'target_type', message: 'Missing filter' },
433
+ { field: 'target_id', message: 'Missing filter' },
434
+ ])
435
+ }
436
+
437
+ if (!(FORM_SUBMISSION_LINK_TARGETS as readonly string[]).includes(rawTargetType)) {
438
+ throw AppError.validationFailed(
439
+ `target_type must be one of ${FORM_SUBMISSION_LINK_TARGETS.join(', ')}`,
440
+ [{ field: 'target_type', message: `Got ${rawTargetType}` }],
441
+ )
442
+ }
443
+
444
+ const page = await dependencies.service.listSubmissionsLinkedTo(
445
+ await requireActor(context),
446
+ rawTargetType as FormSubmissionLinkTarget,
447
+ targetId,
448
+ readListParameters(context),
449
+ )
450
+
451
+ return context.json(pageBody(page, formSubmissionResponse))
452
+ })
453
+
454
+ router.get('/forms/:id/submissions/:submissionId', async (context) => {
455
+ const submission = await dependencies.service.getSubmission(
456
+ await requireActor(context),
457
+ context.req.param('id'),
458
+ context.req.param('submissionId'),
459
+ )
460
+
461
+ return context.json(formSubmissionResponse(submission))
462
+ })
463
+
259
464
  /**
260
465
  * What to paste into a website.
261
466
  *
@@ -265,10 +470,15 @@ export function mountFormsRoutes(router: Hono, dependencies: FormsRoutesDependen
265
470
  */
266
471
  router.get('/forms/:id/embed', async (context) => {
267
472
  const form = await dependencies.service.get(await requireActor(context), context.req.param('id'))
268
- const snippets = embedSnippets(embedUrlFor(context, form.publicKey), form.id)
473
+ const snippets = embedSnippets(
474
+ hostedUrlFor(context, form.publicKey),
475
+ embedUrlFor(context, form.publicKey),
476
+ form.id,
477
+ )
269
478
 
270
479
  return context.json({
271
480
  url: snippets.url,
481
+ embed_url: snippets.embedUrl,
272
482
  iframe_snippet: snippets.iframe,
273
483
  script_snippet: snippets.script,
274
484
  })