Skip to content

Create Plugin Package Architecture & SDK #43

@coderabbitai

Description

@coderabbitai

Overview

Establish the structure for standalone plugin packages and create the plugin SDK for external plugin development.

Context

Related to PR #40 - Enable modular plugin development similar to n8n's node packages.

Implementation Steps

1. Create Plugin SDK Package

Create packages/plugin-sdk/:

  • Export all core types from plugin-system
  • Provide helper functions: createPlugin(), PluginAuth.OAuth2(), PluginAuth.ApiKey()
  • Include utilities for common operations

2. Define Plugin Package Structure

Standard structure for all plugins:

@axebase/plugin-{name}/
├── package.json           # Plugin manifest
├── src/
│   ├── index.ts          # Plugin entry point
│   ├── trigger.ts        # Trigger implementation (if applicable)
│   ├── actions/          # Actions (if applicable)
│   ├── auth.ts           # Auth configuration
│   └── utils.ts          # Helpers
├── README.md
└── tsconfig.json

3. Package.json Convention

{
  "name": "@axebase/plugin-google-forms",
  "keywords": ["axebase-plugin"],
  "axebase": {
    "plugin": {
      "type": "integration",
      "triggers": ["./dist/trigger.js"],
      "actions": ["./dist/actions/*.js"]
    }
  },
  "peerDependencies": {
    "@axebase/plugin-sdk": "^1.0.0"
  }
}

4. Create Example Plugin

Create @axebase/plugin-google-forms as reference implementation:

  • Full implementation following the architecture
  • Documentation for developers
  • Demonstrates webhook trigger pattern

5. Helper Functions

// Simplified plugin creation
export function createPlugin(config: PluginConfig): Plugin;
export function createTriggerPlugin(config: TriggerPluginConfig): TriggerPlugin;
export function createActionPlugin(config: ActionPluginConfig): ActionPlugin;

// Auth helpers
export const PluginAuth = {
  None: () => ({ type: 'none' }),
  ApiKey: (config) => ({ type: 'api-key', fields: [...] }),
  OAuth2: (config) => ({ type: 'oauth2', ... })
};

Acceptance Criteria

  • Plugin SDK package created and published (or linked locally)
  • Standard plugin package structure documented
  • Helper functions implemented and tested
  • Reference plugin (google-forms) created
  • Plugin discovery via package.json axebase field works
  • Documentation for creating plugins written

Dependencies

Estimated Effort

  • Large (8-12 hours)

Backlink: #40

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingdocumentationImprovements or additions to documentationenhancementNew feature or requestsecurity

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions