Skip to main content

Plugin Authoring & Usage Guide

This guide explains how to write, register, and use plugins in Secure Project, including storage, policy, and adapter plugins.


1. Writing a New Pluginโ€‹

Storage Plugin Example:

import { AuditStoragePlugin, AuditEntry, AuditQuery } from 'secure_project';
export class MyCustomStoragePlugin implements AuditStoragePlugin {
id = 'my-custom-storage';
async saveEntry(entry: AuditEntry) { /* ... */ }
async getEntries(query: AuditQuery) { /* ... */ return []; }
async clear() [/* ... */]
}

Policy Engine Plugin Example:

export class MyPolicyEnginePlugin {
id = 'my-policy-engine';
addPolicy(policy) { /* ... */ }
removePolicy(id) [/* ... */]
listPolicies() { /* ... */ return []; }
evaluate(request) { /* ... */ return { effect: 'allow' } }
}

2. Registering and Using Pluginsโ€‹

import [PluginRegistry] from 'secure_project';
const registry = new PluginRegistry();
registry.registerPlugin('audit-backend', new MyCustomStoragePlugin());
registry.registerPlugin('policy-engine', new MyPolicyEnginePlugin());

3. Exposing Plugins to Drupalโ€‹

All registered plugins are available to Drupal via the Node bridge. Use the listPlugins, getPlugin, and evaluatePolicy methods from PHP or HTTP.


4. Example for Each Plugin Typeโ€‹

  • Storage: See InMemoryAuditStoragePlugin, FileAuditStoragePlugin, PostgresAuditStoragePlugin
  • Policy: See BasicPolicyEnginePlugin, YamlPolicyEnginePlugin, OpaPolicyEnginePlugin
  • Adapter: See ExpressAdapter, KoaAdapter, DrupalAdapter

5. OpenAPI & CI/CD Requirementsโ€‹

  • All plugin APIs must be described in openapi.yaml
  • All plugins must have 95%+ test coverage and pass CI/CD linting and security checks