@shangxueink/koishi-plugin-puppeteer-without-canvas
Version:
91 lines (90 loc) • 4.89 kB
TypeScript
import puppeteer, { Browser, ConnectOptions, ElementHandle, GoToOptions, Page } from 'puppeteer-core';
import { Context, Schema, Service } from 'koishi';
import { SVG, SVGOptions } from './svg';
export * from './svg';
declare module 'koishi' {
interface Context {
puppeteer: Puppeteer;
}
}
type RenderCallback = (page: Page, next: (handle?: ElementHandle) => Promise<string>) => Promise<string>;
export declare function injectDefaultFont(page: Page, ctx: Context, config: Puppeteer.Config, fontDataUrl?: string): Promise<void>;
declare class Puppeteer extends Service {
config: Puppeteer.Config;
static [Service.provide]: string;
static inject: {
required: string[];
optional: string[];
};
browser: Browser;
executable: string;
private browserWSEndpoint;
private activePageCount;
private activeContextCount;
private isRestarting;
private disposeKeepAlive;
private originalBrowserMethods;
private patchedBrowsers;
private trackedPages;
private trackedContexts;
constructor(ctx: Context, config: Puppeteer.Config);
private patchBrowser;
private trackBrowserContext;
private trackPage;
private getFontCacheDir;
private registerHtmlComponent;
start(): Promise<void>;
private startBrowser;
stop(): Promise<void>;
private stopBrowser;
private startKeepAlive;
private stopKeepAlive;
private checkBrowserHealth;
private restartBrowserSafely;
private checkAndCloseBrowser;
private ensureConnected;
private getFontDataUrl;
page: (options?: Puppeteer.PageOptions) => Promise<Page>;
svg: (options?: SVGOptions) => Promise<SVG>;
render: (content: string, callback?: RenderCallback) => Promise<string>;
}
declare namespace Puppeteer {
export interface PageOptions {
beforeGotoPage?: (page: Page) => Promise<void>;
url: string;
gotoOptions?: GoToOptions;
content?: string;
}
export const filter = false;
export const usage = "\n---\n\n\u672C\u63D2\u4EF6\u63D0\u4F9B\u6D4F\u89C8\u5668 API \u670D\u52A1\uFF0C\u4E3B\u8981\u7528\u4E8E\u7F51\u9875\u622A\u56FE\u3001\u751F\u6210\u56FE\u7247\u7B49\u529F\u80FD\u3002\n\n**\u91CD\u8981\u63D0\u793A\uFF1A**\n\n1. **\u6D4F\u89C8\u5668\u73AF\u5883\u8981\u6C42\uFF1A** \u4E3A\u786E\u4FDD\u63D2\u4EF6\u6B63\u5E38\u8FD0\u884C\uFF0C\u8BF7\u786E\u4FDD\u60A8\u7684\u7CFB\u7EDF\u5DF2\u5B89\u88C5 Chromium \u6D4F\u89C8\u5668\uFF0C\u6216\u5DF2\u914D\u7F6E\u8FDC\u7A0B\u6D4F\u89C8\u5668\u670D\u52A1\u3002\n2. **\u7248\u672C\u5339\u914D\uFF1A** \u5EFA\u8BAE\u4FDD\u6301 Chromium/Chrome \u6D4F\u89C8\u5668\u4E0E\u672C\u63D2\u4EF6\u540C\u6B65\u66F4\u65B0\uFF0C\u4EE5\u907F\u514D\u56E0\u7248\u672C\u4E0D\u5339\u914D\u5BFC\u81F4\u7684\u529F\u80FD\u5F02\u5E38\u3002\n3. **Windows \u7CFB\u7EDF\u517C\u5BB9\u6027\uFF1A** \u5982\u679C\u60A8\u5728 Windows \u670D\u52A1\u5668\u4E0A\u8FD0\u884C\uFF0C\u4E3A\u652F\u6301\u6700\u65B0\u7248 Puppeteer \u53CA\u5176\u6346\u7ED1\u7684 Chromium\uFF0C\u60A8\u7684\u64CD\u4F5C\u7CFB\u7EDF\u81F3\u5C11\u9700\u8981\u662F **Windows Server 2016 \u6216\u66F4\u9AD8\u7248\u672C**\u3002\n\n\u6CE8\u610F\uFF1A Windows Server 2012 R2 \u53CA\u66F4\u65E9\u7248\u672C\u5DF2\u65E0\u6CD5\u6EE1\u8DB3\u6700\u65B0 Chrome \u7684\u8FD0\u884C\u8981\u6C42\u3002\n\n---\n\n\n**\u670D\u52A1\u4F9D\u8D56\uFF1A**\n\n- **\u5FC5\u9700\u670D\u52A1\uFF1A** http\uFF08\u81EA\u5E26\u670D\u52A1\uFF0C\u65E0\u9700\u989D\u5916\u5B89\u88C5\uFF09\n- **\u53EF\u9009\u670D\u52A1\uFF1A** [glyph](/market?keyword=glyph) - \u7528\u4E8E\u5B57\u4F53\u6CE8\u5165\u529F\u80FD\uFF08\u542F\u7528\u5B57\u4F53\u6CE8\u5165\u65F6\u9700\u8981\uFF09\n\n---\n\n<p>\u27A3 <a href=\"https://github.com/shangxueink/koishi-plugin-puppeteer-without-canvas\" target=\"_blank\">\u70B9\u6211\u524D\u5F80\u9879\u76EE\u5730\u5740</a></p>\n\n---\n ";
type LaunchOptions = Parameters<typeof puppeteer.launch>[0] & {};
export type ImageType = 'png' | 'jpeg' | 'webp';
export interface Config extends LaunchOptions, ConnectOptions {
enablePuppeteer?: boolean;
enableCanvas?: boolean;
registerHtmlComponent?: boolean;
enableRestartCommand?: boolean;
remote?: boolean;
endpoint?: string;
headers?: Record<string, string>;
enableReconnect?: boolean;
reconnectInterval?: number;
maxReconnectRetries?: number;
immediateClose?: boolean;
enableKeepAlive?: boolean;
keepAliveInterval?: number;
enableFont?: boolean;
fontName?: string;
fontInjectMode?: 'force' | 'smart';
enableTempUserDataDir?: boolean;
TempUserDataDir?: string;
defaultTimeout?: number;
render?: {
type?: ImageType;
quality?: number;
};
}
export const Config: Schema<Config>;
export {};
}
export default Puppeteer;