@trycompai/db 1.3.22 → 2.0.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 (269) hide show
  1. package/dist/client.d.ts +2 -2
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/client.js +4 -5
  4. package/dist/client.ts +5 -2
  5. package/dist/generated/prisma/client.d.ts +427 -0
  6. package/dist/generated/prisma/client.d.ts.map +1 -0
  7. package/dist/generated/prisma/client.js +73 -0
  8. package/dist/generated/prisma/commonInputTypes.d.ts +2082 -0
  9. package/dist/generated/prisma/commonInputTypes.d.ts.map +1 -0
  10. package/dist/generated/prisma/commonInputTypes.js +11 -0
  11. package/dist/generated/prisma/enums.d.ts +367 -0
  12. package/dist/generated/prisma/enums.d.ts.map +1 -0
  13. package/dist/generated/prisma/enums.js +329 -0
  14. package/dist/generated/prisma/internal/class.d.ts +1000 -0
  15. package/dist/generated/prisma/internal/class.d.ts.map +1 -0
  16. package/dist/generated/prisma/internal/class.js +87 -0
  17. package/dist/generated/prisma/internal/prismaNamespace.d.ts +8063 -0
  18. package/dist/generated/prisma/internal/prismaNamespace.d.ts.map +1 -0
  19. package/dist/generated/prisma/internal/prismaNamespace.js +1256 -0
  20. package/dist/generated/prisma/models/Account.d.ts +1456 -0
  21. package/dist/generated/prisma/models/Account.d.ts.map +1 -0
  22. package/dist/generated/prisma/models/Account.js +2 -0
  23. package/dist/generated/prisma/models/ApiKey.d.ts +1387 -0
  24. package/dist/generated/prisma/models/ApiKey.d.ts.map +1 -0
  25. package/dist/generated/prisma/models/ApiKey.js +2 -0
  26. package/dist/generated/prisma/models/Attachment.d.ts +1520 -0
  27. package/dist/generated/prisma/models/Attachment.d.ts.map +1 -0
  28. package/dist/generated/prisma/models/Attachment.js +2 -0
  29. package/dist/generated/prisma/models/AuditLog.d.ts +1590 -0
  30. package/dist/generated/prisma/models/AuditLog.d.ts.map +1 -0
  31. package/dist/generated/prisma/models/AuditLog.js +2 -0
  32. package/dist/generated/prisma/models/BrowserAutomation.d.ts +1507 -0
  33. package/dist/generated/prisma/models/BrowserAutomation.d.ts.map +1 -0
  34. package/dist/generated/prisma/models/BrowserAutomation.js +2 -0
  35. package/dist/generated/prisma/models/BrowserAutomationRun.d.ts +1455 -0
  36. package/dist/generated/prisma/models/BrowserAutomationRun.d.ts.map +1 -0
  37. package/dist/generated/prisma/models/BrowserAutomationRun.js +2 -0
  38. package/dist/generated/prisma/models/BrowserbaseContext.d.ts +1139 -0
  39. package/dist/generated/prisma/models/BrowserbaseContext.d.ts.map +1 -0
  40. package/dist/generated/prisma/models/BrowserbaseContext.js +2 -0
  41. package/dist/generated/prisma/models/Comment.d.ts +1502 -0
  42. package/dist/generated/prisma/models/Comment.d.ts.map +1 -0
  43. package/dist/generated/prisma/models/Comment.js +2 -0
  44. package/dist/generated/prisma/models/Context.d.ts +1254 -0
  45. package/dist/generated/prisma/models/Context.d.ts.map +1 -0
  46. package/dist/generated/prisma/models/Context.js +2 -0
  47. package/dist/generated/prisma/models/Control.d.ts +1965 -0
  48. package/dist/generated/prisma/models/Control.d.ts.map +1 -0
  49. package/dist/generated/prisma/models/Control.js +2 -0
  50. package/dist/generated/prisma/models/ControlDocumentType.d.ts +1115 -0
  51. package/dist/generated/prisma/models/ControlDocumentType.d.ts.map +1 -0
  52. package/dist/generated/prisma/models/ControlDocumentType.js +2 -0
  53. package/dist/generated/prisma/models/Device.d.ts +1858 -0
  54. package/dist/generated/prisma/models/Device.d.ts.map +1 -0
  55. package/dist/generated/prisma/models/Device.js +2 -0
  56. package/dist/generated/prisma/models/DynamicCheck.d.ts +1517 -0
  57. package/dist/generated/prisma/models/DynamicCheck.d.ts.map +1 -0
  58. package/dist/generated/prisma/models/DynamicCheck.js +2 -0
  59. package/dist/generated/prisma/models/DynamicIntegration.d.ts +1528 -0
  60. package/dist/generated/prisma/models/DynamicIntegration.d.ts.map +1 -0
  61. package/dist/generated/prisma/models/DynamicIntegration.js +2 -0
  62. package/dist/generated/prisma/models/EmployeeTrainingVideoCompletion.d.ts +1146 -0
  63. package/dist/generated/prisma/models/EmployeeTrainingVideoCompletion.d.ts.map +1 -0
  64. package/dist/generated/prisma/models/EmployeeTrainingVideoCompletion.js +2 -0
  65. package/dist/generated/prisma/models/EvidenceAutomation.d.ts +1533 -0
  66. package/dist/generated/prisma/models/EvidenceAutomation.d.ts.map +1 -0
  67. package/dist/generated/prisma/models/EvidenceAutomation.js +2 -0
  68. package/dist/generated/prisma/models/EvidenceAutomationRun.d.ts +1833 -0
  69. package/dist/generated/prisma/models/EvidenceAutomationRun.d.ts.map +1 -0
  70. package/dist/generated/prisma/models/EvidenceAutomationRun.js +2 -0
  71. package/dist/generated/prisma/models/EvidenceAutomationVersion.d.ts +1331 -0
  72. package/dist/generated/prisma/models/EvidenceAutomationVersion.d.ts.map +1 -0
  73. package/dist/generated/prisma/models/EvidenceAutomationVersion.js +2 -0
  74. package/dist/generated/prisma/models/EvidenceSubmission.d.ts +1905 -0
  75. package/dist/generated/prisma/models/EvidenceSubmission.d.ts.map +1 -0
  76. package/dist/generated/prisma/models/EvidenceSubmission.js +2 -0
  77. package/dist/generated/prisma/models/Finding.d.ts +2386 -0
  78. package/dist/generated/prisma/models/Finding.d.ts.map +1 -0
  79. package/dist/generated/prisma/models/Finding.js +2 -0
  80. package/dist/generated/prisma/models/FindingTemplate.d.ts +1264 -0
  81. package/dist/generated/prisma/models/FindingTemplate.d.ts.map +1 -0
  82. package/dist/generated/prisma/models/FindingTemplate.js +2 -0
  83. package/dist/generated/prisma/models/FleetPolicyResult.d.ts +1484 -0
  84. package/dist/generated/prisma/models/FleetPolicyResult.d.ts.map +1 -0
  85. package/dist/generated/prisma/models/FleetPolicyResult.js +2 -0
  86. package/dist/generated/prisma/models/FrameworkEditorControlTemplate.d.ts +1669 -0
  87. package/dist/generated/prisma/models/FrameworkEditorControlTemplate.d.ts.map +1 -0
  88. package/dist/generated/prisma/models/FrameworkEditorControlTemplate.js +2 -0
  89. package/dist/generated/prisma/models/FrameworkEditorFramework.d.ts +1581 -0
  90. package/dist/generated/prisma/models/FrameworkEditorFramework.d.ts.map +1 -0
  91. package/dist/generated/prisma/models/FrameworkEditorFramework.js +2 -0
  92. package/dist/generated/prisma/models/FrameworkEditorPolicyTemplate.d.ts +1428 -0
  93. package/dist/generated/prisma/models/FrameworkEditorPolicyTemplate.d.ts.map +1 -0
  94. package/dist/generated/prisma/models/FrameworkEditorPolicyTemplate.js +2 -0
  95. package/dist/generated/prisma/models/FrameworkEditorRequirement.d.ts +1525 -0
  96. package/dist/generated/prisma/models/FrameworkEditorRequirement.d.ts.map +1 -0
  97. package/dist/generated/prisma/models/FrameworkEditorRequirement.js +2 -0
  98. package/dist/generated/prisma/models/FrameworkEditorTaskTemplate.d.ts +1434 -0
  99. package/dist/generated/prisma/models/FrameworkEditorTaskTemplate.d.ts.map +1 -0
  100. package/dist/generated/prisma/models/FrameworkEditorTaskTemplate.js +2 -0
  101. package/dist/generated/prisma/models/FrameworkEditorVideo.d.ts +1054 -0
  102. package/dist/generated/prisma/models/FrameworkEditorVideo.d.ts.map +1 -0
  103. package/dist/generated/prisma/models/FrameworkEditorVideo.js +2 -0
  104. package/dist/generated/prisma/models/FrameworkInstance.d.ts +1321 -0
  105. package/dist/generated/prisma/models/FrameworkInstance.d.ts.map +1 -0
  106. package/dist/generated/prisma/models/FrameworkInstance.js +2 -0
  107. package/dist/generated/prisma/models/GlobalVendors.d.ts +1358 -0
  108. package/dist/generated/prisma/models/GlobalVendors.d.ts.map +1 -0
  109. package/dist/generated/prisma/models/GlobalVendors.js +2 -0
  110. package/dist/generated/prisma/models/Integration.d.ts +1363 -0
  111. package/dist/generated/prisma/models/Integration.d.ts.map +1 -0
  112. package/dist/generated/prisma/models/Integration.js +2 -0
  113. package/dist/generated/prisma/models/IntegrationCheckResult.d.ts +1408 -0
  114. package/dist/generated/prisma/models/IntegrationCheckResult.d.ts.map +1 -0
  115. package/dist/generated/prisma/models/IntegrationCheckResult.js +2 -0
  116. package/dist/generated/prisma/models/IntegrationCheckRun.d.ts +1958 -0
  117. package/dist/generated/prisma/models/IntegrationCheckRun.d.ts.map +1 -0
  118. package/dist/generated/prisma/models/IntegrationCheckRun.js +2 -0
  119. package/dist/generated/prisma/models/IntegrationConnection.d.ts +2472 -0
  120. package/dist/generated/prisma/models/IntegrationConnection.d.ts.map +1 -0
  121. package/dist/generated/prisma/models/IntegrationConnection.js +2 -0
  122. package/dist/generated/prisma/models/IntegrationCredentialVersion.d.ts +1298 -0
  123. package/dist/generated/prisma/models/IntegrationCredentialVersion.d.ts.map +1 -0
  124. package/dist/generated/prisma/models/IntegrationCredentialVersion.js +2 -0
  125. package/dist/generated/prisma/models/IntegrationOAuthApp.d.ts +1362 -0
  126. package/dist/generated/prisma/models/IntegrationOAuthApp.d.ts.map +1 -0
  127. package/dist/generated/prisma/models/IntegrationOAuthApp.js +2 -0
  128. package/dist/generated/prisma/models/IntegrationOAuthState.d.ts +1131 -0
  129. package/dist/generated/prisma/models/IntegrationOAuthState.d.ts.map +1 -0
  130. package/dist/generated/prisma/models/IntegrationOAuthState.js +2 -0
  131. package/dist/generated/prisma/models/IntegrationPlatformCredential.d.ts +1237 -0
  132. package/dist/generated/prisma/models/IntegrationPlatformCredential.d.ts.map +1 -0
  133. package/dist/generated/prisma/models/IntegrationPlatformCredential.js +2 -0
  134. package/dist/generated/prisma/models/IntegrationPlatformFinding.d.ts +1652 -0
  135. package/dist/generated/prisma/models/IntegrationPlatformFinding.d.ts.map +1 -0
  136. package/dist/generated/prisma/models/IntegrationPlatformFinding.js +2 -0
  137. package/dist/generated/prisma/models/IntegrationProvider.d.ts +1300 -0
  138. package/dist/generated/prisma/models/IntegrationProvider.d.ts.map +1 -0
  139. package/dist/generated/prisma/models/IntegrationProvider.js +2 -0
  140. package/dist/generated/prisma/models/IntegrationResult.d.ts +1539 -0
  141. package/dist/generated/prisma/models/IntegrationResult.d.ts.map +1 -0
  142. package/dist/generated/prisma/models/IntegrationResult.js +2 -0
  143. package/dist/generated/prisma/models/IntegrationRun.d.ts +1596 -0
  144. package/dist/generated/prisma/models/IntegrationRun.d.ts.map +1 -0
  145. package/dist/generated/prisma/models/IntegrationRun.js +2 -0
  146. package/dist/generated/prisma/models/IntegrationSyncLog.d.ts +1716 -0
  147. package/dist/generated/prisma/models/IntegrationSyncLog.d.ts.map +1 -0
  148. package/dist/generated/prisma/models/IntegrationSyncLog.js +2 -0
  149. package/dist/generated/prisma/models/Invitation.d.ts +1404 -0
  150. package/dist/generated/prisma/models/Invitation.d.ts.map +1 -0
  151. package/dist/generated/prisma/models/Invitation.js +2 -0
  152. package/dist/generated/prisma/models/Jwks.d.ts +998 -0
  153. package/dist/generated/prisma/models/Jwks.d.ts.map +1 -0
  154. package/dist/generated/prisma/models/Jwks.js +2 -0
  155. package/dist/generated/prisma/models/KnowledgeBaseDocument.d.ts +1463 -0
  156. package/dist/generated/prisma/models/KnowledgeBaseDocument.d.ts.map +1 -0
  157. package/dist/generated/prisma/models/KnowledgeBaseDocument.js +2 -0
  158. package/dist/generated/prisma/models/Member.d.ts +5530 -0
  159. package/dist/generated/prisma/models/Member.d.ts.map +1 -0
  160. package/dist/generated/prisma/models/Member.js +2 -0
  161. package/dist/generated/prisma/models/Onboarding.d.ts +1376 -0
  162. package/dist/generated/prisma/models/Onboarding.d.ts.map +1 -0
  163. package/dist/generated/prisma/models/Onboarding.js +2 -0
  164. package/dist/generated/prisma/models/Organization.d.ts +14367 -0
  165. package/dist/generated/prisma/models/Organization.d.ts.map +1 -0
  166. package/dist/generated/prisma/models/Organization.js +2 -0
  167. package/dist/generated/prisma/models/OrganizationBilling.d.ts +1222 -0
  168. package/dist/generated/prisma/models/OrganizationBilling.d.ts.map +1 -0
  169. package/dist/generated/prisma/models/OrganizationBilling.js +2 -0
  170. package/dist/generated/prisma/models/OrganizationChart.d.ts +1248 -0
  171. package/dist/generated/prisma/models/OrganizationChart.d.ts.map +1 -0
  172. package/dist/generated/prisma/models/OrganizationChart.js +2 -0
  173. package/dist/generated/prisma/models/OrganizationRole.d.ts +1251 -0
  174. package/dist/generated/prisma/models/OrganizationRole.d.ts.map +1 -0
  175. package/dist/generated/prisma/models/OrganizationRole.js +2 -0
  176. package/dist/generated/prisma/models/PentestSubscription.d.ts +1497 -0
  177. package/dist/generated/prisma/models/PentestSubscription.d.ts.map +1 -0
  178. package/dist/generated/prisma/models/PentestSubscription.js +2 -0
  179. package/dist/generated/prisma/models/Policy.d.ts +3356 -0
  180. package/dist/generated/prisma/models/Policy.d.ts.map +1 -0
  181. package/dist/generated/prisma/models/Policy.js +2 -0
  182. package/dist/generated/prisma/models/PolicyVersion.d.ts +1619 -0
  183. package/dist/generated/prisma/models/PolicyVersion.d.ts.map +1 -0
  184. package/dist/generated/prisma/models/PolicyVersion.js +2 -0
  185. package/dist/generated/prisma/models/Questionnaire.d.ts +1808 -0
  186. package/dist/generated/prisma/models/Questionnaire.d.ts.map +1 -0
  187. package/dist/generated/prisma/models/Questionnaire.js +2 -0
  188. package/dist/generated/prisma/models/QuestionnaireQuestionAnswer.d.ts +1422 -0
  189. package/dist/generated/prisma/models/QuestionnaireQuestionAnswer.d.ts.map +1 -0
  190. package/dist/generated/prisma/models/QuestionnaireQuestionAnswer.js +2 -0
  191. package/dist/generated/prisma/models/RequirementMap.d.ts +1345 -0
  192. package/dist/generated/prisma/models/RequirementMap.d.ts.map +1 -0
  193. package/dist/generated/prisma/models/RequirementMap.js +2 -0
  194. package/dist/generated/prisma/models/Risk.d.ts +1975 -0
  195. package/dist/generated/prisma/models/Risk.d.ts.map +1 -0
  196. package/dist/generated/prisma/models/Risk.js +2 -0
  197. package/dist/generated/prisma/models/RoleNotificationSetting.d.ts +1391 -0
  198. package/dist/generated/prisma/models/RoleNotificationSetting.d.ts.map +1 -0
  199. package/dist/generated/prisma/models/RoleNotificationSetting.js +2 -0
  200. package/dist/generated/prisma/models/SOAAnswer.d.ts +1498 -0
  201. package/dist/generated/prisma/models/SOAAnswer.d.ts.map +1 -0
  202. package/dist/generated/prisma/models/SOAAnswer.js +2 -0
  203. package/dist/generated/prisma/models/SOADocument.d.ts +2272 -0
  204. package/dist/generated/prisma/models/SOADocument.d.ts.map +1 -0
  205. package/dist/generated/prisma/models/SOADocument.js +2 -0
  206. package/dist/generated/prisma/models/SOAFrameworkConfiguration.d.ts +1445 -0
  207. package/dist/generated/prisma/models/SOAFrameworkConfiguration.d.ts.map +1 -0
  208. package/dist/generated/prisma/models/SOAFrameworkConfiguration.js +2 -0
  209. package/dist/generated/prisma/models/Secret.d.ts +1321 -0
  210. package/dist/generated/prisma/models/Secret.d.ts.map +1 -0
  211. package/dist/generated/prisma/models/Secret.js +2 -0
  212. package/dist/generated/prisma/models/SecurityPenetrationTestRun.d.ts +1176 -0
  213. package/dist/generated/prisma/models/SecurityPenetrationTestRun.d.ts.map +1 -0
  214. package/dist/generated/prisma/models/SecurityPenetrationTestRun.js +2 -0
  215. package/dist/generated/prisma/models/SecurityQuestionnaireManualAnswer.d.ts +1510 -0
  216. package/dist/generated/prisma/models/SecurityQuestionnaireManualAnswer.d.ts.map +1 -0
  217. package/dist/generated/prisma/models/SecurityQuestionnaireManualAnswer.js +2 -0
  218. package/dist/generated/prisma/models/Session.d.ts +1351 -0
  219. package/dist/generated/prisma/models/Session.d.ts.map +1 -0
  220. package/dist/generated/prisma/models/Session.js +2 -0
  221. package/dist/generated/prisma/models/Task.d.ts +3980 -0
  222. package/dist/generated/prisma/models/Task.d.ts.map +1 -0
  223. package/dist/generated/prisma/models/Task.js +2 -0
  224. package/dist/generated/prisma/models/TaskItem.d.ts +1961 -0
  225. package/dist/generated/prisma/models/TaskItem.d.ts.map +1 -0
  226. package/dist/generated/prisma/models/TaskItem.js +2 -0
  227. package/dist/generated/prisma/models/Trust.d.ts +2242 -0
  228. package/dist/generated/prisma/models/Trust.d.ts.map +1 -0
  229. package/dist/generated/prisma/models/Trust.js +2 -0
  230. package/dist/generated/prisma/models/TrustAccessGrant.d.ts +1888 -0
  231. package/dist/generated/prisma/models/TrustAccessGrant.d.ts.map +1 -0
  232. package/dist/generated/prisma/models/TrustAccessGrant.js +2 -0
  233. package/dist/generated/prisma/models/TrustAccessRequest.d.ts +2103 -0
  234. package/dist/generated/prisma/models/TrustAccessRequest.d.ts.map +1 -0
  235. package/dist/generated/prisma/models/TrustAccessRequest.js +2 -0
  236. package/dist/generated/prisma/models/TrustCustomLink.d.ts +1354 -0
  237. package/dist/generated/prisma/models/TrustCustomLink.d.ts.map +1 -0
  238. package/dist/generated/prisma/models/TrustCustomLink.js +2 -0
  239. package/dist/generated/prisma/models/TrustDocument.d.ts +1281 -0
  240. package/dist/generated/prisma/models/TrustDocument.d.ts.map +1 -0
  241. package/dist/generated/prisma/models/TrustDocument.js +2 -0
  242. package/dist/generated/prisma/models/TrustNDAAgreement.d.ts +1877 -0
  243. package/dist/generated/prisma/models/TrustNDAAgreement.d.ts.map +1 -0
  244. package/dist/generated/prisma/models/TrustNDAAgreement.js +2 -0
  245. package/dist/generated/prisma/models/TrustResource.d.ts +1328 -0
  246. package/dist/generated/prisma/models/TrustResource.d.ts.map +1 -0
  247. package/dist/generated/prisma/models/TrustResource.js +2 -0
  248. package/dist/generated/prisma/models/User.d.ts +3070 -0
  249. package/dist/generated/prisma/models/User.d.ts.map +1 -0
  250. package/dist/generated/prisma/models/User.js +2 -0
  251. package/dist/generated/prisma/models/Vendor.d.ts +2307 -0
  252. package/dist/generated/prisma/models/Vendor.d.ts.map +1 -0
  253. package/dist/generated/prisma/models/Vendor.js +2 -0
  254. package/dist/generated/prisma/models/VendorContact.d.ts +1246 -0
  255. package/dist/generated/prisma/models/VendorContact.d.ts.map +1 -0
  256. package/dist/generated/prisma/models/VendorContact.js +2 -0
  257. package/dist/generated/prisma/models/Verification.d.ts +1026 -0
  258. package/dist/generated/prisma/models/Verification.d.ts.map +1 -0
  259. package/dist/generated/prisma/models/Verification.js +2 -0
  260. package/dist/generated/prisma/models.d.ts +82 -0
  261. package/dist/generated/prisma/models.d.ts.map +1 -0
  262. package/dist/generated/prisma/models.js +2 -0
  263. package/dist/index.d.ts +0 -1
  264. package/dist/index.d.ts.map +1 -1
  265. package/dist/index.js +0 -3
  266. package/dist/index.ts +1 -2
  267. package/dist/postinstall.js +1 -1
  268. package/dist/schema.prisma +455 -39
  269. package/package.json +56 -55
