@elevasis/core 0.23.0 → 0.24.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 (241) hide show
  1. package/dist/index.d.ts +1326 -552
  2. package/dist/index.js +869 -154
  3. package/dist/knowledge/index.d.ts +487 -209
  4. package/dist/knowledge/index.js +104 -1
  5. package/dist/organization-model/index.d.ts +1326 -552
  6. package/dist/organization-model/index.js +869 -154
  7. package/dist/test-utils/index.d.ts +357 -72
  8. package/dist/test-utils/index.js +795 -142
  9. package/package.json +5 -5
  10. package/src/README.md +14 -14
  11. package/src/__tests__/publish.test.ts +24 -24
  12. package/src/__tests__/template-core-compatibility.test.ts +9 -12
  13. package/src/_gen/__tests__/__snapshots__/contracts.md.snap +2102 -2096
  14. package/src/_gen/__tests__/scaffold-contracts.test.ts +30 -30
  15. package/src/auth/multi-tenancy/credentials/__tests__/encryption.test.ts +217 -217
  16. package/src/auth/multi-tenancy/credentials/server/encryption.ts +69 -69
  17. package/src/auth/multi-tenancy/credentials/server/kek-loader.ts +37 -37
  18. package/src/auth/multi-tenancy/index.ts +26 -26
  19. package/src/auth/multi-tenancy/invitations/api-schemas.ts +104 -104
  20. package/src/auth/multi-tenancy/memberships/api-schemas.ts +143 -143
  21. package/src/auth/multi-tenancy/memberships/index.ts +26 -26
  22. package/src/auth/multi-tenancy/memberships/membership.ts +130 -130
  23. package/src/auth/multi-tenancy/organizations/__tests__/api-schemas.test.ts +194 -194
  24. package/src/auth/multi-tenancy/organizations/api-schemas.ts +136 -136
  25. package/src/auth/multi-tenancy/permissions.test.ts +42 -42
  26. package/src/auth/multi-tenancy/permissions.ts +123 -123
  27. package/src/auth/multi-tenancy/role-management/api-schemas.ts +78 -78
  28. package/src/auth/multi-tenancy/role-management/index.ts +16 -16
  29. package/src/auth/multi-tenancy/theme-presets.ts +45 -45
  30. package/src/auth/multi-tenancy/types.ts +57 -57
  31. package/src/auth/multi-tenancy/users/api-schemas.ts +165 -165
  32. package/src/business/README.md +2 -2
  33. package/src/business/acquisition/activity-events.test.ts +250 -250
  34. package/src/business/acquisition/activity-events.ts +93 -93
  35. package/src/business/acquisition/api-schemas.test.ts +1883 -1843
  36. package/src/business/acquisition/api-schemas.ts +1492 -1497
  37. package/src/business/acquisition/build-templates.test.ts +240 -240
  38. package/src/business/acquisition/build-templates.ts +98 -98
  39. package/src/business/acquisition/crm-next-action.test.ts +262 -262
  40. package/src/business/acquisition/crm-next-action.ts +220 -220
  41. package/src/business/acquisition/crm-priority.test.ts +216 -216
  42. package/src/business/acquisition/crm-priority.ts +349 -349
  43. package/src/business/acquisition/crm-state-actions.test.ts +153 -153
  44. package/src/business/acquisition/deal-ownership.test.ts +351 -351
  45. package/src/business/acquisition/deal-ownership.ts +120 -120
  46. package/src/business/acquisition/derive-actions.test.ts +129 -104
  47. package/src/business/acquisition/derive-actions.ts +74 -84
  48. package/src/business/acquisition/index.ts +171 -170
  49. package/src/business/acquisition/ontology-validation.ts +309 -0
  50. package/src/business/acquisition/stateful.ts +30 -30
  51. package/src/business/acquisition/types.ts +396 -396
  52. package/src/business/clients/api-schemas.test.ts +115 -115
  53. package/src/business/clients/api-schemas.ts +158 -158
  54. package/src/business/clients/index.ts +1 -1
  55. package/src/business/crm/api-schemas.ts +40 -40
  56. package/src/business/crm/index.ts +1 -1
  57. package/src/business/deals/api-schemas.ts +87 -87
  58. package/src/business/deals/index.ts +1 -1
  59. package/src/business/index.ts +5 -5
  60. package/src/business/projects/types.ts +144 -144
  61. package/src/commands/queue/types/task.ts +15 -15
  62. package/src/execution/core/runner-types.ts +61 -61
  63. package/src/execution/core/sse-executions.ts +7 -7
  64. package/src/execution/engine/__tests__/fixtures/test-agents.ts +10 -10
  65. package/src/execution/engine/agent/core/__tests__/agent.test.ts +16 -16
  66. package/src/execution/engine/agent/core/__tests__/error-passthrough.test.ts +4 -4
  67. package/src/execution/engine/agent/core/types.ts +25 -25
  68. package/src/execution/engine/agent/index.ts +6 -6
  69. package/src/execution/engine/agent/reasoning/__tests__/request-builder.test.ts +24 -24
  70. package/src/execution/engine/index.ts +443 -443
  71. package/src/execution/engine/tools/integration/server/adapters/apify/__tests__/apify-run-actor.integration.test.ts +298 -298
  72. package/src/execution/engine/tools/integration/server/adapters/apify/apify-adapter.test.ts +55 -55
  73. package/src/execution/engine/tools/integration/server/adapters/apify/apify-adapter.ts +107 -107
  74. package/src/execution/engine/tools/integration/server/adapters/apollo/apollo-adapter.test.ts +48 -48
  75. package/src/execution/engine/tools/integration/server/adapters/apollo/apollo-adapter.ts +99 -99
  76. package/src/execution/engine/tools/integration/server/adapters/apollo/index.ts +1 -1
  77. package/src/execution/engine/tools/integration/server/adapters/attio/__tests__/attio-crud.integration.test.ts +363 -363
  78. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/get-record/index.test.ts +162 -162
  79. package/src/execution/engine/tools/integration/server/adapters/attio/fetch/list-records/index.test.ts +316 -316
  80. package/src/execution/engine/tools/integration/server/adapters/clickup/clickup-adapter.test.ts +18 -18
  81. package/src/execution/engine/tools/integration/server/adapters/clickup/clickup-adapter.ts +194 -194
  82. package/src/execution/engine/tools/integration/server/adapters/clickup/index.ts +7 -7
  83. package/src/execution/engine/tools/integration/server/adapters/gmail/gmail-adapter.ts +204 -204
  84. package/src/execution/engine/tools/integration/server/adapters/gmail/gmail-tools.ts +105 -105
  85. package/src/execution/engine/tools/integration/server/adapters/google-calendar/google-calendar-adapter.ts +428 -428
  86. package/src/execution/engine/tools/integration/server/adapters/google-calendar/index.ts +2 -2
  87. package/src/execution/engine/tools/integration/server/adapters/google-sheets/__tests__/google-sheets.integration.test.ts +261 -261
  88. package/src/execution/engine/tools/integration/server/adapters/instantly/instantly-tools.ts +1474 -1474
  89. package/src/execution/engine/tools/integration/server/adapters/millionverifier/millionverifier-tools.ts +103 -103
  90. package/src/execution/engine/tools/integration/server/adapters/resend/fetch/send-email/index.test.ts +88 -88
  91. package/src/execution/engine/tools/integration/server/adapters/resend/fetch/send-email/index.ts +141 -141
  92. package/src/execution/engine/tools/integration/server/adapters/resend/fetch/utils/types.ts +76 -76
  93. package/src/execution/engine/tools/integration/server/adapters/signature-api/signature-api-tools.ts +182 -182
  94. package/src/execution/engine/tools/integration/server/adapters/stripe/stripe-tools.ts +310 -310
  95. package/src/execution/engine/tools/integration/service.test.ts +239 -239
  96. package/src/execution/engine/tools/integration/service.ts +172 -172
  97. package/src/execution/engine/tools/integration/tool.ts +255 -255
  98. package/src/execution/engine/tools/lead-service-types.ts +1005 -1005
  99. package/src/execution/engine/tools/messages.ts +43 -43
  100. package/src/execution/engine/tools/platform/acquisition/company-tools.ts +7 -7
  101. package/src/execution/engine/tools/platform/acquisition/contact-tools.ts +6 -6
  102. package/src/execution/engine/tools/platform/acquisition/list-tools.ts +6 -6
  103. package/src/execution/engine/tools/platform/acquisition/types.ts +280 -280
  104. package/src/execution/engine/tools/platform/email/types.ts +97 -97
  105. package/src/execution/engine/tools/registry.ts +704 -704
  106. package/src/execution/engine/tools/tool-maps.ts +831 -831
  107. package/src/execution/engine/tools/types.ts +234 -234
  108. package/src/execution/engine/workflow/types.ts +202 -202
  109. package/src/execution/external/__tests__/api-schemas.test.ts +127 -127
  110. package/src/execution/external/api-schemas.ts +40 -40
  111. package/src/execution/external/index.ts +1 -1
  112. package/src/index.ts +18 -18
  113. package/src/integrations/credentials/__tests__/api-schemas.test.ts +420 -420
  114. package/src/integrations/credentials/api-schemas.ts +146 -146
  115. package/src/integrations/credentials/schemas.ts +200 -200
  116. package/src/integrations/oauth/__tests__/provider-registry.test.ts +7 -7
  117. package/src/integrations/oauth/provider-registry.ts +74 -74
  118. package/src/integrations/oauth/server/credentials.ts +43 -43
  119. package/src/integrations/webhook-endpoints/__tests__/api-schemas.test.ts +327 -327
  120. package/src/integrations/webhook-endpoints/api-schemas.ts +103 -103
  121. package/src/integrations/webhook-endpoints/types.ts +58 -58
  122. package/src/knowledge/README.md +32 -32
  123. package/src/knowledge/__tests__/queries.test.ts +626 -535
  124. package/src/knowledge/format.ts +99 -99
  125. package/src/knowledge/index.ts +5 -5
  126. package/src/knowledge/published.ts +5 -5
  127. package/src/knowledge/queries.ts +269 -218
  128. package/src/operations/activities/api-schemas.ts +80 -80
  129. package/src/operations/activities/types.ts +64 -64
  130. package/src/organization-model/README.md +149 -149
  131. package/src/organization-model/__tests__/content-kinds-registry.test.ts +210 -210
  132. package/src/organization-model/__tests__/defaults.test.ts +168 -168
  133. package/src/organization-model/__tests__/domains/actions.test.ts +78 -56
  134. package/src/organization-model/__tests__/domains/customers.test.ts +299 -299
  135. package/src/organization-model/__tests__/domains/entities.test.ts +56 -56
  136. package/src/organization-model/__tests__/domains/goals.test.ts +493 -493
  137. package/src/organization-model/__tests__/domains/identity.test.ts +280 -280
  138. package/src/organization-model/__tests__/domains/navigation.test.ts +268 -268
  139. package/src/organization-model/__tests__/domains/offerings.test.ts +414 -414
  140. package/src/organization-model/__tests__/domains/policies.test.ts +323 -323
  141. package/src/organization-model/__tests__/domains/resource-mappings.test.ts +293 -293
  142. package/src/organization-model/__tests__/domains/resources.test.ts +382 -283
  143. package/src/organization-model/__tests__/domains/roles.test.ts +463 -463
  144. package/src/organization-model/__tests__/domains/statuses.test.ts +246 -246
  145. package/src/organization-model/__tests__/domains/systems.test.ts +209 -209
  146. package/src/organization-model/__tests__/flatten-additive-merge.test.ts +362 -361
  147. package/src/organization-model/__tests__/foundation.test.ts +77 -77
  148. package/src/organization-model/__tests__/get-resources-for-system.test.ts +144 -144
  149. package/src/organization-model/__tests__/graph.test.ts +1246 -887
  150. package/src/organization-model/__tests__/icons.test.ts +10 -1
  151. package/src/organization-model/__tests__/knowledge.test.ts +251 -15
  152. package/src/organization-model/__tests__/lookup-helpers.test.ts +438 -438
  153. package/src/organization-model/__tests__/migration-helpers.test.ts +591 -591
  154. package/src/organization-model/__tests__/prospecting-ssot.test.ts +103 -103
  155. package/src/organization-model/__tests__/recursive-system-schema.test.ts +535 -506
  156. package/src/organization-model/__tests__/resolve.test.ts +274 -164
  157. package/src/organization-model/__tests__/schema.test.ts +834 -301
  158. package/src/organization-model/__tests__/surface-projection.test.ts +284 -284
  159. package/src/organization-model/catalogs/lead-gen.ts +144 -144
  160. package/src/organization-model/content-kinds/config.ts +36 -36
  161. package/src/organization-model/content-kinds/index.ts +76 -72
  162. package/src/organization-model/content-kinds/pipeline.ts +68 -68
  163. package/src/organization-model/content-kinds/registry.ts +44 -44
  164. package/src/organization-model/content-kinds/status.ts +71 -71
  165. package/src/organization-model/content-kinds/template.ts +83 -83
  166. package/src/organization-model/content-kinds/types.ts +117 -117
  167. package/src/organization-model/contracts.ts +27 -27
  168. package/src/organization-model/defaults.ts +40 -50
  169. package/src/organization-model/domains/actions.ts +333 -239
  170. package/src/organization-model/domains/customers.ts +78 -78
  171. package/src/organization-model/domains/entities.ts +144 -144
  172. package/src/organization-model/domains/goals.ts +83 -83
  173. package/src/organization-model/domains/knowledge.ts +117 -101
  174. package/src/organization-model/domains/navigation.ts +139 -139
  175. package/src/organization-model/domains/offerings.ts +71 -71
  176. package/src/organization-model/domains/policies.ts +102 -102
  177. package/src/organization-model/domains/projects.ts +14 -14
  178. package/src/organization-model/domains/prospecting.ts +395 -395
  179. package/src/organization-model/domains/resources.ts +167 -132
  180. package/src/organization-model/domains/roles.ts +96 -96
  181. package/src/organization-model/domains/sales.test.ts +218 -218
  182. package/src/organization-model/domains/sales.ts +380 -380
  183. package/src/organization-model/domains/shared.ts +63 -63
  184. package/src/organization-model/domains/statuses.ts +339 -339
  185. package/src/organization-model/domains/systems.ts +217 -172
  186. package/src/organization-model/foundation.ts +75 -75
  187. package/src/organization-model/graph/build.ts +1016 -888
  188. package/src/organization-model/graph/index.ts +4 -4
  189. package/src/organization-model/graph/link.ts +10 -10
  190. package/src/organization-model/graph/schema.ts +76 -70
  191. package/src/organization-model/graph/types.ts +73 -67
  192. package/src/organization-model/helpers.ts +289 -241
  193. package/src/organization-model/icons.ts +78 -66
  194. package/src/organization-model/index.ts +130 -128
  195. package/src/organization-model/migration-helpers.ts +247 -244
  196. package/src/organization-model/ontology.ts +661 -0
  197. package/src/organization-model/organization-graph.mdx +110 -90
  198. package/src/organization-model/organization-model.mdx +226 -219
  199. package/src/organization-model/published.ts +289 -235
  200. package/src/organization-model/resolve.ts +146 -91
  201. package/src/organization-model/schema.ts +790 -671
  202. package/src/organization-model/surface-projection.ts +212 -212
  203. package/src/organization-model/types.ts +177 -167
  204. package/src/platform/api/types.ts +38 -38
  205. package/src/platform/constants/versions.ts +3 -3
  206. package/src/platform/index.ts +23 -23
  207. package/src/platform/registry/__tests__/command-view.test.ts +10 -10
  208. package/src/platform/registry/__tests__/resource-link.test.ts +35 -35
  209. package/src/platform/registry/__tests__/resource-registry.integration.test.ts +20 -20
  210. package/src/platform/registry/__tests__/resource-registry.nested-systems.test.ts +245 -245
  211. package/src/platform/registry/__tests__/resource-registry.test.ts +2053 -2053
  212. package/src/platform/registry/__tests__/validation.test.ts +1347 -1347
  213. package/src/platform/registry/command-view.ts +10 -10
  214. package/src/platform/registry/index.ts +103 -103
  215. package/src/platform/registry/resource-link.ts +32 -32
  216. package/src/platform/registry/resource-registry.ts +890 -890
  217. package/src/platform/registry/serialization.ts +295 -295
  218. package/src/platform/registry/serialized-types.ts +166 -166
  219. package/src/platform/registry/stats-types.ts +68 -68
  220. package/src/platform/registry/types.ts +425 -425
  221. package/src/platform/registry/validation.ts +745 -745
  222. package/src/platform/utils/__tests__/validation.test.ts +1084 -1084
  223. package/src/platform/utils/validation.ts +425 -425
  224. package/src/projects/api-schemas.test.ts +39 -39
  225. package/src/projects/api-schemas.ts +291 -291
  226. package/src/reference/_generated/contracts.md +2101 -2096
  227. package/src/reference/glossary.md +76 -76
  228. package/src/scaffold-registry/__tests__/index.test.ts +206 -206
  229. package/src/scaffold-registry/__tests__/schema.test.ts +166 -166
  230. package/src/scaffold-registry/index.ts +392 -392
  231. package/src/scaffold-registry/schema.ts +243 -243
  232. package/src/server.ts +289 -289
  233. package/src/supabase/database.types.ts +3153 -3153
  234. package/src/test-utils/README.md +37 -37
  235. package/src/test-utils/entities.ts +108 -108
  236. package/src/test-utils/fixtures/memberships.ts +82 -82
  237. package/src/test-utils/index.ts +12 -12
  238. package/src/test-utils/organization-model.ts +65 -65
  239. package/src/test-utils/published.ts +6 -6
  240. package/src/test-utils/rls/RLSTestContext.ts +588 -588
  241. package/src/test-utils/test-utils.test.ts +44 -44
