@trycompai/db 1.3.22-canary.0 → 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.
- package/dist/client.d.ts +2 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +4 -5
- package/dist/client.ts +5 -2
- package/dist/generated/prisma/client.d.ts +427 -0
- package/dist/generated/prisma/client.d.ts.map +1 -0
- package/dist/generated/prisma/client.js +73 -0
- package/dist/generated/prisma/commonInputTypes.d.ts +2082 -0
- package/dist/generated/prisma/commonInputTypes.d.ts.map +1 -0
- package/dist/generated/prisma/commonInputTypes.js +11 -0
- package/dist/generated/prisma/enums.d.ts +367 -0
- package/dist/generated/prisma/enums.d.ts.map +1 -0
- package/dist/generated/prisma/enums.js +329 -0
- package/dist/generated/prisma/internal/class.d.ts +1000 -0
- package/dist/generated/prisma/internal/class.d.ts.map +1 -0
- package/dist/generated/prisma/internal/class.js +87 -0
- package/dist/generated/prisma/internal/prismaNamespace.d.ts +8063 -0
- package/dist/generated/prisma/internal/prismaNamespace.d.ts.map +1 -0
- package/dist/generated/prisma/internal/prismaNamespace.js +1256 -0
- package/dist/generated/prisma/models/Account.d.ts +1456 -0
- package/dist/generated/prisma/models/Account.d.ts.map +1 -0
- package/dist/generated/prisma/models/Account.js +2 -0
- package/dist/generated/prisma/models/ApiKey.d.ts +1387 -0
- package/dist/generated/prisma/models/ApiKey.d.ts.map +1 -0
- package/dist/generated/prisma/models/ApiKey.js +2 -0
- package/dist/generated/prisma/models/Attachment.d.ts +1520 -0
- package/dist/generated/prisma/models/Attachment.d.ts.map +1 -0
- package/dist/generated/prisma/models/Attachment.js +2 -0
- package/dist/generated/prisma/models/AuditLog.d.ts +1590 -0
- package/dist/generated/prisma/models/AuditLog.d.ts.map +1 -0
- package/dist/generated/prisma/models/AuditLog.js +2 -0
- package/dist/generated/prisma/models/BrowserAutomation.d.ts +1507 -0
- package/dist/generated/prisma/models/BrowserAutomation.d.ts.map +1 -0
- package/dist/generated/prisma/models/BrowserAutomation.js +2 -0
- package/dist/generated/prisma/models/BrowserAutomationRun.d.ts +1455 -0
- package/dist/generated/prisma/models/BrowserAutomationRun.d.ts.map +1 -0
- package/dist/generated/prisma/models/BrowserAutomationRun.js +2 -0
- package/dist/generated/prisma/models/BrowserbaseContext.d.ts +1139 -0
- package/dist/generated/prisma/models/BrowserbaseContext.d.ts.map +1 -0
- package/dist/generated/prisma/models/BrowserbaseContext.js +2 -0
- package/dist/generated/prisma/models/Comment.d.ts +1502 -0
- package/dist/generated/prisma/models/Comment.d.ts.map +1 -0
- package/dist/generated/prisma/models/Comment.js +2 -0
- package/dist/generated/prisma/models/Context.d.ts +1254 -0
- package/dist/generated/prisma/models/Context.d.ts.map +1 -0
- package/dist/generated/prisma/models/Context.js +2 -0
- package/dist/generated/prisma/models/Control.d.ts +1965 -0
- package/dist/generated/prisma/models/Control.d.ts.map +1 -0
- package/dist/generated/prisma/models/Control.js +2 -0
- package/dist/generated/prisma/models/ControlDocumentType.d.ts +1115 -0
- package/dist/generated/prisma/models/ControlDocumentType.d.ts.map +1 -0
- package/dist/generated/prisma/models/ControlDocumentType.js +2 -0
- package/dist/generated/prisma/models/Device.d.ts +1858 -0
- package/dist/generated/prisma/models/Device.d.ts.map +1 -0
- package/dist/generated/prisma/models/Device.js +2 -0
- package/dist/generated/prisma/models/DynamicCheck.d.ts +1517 -0
- package/dist/generated/prisma/models/DynamicCheck.d.ts.map +1 -0
- package/dist/generated/prisma/models/DynamicCheck.js +2 -0
- package/dist/generated/prisma/models/DynamicIntegration.d.ts +1528 -0
- package/dist/generated/prisma/models/DynamicIntegration.d.ts.map +1 -0
- package/dist/generated/prisma/models/DynamicIntegration.js +2 -0
- package/dist/generated/prisma/models/EmployeeTrainingVideoCompletion.d.ts +1146 -0
- package/dist/generated/prisma/models/EmployeeTrainingVideoCompletion.d.ts.map +1 -0
- package/dist/generated/prisma/models/EmployeeTrainingVideoCompletion.js +2 -0
- package/dist/generated/prisma/models/EvidenceAutomation.d.ts +1533 -0
- package/dist/generated/prisma/models/EvidenceAutomation.d.ts.map +1 -0
- package/dist/generated/prisma/models/EvidenceAutomation.js +2 -0
- package/dist/generated/prisma/models/EvidenceAutomationRun.d.ts +1833 -0
- package/dist/generated/prisma/models/EvidenceAutomationRun.d.ts.map +1 -0
- package/dist/generated/prisma/models/EvidenceAutomationRun.js +2 -0
- package/dist/generated/prisma/models/EvidenceAutomationVersion.d.ts +1331 -0
- package/dist/generated/prisma/models/EvidenceAutomationVersion.d.ts.map +1 -0
- package/dist/generated/prisma/models/EvidenceAutomationVersion.js +2 -0
- package/dist/generated/prisma/models/EvidenceSubmission.d.ts +1905 -0
- package/dist/generated/prisma/models/EvidenceSubmission.d.ts.map +1 -0
- package/dist/generated/prisma/models/EvidenceSubmission.js +2 -0
- package/dist/generated/prisma/models/Finding.d.ts +2386 -0
- package/dist/generated/prisma/models/Finding.d.ts.map +1 -0
- package/dist/generated/prisma/models/Finding.js +2 -0
- package/dist/generated/prisma/models/FindingTemplate.d.ts +1264 -0
- package/dist/generated/prisma/models/FindingTemplate.d.ts.map +1 -0
- package/dist/generated/prisma/models/FindingTemplate.js +2 -0
- package/dist/generated/prisma/models/FleetPolicyResult.d.ts +1484 -0
- package/dist/generated/prisma/models/FleetPolicyResult.d.ts.map +1 -0
- package/dist/generated/prisma/models/FleetPolicyResult.js +2 -0
- package/dist/generated/prisma/models/FrameworkEditorControlTemplate.d.ts +1669 -0
- package/dist/generated/prisma/models/FrameworkEditorControlTemplate.d.ts.map +1 -0
- package/dist/generated/prisma/models/FrameworkEditorControlTemplate.js +2 -0
- package/dist/generated/prisma/models/FrameworkEditorFramework.d.ts +1581 -0
- package/dist/generated/prisma/models/FrameworkEditorFramework.d.ts.map +1 -0
- package/dist/generated/prisma/models/FrameworkEditorFramework.js +2 -0
- package/dist/generated/prisma/models/FrameworkEditorPolicyTemplate.d.ts +1428 -0
- package/dist/generated/prisma/models/FrameworkEditorPolicyTemplate.d.ts.map +1 -0
- package/dist/generated/prisma/models/FrameworkEditorPolicyTemplate.js +2 -0
- package/dist/generated/prisma/models/FrameworkEditorRequirement.d.ts +1525 -0
- package/dist/generated/prisma/models/FrameworkEditorRequirement.d.ts.map +1 -0
- package/dist/generated/prisma/models/FrameworkEditorRequirement.js +2 -0
- package/dist/generated/prisma/models/FrameworkEditorTaskTemplate.d.ts +1434 -0
- package/dist/generated/prisma/models/FrameworkEditorTaskTemplate.d.ts.map +1 -0
- package/dist/generated/prisma/models/FrameworkEditorTaskTemplate.js +2 -0
- package/dist/generated/prisma/models/FrameworkEditorVideo.d.ts +1054 -0
- package/dist/generated/prisma/models/FrameworkEditorVideo.d.ts.map +1 -0
- package/dist/generated/prisma/models/FrameworkEditorVideo.js +2 -0
- package/dist/generated/prisma/models/FrameworkInstance.d.ts +1321 -0
- package/dist/generated/prisma/models/FrameworkInstance.d.ts.map +1 -0
- package/dist/generated/prisma/models/FrameworkInstance.js +2 -0
- package/dist/generated/prisma/models/GlobalVendors.d.ts +1358 -0
- package/dist/generated/prisma/models/GlobalVendors.d.ts.map +1 -0
- package/dist/generated/prisma/models/GlobalVendors.js +2 -0
- package/dist/generated/prisma/models/Integration.d.ts +1363 -0
- package/dist/generated/prisma/models/Integration.d.ts.map +1 -0
- package/dist/generated/prisma/models/Integration.js +2 -0
- package/dist/generated/prisma/models/IntegrationCheckResult.d.ts +1408 -0
- package/dist/generated/prisma/models/IntegrationCheckResult.d.ts.map +1 -0
- package/dist/generated/prisma/models/IntegrationCheckResult.js +2 -0
- package/dist/generated/prisma/models/IntegrationCheckRun.d.ts +1958 -0
- package/dist/generated/prisma/models/IntegrationCheckRun.d.ts.map +1 -0
- package/dist/generated/prisma/models/IntegrationCheckRun.js +2 -0
- package/dist/generated/prisma/models/IntegrationConnection.d.ts +2472 -0
- package/dist/generated/prisma/models/IntegrationConnection.d.ts.map +1 -0
- package/dist/generated/prisma/models/IntegrationConnection.js +2 -0
- package/dist/generated/prisma/models/IntegrationCredentialVersion.d.ts +1298 -0
- package/dist/generated/prisma/models/IntegrationCredentialVersion.d.ts.map +1 -0
- package/dist/generated/prisma/models/IntegrationCredentialVersion.js +2 -0
- package/dist/generated/prisma/models/IntegrationOAuthApp.d.ts +1362 -0
- package/dist/generated/prisma/models/IntegrationOAuthApp.d.ts.map +1 -0
- package/dist/generated/prisma/models/IntegrationOAuthApp.js +2 -0
- package/dist/generated/prisma/models/IntegrationOAuthState.d.ts +1131 -0
- package/dist/generated/prisma/models/IntegrationOAuthState.d.ts.map +1 -0
- package/dist/generated/prisma/models/IntegrationOAuthState.js +2 -0
- package/dist/generated/prisma/models/IntegrationPlatformCredential.d.ts +1237 -0
- package/dist/generated/prisma/models/IntegrationPlatformCredential.d.ts.map +1 -0
- package/dist/generated/prisma/models/IntegrationPlatformCredential.js +2 -0
- package/dist/generated/prisma/models/IntegrationPlatformFinding.d.ts +1652 -0
- package/dist/generated/prisma/models/IntegrationPlatformFinding.d.ts.map +1 -0
- package/dist/generated/prisma/models/IntegrationPlatformFinding.js +2 -0
- package/dist/generated/prisma/models/IntegrationProvider.d.ts +1300 -0
- package/dist/generated/prisma/models/IntegrationProvider.d.ts.map +1 -0
- package/dist/generated/prisma/models/IntegrationProvider.js +2 -0
- package/dist/generated/prisma/models/IntegrationResult.d.ts +1539 -0
- package/dist/generated/prisma/models/IntegrationResult.d.ts.map +1 -0
- package/dist/generated/prisma/models/IntegrationResult.js +2 -0
- package/dist/generated/prisma/models/IntegrationRun.d.ts +1596 -0
- package/dist/generated/prisma/models/IntegrationRun.d.ts.map +1 -0
- package/dist/generated/prisma/models/IntegrationRun.js +2 -0
- package/dist/generated/prisma/models/IntegrationSyncLog.d.ts +1716 -0
- package/dist/generated/prisma/models/IntegrationSyncLog.d.ts.map +1 -0
- package/dist/generated/prisma/models/IntegrationSyncLog.js +2 -0
- package/dist/generated/prisma/models/Invitation.d.ts +1404 -0
- package/dist/generated/prisma/models/Invitation.d.ts.map +1 -0
- package/dist/generated/prisma/models/Invitation.js +2 -0
- package/dist/generated/prisma/models/Jwks.d.ts +998 -0
- package/dist/generated/prisma/models/Jwks.d.ts.map +1 -0
- package/dist/generated/prisma/models/Jwks.js +2 -0
- package/dist/generated/prisma/models/KnowledgeBaseDocument.d.ts +1463 -0
- package/dist/generated/prisma/models/KnowledgeBaseDocument.d.ts.map +1 -0
- package/dist/generated/prisma/models/KnowledgeBaseDocument.js +2 -0
- package/dist/generated/prisma/models/Member.d.ts +5530 -0
- package/dist/generated/prisma/models/Member.d.ts.map +1 -0
- package/dist/generated/prisma/models/Member.js +2 -0
- package/dist/generated/prisma/models/Onboarding.d.ts +1376 -0
- package/dist/generated/prisma/models/Onboarding.d.ts.map +1 -0
- package/dist/generated/prisma/models/Onboarding.js +2 -0
- package/dist/generated/prisma/models/Organization.d.ts +14367 -0
- package/dist/generated/prisma/models/Organization.d.ts.map +1 -0
- package/dist/generated/prisma/models/Organization.js +2 -0
- package/dist/generated/prisma/models/OrganizationBilling.d.ts +1222 -0
- package/dist/generated/prisma/models/OrganizationBilling.d.ts.map +1 -0
- package/dist/generated/prisma/models/OrganizationBilling.js +2 -0
- package/dist/generated/prisma/models/OrganizationChart.d.ts +1248 -0
- package/dist/generated/prisma/models/OrganizationChart.d.ts.map +1 -0
- package/dist/generated/prisma/models/OrganizationChart.js +2 -0
- package/dist/generated/prisma/models/OrganizationRole.d.ts +1251 -0
- package/dist/generated/prisma/models/OrganizationRole.d.ts.map +1 -0
- package/dist/generated/prisma/models/OrganizationRole.js +2 -0
- package/dist/generated/prisma/models/PentestSubscription.d.ts +1497 -0
- package/dist/generated/prisma/models/PentestSubscription.d.ts.map +1 -0
- package/dist/generated/prisma/models/PentestSubscription.js +2 -0
- package/dist/generated/prisma/models/Policy.d.ts +3356 -0
- package/dist/generated/prisma/models/Policy.d.ts.map +1 -0
- package/dist/generated/prisma/models/Policy.js +2 -0
- package/dist/generated/prisma/models/PolicyVersion.d.ts +1619 -0
- package/dist/generated/prisma/models/PolicyVersion.d.ts.map +1 -0
- package/dist/generated/prisma/models/PolicyVersion.js +2 -0
- package/dist/generated/prisma/models/Questionnaire.d.ts +1808 -0
- package/dist/generated/prisma/models/Questionnaire.d.ts.map +1 -0
- package/dist/generated/prisma/models/Questionnaire.js +2 -0
- package/dist/generated/prisma/models/QuestionnaireQuestionAnswer.d.ts +1422 -0
- package/dist/generated/prisma/models/QuestionnaireQuestionAnswer.d.ts.map +1 -0
- package/dist/generated/prisma/models/QuestionnaireQuestionAnswer.js +2 -0
- package/dist/generated/prisma/models/RequirementMap.d.ts +1345 -0
- package/dist/generated/prisma/models/RequirementMap.d.ts.map +1 -0
- package/dist/generated/prisma/models/RequirementMap.js +2 -0
- package/dist/generated/prisma/models/Risk.d.ts +1975 -0
- package/dist/generated/prisma/models/Risk.d.ts.map +1 -0
- package/dist/generated/prisma/models/Risk.js +2 -0
- package/dist/generated/prisma/models/RoleNotificationSetting.d.ts +1391 -0
- package/dist/generated/prisma/models/RoleNotificationSetting.d.ts.map +1 -0
- package/dist/generated/prisma/models/RoleNotificationSetting.js +2 -0
- package/dist/generated/prisma/models/SOAAnswer.d.ts +1498 -0
- package/dist/generated/prisma/models/SOAAnswer.d.ts.map +1 -0
- package/dist/generated/prisma/models/SOAAnswer.js +2 -0
- package/dist/generated/prisma/models/SOADocument.d.ts +2272 -0
- package/dist/generated/prisma/models/SOADocument.d.ts.map +1 -0
- package/dist/generated/prisma/models/SOADocument.js +2 -0
- package/dist/generated/prisma/models/SOAFrameworkConfiguration.d.ts +1445 -0
- package/dist/generated/prisma/models/SOAFrameworkConfiguration.d.ts.map +1 -0
- package/dist/generated/prisma/models/SOAFrameworkConfiguration.js +2 -0
- package/dist/generated/prisma/models/Secret.d.ts +1321 -0
- package/dist/generated/prisma/models/Secret.d.ts.map +1 -0
- package/dist/generated/prisma/models/Secret.js +2 -0
- package/dist/generated/prisma/models/SecurityPenetrationTestRun.d.ts +1176 -0
- package/dist/generated/prisma/models/SecurityPenetrationTestRun.d.ts.map +1 -0
- package/dist/generated/prisma/models/SecurityPenetrationTestRun.js +2 -0
- package/dist/generated/prisma/models/SecurityQuestionnaireManualAnswer.d.ts +1510 -0
- package/dist/generated/prisma/models/SecurityQuestionnaireManualAnswer.d.ts.map +1 -0
- package/dist/generated/prisma/models/SecurityQuestionnaireManualAnswer.js +2 -0
- package/dist/generated/prisma/models/Session.d.ts +1351 -0
- package/dist/generated/prisma/models/Session.d.ts.map +1 -0
- package/dist/generated/prisma/models/Session.js +2 -0
- package/dist/generated/prisma/models/Task.d.ts +3980 -0
- package/dist/generated/prisma/models/Task.d.ts.map +1 -0
- package/dist/generated/prisma/models/Task.js +2 -0
- package/dist/generated/prisma/models/TaskItem.d.ts +1961 -0
- package/dist/generated/prisma/models/TaskItem.d.ts.map +1 -0
- package/dist/generated/prisma/models/TaskItem.js +2 -0
- package/dist/generated/prisma/models/Trust.d.ts +2242 -0
- package/dist/generated/prisma/models/Trust.d.ts.map +1 -0
- package/dist/generated/prisma/models/Trust.js +2 -0
- package/dist/generated/prisma/models/TrustAccessGrant.d.ts +1888 -0
- package/dist/generated/prisma/models/TrustAccessGrant.d.ts.map +1 -0
- package/dist/generated/prisma/models/TrustAccessGrant.js +2 -0
- package/dist/generated/prisma/models/TrustAccessRequest.d.ts +2103 -0
- package/dist/generated/prisma/models/TrustAccessRequest.d.ts.map +1 -0
- package/dist/generated/prisma/models/TrustAccessRequest.js +2 -0
- package/dist/generated/prisma/models/TrustCustomLink.d.ts +1354 -0
- package/dist/generated/prisma/models/TrustCustomLink.d.ts.map +1 -0
- package/dist/generated/prisma/models/TrustCustomLink.js +2 -0
- package/dist/generated/prisma/models/TrustDocument.d.ts +1281 -0
- package/dist/generated/prisma/models/TrustDocument.d.ts.map +1 -0
- package/dist/generated/prisma/models/TrustDocument.js +2 -0
- package/dist/generated/prisma/models/TrustNDAAgreement.d.ts +1877 -0
- package/dist/generated/prisma/models/TrustNDAAgreement.d.ts.map +1 -0
- package/dist/generated/prisma/models/TrustNDAAgreement.js +2 -0
- package/dist/generated/prisma/models/TrustResource.d.ts +1328 -0
- package/dist/generated/prisma/models/TrustResource.d.ts.map +1 -0
- package/dist/generated/prisma/models/TrustResource.js +2 -0
- package/dist/generated/prisma/models/User.d.ts +3070 -0
- package/dist/generated/prisma/models/User.d.ts.map +1 -0
- package/dist/generated/prisma/models/User.js +2 -0
- package/dist/generated/prisma/models/Vendor.d.ts +2307 -0
- package/dist/generated/prisma/models/Vendor.d.ts.map +1 -0
- package/dist/generated/prisma/models/Vendor.js +2 -0
- package/dist/generated/prisma/models/VendorContact.d.ts +1246 -0
- package/dist/generated/prisma/models/VendorContact.d.ts.map +1 -0
- package/dist/generated/prisma/models/VendorContact.js +2 -0
- package/dist/generated/prisma/models/Verification.d.ts +1026 -0
- package/dist/generated/prisma/models/Verification.d.ts.map +1 -0
- package/dist/generated/prisma/models/Verification.js +2 -0
- package/dist/generated/prisma/models.d.ts +82 -0
- package/dist/generated/prisma/models.d.ts.map +1 -0
- package/dist/generated/prisma/models.js +2 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -3
- package/dist/index.ts +1 -2
- package/dist/postinstall.js +1 -1
- package/dist/schema.prisma +458 -39
- package/package.json +56 -55
package/dist/schema.prisma
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
generator client {
|
|
2
|
-
provider = "prisma-client
|
|
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
|
|
69
|
-
auditLog
|
|
70
|
-
integrationResults
|
|
71
|
-
invitations
|
|
72
|
-
members
|
|
73
|
-
sessions
|
|
74
|
-
fleetPolicyResults
|
|
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
|
|
142
|
+
id String @id @default(dbgenerated("generate_prefixed_cuid('jwk'::text)"))
|
|
136
143
|
publicKey String
|
|
137
144
|
privateKey String
|
|
138
|
-
createdAt DateTime
|
|
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
|
|
159
|
-
approvedPolicies
|
|
160
|
-
approvedSOADocuments
|
|
161
|
-
risks
|
|
162
|
-
tasks
|
|
163
|
-
vendors
|
|
164
|
-
comments
|
|
165
|
-
auditLogs
|
|
166
|
-
reviewedAccessRequests
|
|
167
|
-
issuedGrants
|
|
168
|
-
revokedGrants
|
|
169
|
-
createdTaskItems
|
|
170
|
-
updatedTaskItems
|
|
171
|
-
assignedTaskItems
|
|
172
|
-
createdFindings
|
|
173
|
-
publishedPolicyVersions PolicyVersion[]
|
|
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
|
-
|
|
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
|
|
519
|
-
task
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
@@ -1917,6 +2333,9 @@ model Trust {
|
|
|
1917
2333
|
overviewContent String? // Markdown content with links
|
|
1918
2334
|
showOverview Boolean @default(false)
|
|
1919
2335
|
|
|
2336
|
+
// Favicon for trust portal (stored in S3)
|
|
2337
|
+
favicon String?
|
|
2338
|
+
|
|
1920
2339
|
@@id([status, organizationId])
|
|
1921
2340
|
@@unique([organizationId])
|
|
1922
2341
|
@@index([organizationId])
|