FabricFabricSDK

Plugin catalog

All 15 built-in integration plugins, their auth model, and endpoint trees.

PluginAuthNotable endpoints
slackbot_tokenchannels.{list, create, archive}, chat.postMessage, users.list
gmailoauth_2messages.{send, list, get}, labels.{list, create}
githubapi_key / OAuthrepos.{get, list}, issues.{create, list}, pulls.{list, get}
notionapi_key / OAuthpages.{create, update}, databases.{query}, blocks.{children}
linearapi_key / OAuthissues.{create, update, list}, teams.list, users.me
hubspotapi_key / OAuthcontacts.{get, getMany, createOrUpdate, search, delete}
stripeapi_keycustomers.{create, list, delete}, charges.create, subscriptions.create + verifyStripeSignature
google-calendaroauth_2events.{list, insert, delete}, calendars.list
resendapi_keyemails.send, emails.get + verifyResendSignature
asanaoauth_2tasks.{create, list, update}, projects.list + verifyAsanaSignature
airtableapi_keyrecords.{list, create, update, delete}, bases.list
posthogapi_keyevents.capture, featureFlags.{list, evaluate}
discordbot_tokenchannels.{create, delete}, messages.create, guilds.list
twilioapi_key (Basic)messages.create, calls.{create, list} + verifyTwilioSignature
openaiapi_keychat.completions.create, embeddings.create, Assistants v2 threads / runs

Adding a plugin

Run the scaffolder:

fabric integrations generate slack-status

It writes packages/integrations-v2/src/plugins/slack-status/index.ts with a working factory. Replace the demo endpoint, export from src/plugins/index.ts, and you're done.

Plugin shape

Every plugin returns the same FabricPlugin<Id, Schema, Endpoints, Webhooks, Options, AuthType> contract:

return {
  id: 'slack',
  options,
  endpoints: slackEndpointsNested,
  webhooks: slackWebhooksNested,
  hooks: options.hooks,
  webhookHooks: options.webhookHooks,
  endpointMeta: slackEndpointMeta,
  oauthConfig: slackOAuthConfig,
  permissionsConfig: options.permissions ?? { mode: 'cautious' },
  pluginWebhookMatcher: (request) => 'x-slack-signature' in request.headers,
  keyBuilder: async (ctx) => { /* … */ },
};

The runtime uses this contract to synthesize platform actions, register webhook handlers, gate operations on permissions, and resolve auth credentials per call.