Commit Graph

62 Commits

Author SHA1 Message Date
Sacha Al Himdani
7be92defcc Add missing resources to CLI, MCP, and n8n surfaces
Audit all three API surfaces against the console GraphQL schema and add
missing resources: asset, audit, datum, dpia, evidence upload, measure,
obligation, processing activity, rights request, snapshot, task, tia,
trust center (with references/files), and vendor management CLI
commands; MCP tools for deletes, rights requests, trust center, vendor
contacts/services, and compliance external URLs; n8n nodes for
obligation, finding, task, evidence, processing activity, dpia, tia,
rights request, snapshot, audit log, access review, organization
context, trust center, and additional control/measure/vendor operations.

Include MCP e2e test infrastructure (testutil MCP client with API key
auth and JSON-RPC session management) and tests covering all new MCP
tools.

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-04-22 19:02:22 +02:00
Sacha Al Himdani
b603d04d8d Assets as document: replace snapshot with publish workflow
Remove assets from the snapshot system and replace with a publish-based
document workflow that generates versioned ProseMirror documents.

- Remove snapshot_id/source_id from asset and asset_vendor models
- Delete AssetFilter (no longer needed without snapshot filtering)
- Add PublishAssetList service, GraphQL mutation, MCP tool, CLI command,
  and n8n operation
- Add asset_list_document_id column to generated_documents table
- Generate ProseMirror documents with asset inventory tables
  (name, type, amount, data types stored, owner, vendors)
- Add AssetListDocument resolver on Organization type
- Update frontend to remove snapshot routes/params and add publish dialog
- Add e2e tests for asset publish (immediate, with approvers, reuse, RBAC)
- Add migration script for converting legacy asset snapshots to documents
- Exclude ASSETS from snapshot type lists and e2e snapshot tests
- Move generated_documents SQL to coredata methods on Datum and Asset
- Clear generated document and SOA references on soft delete and archive

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-04-21 19:36:17 +02:00
Sacha Al Himdani
e1148f812e Replace implemented column with CMMI maturity level
Drop the boolean implemented/not-implemented state in favor of a
mandatory CMMI maturity level enum (NONE, INITIAL, MANAGED, DEFINED,
QUANTITATIVELY_MANAGED, OPTIMIZING) stored as a Postgres enum type.

The migration backfills existing rows (NOT_IMPLEMENTED → NONE,
IMPLEMENTED → INITIAL), makes the column NOT NULL, and drops the old
implemented column and its enum type.

- maturityLevel is required on CreateControlInput and non-nullable (!)
  in the GraphQL schema
- CLI displays human-readable CMMI labels instead of raw enum tokens
- SOA table and published document use a single Maturity column in
  place of the old Implemented + Maturity columns
- Remove ControlImplementationState type and all implemented references
  across backend, frontend, CLI, MCP, n8n, and E2E tests

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-04-21 11:06:36 +02:00
Alejandro Juan
da91afc2a7 Add CMMI maturity level to compliance controls
Adds an optional CMMI 0-5 maturity level field to Control to support
ISO 27001 clause 9.1 effectiveness measurement and HITRUST CSF maturity
requirements. The field is nullable, framework-agnostic, and exposed
across all four API surfaces (GraphQL, MCP, CLI, n8n) plus the
generated SoA document.

Signed-off-by: Alejandro Juan <alejandrojuan@alejandrojuan.com>
2026-04-21 11:06:36 +02:00
Sacha Al Himdani
6c5c1fa818 Remove meeting feature
Drop meetings and meeting_attendees tables, remove all meeting-related
code across GraphQL, MCP, CLI, N8N, webhooks, frontend, and e2e tests.

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-04-20 15:37:39 +02:00
Sacha Al Himdani
55563226cb Data as document: replace snapshot with publish workflow
Mirror the SOA-to-document migration for the data list. Remove data
from the snapshot system and add a publish workflow that generates a
ProseMirror document for the full organization data inventory.

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-04-20 14:44:00 +02:00
Sacha Al Himdani
5b8918bd5a Add approval quorum and decision read tools
Expose document version approval quorums and decisions
through MCP, CLI, and n8n. This lets users inspect who
approved or rejected a document version, including the
rejection comment, without relying solely on the audit
log.

