@ubiquity-os/plugin-sdk
Version:
SDK for plugin support.
139 lines (135 loc) • 5.46 kB
TypeScript
import { EmitterWebhookEventName, EmitterWebhookEvent } from '@octokit/webhooks';
import * as _ubiquity_os_ubiquity_os_logger from '@ubiquity-os/ubiquity-os-logger';
import { LogReturn, Metadata, Logs } from '@ubiquity-os/ubiquity-os-logger';
import { RestEndpointMethodTypes } from '@octokit/plugin-rest-endpoint-methods';
import { customOctokit } from './octokit.js';
interface CommentOptions {
raw?: boolean;
updateComment?: boolean;
commentKind?: string;
}
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;
}
type GraphqlCommentNode = {
id: string;
body?: string | null;
isMinimized?: boolean | null;
minimizedReason?: string | null;
author?: {
login?: string | null;
} | null;
};
declare class CommentHandler {
static readonly HEADER_NAME = "UbiquityOS";
private _lastCommentId;
private _commandResponsePolicyApplied;
_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;
_getCommentNodeId(context: Context): string | null;
_extractIssueContext(context: Context): IssueContext | null;
_extractIssueLocator(context: Context): {
owner: string;
repo: string;
issueNumber: number;
} | null;
_shouldApplyCommandResponsePolicy(context: Context): boolean;
_isCommandResponseComment(body: string | null | undefined): boolean;
_getGraphqlClient(context: Context): ((query: string, variables?: Record<string, unknown>) => Promise<unknown>) | null;
_fetchRecentComments(context: Context, locator: {
owner: string;
repo: string;
issueNumber: number;
}, last?: number): Promise<GraphqlCommentNode[]>;
_findPreviousCommandResponseComment(comments: GraphqlCommentNode[], currentCommentId: string | null): GraphqlCommentNode | null;
_minimizeComment(context: Context, commentNodeId: string, classifier?: "RESOLVED" | "OUTDATED"): Promise<void>;
_applyCommandResponsePolicy(context: Context): Promise<void>;
_processMessage(context: Context, message: LogReturn | Error): {
metadata: {
status?: number | undefined;
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): {
header: string;
jsonPretty: string;
};
_formatMetadataContent(logMessage: LogReturn["logMessage"], header: string, jsonPretty: string): string;
createCommentBody(context: Context, message: LogReturn | Error, options?: Pick<CommentOptions, "raw">): string;
private _createCommentBody;
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;
authToken: string;
ubiquityKernelToken?: string;
octokit: InstanceType<typeof customOctokit>;
config: TConfig;
env: TEnv;
logger: Logs;
commentHandler: CommentHandler;
}
export { type Context as C, CommentHandler as a };