@@ -1,12 +1,11 @@
1
1
  generator client {
2
- provider = "prisma-client-js"
2
+ provider = "prisma-client"
3
+ output = "../src/generated/prisma"
3
4
  previewFeatures = ["postgresqlExtensions"]
4
- binaryTargets = ["rhel-openssl-3.0.x", "native", "debian-openssl-3.0.x", "linux-musl-openssl-3.0.x", "linux-musl-arm64-openssl-3.0.x"]
5
5
  }
6
6
 
7
7
  datasource db {
8
8
  provider = "postgresql"
9
- url = env("DATABASE_URL")
10
9
  extensions = [pgcrypto]
11
10
  }
12
11
 
@@ -63,15 +62,22 @@ model User {
63
62
  lastLogin DateTime?
64
63
  emailNotificationsUnsubscribed Boolean @default(false)
65
64
  emailPreferences Json? @default("{\"policyNotifications\":true,\"taskReminders\":true,\"weeklyTaskDigest\":true,\"unassignedItemsNotifications\":true}")
65
+ role String? @default("user")
66
+ banned Boolean?
67
+ banReason String?
68
+ banExpires DateTime?
66
69
  isPlatformAdmin Boolean @default(false)
67
70
 
68
- accounts Account[]
69
- auditLog AuditLog[]
70
- integrationResults IntegrationResult[]
71
- invitations Invitation[]
72
- members Member[]
73
- sessions Session[]
74
- fleetPolicyResults FleetPolicyResult[]
71
+ accounts Account[]
72
+ auditLog AuditLog[]
73
+ integrationResults IntegrationResult[]
74
+ invitations Invitation[]
75
+ members Member[]
76
+ sessions Session[]
77
+ fleetPolicyResults FleetPolicyResult[]
78
+ evidenceSubmissions EvidenceSubmission[] @relation("EvidenceSubmitter")
79
+ evidenceReviews EvidenceSubmission[] @relation("EvidenceReviewer")
80
+ adminFindings Finding[] @relation("AdminFindingCreator")
75
81
 
76
82
  @@unique([email])
77
83
  }