MCP tools: listDocumentVersionApprovalQuorums,
getDocumentVersionApprovalQuorum,
listDocumentVersionApprovalDecisions,
getDocumentVersionApprovalDecision.

CLI commands: document list-approval-quorums,
view-approval-quorum, list-approval-decisions,
view-approval-decision.

n8n operations: Get/Get Many Approval Quorums and
Approval Decisions on the Document resource.

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-04-20 10:45:17 +02:00
Sacha Al Himdani
9c9c60d0eb Add webhook subscription MCP tools and N8N operations
Expose webhook subscription CRUD and event listing through the MCP API
(list, get, create, update, delete subscriptions + list events) and add
a new webhook resource to the N8N node with matching operations.

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-04-17 13:14:49 +02:00
Sacha Al Himdani
ce1f2fa28c Fix Profile field name in n8n-node GraphQL queries
Rename primaryEmailAddress to emailAddress to match the Profile type
in the GraphQL schema.

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-04-16 12:14:45 +02:00
Sacha Al Himdani
c635492f75 SOA as document: replace export with publish workflow
Statements of Applicability are no longer exported as one-off PDFs.
Instead, each SOA owns a persistent document that accumulates versions
over time, following the same publish/approve lifecycle as authored
documents.

Publishing without approvers publishes immediately; publishing with
approvers creates a draft pending approval via the existing quorum
system. SOAs can also store default approvers that are pre-populated in
the publish dialog.

The SOA is removed from the snapshot system — applicability statements
are now queried directly (snapshot_id IS NULL) rather than through
snapshot copies.

A standalone migration script (cmd/migrate-soa-snapshots-to-documents)
converts existing SOA snapshots into documents with proper ProseMirror
content, preserving version history and approval decisions.

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-04-16 00:01:13 +02:00
Sacha Al Himdani
891bc02f3e Add document filters to MCP and n8n APIs
Align MCP and n8n document listing endpoints with the GraphQL console
API so every document filter is available across all three interfaces.

MCP:
- listDocuments: add status filter, default to ACTIVE
- listDocumentVersions: add statuses filter
- DocumentOrderField: add UPDATED_AT

n8n:
- document getAll: add query, documentTypes, classifications, status filters (default ACTIVE)
- document getAllVersions: add statuses filter
- document getAllSignatures: add states and activeContract filters

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-04-15 13:14:04 +02:00
Sacha Al Himdani
d40b114f0f Add document resource to n8n node and MCP sendSigningNotifications tool
Add a complete document resource to the n8n node with 21 operations
covering documents, versions, and signatures — matching the MCP
specification. Also add the sendSigningNotifications tool to the MCP
API for triggering pending signature reminders.

n8n operations: create, get, getAll, update, delete, archive,
unarchive, getVersion, getAllVersions, createDraftVersion,
updateVersion, deleteDraftVersion, publishMajorVersion,
publishMinorVersion, requestApproval, voidApproval, getSignature,
getAllSignatures, requestSignature, cancelSignature,
sendSigningNotifications.

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-04-13 17:31:06 +02:00
Sacha Al Himdani
851e585b9b Add ISC license headers to Go, TypeScript, and SQL files
Add ISC license headers to all .go, .ts, .tsx, and .sql files
using each file's git history to determine the correct copyright
year or year range. Trademarked icons (brand logos, vendor logos,
compliance framework logos) are excluded.

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-31 13:31:30 +02:00
Sacha Al Himdani
a8f733706b Fix npm audit vulnerabilities
Bump @n8n/node-cli to ^0.24.1 and remove stale form-data override.

Add overrides for transitive sub-dependencies with no upstream fix:
- brace-expansion ^5.0.5 (ReDoS / process hang)
- minimatch@9 ^9.0.9 (ReDoS in 9.0.0-9.0.6)
- langsmith ^0.5.0 (SSRF via tracing header injection)
- handlebars 4.7.9 (prototype pollution / XSS)
- @langchain/community ^1.1.25 (SSRF bypass)

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-27 11:23:41 +01:00
Bryan Frimin
36d517e8ce Fix n8n sub-dep CVE
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-27 08:10:57 +01:00
Sacha Al Himdani
ffd17520ee Fix n8n get many organization
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-03-02 09:14:41 +01:00
Sacha Al Himdani
9dd626ff2d Add connect API to n8n execute
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-02-24 13:35:02 +01:00
Sacha Al Himdani
71b01bf20e Add vendor contacts to n8n
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-02-23 14:33:23 +01:00
Bryan Frimin
2de602f033 Fix n8n get many organization
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-02-23 12:16:50 +01:00
Émile Ré
f75bde75f1 Remove unused schema fields
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-20 18:24:57 +04:00
Émile Ré
0e8f65c553 Reimplement n8n
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-19 16:13:01 +04:00
Sacha Al Himdani
25a6d4170c Add audit nodes
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-02-18 10:06:25 +01:00
Sacha Al Himdani
40e4db9278 Remove deprecated SOA code
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-02-17 15:06:49 +01:00
Émile Ré
f24c5e7590 Remove people from n8n
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-02-12 16:21:13 +04:00
Bryan Frimin
96a62e9ada Add member n8n actions
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-02-06 11:46:00 +01:00
Bryan Frimin
3ef541516c Fix create organization node
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-02-04 15:50:57 +01:00
Bryan Frimin
36b1095441 Fix endpoint api call
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-02-03 09:01:40 +01:00
Bryan Frimin
177d18f3d3 Add user agent
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-02-03 08:01:53 +01:00
Bryan Frimin
e2e695205a Fix n8n use legacy API
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-02-03 07:56:46 +01:00
Émile Ré
0e4ac296cb Update eslint for apps/trust & packages/n8n-node
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-01-22 17:53:44 +04:00
Bryan Frimin
2b11ff90af Revert back to graphql endpoint
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-01-20 07:47:48 -08:00
Émile Ré
4881901a73 Revert console graphql endpoint pathname for tmp n8n app fix
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-01-20 14:56:42 +04:00
Émile Ré
0f562002b6 Fix n8n probo request options
Signed-off-by: Émile Ré <emile@getprobo.com>
2026-01-20 13:32:22 +04:00
Bryan Frimin
0620b7aba2 Add email to n8n-node package
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-01-15 15:49:47 -08:00
Sacha Al Himdani
aba51629c0 Fix people in mcp
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2026-01-09 15:55:26 +01:00
Sacha Al Himdani
8478006c30 Remove useless dependency to n8n
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2025-12-17 10:19:55 +01:00
Sacha Al Himdani
7d58080ab4 Add risk vendor risk assesment to n8n
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2025-12-17 10:17:00 +01:00
Sacha Al Himdani
88572b07da Add service to vendor on n8n
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2025-12-15 11:15:55 +01:00
Sacha Al Himdani
a7fc04e44e Add risks to n8n
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2025-12-11 18:09:01 +01:00
Sacha Al Himdani
ba1c884f4a Add people to n8n
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
2025-12-09 16:04:53 +01:00
Bryan Frimin
1e4813c9d7 Add vendor operations
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2025-12-03 12:04:19 +01:00
Bryan Frimin
06098464b0 Fix n8n always in success mode
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2025-12-03 12:03:15 +01:00
Bryan Frimin
45abd2a57f Add meeting operations
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2025-12-02 15:58:51 +01:00
Bryan Frimin
d718766a94 Fix npm git url
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2025-12-02 15:26:51 +01:00
Bryan Frimin
b926911fe0 Fix missing placeholder
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2025-12-02 15:09:10 +01:00
Bryan Frimin
ba4c229ef1 Add organization operations
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2025-12-02 15:01:09 +01:00
Bryan Frimin
6ba68ee830 Enable trusted publisher
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2025-12-02 14:35:38 +01:00
Bryan Frimin
04f3f3798a Fix npm config
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2025-12-02 14:28:15 +01:00
Bryan Frimin
ae6b13eec8 Fix error type
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2025-12-02 14:17:21 +01:00
Bryan Frimin
d710f5af73 Fix style
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2025-12-02 14:12:58 +01:00