UNPKG

@ubiquity-os/plugin-sdk

Version:

SDK for plugin support.

136 lines (128 loc) 5.61 kB
import * as hono_types from 'hono/types'; import { EmitterWebhookEventName, EmitterWebhookEvent } from '@octokit/webhooks'; import { Hono } from 'hono'; import * as _ubiquity_os_ubiquity_os_logger from '@ubiquity-os/ubiquity-os-logger'; import { LogReturn, Metadata, Logs, LogLevel } from '@ubiquity-os/ubiquity-os-logger'; import { RestEndpointMethodTypes } from '@octokit/plugin-rest-endpoint-methods'; import { customOctokit } from './octokit.mjs'; import { Manifest } from './manifest.mjs'; import { TAnySchema } from '@sinclair/typebox'; import '@octokit/core/dist-types/types'; import '@octokit/plugin-paginate-graphql'; import '@octokit/plugin-paginate-rest'; import '@octokit/request-error'; import '@octokit/core'; interface CommentOptions { raw?: boolean; updateComment?: boolean; } type PostedGithubComment = RestEndpointMethodTypes["issues"]["updateComment"]["response"]["data"] | RestEndpointMethodTypes["issues"]["createComment"]["response"]["data"] | RestEndpointMethodTypes["pulls"]["createReplyForReviewComment"]["response"]["data"]; type WithIssueNumber<T> = T & { issueNumber: number; }; interface IssueContext { issueNumber: number; commentId?: number; owner: string; repo: string; } declare class CommentHandler { static readonly HEADER_NAME = "UbiquityOS"; private _lastCommentId; _updateIssueComment(context: Context, params: { owner: string; repo: string; body: string; issueNumber: number; }): Promise<WithIssueNumber<PostedGithubComment>>; _updateReviewComment(context: Context, params: { owner: string; repo: string; body: string; issueNumber: number; }): Promise<WithIssueNumber<PostedGithubComment>>; _createNewComment(context: Context, params: { owner: string; repo: string; body: string; issueNumber: number; commentId?: number; }): Promise<WithIssueNumber<PostedGithubComment>>; _getIssueNumber(context: Context): number | undefined; _getCommentId(context: Context): number | undefined; _extractIssueContext(context: Context): IssueContext | null; _processMessage(context: Context, message: LogReturn | Error): Promise<{ metadata: { message: string; name: string; stack: string | undefined; }; logMessage: { raw: string; diff: string; level: _ubiquity_os_ubiquity_os_logger.LogLevel; type: _ubiquity_os_ubiquity_os_logger.LogLevelWithOk; }; } | { metadata: { message: string | undefined; stack: string | string[] | undefined; caller: {} | undefined; error?: Error | { stack: string; } | undefined; name?: string | undefined; } | { logMessage: { raw: string; diff: string; level: _ubiquity_os_ubiquity_os_logger.LogLevel; type: _ubiquity_os_ubiquity_os_logger.LogLevelWithOk; }; metadata?: Metadata; }; logMessage: { raw: string; diff: string; level: _ubiquity_os_ubiquity_os_logger.LogLevel; type: _ubiquity_os_ubiquity_os_logger.LogLevelWithOk; }; }>; _getInstigatorName(context: Context): string; _createMetadataContent(context: Context, metadata: Metadata): Promise<{ header: string; jsonPretty: string; }>; _formatMetadataContent(logMessage: LogReturn["logMessage"], header: string, jsonPretty: string): string; _createCommentBody(context: Context, message: LogReturn | Error, options: CommentOptions): Promise<string>; postComment(context: Context, message: LogReturn | Error, options?: CommentOptions): Promise<WithIssueNumber<PostedGithubComment> | null>; } interface Context<TConfig = unknown, TEnv = unknown, TCommand = unknown, TSupportedEvents extends EmitterWebhookEventName = EmitterWebhookEventName> { eventName: TSupportedEvents; payload: { [K in TSupportedEvents]: K extends EmitterWebhookEventName ? EmitterWebhookEvent<K> : never; }[TSupportedEvents]["payload"]; command: TCommand | null; octokit: InstanceType<typeof customOctokit>; config: TConfig; env: TEnv; logger: Logs; commentHandler: CommentHandler; } type Return = Record<string, unknown> | undefined | void; type HandlerReturn = Promise<Return> | Return; interface Options { kernelPublicKey?: string; logLevel?: LogLevel; postCommentOnError?: boolean; settingsSchema?: TAnySchema; envSchema?: TAnySchema; commandSchema?: TAnySchema; /** * @deprecated This disables signature verification - only for local development */ bypassSignatureVerification?: boolean; } declare function createPlugin<TConfig = unknown, TEnv = unknown, TCommand = unknown, TSupportedEvents extends EmitterWebhookEventName = EmitterWebhookEventName>(handler: (context: Context<TConfig, TEnv, TCommand, TSupportedEvents>) => HandlerReturn, manifest: Manifest, options?: Options): Hono<hono_types.BlankEnv, hono_types.BlankSchema, "/">; declare function createActionsPlugin<TConfig = unknown, TEnv = unknown, TCommand = unknown, TSupportedEvents extends EmitterWebhookEventName = EmitterWebhookEventName>(handler: (context: Context<TConfig, TEnv, TCommand, TSupportedEvents>) => HandlerReturn, options?: Options): Promise<void>; export { CommentHandler, type Context, type Options, createActionsPlugin, createPlugin };