@@ -1,396 +1,396 @@
1
- import type { Database } from '../../supabase/database.types'
2
- import type {
3
- ActionRegistry,
4
- CredentialRequirement,
5
- RecordColumnConfig
6
- } from '../../organization-model/domains/prospecting'
7
- import type { LEAD_GEN_STAGE_CATALOG } from '../../organization-model/domains/sales'
8
- import type { PipelineStage, ProcessingStageStatus } from './api-schemas'
9
-
10
- // =============================================================================
11
- // Supabase-Generated Types (Re-exported from database.types)
12
- // =============================================================================
13
-
14
- /** Raw database row type for acq_lists table */
15
- export type AcqListRow = Database['public']['Tables']['acq_lists']['Row']
16
- /** Insert type for acq_lists table */
17
- export type AcqListInsert = Database['public']['Tables']['acq_lists']['Insert']
18
-
19
- /** Raw database row type for acq_companies table */
20
- export type AcqCompanyRow = Database['public']['Tables']['acq_companies']['Row']
21
- /** Insert type for acq_companies table */
22
- export type AcqCompanyInsert = Database['public']['Tables']['acq_companies']['Insert']
23
-
24
- /** Raw database row type for acq_contacts table */
25
- export type AcqContactRow = Database['public']['Tables']['acq_contacts']['Row']
26
- /** Insert type for acq_contacts table */
27
- export type AcqContactInsert = Database['public']['Tables']['acq_contacts']['Insert']
28
-
29
- /** Raw database row type for acq_deals table */
30
- export type AcqDealRow = Database['public']['Tables']['acq_deals']['Row']
31
- /** Insert type for acq_deals table */
32
- export type AcqDealInsert = Database['public']['Tables']['acq_deals']['Insert']
33
-
34
- /** Raw database row type for acq_deal_tasks table */
35
- export type AcqDealTaskRow = Database['public']['Tables']['acq_deal_tasks']['Row']
36
- /** Insert type for acq_deal_tasks table */
37
- export type AcqDealTaskInsert = Database['public']['Tables']['acq_deal_tasks']['Insert']
38
-
39
- // =============================================================================
40
- // Supporting Types
41
- // =============================================================================
42
-
43
- /**
44
- * Represents a web post from company website scraping.
45
- * Used for recent blog posts, news, or announcements.
46
- */
47
- export interface WebPost {
48
- /** ISO date string of when the post was published */
49
- date: string
50
- /** Title of the web post */
51
- title: string
52
- /** Brief summary of the post content */
53
- summary: string
54
- /** AI-generated insight about the post's relevance */
55
- aiInsight?: string
56
- }
57
-
58
- export type LeadGenStageKey = (typeof LEAD_GEN_STAGE_CATALOG)[keyof typeof LEAD_GEN_STAGE_CATALOG]['key']
59
- export type LeadGenActionKey = ActionRegistry[number]['id']
60
-
61
- export interface ProcessingStateEntry {
62
- status: ProcessingStageStatus
63
- data?: unknown
64
- }
65
-
66
- export type ProcessingState = Partial<Record<LeadGenStageKey, ProcessingStateEntry>>
67
- export type CompanyProcessingState = ProcessingState
68
- export type ContactProcessingState = ProcessingState
69
- /** @deprecated Use `processingState`. Retained only as a compile-time/read-shape bridge for external tenants. */
70
- export type LegacyPipelineStatus = unknown
71
-
72
- /**
73
- * Enrichment data collected for a company from various sources.
74
- */
75
- export interface CompanyEnrichmentData {
76
- googleMaps?: {
77
- placeId?: string
78
- totalScore?: number
79
- reviewsCount?: number
80
- address?: string
81
- phone?: string
82
- categoryName?: string
83
- googleMapsUrl?: string
84
- scrapedAt?: string
85
- }
86
- websiteCrawl?: {
87
- companyDescription?: string
88
- services?: string[]
89
- specialties?: string[]
90
- staff?: Array<{ name: string; title?: string; email?: string }>
91
- automationGaps?: string[]
92
- targetAudience?: string
93
- category?: string
94
- segment?: string
95
- recentWin?: string
96
- emailCount?: number
97
- pageCount?: number
98
- totalChars?: number
99
- crawledAt?: string
100
- extractedAt?: string
101
- }
102
- website?: {
103
- missionVision?: string
104
- uniqueAttributes?: string
105
- coreOfferings?: string
106
- targetAudience?: string
107
- companyValues?: string
108
- businessDescription?: string
109
- recentPosts?: Array<{ date?: string; title?: string; summary?: string; aiInsight?: string }>
110
- }
111
- tomba?: {
112
- waterfallEmail?: {
113
- email: string
114
- name?: string
115
- title?: string
116
- department?: string
117
- } | null
118
- genericEmail?: string | null
119
- totalFound?: number
120
- searchedAt?: string
121
- }
122
- }
123
-
124
- /**
125
- * Enrichment data collected for a contact from various sources.
126
- */
127
- export interface ContactEnrichmentData {
128
- linkedin?: {
129
- summary?: string
130
- pastExperience?: string
131
- education?: string
132
- activity?: Array<{ date?: string; content?: string }>
133
- }
134
- }
135
-
136
- // =============================================================================
137
- // Domain Types (camelCase transformations of database rows)
138
- // =============================================================================
139
-
140
- export type ListStatus = 'draft' | 'enriching' | 'launched' | 'closing' | 'archived'
141
-
142
- export interface ScrapingConfig {
143
- source?: string
144
- query?: string
145
- filters?: Record<string, unknown>
146
- [key: string]: unknown
147
- }
148
-
149
- export interface IcpRubric {
150
- targetDescription?: string
151
- minReviewCount?: number
152
- minRating?: number
153
- excludeFranchises?: boolean
154
- customRules?: string
155
- qualificationRubricKey?: string | null
156
- [key: string]: unknown
157
- }
158
-
159
- export interface PipelineConfig {
160
- stages: PipelineStage[]
161
- }
162
-
163
- export type BuildPlanSnapshotPrimaryEntity = 'company' | 'contact'
164
- export type BuildPlanSnapshotOutput = 'company' | 'contact' | 'export'
165
- export type BuildPlanSnapshotDependencyMode = 'per-record-eligibility'
166
-
167
- export interface BuildPlanSnapshotStep {
168
- id: string
169
- label: string
170
- description?: string
171
- primaryEntity: BuildPlanSnapshotPrimaryEntity
172
- outputs: BuildPlanSnapshotOutput[]
173
- stageKey: string
174
- recordEntity?: BuildPlanSnapshotPrimaryEntity
175
- recordsStageKey?: string
176
- recordSourceStageKey?: string
177
- dependsOn?: string[]
178
- dependencyMode: BuildPlanSnapshotDependencyMode
179
- actionKey: string
180
- defaultBatchSize: number
181
- maxBatchSize: number
182
- recordColumns?: Partial<Record<BuildPlanSnapshotPrimaryEntity, RecordColumnConfig[]>>
183
- credentialRequirements?: CredentialRequirement[]
184
- }
185
-
186
- export interface BuildPlanSnapshot {
187
- templateId: string
188
- templateLabel: string
189
- steps: BuildPlanSnapshotStep[]
190
- }
191
-
192
- export interface AcqListMetadata extends Record<string, unknown> {
193
- buildPlanSnapshot?: BuildPlanSnapshot
194
- }
195
-
196
- export interface AcqList {
197
- id: string
198
- organizationId: string
199
- name: string
200
- description: string | null
201
- batchIds: string[]
202
- instantlyCampaignId: string | null
203
- status: ListStatus
204
- scrapingConfig: ScrapingConfig
205
- icp: IcpRubric
206
- pipelineConfig: PipelineConfig
207
- metadata: AcqListMetadata
208
- launchedAt: Date | null
209
- completedAt: Date | null
210
- createdAt: Date
211
- }
212
-
213
- /**
214
- * Company record in the acquisition database.
215
- * Contains enriched company data from various sources.
216
- * Transformed from AcqCompanyRow with camelCase properties.
217
- */
218
- export interface AcqCompany {
219
- id: string
220
- organizationId: string
221
- name: string
222
- domain: string | null
223
- linkedinUrl: string | null
224
- website: string | null
225
- numEmployees: number | null
226
- foundedYear: number | null
227
- locationCity: string | null
228
- locationState: string | null
229
- category: string | null
230
- categoryPain: string | null
231
- segment: string | null
232
- processingState: CompanyProcessingState | null
233
- /** @deprecated Use `processingState`. This legacy DB column has been removed; responses return null. */
234
- pipelineStatus?: LegacyPipelineStatus | null
235
- enrichmentData: CompanyEnrichmentData | null
236
- source: string | null
237
- batchId: string | null
238
- status: 'active' | 'invalid'
239
- verticalResearch: string | null
240
- /** Track A: flat qualification score (null until a scoring rubric is defined). Added by W1 migration. */
241
- qualificationScore: number | null
242
- /** Track A: flat qualification signals jsonb preserving the result payload shape. Added by W1 migration. */
243
- qualificationSignals: Record<string, unknown> | null
244
- /** Track A: key identifying the rubric used for qualification. Added by W1 migration. */
245
- qualificationRubricKey: string | null
246
- createdAt: Date
247
- updatedAt: Date
248
- }
249
-
250
- /**
251
- * Contact record in the acquisition database.
252
- * Contains enriched contact data and personalization content.
253
- * Transformed from AcqContactRow with camelCase properties.
254
- */
255
- export interface AcqContact {
256
- id: string
257
- organizationId: string
258
- companyId: string | null
259
- email: string
260
- emailValid: 'VALID' | 'INVALID' | 'RISKY' | 'UNKNOWN' | null
261
- firstName: string | null
262
- lastName: string | null
263
- linkedinUrl: string | null
264
- title: string | null
265
- headline: string | null
266
- filterReason: string | null
267
- openingLine: string | null
268
- source: string | null
269
- sourceId: string | null
270
- processingState: ContactProcessingState | null
271
- /** @deprecated Use `processingState`. This legacy DB column has been removed; responses return null. */
272
- pipelineStatus?: LegacyPipelineStatus | null
273
- enrichmentData: ContactEnrichmentData | null
274
- /** Attio Person record ID - set when contact responds and is added to CRM */
275
- attioPersonId: string | null
276
- batchId: string | null
277
- status: 'active' | 'invalid'
278
- createdAt: Date
279
- updatedAt: Date
280
- }
281
-
282
- // ─── Deal UI Types ───────────────────────────────────────────────────────────
283
-
284
- export type DealStage = 'interested' | 'proposal' | 'closing' | 'closed_won' | 'closed_lost' | 'nurturing'
285
-
286
- export type DealPriorityBucketKey = 'needs_response' | 'follow_up_due' | 'waiting' | 'stale' | 'closed_low'
287
-
288
- export interface DealPriority {
289
- bucketKey: DealPriorityBucketKey
290
- rank: number
291
- label: string
292
- color: string
293
- reason: string
294
- latestActivityAt: string | null
295
- nextActionAt: string | null
296
- }
297
-
298
- export interface KanbanStageConfig {
299
- color: string // Mantine color token (e.g. 'blue', 'teal')
300
- label?: string // Optional display label override
301
- }
302
-
303
- export type KanbanBoardConfig = Partial<Record<DealStage, KanbanStageConfig>>
304
-
305
- export interface DealContact {
306
- id: string
307
- first_name: string | null
308
- last_name: string | null
309
- email: string
310
- title: string | null
311
- headline: string | null
312
- linkedin_url: string | null
313
- processing_state: Record<string, unknown> | null
314
- enrichment_data: Record<string, unknown> | null
315
- company: {
316
- id: string
317
- name: string
318
- domain: string | null
319
- website: string | null
320
- linkedin_url: string | null
321
- segment: string | null
322
- category: string | null
323
- num_employees: number | null
324
- } | null
325
- }
326
-
327
- export interface DealFilters {
328
- stage?: DealStage
329
- search?: string
330
- limit?: number
331
- offset?: number
332
- }
333
-
334
- /** Deal list item with joined contact and company data */
335
- export interface DealListItem extends AcqDealRow {
336
- priority: DealPriority
337
- ownership: 'us' | 'them' | null
338
- nextAction: string | null
339
- contact: DealContact | null
340
- }
341
-
342
- export type DealDetail = DealListItem
343
-
344
- /** Task kind options for a deal task (human follow-up action type) */
345
- export type AcqDealTaskKind = 'call' | 'email' | 'meeting' | 'other'
346
-
347
- /**
348
- * A CRM to-do item attached to a deal representing a human follow-up action.
349
- * Transformed from AcqDealTaskRow with camelCase properties.
350
- */
351
- export interface AcqDealTask {
352
- id: string
353
- organizationId: string
354
- dealId: string
355
- title: string
356
- description: string | null
357
- kind: AcqDealTaskKind
358
- dueAt: string | null
359
- assigneeUserId: string | null
360
- completedAt: string | null
361
- completedByUserId: string | null
362
- createdAt: string
363
- updatedAt: string
364
- createdByUserId: string | null
365
- }
366
-
367
- // ─── Progress / Telemetry Types ──────────────────────────────────────────────
368
-
369
- /**
370
- * Live-scan aggregate telemetry for a single list, computed on demand from
371
- * the list junction tables and current contact deliverability state.
372
- * `stageCounts` are attempted counts from list-row processing_state.
373
- */
374
- export interface ListTelemetry {
375
- listId: string
376
- totalCompanies: number
377
- totalContacts: number
378
- stageCounts: {
379
- populated: number
380
- extracted: number
381
- qualified: number
382
- discovered: number
383
- verified: number
384
- personalized: number
385
- uploaded: number
386
- }
387
- deliverability: {
388
- valid: number
389
- risky: number
390
- invalid: number
391
- unknown: number
392
- bounced: number
393
- }
394
- /** Reserved -- active workflow IDs associated with this list. */
395
- activeWorkflows?: string[]
396
- }
1
+ import type { Database } from '../../supabase/database.types'
2
+ import type {
3
+ ActionRegistry,
4
+ CredentialRequirement,
5
+ RecordColumnConfig
6
+ } from '../../organization-model/domains/prospecting'
7
+ import type { LEAD_GEN_STAGE_CATALOG } from '../../organization-model/domains/sales'
8
+ import type { PipelineStage, ProcessingStageStatus } from './api-schemas'
9
+
10
+ // =============================================================================
11
+ // Supabase-Generated Types (Re-exported from database.types)
12
+ // =============================================================================
13
+
14
+ /** Raw database row type for acq_lists table */
15
+ export type AcqListRow = Database['public']['Tables']['acq_lists']['Row']
16
+ /** Insert type for acq_lists table */
17
+ export type AcqListInsert = Database['public']['Tables']['acq_lists']['Insert']
18
+
19
+ /** Raw database row type for acq_companies table */
20
+ export type AcqCompanyRow = Database['public']['Tables']['acq_companies']['Row']
21
+ /** Insert type for acq_companies table */
22
+ export type AcqCompanyInsert = Database['public']['Tables']['acq_companies']['Insert']
23
+
24
+ /** Raw database row type for acq_contacts table */
25
+ export type AcqContactRow = Database['public']['Tables']['acq_contacts']['Row']
26
+ /** Insert type for acq_contacts table */
27
+ export type AcqContactInsert = Database['public']['Tables']['acq_contacts']['Insert']
28
+
29
+ /** Raw database row type for acq_deals table */
30
+ export type AcqDealRow = Database['public']['Tables']['acq_deals']['Row']
31
+ /** Insert type for acq_deals table */
32
+ export type AcqDealInsert = Database['public']['Tables']['acq_deals']['Insert']
33
+
34
+ /** Raw database row type for acq_deal_tasks table */
35
+ export type AcqDealTaskRow = Database['public']['Tables']['acq_deal_tasks']['Row']
36
+ /** Insert type for acq_deal_tasks table */
37
+ export type AcqDealTaskInsert = Database['public']['Tables']['acq_deal_tasks']['Insert']
38
+
39
+ // =============================================================================
40
+ // Supporting Types
41
+ // =============================================================================
42
+
43
+ /**
44
+ * Represents a web post from company website scraping.
45
+ * Used for recent blog posts, news, or announcements.
46
+ */
47
+ export interface WebPost {
48
+ /** ISO date string of when the post was published */
49
+ date: string
50
+ /** Title of the web post */
51
+ title: string
52
+ /** Brief summary of the post content */
53
+ summary: string
54
+ /** AI-generated insight about the post's relevance */
55
+ aiInsight?: string
56
+ }
57
+
58
+ export type LeadGenStageKey = (typeof LEAD_GEN_STAGE_CATALOG)[keyof typeof LEAD_GEN_STAGE_CATALOG]['key']
59
+ export type LeadGenActionKey = ActionRegistry[number]['id']
60
+
61
+ export interface ProcessingStateEntry {
62
+ status: ProcessingStageStatus
63
+ data?: unknown
64
+ }
65
+
66
+ export type ProcessingState = Partial<Record<LeadGenStageKey, ProcessingStateEntry>>
67
+ export type CompanyProcessingState = ProcessingState
68
+ export type ContactProcessingState = ProcessingState
69
+ /** @deprecated Use `processingState`. Retained only as a compile-time/read-shape bridge for external tenants. */
70
+ export type LegacyPipelineStatus = unknown
71
+
72
+ /**
73
+ * Enrichment data collected for a company from various sources.
74
+ */
75
+ export interface CompanyEnrichmentData {
76
+ googleMaps?: {
77
+ placeId?: string
78
+ totalScore?: number
79
+ reviewsCount?: number
80
+ address?: string
81
+ phone?: string
82
+ categoryName?: string
83
+ googleMapsUrl?: string
84
+ scrapedAt?: string
85
+ }
86
+ websiteCrawl?: {
87
+ companyDescription?: string
88
+ services?: string[]
89
+ specialties?: string[]
90
+ staff?: Array<{ name: string; title?: string; email?: string }>
91
+ automationGaps?: string[]
92
+ targetAudience?: string
93
+ category?: string
94
+ segment?: string
95
+ recentWin?: string
96
+ emailCount?: number
97
+ pageCount?: number
98
+ totalChars?: number
99
+ crawledAt?: string
100
+ extractedAt?: string
101
+ }
102
+ website?: {
103
+ missionVision?: string
104
+ uniqueAttributes?: string
105
+ coreOfferings?: string
106
+ targetAudience?: string
107
+ companyValues?: string
108
+ businessDescription?: string
109
+ recentPosts?: Array<{ date?: string; title?: string; summary?: string; aiInsight?: string }>
110
+ }
111
+ tomba?: {
112
+ waterfallEmail?: {
113
+ email: string
114
+ name?: string
115
+ title?: string
116
+ department?: string
117
+ } | null
118
+ genericEmail?: string | null
119
+ totalFound?: number
120
+ searchedAt?: string
121
+ }
122
+ }
123
+
124
+ /**
125
+ * Enrichment data collected for a contact from various sources.
126
+ */
127
+ export interface ContactEnrichmentData {
128
+ linkedin?: {
129
+ summary?: string
130
+ pastExperience?: string
131
+ education?: string
132
+ activity?: Array<{ date?: string; content?: string }>
133
+ }
134
+ }
135
+
136
+ // =============================================================================
137
+ // Domain Types (camelCase transformations of database rows)
138
+ // =============================================================================
139
+
140
+ export type ListStatus = 'draft' | 'enriching' | 'launched' | 'closing' | 'archived'
141
+
142
+ export interface ScrapingConfig {
143
+ source?: string
144
+ query?: string
145
+ filters?: Record<string, unknown>
146
+ [key: string]: unknown
147
+ }
148
+
149
+ export interface IcpRubric {
150
+ targetDescription?: string
151
+ minReviewCount?: number
152
+ minRating?: number
153
+ excludeFranchises?: boolean
154
+ customRules?: string
155
+ qualificationRubricKey?: string | null
156
+ [key: string]: unknown
157
+ }
158
+
159
+ export interface PipelineConfig {
160
+ stages: PipelineStage[]
161
+ }
162
+
163
+ export type BuildPlanSnapshotPrimaryEntity = 'company' | 'contact'
164
+ export type BuildPlanSnapshotOutput = 'company' | 'contact' | 'export'
165
+ export type BuildPlanSnapshotDependencyMode = 'per-record-eligibility'
166
+
167
+ export interface BuildPlanSnapshotStep {
168
+ id: string
169
+ label: string
170
+ description?: string
171
+ primaryEntity: BuildPlanSnapshotPrimaryEntity
172
+ outputs: BuildPlanSnapshotOutput[]
173
+ stageKey: string
174
+ recordEntity?: BuildPlanSnapshotPrimaryEntity
175
+ recordsStageKey?: string
176
+ recordSourceStageKey?: string
177
+ dependsOn?: string[]
178
+ dependencyMode: BuildPlanSnapshotDependencyMode
179
+ actionKey: string
180
+ defaultBatchSize: number
181
+ maxBatchSize: number
182
+ recordColumns?: Partial<Record<BuildPlanSnapshotPrimaryEntity, RecordColumnConfig[]>>
183
+ credentialRequirements?: CredentialRequirement[]
184
+ }
185
+
186
+ export interface BuildPlanSnapshot {
187
+ templateId: string
188
+ templateLabel: string
189
+ steps: BuildPlanSnapshotStep[]
190
+ }
191
+
192
+ export interface AcqListMetadata extends Record<string, unknown> {
193
+ buildPlanSnapshot?: BuildPlanSnapshot
194
+ }
195
+
196
+ export interface AcqList {
197
+ id: string
198
+ organizationId: string
199
+ name: string
200
+ description: string | null
201
+ batchIds: string[]
202
+ instantlyCampaignId: string | null
203
+ status: ListStatus
204
+ scrapingConfig: ScrapingConfig
205
+ icp: IcpRubric
206
+ pipelineConfig: PipelineConfig
207
+ metadata: AcqListMetadata
208
+ launchedAt: Date | null
209
+ completedAt: Date | null
210
+ createdAt: Date
211
+ }
212
+
213
+ /**
214
+ * Company record in the acquisition database.
215
+ * Contains enriched company data from various sources.
216
+ * Transformed from AcqCompanyRow with camelCase properties.
217
+ */
218
+ export interface AcqCompany {
219
+ id: string
220
+ organizationId: string
221
+ name: string
222
+ domain: string | null
223
+ linkedinUrl: string | null
224
+ website: string | null
225
+ numEmployees: number | null
226
+ foundedYear: number | null
227
+ locationCity: string | null
228
+ locationState: string | null
229
+ category: string | null
230
+ categoryPain: string | null
231
+ segment: string | null
232
+ processingState: CompanyProcessingState | null
233
+ /** @deprecated Use `processingState`. This legacy DB column has been removed; responses return null. */
234
+ pipelineStatus?: LegacyPipelineStatus | null
235
+ enrichmentData: CompanyEnrichmentData | null
236
+ source: string | null
237
+ batchId: string | null
238
+ status: 'active' | 'invalid'
239
+ verticalResearch: string | null
240
+ /** Track A: flat qualification score (null until a scoring rubric is defined). Added by W1 migration. */
241
+ qualificationScore: number | null
242
+ /** Track A: flat qualification signals jsonb preserving the result payload shape. Added by W1 migration. */
243
+ qualificationSignals: Record<string, unknown> | null
244
+ /** Track A: key identifying the rubric used for qualification. Added by W1 migration. */
245
+ qualificationRubricKey: string | null
246
+ createdAt: Date
247
+ updatedAt: Date
248
+ }
249
+
250
+ /**
251
+ * Contact record in the acquisition database.
252
+ * Contains enriched contact data and personalization content.
253
+ * Transformed from AcqContactRow with camelCase properties.
254
+ */
255
+ export interface AcqContact {
256
+ id: string
257
+ organizationId: string
258
+ companyId: string | null
259
+ email: string
260
+ emailValid: 'VALID' | 'INVALID' | 'RISKY' | 'UNKNOWN' | null
261
+ firstName: string | null
262
+ lastName: string | null
263
+ linkedinUrl: string | null
264
+ title: string | null
265
+ headline: string | null
266
+ filterReason: string | null
267
+ openingLine: string | null
268
+ source: string | null
269
+ sourceId: string | null
270
+ processingState: ContactProcessingState | null
271
+ /** @deprecated Use `processingState`. This legacy DB column has been removed; responses return null. */
272
+ pipelineStatus?: LegacyPipelineStatus | null
273
+ enrichmentData: ContactEnrichmentData | null
274
+ /** Attio Person record ID - set when contact responds and is added to CRM */
275
+ attioPersonId: string | null
276
+ batchId: string | null
277
+ status: 'active' | 'invalid'
278
+ createdAt: Date
279
+ updatedAt: Date
280
+ }
281
+
282
+ // ─── Deal UI Types ───────────────────────────────────────────────────────────
283
+
284
+ export type DealStage = 'interested' | 'proposal' | 'closing' | 'closed_won' | 'closed_lost' | 'nurturing'
285
+
286
+ export type DealPriorityBucketKey = 'needs_response' | 'follow_up_due' | 'waiting' | 'stale' | 'closed_low'
287
+
288
+ export interface DealPriority {
289
+ bucketKey: DealPriorityBucketKey
290
+ rank: number
291
+ label: string
292
+ color: string
293
+ reason: string
294
+ latestActivityAt: string | null
295
+ nextActionAt: string | null
296
+ }
297
+
298
+ export interface KanbanStageConfig {
299
+ color: string // Mantine color token (e.g. 'blue', 'teal')
300
+ label?: string // Optional display label override
301
+ }
302
+
303
+ export type KanbanBoardConfig = Partial<Record<DealStage, KanbanStageConfig>>
304
+
305
+ export interface DealContact {
306
+ id: string
307
+ first_name: string | null
308
+ last_name: string | null
309
+ email: string
310
+ title: string | null
311
+ headline: string | null
312
+ linkedin_url: string | null
313
+ processing_state: Record<string, unknown> | null
314
+ enrichment_data: Record<string, unknown> | null
315
+ company: {
316
+ id: string
317
+ name: string
318
+ domain: string | null
319
+ website: string | null
320
+ linkedin_url: string | null
321
+ segment: string | null
322
+ category: string | null
323
+ num_employees: number | null
324
+ } | null
325
+ }
326
+
327
+ export interface DealFilters {
328
+ stage?: DealStage
329
+ search?: string
330
+ limit?: number
331
+ offset?: number
332
+ }
333
+
334
+ /** Deal list item with joined contact and company data */
335
+ export interface DealListItem extends AcqDealRow {
336
+ priority: DealPriority
337
+ ownership: 'us' | 'them' | null
338
+ nextAction: string | null
339
+ contact: DealContact | null
340
+ }
341
+
342
+ export type DealDetail = DealListItem
343
+
344
+ /** Task kind options for a deal task (human follow-up action type) */
345
+ export type AcqDealTaskKind = 'call' | 'email' | 'meeting' | 'other'
346
+
347
+ /**
348
+ * A CRM to-do item attached to a deal representing a human follow-up action.
349
+ * Transformed from AcqDealTaskRow with camelCase properties.
350
+ */
351
+ export interface AcqDealTask {
352
+ id: string
353
+ organizationId: string
354
+ dealId: string
355
+ title: string
356
+ description: string | null
357
+ kind: AcqDealTaskKind
358
+ dueAt: string | null
359
+ assigneeUserId: string | null
360
+ completedAt: string | null
361
+ completedByUserId: string | null
362
+ createdAt: string
363
+ updatedAt: string
364
+ createdByUserId: string | null
365
+ }
366
+
367
+ // ─── Progress / Telemetry Types ──────────────────────────────────────────────
368
+
369
+ /**
370
+ * Live-scan aggregate telemetry for a single list, computed on demand from
371
+ * the list junction tables and current contact deliverability state.
372
+ * `stageCounts` are attempted counts from list-row processing_state.
373
+ */
374
+ export interface ListTelemetry {
375
+ listId: string
376
+ totalCompanies: number
377
+ totalContacts: number
378
+ stageCounts: {
379
+ populated: number
380
+ extracted: number
381
+ qualified: number
382
+ discovered: number
383
+ verified: number
384
+ personalized: number
385
+ uploaded: number
386
+ }
387
+ deliverability: {
388
+ valid: number
389
+ risky: number
390
+ invalid: number
391
+ unknown: number
392
+ bounced: number
393
+ }
394
+ /** Reserved -- active workflow IDs associated with this list. */
395
+ activeWorkflows?: string[]
396
+ }