@ubiquity-os/plugin-sdk
Version:
SDK for plugin support.
136 lines (128 loc) • 5.61 kB
text/typescript
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 };