@@ -98,6 +104,7 @@ model Session {
98
104
  userAgent String?
99
105
  userId String
100
106
  activeOrganizationId String?
107
+ impersonatedBy String?
101
108
  user User @relation(fields: [userId], references: [id], onDelete: Cascade)
102
109
 
103
110
  @@unique([token])
@@ -132,10 +139,11 @@ model Verification {
132
139
  // JWT Plugin - Required by Better Auth JWT plugin
133
140
  // https://www.better-auth.com/docs/plugins/jwt
134
141
  model Jwks {
135
- id String @id @default(dbgenerated("generate_prefixed_cuid('jwk'::text)"))
142
+ id String @id @default(dbgenerated("generate_prefixed_cuid('jwk'::text)"))
136
143
  publicKey String
137
144
  privateKey String
138
- createdAt DateTime @default(now())
145
+ createdAt DateTime @default(now())
146
+ expiresAt DateTime?
139
147
 
140
148
  @@map("jwks")
141
149
  }
@@ -150,27 +158,32 @@ model Member {
150
158
  createdAt DateTime @default(now())
151
159
 
152
160
  department Departments @default(none)
161
+ jobTitle String?
153
162
  isActive Boolean @default(true)
154
163
  deactivated Boolean @default(false)
164
+ externalUserId String?
165
+ externalUserSource String?
155
166
  employeeTrainingVideoCompletion EmployeeTrainingVideoCompletion[]
156
167
  fleetDmLabelId Int?
157
168
 
158
- assignedPolicies Policy[] @relation("PolicyAssignee") // Policies where this member is an assignee
159
- approvedPolicies Policy[] @relation("PolicyApprover") // Policies where this member is an approver
160
- approvedSOADocuments SOADocument[] @relation("SOADocumentApprover") // SOA documents where this member is an approver
161
- risks Risk[]
162
- tasks Task[]
163
- vendors Vendor[]
164
- comments Comment[]
165
- auditLogs AuditLog[]
166
- reviewedAccessRequests TrustAccessRequest[] @relation("TrustAccessRequestReviewer")
167
- issuedGrants TrustAccessGrant[] @relation("IssuedGrants")
168
- revokedGrants TrustAccessGrant[] @relation("RevokedGrants")
169
- createdTaskItems TaskItem[] @relation("TaskItemCreator")
170
- updatedTaskItems TaskItem[] @relation("TaskItemUpdater")
171
- assignedTaskItems TaskItem[] @relation("TaskItemAssignee")
172
- createdFindings Finding[] @relation("FindingCreatedBy")
173
- publishedPolicyVersions PolicyVersion[] @relation("PolicyVersionPublisher")
169
+ assignedPolicies Policy[] @relation("PolicyAssignee") // Policies where this member is an assignee
170
+ approvedPolicies Policy[] @relation("PolicyApprover") // Policies where this member is an approver
171
+ approvedSOADocuments SOADocument[] @relation("SOADocumentApprover") // SOA documents where this member is an approver
172
+ risks Risk[]
173
+ tasks Task[]
174
+ vendors Vendor[]
175
+ comments Comment[]
176
+ auditLogs AuditLog[]
177
+ reviewedAccessRequests TrustAccessRequest[] @relation("TrustAccessRequestReviewer")
178
+ issuedGrants TrustAccessGrant[] @relation("IssuedGrants")
179
+ revokedGrants TrustAccessGrant[] @relation("RevokedGrants")
180
+ createdTaskItems TaskItem[] @relation("TaskItemCreator")
181
+ updatedTaskItems TaskItem[] @relation("TaskItemUpdater")
182
+ assignedTaskItems TaskItem[] @relation("TaskItemAssignee")
183
+ createdFindings Finding[] @relation("FindingCreatedBy")
184
+ publishedPolicyVersions PolicyVersion[] @relation("PolicyVersionPublisher")
185
+ approvedTasks Task[] @relation("TaskApprover")
186
+ devices Device[]
174
187
  }
175
188
 
176
189
  model Invitation {
@@ -196,6 +209,23 @@ enum Role {
196
209
  contractor
197
210
  }
198
211
 
212
+ // Custom roles for dynamic access control
213
+ // This table stores organization-specific custom roles created via better-auth
214
+ // See: https://www.better-auth.com/docs/plugins/organization#dynamic-access-control
215
+ model OrganizationRole {
216
+ id String @id @default(dbgenerated("generate_prefixed_cuid('rol'::text)"))
217
+ name String
218
+ permissions String @db.Text // Stored as serialized JSON string for better-auth compatibility
219
+ obligations String @default("{}") @db.Text // JSON: { compliance?: boolean }
220
+ organizationId String
221
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
222
+ createdAt DateTime @default(now())
223
+ updatedAt DateTime @updatedAt
224
+
225
+ @@unique([organizationId, name])
226
+ @@map("organization_role")
227
+ }
228
+
199
229
  enum PolicyStatus {
200
230
  draft
201
231
  published
@@ -232,7 +262,7 @@ model EvidenceAutomationRun {
232
262
  triggeredBy EvidenceAutomationTrigger @default(scheduled)
233
263
  runDuration Int? // in milliseconds
234
264
  version Int? // Version number that was executed (null = draft)
235
- Task Task? @relation(fields: [taskId], references: [id])
265
+ task Task? @relation(fields: [taskId], references: [id])
236
266
  taskId String?
237
267
 
238
268
  @@index([evidenceAutomationId])
@@ -455,6 +485,18 @@ model Context {
455
485
  }
456
486
 
457
487
 
488
+ // ===== control-document-type.prisma =====
489
+ model ControlDocumentType {
490
+ id String @id @default(dbgenerated("generate_prefixed_cuid('cdt'::text)"))
491
+ controlId String
492
+ control Control @relation(fields: [controlId], references: [id], onDelete: Cascade)
493
+ formType EvidenceFormType
494
+
495
+ @@unique([controlId, formType])
496
+ @@index([controlId])
497
+ }
498
+
499
+
458
500
  // ===== control.prisma =====
459
501
  model Control {
460
502
  // Metadata
@@ -474,11 +516,173 @@ model Control {
474
516
  policies Policy[]
475
517
  controlTemplateId String?
476
518
  controlTemplate FrameworkEditorControlTemplate? @relation(fields: [controlTemplateId], references: [id])
519
+ controlDocumentTypes ControlDocumentType[]
477
520
 
478
521
  @@index([organizationId])
479
522
  }
480
523
 
481
524
 
525
+ // ===== device.prisma =====
526
+ model Device {
527
+ id String @id @default(dbgenerated("generate_prefixed_cuid('dev'::text)"))
528
+ name String
529
+ hostname String
530
+ platform DevicePlatform
531
+ osVersion String
532
+ serialNumber String?
533
+ hardwareModel String?
534
+
535
+ memberId String
536
+ member Member @relation(fields: [memberId], references: [id], onDelete: Cascade)
537
+ organizationId String
538
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
539
+
540
+ isCompliant Boolean @default(false)
541
+ diskEncryptionEnabled Boolean @default(false)
542
+ antivirusEnabled Boolean @default(false)
543
+ passwordPolicySet Boolean @default(false)
544
+ screenLockEnabled Boolean @default(false)
545
+ checkDetails Json?
546
+
547
+ lastCheckIn DateTime?
548
+ agentVersion String?
549
+ installedAt DateTime @default(now())
550
+ updatedAt DateTime @updatedAt
551
+
552
+ @@unique([serialNumber, organizationId])
553
+ @@index([memberId])
554
+ @@index([organizationId])
555
+ @@index([isCompliant])
556
+ }
557
+
558
+ enum DevicePlatform {
559
+ macos
560
+ windows
561
+ linux
562
+ }
563
+
564
+
565
+ // ===== dynamic-integration.prisma =====
566
+ // ===== Dynamic Integration Platform =====
567
+ // Stores integration manifests and declarative check definitions in the database
568
+ // Enables adding new integrations without code changes or deployments
569
+
570
+ /// Stores a full integration manifest as JSON — replaces hand-written TypeScript manifests
571
+ model DynamicIntegration {
572
+ id String @id @default(dbgenerated("generate_prefixed_cuid('din'::text)"))
573
+ /// Unique slug (e.g., "azure-devops", "office-365")
574
+ slug String @unique
575
+ /// Display name
576
+ name String
577
+ /// Short description for catalog
578
+ description String
579
+ /// Category for grouping
580
+ category String
581
+ /// Logo URL
582
+ logoUrl String
583
+ /// URL to documentation
584
+ docsUrl String?
585
+
586
+ /// API base URL for ctx.fetch
587
+ baseUrl String?
588
+ /// Default headers (JSON object)
589
+ defaultHeaders Json?
590
+
591
+ /// Auth strategy config (JSON — matches AuthStrategy type: oauth2/api_key/basic/jwt/custom)
592
+ authConfig Json
593
+
594
+ /// Capabilities JSON array (default ["checks"])
595
+ capabilities Json @default("[\"checks\"]")
596
+
597
+ /// Whether multiple connections per org are allowed
598
+ supportsMultipleConnections Boolean @default(false)
599
+
600
+ /// Declarative sync definition (JSON — DSL steps that produce employee list)
601
+ /// When present and capabilities includes 'sync', enables employee sync
602
+ syncDefinition Json?
603
+
604
+ /// Whether this dynamic integration is active
605
+ isActive Boolean @default(true)
606
+
607
+ createdAt DateTime @default(now())
608
+ updatedAt DateTime @updatedAt
609
+
610
+ checks DynamicCheck[]
611
+
612
+ @@index([slug])
613
+ @@index([category])
614
+ @@index([isActive])
615
+ }
616
+
617
+ /// Stores a declarative check definition — DSL JSON replaces hand-written run() functions
618
+ model DynamicCheck {
619
+ id String @id @default(dbgenerated("generate_prefixed_cuid('dck'::text)"))
620
+
621
+ /// Parent integration
622
+ integrationId String
623
+ integration DynamicIntegration @relation(fields: [integrationId], references: [id], onDelete: Cascade)
624
+
625
+ /// Unique slug within integration (e.g., "mfa_enabled")
626
+ checkSlug String
627
+
628
+ /// Human-readable name
629
+ name String
630
+ /// Description of what this check does
631
+ description String
632
+
633
+ /// Task template ID for auto-completion (references TASK_TEMPLATES)
634
+ taskMapping String?
635
+
636
+ /// Default severity for findings
637
+ defaultSeverity String @default("medium")
638
+
639
+ /// Declarative DSL definition (JSON — the step-by-step instructions)
640
+ definition Json
641
+
642
+ /// Check-level variables (JSON array of CheckVariable)
643
+ variables Json @default("[]")
644
+
645
+ /// Whether this check is enabled
646
+ isEnabled Boolean @default(true)
647
+
648
+ /// Display order
649
+ sortOrder Int @default(0)
650
+
651
+ createdAt DateTime @default(now())
652
+ updatedAt DateTime @updatedAt
653
+
654
+ @@unique([integrationId, checkSlug])
655
+ @@index([integrationId])
656
+ @@index([isEnabled])
657
+ }
658
+
659
+
660
+ // ===== evidence-submission.prisma =====
661
+ model EvidenceSubmission {
662
+ id String @id @default(dbgenerated("generate_prefixed_cuid('evs'::text)"))
663
+ organizationId String
664
+ formType EvidenceFormType
665
+ submittedById String?
666
+ submittedAt DateTime @default(now())
667
+ data Json
668
+ status String @default("pending")
669
+ reviewedById String?
670
+ reviewedAt DateTime?
671
+ reviewReason String?
672
+ createdAt DateTime @default(now())
673
+ updatedAt DateTime @updatedAt
674
+
675
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
676
+ submittedBy User? @relation("EvidenceSubmitter", fields: [submittedById], references: [id], onDelete: SetNull)
677
+ reviewedBy User? @relation("EvidenceReviewer", fields: [reviewedById], references: [id], onDelete: SetNull)
678
+ findings Finding[]
679
+
680
+ @@index([organizationId, formType, submittedAt])
681
+ @@index([organizationId, formType])
682
+ @@index([submittedById, status])
683
+ }
684
+
685
+
482
686
  // ===== finding.prisma =====
483
687
  enum FindingType {
484
688
  soc2
@@ -515,16 +719,23 @@ model Finding {
515
719
  updatedAt DateTime @updatedAt
516
720
 
517
721
  // Relationships
518
- taskId String
519
- task Task @relation(fields: [taskId], references: [id], onDelete: Cascade)
520
- templateId String?
521
- template FindingTemplate? @relation(fields: [templateId], references: [id])
522
- createdById String
523
- createdBy Member @relation("FindingCreatedBy", fields: [createdById], references: [id])
524
- organizationId String
525
- organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
722
+ taskId String?
723
+ task Task? @relation(fields: [taskId], references: [id], onDelete: Cascade)
724
+ evidenceSubmissionId String?
725
+ evidenceSubmission EvidenceSubmission? @relation(fields: [evidenceSubmissionId], references: [id], onDelete: Cascade)
726
+ evidenceFormType EvidenceFormType?
727
+ templateId String?
728
+ template FindingTemplate? @relation(fields: [templateId], references: [id])
729
+ createdById String?
730
+ createdBy Member? @relation("FindingCreatedBy", fields: [createdById], references: [id])
731
+ createdByAdminId String?
732
+ createdByAdmin User? @relation("AdminFindingCreator", fields: [createdByAdminId], references: [id])
733
+ organizationId String
734
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
526
735
 
527
736
  @@index([taskId])
737
+ @@index([evidenceSubmissionId])
738
+ @@index([evidenceFormType])
528
739
  @@index([organizationId, status])
529
740
  }
530
741
 
@@ -641,6 +852,7 @@ model FrameworkEditorControlTemplate {
641
852
  policyTemplates FrameworkEditorPolicyTemplate[]
642
853
  requirements FrameworkEditorRequirement[]
643
854
  taskTemplates FrameworkEditorTaskTemplate[]
855
+ documentTypes EvidenceFormType[]
644
856
 
645
857
  // Dates
646
858
  createdAt DateTime @default(now())
@@ -743,6 +955,7 @@ model IntegrationConnection {
743
955
  runs IntegrationRun[]
744
956
  findings IntegrationPlatformFinding[]
745
957
  checkRuns IntegrationCheckRun[]
958
+ syncLogs IntegrationSyncLog[]
746
959
 
747
960
  @@index([organizationId])
748
961
  @@index([providerId])
@@ -1063,6 +1276,12 @@ model IntegrationPlatformCredential {
1063
1276
  /// Encrypted client secret
1064
1277
  encryptedClientSecret Json
1065
1278
 
1279
+ /// Masked display hint for client ID (computed at write time)
1280
+ clientIdHint String?
1281
+
1282
+ /// Masked display hint for client secret (computed at write time)
1283
+ clientSecretHint String?
1284
+
1066
1285
  /// Optional: custom scopes (overrides manifest defaults)
1067
1286
  customScopes String[]
1068
1287
 
@@ -1086,6 +1305,54 @@ model IntegrationPlatformCredential {
1086
1305
  }
1087
1306
 
1088
1307
 
1308
+ // ===== integration-sync-log.prisma =====
1309
+ // ===== Integration Sync Log =====
1310
+ // Generic audit trail for integration sync operations (employee sync, role discovery, etc.)
1311
+
1312
+ model IntegrationSyncLog {
1313
+ id String @id @default(dbgenerated("generate_prefixed_cuid('isl'::text)"))
1314
+ connectionId String
1315
+ connection IntegrationConnection @relation(fields: [connectionId], references: [id], onDelete: Cascade)
1316
+ organizationId String
1317
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
1318
+
1319
+ /// Provider slug (e.g., "ramp", "google-workspace", "rippling", "jumpcloud")
1320
+ provider String
1321
+ /// Event type (e.g., "employee_sync", "role_discovery", "role_mapping_save")
1322
+ eventType String
1323
+ /// Execution status
1324
+ status IntegrationSyncLogStatus @default(pending)
1325
+ /// When the operation started executing
1326
+ startedAt DateTime?
1327
+ /// When the operation completed (success or failure)
1328
+ completedAt DateTime?
1329
+ /// Duration in milliseconds
1330
+ durationMs Int?
1331
+ /// Flexible result payload (e.g., { imported, deactivated, reactivated, skipped, errors })
1332
+ result Json?
1333
+ /// Error message if failed
1334
+ error String?
1335
+ /// How the sync was triggered: "manual", "scheduled", "api"
1336
+ triggeredBy String?
1337
+ /// User who triggered the sync (null for automated/cron)
1338
+ userId String?
1339
+
1340
+ createdAt DateTime @default(now())
1341
+
1342
+ @@index([connectionId])
1343
+ @@index([organizationId])
1344
+ @@index([provider])
1345
+ @@index([createdAt])
1346
+ }
1347
+
1348
+ enum IntegrationSyncLogStatus {
1349
+ pending
1350
+ running
1351
+ success
1352
+ failed
1353
+ }
1354
+
1355
+
1089
1356
  // ===== integration.prisma =====
1090
1357
  model Integration {
1091
1358
  id String @id @default(dbgenerated("generate_prefixed_cuid('int'::text)"))
@@ -1155,6 +1422,28 @@ enum KnowledgeBaseDocumentProcessingStatus {
1155
1422
  }
1156
1423
 
1157
1424
 
1425
+ // ===== notification-policy.prisma =====
1426
+ model RoleNotificationSetting {
1427
+ id String @id @default(dbgenerated("generate_prefixed_cuid('rns'::text)"))
1428
+ organizationId String
1429
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
1430
+ role String // "owner", "admin", "auditor", "employee", "contractor", or custom role name
1431
+
1432
+ policyNotifications Boolean @default(true)
1433
+ taskReminders Boolean @default(true)
1434
+ taskAssignments Boolean @default(true)
1435
+ taskMentions Boolean @default(true)
1436
+ weeklyTaskDigest Boolean @default(true)
1437
+ findingNotifications Boolean @default(true)
1438
+
1439
+ createdAt DateTime @default(now())
1440
+ updatedAt DateTime @updatedAt
1441
+
1442
+ @@unique([organizationId, role])
1443
+ @@map("role_notification_setting")
1444
+ }
1445
+
1446
+
1158
1447
  // ===== onboarding.prisma =====
1159
1448
  model Onboarding {
1160
1449
  organizationId String @id
@@ -1176,6 +1465,38 @@ model Onboarding {
1176
1465
  }
1177
1466
 
1178
1467
 
1468
+ // ===== org-chart.prisma =====
1469
+ model OrganizationChart {
1470
+ id String @id @default(dbgenerated("generate_prefixed_cuid('och'::text)"))
1471
+ organizationId String @unique
1472
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
1473
+ name String @default("Organization Chart")
1474
+ type String @default("interactive") // "interactive" or "uploaded"
1475
+ nodes Json @default("[]")
1476
+ edges Json @default("[]")
1477
+ uploadedImageUrl String? // S3 key when type="uploaded"
1478
+ createdAt DateTime @default(now())
1479
+ updatedAt DateTime @updatedAt
1480
+
1481
+ @@index([organizationId])
1482
+ }
1483
+
1484
+
1485
+ // ===== organization-billing.prisma =====
1486
+ model OrganizationBilling {
1487
+ id String @id @default(dbgenerated("generate_prefixed_cuid('obil'::text)"))
1488
+ organizationId String @unique @map("organization_id")
1489
+ stripeCustomerId String @map("stripe_customer_id")
1490
+ createdAt DateTime @default(now()) @map("created_at")
1491
+ updatedAt DateTime @updatedAt @map("updated_at")
1492
+
1493
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
1494
+ pentestSubscription PentestSubscription?
1495
+
1496
+ @@map("organization_billing")
1497
+ }
1498
+
1499
+
1179
1500
  // ===== organization.prisma =====
1180
1501
  model Organization {
1181
1502
  id String @id @default(dbgenerated("generate_prefixed_cuid('org'::text)"))
@@ -1188,7 +1509,12 @@ model Organization {
1188
1509
  website String?
1189
1510
  onboardingCompleted Boolean @default(false)
1190
1511
  hasAccess Boolean @default(false)
1191
- advancedModeEnabled Boolean @default(false)
1512
+ advancedModeEnabled Boolean @default(false)
1513
+ evidenceApprovalEnabled Boolean @default(false)
1514
+ deviceAgentStepEnabled Boolean @default(true)
1515
+ securityTrainingStepEnabled Boolean @default(true)
1516
+ whistleblowerReportEnabled Boolean @default(true)
1517
+ accessRequestFormEnabled Boolean @default(true)
1192
1518
 
1193
1519
  // FleetDM
1194
1520
  fleetDmLabelId Int?
@@ -1212,9 +1538,11 @@ model Organization {
1212
1538
  taskItems TaskItem[]
1213
1539
  comments Comment[]
1214
1540
  attachments Attachment[]
1541
+ evidenceSubmissions EvidenceSubmission[]
1215
1542
  trust Trust[]
1216
1543
  context Context[]
1217
1544
  secrets Secret[]
1545
+ securityPenetrationTestRuns SecurityPenetrationTestRun[]
1218
1546
  trustAccessRequests TrustAccessRequest[]
1219
1547
  trustNdaAgreements TrustNDAAgreement[]
1220
1548
  trustDocuments TrustDocument[]
@@ -1230,6 +1558,11 @@ model Organization {
1230
1558
  // Integration Platform
1231
1559
  integrationConnections IntegrationConnection[]
1232
1560
  integrationOAuthApps IntegrationOAuthApp[]
1561
+ integrationSyncLogs IntegrationSyncLog[]
1562
+
1563
+ // Pentest Subscription
1564
+ pentestSubscription PentestSubscription?
1565
+ billing OrganizationBilling?
1233
1566
 
1234
1567
  // Browser Automation
1235
1568
  browserbaseContext BrowserbaseContext?
@@ -1238,16 +1571,54 @@ model Organization {
1238
1571
  // Findings
1239
1572
  findings Finding[]
1240
1573
 
1574
+ // Device Agent
1575
+ devices Device[]
1576
+
1577
+ // Org Chart
1578
+ organizationChart OrganizationChart?
1579
+
1580
+ // RBAC
1581
+ organizationRoles OrganizationRole[]
1582
+ roleNotificationSettings RoleNotificationSetting[]
1583
+
1241
1584
  @@index([slug])
1242
1585
  }
1243
1586
 
1244
1587
 
1588
+ // ===== pentest-subscription.prisma =====
1589
+ model PentestSubscription {
1590
+ id String @id @default(dbgenerated("generate_prefixed_cuid('psub'::text)"))
1591
+ organizationId String @unique @map("organization_id")
1592
+ organizationBillingId String @unique @map("organization_billing_id")
1593
+ stripeSubscriptionId String @map("stripe_subscription_id")
1594
+ stripePriceId String @map("stripe_price_id")
1595
+ stripeOveragePriceId String? @map("stripe_overage_price_id")
1596
+ status String @default("active") // active | cancelled | past_due
1597
+ includedRunsPerPeriod Int @default(3) @map("included_runs_per_period")
1598
+ currentPeriodStart DateTime @map("current_period_start")
1599
+ currentPeriodEnd DateTime @map("current_period_end")
1600
+ createdAt DateTime @default(now()) @map("created_at")
1601
+ updatedAt DateTime @updatedAt @map("updated_at")
1602
+
1603
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
1604
+ organizationBilling OrganizationBilling @relation(fields: [organizationBillingId], references: [id])
1605
+
1606
+ @@index([organizationId])
1607
+ @@map("pentest_subscriptions")
1608
+ }
1609
+
1610
+
1245
1611
  // ===== policy.prisma =====
1246
1612
  enum PolicyDisplayFormat {
1247
1613
  EDITOR
1248
1614
  PDF
1249
1615
  }
1250
1616
 
1617
+ enum PolicyVisibility {
1618
+ ALL // Visible to everyone in organization
1619
+ DEPARTMENT // Only visible to specified departments
1620
+ }
1621
+
1251
1622
  model Policy {
1252
1623
  id String @id @default(dbgenerated("generate_prefixed_cuid('pol'::text)"))
1253
1624
  name String
@@ -1264,6 +1635,10 @@ model Policy {
1264
1635
  displayFormat PolicyDisplayFormat @default(EDITOR)
1265
1636
  pdfUrl String?
1266
1637
 
1638
+ // Visibility settings (for department-specific policies)
1639
+ visibility PolicyVisibility @default(ALL)
1640
+ visibleToDepartments Departments[] @default([])
1641
+
1267
1642
  // Dates
1268
1643
  createdAt DateTime @default(now())
1269
1644
  updatedAt DateTime @updatedAt
@@ -1475,6 +1850,22 @@ model Secret {
1475
1850
  }
1476
1851
 
1477
1852
 
1853
+ // ===== security-penetration-test-run.prisma =====
1854
+ model SecurityPenetrationTestRun {
1855
+ id String @id @default(dbgenerated("generate_prefixed_cuid('ptr'::text)"))
1856
+ organizationId String @map("organization_id")
1857
+ providerRunId String @map("provider_run_id")
1858
+ createdAt DateTime @default(now()) @map("created_at")
1859
+ updatedAt DateTime @updatedAt @map("updated_at")
1860
+
1861
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
1862
+
1863
+ @@unique([providerRunId])
1864
+ @@index([organizationId])
1865
+ @@map("security_penetration_test_runs")
1866
+ }
1867
+
1868
+
1478
1869
  // ===== security-questionnaire-manual-answer.prisma =====
1479
1870
  model SecurityQuestionnaireManualAnswer {
1480
1871
  id String @id @default(dbgenerated("generate_prefixed_cuid('sqma'::text)"))
@@ -1511,17 +1902,20 @@ model ApiKey {
1511
1902
  id String @id @default(dbgenerated("generate_prefixed_cuid('apk'::text)"))
1512
1903
  name String
1513
1904
  key String @unique
1905
+ keyPrefix String?
1514
1906
  salt String?
1515
1907
  createdAt DateTime @default(now())
1516
1908
  expiresAt DateTime?
1517
1909
  lastUsedAt DateTime?
1518
1910
  isActive Boolean @default(true)
1911
+ scopes String[] @default([])
1519
1912
 
1520
1913
  organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
1521
1914
  organizationId String
1522
1915
 
1523
1916
  @@index([organizationId])
1524
1917
  @@index([key])
1918
+ @@index([keyPrefix])
1525
1919
  }
1526
1920
 
1527
1921
  model AuditLog {
@@ -1561,6 +1955,21 @@ enum AuditLogEntityType {
1561
1955
  finding
1562
1956
  }
1563
1957
 
1958
+ enum EvidenceFormType {
1959
+ board_meeting @map("board-meeting")
1960
+ it_leadership_meeting @map("it-leadership-meeting")
1961
+ risk_committee_meeting @map("risk-committee-meeting")
1962
+ meeting
1963
+ access_request @map("access-request")
1964
+ whistleblower_report @map("whistleblower-report")
1965
+ penetration_test @map("penetration-test")
1966
+ rbac_matrix @map("rbac-matrix")
1967
+ infrastructure_inventory @map("infrastructure-inventory")
1968
+ employee_performance_evaluation @map("employee-performance-evaluation")
1969
+ network_diagram @map("network-diagram")
1970
+ tabletop_exercise @map("tabletop-exercise")
1971
+ }
1972
+
1564
1973
  model GlobalVendors {
1565
1974
  website String @id @unique
1566
1975
  company_name String?
@@ -1846,14 +2255,21 @@ model Task {
1846
2255
  evidenceAutomations EvidenceAutomation[]
1847
2256
  browserAutomations BrowserAutomation[]
1848
2257
 
1849
- EvidenceAutomationRun EvidenceAutomationRun[]
2258
+ evidenceAutomationRuns EvidenceAutomationRun[]
1850
2259
  integrationCheckRuns IntegrationCheckRun[]
1851
2260
  findings Finding[]
2261
+
2262
+ // Evidence approval
2263
+ approverId String?
2264
+ approver Member? @relation("TaskApprover", fields: [approverId], references: [id])
2265
+ approvedAt DateTime?
2266
+ previousStatus TaskStatus?
1852
2267
  }
1853
2268
 
1854
2269
  enum TaskStatus {
1855
2270
  todo
1856
2271
  in_progress
2272
+ in_review
1857
2273
  done
1858
2274
  not_relevant
1859
2275
  failed