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