@ovv/artalk
Version:
A self-hosted comment system
1,616 lines (1,488 loc) • 95.1 kB
TypeScript
import { Marked } from 'marked';
import { MarkedOptions } from 'marked';
/**
* 通用操作按钮
*/
declare class ActionBtn {
private opts;
$el: HTMLElement;
isLoading: boolean;
msgRecTimer?: number;
msgRecTimerFunc?: () => void;
get isMessaging(): boolean;
isConfirming: boolean;
confirmRecTimer?: number;
/** 构造函数 */
constructor(opts: ActionBtnOptions | string | (() => string));
/** 将按钮装载到指定元素 */
appendTo(dom: HTMLElement): this;
/** 获取按钮文字(动态/静态) */
private getText;
/** 设置点击事件 */
setClick(func: () => void): void;
/** 文字刷新(动态/静态) */
updateText(text?: (() => string) | string): void;
/** 设置加载状态 */
setLoading(value: boolean, loadingText?: string): void;
/** 错误消息 */
setError(text: string): void;
/** 警告消息 */
setWarn(text: string): void;
/** 成功消息 */
setSuccess(text: string): void;
/** 设置消息 */
setMsg(text: string, className?: string, duringTime?: number, after?: () => void): void;
/** 设置消息复原操作定时器 */
private setMsgRecTimer;
/** 立刻触发器复原定时器 */
private fireMsgRecTimer;
/** 仅清除 timer */
private clearMsgRecTimer;
}
declare interface ActionBtnOptions {
/** 按钮文字 (动态/静态) */
text: (() => string) | string;
/** 仅管理员可用 */
adminOnly?: boolean;
/** 确认操作 */
confirm?: boolean;
/** 确认时提示文字 */
confirmText?: string;
}
export declare class Api extends Api_2<void> {
private _opts;
constructor(opts: ApiOptions);
/**
* Get user info as params for request
*
* @returns Request params with user info
*/
getUserFields(): {
name: string;
email: string;
} | undefined;
}
/**
* @title Artalk API
* @version 2.0
* @license MIT (https://github.com/ArtalkJS/Artalk/blob/master/LICENSE)
* @baseUrl /api/v2
* @contact API Support <artalkjs@gmail.com> (https://artalk.js.org)
*
* Artalk is a modern comment system based on Golang.
*/
declare class Api_2<SecurityDataType extends unknown> extends HttpClient<SecurityDataType> {
auth: {
/**
* @description Login by email with verify code (Need send email verify code first) or password
*
* @tags Auth
* @name LoginByEmail
* @summary Login by email
* @request POST:/auth/email/login
* @response `200` `HandlerResponseUserLogin` OK
* @response `400` `(HandlerMap & {
msg?: string,
})` Bad Request
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
loginByEmail: (data: HandlerRequestAuthEmailLogin, params?: RequestParams) => Promise<HttpResponse<HandlerResponseUserLogin, HandlerMap & {
msg?: string;
}>>;
/**
* @description Register by email and verify code (if user exists, will update user, like forget or change password. Need send email verify code first)
*
* @tags Auth
* @name RegisterByEmail
* @summary Register by email
* @request POST:/auth/email/register
* @response `200` `HandlerResponseUserLogin` OK
* @response `400` `(HandlerMap & {
msg?: string,
})` Bad Request
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
registerByEmail: (data: HandlerRequestAuthEmailRegister, params?: RequestParams) => Promise<HttpResponse<HandlerResponseUserLogin, HandlerMap & {
msg?: string;
}>>;
/**
* @description Send email including verify code to user
*
* @tags Auth
* @name SendVerifyEmail
* @summary Send verify email
* @request POST:/auth/email/send
* @response `200` `(HandlerMap & {
msg?: string,
})` OK
* @response `400` `(HandlerMap & {
msg?: string,
})` Bad Request
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
sendVerifyEmail: (data: HandlerRequestAuthEmailSend, params?: RequestParams) => Promise<HttpResponse<HandlerMap & {
msg?: string;
}, HandlerMap & {
msg?: string;
}>>;
/**
* @description Get all users with same email, if there are more than one user with same email, need merge
*
* @tags Auth
* @name CheckDataMerge
* @summary Check data merge
* @request GET:/auth/merge
* @secure
* @response `200` `HandlerResponseAuthDataMergeCheck` OK
* @response `400` `(HandlerMap & {
msg?: string,
})` Bad Request
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
checkDataMerge: (params?: RequestParams) => Promise<HttpResponse<HandlerResponseAuthDataMergeCheck, HandlerMap & {
msg?: string;
}>>;
/**
* @description This function is to solve the problem of multiple users with the same email address, should be called after user login and then check, and perform data merge.
*
* @tags Auth
* @name ApplyDataMerge
* @summary Apply data merge
* @request POST:/auth/merge
* @secure
* @response `200` `HandlerResponseAuthDataMergeApply` OK
* @response `400` `(HandlerMap & {
msg?: string,
})` Bad Request
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
applyDataMerge: (data: HandlerRequestAuthDataMergeApply, params?: RequestParams) => Promise<HttpResponse<HandlerResponseAuthDataMergeApply, HandlerMap & {
msg?: string;
}>>;
};
cache: {
/**
* @description Flush all cache on the server
*
* @tags Cache
* @name FlushCache
* @summary Flush Cache
* @request POST:/cache/flush
* @secure
* @response `200` `(HandlerMap & {
msg?: string,
})` OK
* @response `400` `(HandlerMap & {
msg?: string,
})` Bad Request
* @response `403` `(HandlerMap & {
msg?: string,
})` Forbidden
*/
flushCache: (params?: RequestParams) => Promise<HttpResponse<HandlerMap & {
msg?: string;
}, HandlerMap & {
msg?: string;
}>>;
/**
* @description Cache warming helps you to pre-load the cache to improve the performance of the first request
*
* @tags Cache
* @name WarmUpCache
* @summary Warm-Up Cache
* @request POST:/cache/warm_up
* @secure
* @response `200` `(HandlerMap & {
msg?: string,
})` OK
* @response `400` `(HandlerMap & {
msg?: string,
})` Bad Request
* @response `403` `(HandlerMap & {
msg?: string,
})` Forbidden
*/
warmUpCache: (params?: RequestParams) => Promise<HttpResponse<HandlerMap & {
msg?: string;
}, HandlerMap & {
msg?: string;
}>>;
};
captcha: {
/**
* @description Get a base64 encoded captcha image or a HTML page to verify for user
*
* @tags Captcha
* @name GetCaptcha
* @summary Get Captcha
* @request GET:/captcha
* @response `200` `HandlerResponseCaptchaGet` OK
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
getCaptcha: (params?: RequestParams) => Promise<HttpResponse<HandlerResponseCaptchaGet, HandlerMap & {
msg?: string;
}>>;
/**
* @description Get the status of the user's captcha verification
*
* @tags Captcha
* @name GetCaptchaStatus
* @summary Get Captcha Status
* @request GET:/captcha/status
* @response `200` `HandlerResponseCaptchaStatus` OK
*/
getCaptchaStatus: (params?: RequestParams) => Promise<HttpResponse<HandlerResponseCaptchaStatus, any>>;
/**
* @description Verify user enters correct captcha code
*
* @tags Captcha
* @name VerifyCaptcha
* @summary Verify Captcha
* @request POST:/captcha/verify
* @response `200` `HandlerMap` OK
* @response `403` `(HandlerMap & {
img_data?: string,
})` Forbidden
*/
verifyCaptcha: (data: HandlerParamsCaptchaVerify, params?: RequestParams) => Promise<HttpResponse<HandlerMap, HandlerMap & {
img_data?: string;
}>>;
};
comments: {
/**
* @description Get a list of comments by some conditions
*
* @tags Comment
* @name GetComments
* @summary Get Comment List
* @request GET:/comments
* @secure
* @response `200` `HandlerResponseCommentList` OK
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
getComments: (query: {
/** The user email */
email?: string;
/** Enable flat_mode */
flat_mode?: boolean;
/** The limit for pagination */
limit?: number;
/** The username */
name?: string;
/** The offset for pagination */
offset?: number;
/** The comment page_key */
page_key: string;
/** The scope of comments */
scope?: "page" | "user" | "site";
/** Search keywords */
search?: string;
/** The site name of your content scope */
site_name?: string;
/** Sort by condition */
sort_by?: "date_asc" | "date_desc" | "vote";
/** Message center show type */
type?: "all" | "mentions" | "mine" | "pending";
/** Only show comments by admin */
view_only_admin?: boolean;
}, params?: RequestParams) => Promise<HttpResponse<HandlerResponseCommentList, HandlerMap & {
msg?: string;
}>>;
/**
* @description Create a new comment
*
* @tags Comment
* @name CreateComment
* @summary Create Comment
* @request POST:/comments
* @secure
* @response `200` `HandlerResponseCommentCreate` OK
* @response `400` `(HandlerMap & {
msg?: string,
})` Bad Request
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
createComment: (comment: HandlerParamsCommentCreate, params?: RequestParams) => Promise<HttpResponse<HandlerResponseCommentCreate, HandlerMap & {
msg?: string;
}>>;
/**
* @description Get the detail of a comment by comment id
*
* @tags Comment
* @name GetComment
* @summary Get a comment
* @request GET:/comments/{id}
* @response `200` `HandlerResponseCommentGet` OK
* @response `404` `(HandlerMap & {
msg?: string,
})` Not Found
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
getComment: (id: number, params?: RequestParams) => Promise<HttpResponse<HandlerResponseCommentGet, HandlerMap & {
msg?: string;
}>>;
/**
* @description Update a specific comment
*
* @tags Comment
* @name UpdateComment
* @summary Update Comment
* @request PUT:/comments/{id}
* @secure
* @response `200` `HandlerResponseCommentUpdate` OK
* @response `400` `(HandlerMap & {
msg?: string,
})` Bad Request
* @response `403` `(HandlerMap & {
msg?: string,
})` Forbidden
* @response `404` `(HandlerMap & {
msg?: string,
})` Not Found
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
updateComment: (id: number, comment: HandlerParamsCommentUpdate, params?: RequestParams) => Promise<HttpResponse<HandlerResponseCommentUpdate, HandlerMap & {
msg?: string;
}>>;
/**
* @description Delete a specific comment
*
* @tags Comment
* @name DeleteComment
* @summary Delete Comment
* @request DELETE:/comments/{id}
* @secure
* @response `200` `HandlerMap` OK
* @response `403` `(HandlerMap & {
msg?: string,
})` Forbidden
* @response `404` `(HandlerMap & {
msg?: string,
})` Not Found
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
deleteComment: (id: number, params?: RequestParams) => Promise<HttpResponse<HandlerMap, HandlerMap & {
msg?: string;
}>>;
};
conf: {
/**
* @description Get System Configs for UI
*
* @tags System
* @name Conf
* @summary Get System Configs
* @request GET:/conf
* @response `200` `CommonConfData` OK
*/
conf: (params?: RequestParams) => Promise<HttpResponse<CommonConfData, any>>;
/**
* @description Get social login providers
*
* @tags System
* @name GetSocialLoginProviders
* @summary Get Social Login Providers
* @request GET:/conf/auth/providers
* @response `200` `HandlerResponseConfAuthProviders` OK
* @response `404` `(HandlerMap & {
msg?: string,
})` Not Found
*/
getSocialLoginProviders: (params?: RequestParams) => Promise<HttpResponse<HandlerResponseConfAuthProviders, HandlerMap & {
msg?: string;
}>>;
/**
* @description Get Domain Info
*
* @tags System
* @name GetDomain
* @summary Get Domain Info
* @request GET:/conf/domain
* @response `200` `HandlerResponseConfDomain` OK
*/
getDomain: (query?: {
/** Domain URL */
url?: string;
}, params?: RequestParams) => Promise<HttpResponse<HandlerResponseConfDomain, any>>;
};
notifies: {
/**
* @description Get a list of notifies for user
*
* @tags Notify
* @name GetNotifies
* @summary Get Notifies
* @request GET:/notifies
* @response `200` `HandlerResponseNotifyList` OK
* @response `400` `(HandlerMap & {
msg?: string,
})` Bad Request
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
getNotifies: (query: {
/** The user email */
email: string;
/** The user name */
name: string;
}, params?: RequestParams) => Promise<HttpResponse<HandlerResponseNotifyList, HandlerMap & {
msg?: string;
}>>;
/**
* @description Mark all notifies as read for user
*
* @tags Notify
* @name MarkAllNotifyRead
* @summary Mark All Notifies as Read
* @request POST:/notifies/read
* @response `200` `HandlerMap` OK
* @response `400` `(HandlerMap & {
msg?: string,
})` Bad Request
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
markAllNotifyRead: (options: HandlerParamsNotifyReadAll, params?: RequestParams) => Promise<HttpResponse<HandlerMap, HandlerMap & {
msg?: string;
}>>;
/**
* @description Mark specific notification as read for user
*
* @tags Notify
* @name MarkNotifyRead
* @summary Mark Notify as Read
* @request POST:/notifies/{comment_id}/{notify_key}
* @response `200` `HandlerMap` OK
* @response `400` `(HandlerMap & {
msg?: string,
})` Bad Request
* @response `404` `(HandlerMap & {
msg?: string,
})` Not Found
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
markNotifyRead: (commentId: number, notifyKey: string, params?: RequestParams) => Promise<HttpResponse<HandlerMap, HandlerMap & {
msg?: string;
}>>;
};
pages: {
/**
* @description Get a list of pages by some conditions
*
* @tags Page
* @name GetPages
* @summary Get Page List
* @request GET:/pages
* @secure
* @response `200` `HandlerResponsePageList` OK
* @response `403` `(HandlerMap & {
msg?: string,
})` Forbidden
*/
getPages: (query?: {
/** The limit for pagination */
limit?: number;
/** The offset for pagination */
offset?: number;
/** Search keywords */
search?: string;
/** The site name of your content scope */
site_name?: string;
}, params?: RequestParams) => Promise<HttpResponse<HandlerResponsePageList, HandlerMap & {
msg?: string;
}>>;
/**
* @description Fetch the data of all pages
*
* @tags Page
* @name FetchAllPages
* @summary Fetch All Pages Data
* @request POST:/pages/fetch
* @secure
* @response `200` `HandlerMap` OK
* @response `400` `(HandlerMap & {
msg?: string,
})` Bad Request
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
fetchAllPages: (options: HandlerParamsPageFetchAll, params?: RequestParams) => Promise<HttpResponse<HandlerMap, HandlerMap & {
msg?: string;
}>>;
/**
* @description Get the status of the task of fetching all pages
*
* @tags Page
* @name GetPageFetchStatus
* @summary Get Pages Fetch Status
* @request GET:/pages/fetch/status
* @secure
* @response `200` `HandlerResponsePageFetchStatus` OK
*/
getPageFetchStatus: (params?: RequestParams) => Promise<HttpResponse<HandlerResponsePageFetchStatus, any>>;
/**
* @description Increase and get the number of page views
*
* @tags Page
* @name LogPv
* @summary Increase Page Views (PV)
* @request POST:/pages/pv
* @response `200` `HandlerResponsePagePV` OK
*/
logPv: (page: HandlerParamsPagePV, params?: RequestParams) => Promise<HttpResponse<HandlerResponsePagePV, any>>;
/**
* @description Update a specific page
*
* @tags Page
* @name UpdatePage
* @summary Update Page
* @request PUT:/pages/{id}
* @secure
* @response `200` `HandlerResponsePageUpdate` OK
* @response `400` `(HandlerMap & {
msg?: string,
})` Bad Request
* @response `403` `(HandlerMap & {
msg?: string,
})` Forbidden
* @response `404` `(HandlerMap & {
msg?: string,
})` Not Found
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
updatePage: (id: number, page: HandlerParamsPageUpdate, params?: RequestParams) => Promise<HttpResponse<HandlerResponsePageUpdate, HandlerMap & {
msg?: string;
}>>;
/**
* @description Delete a specific page
*
* @tags Page
* @name DeletePage
* @summary Delete Page
* @request DELETE:/pages/{id}
* @secure
* @response `200` `HandlerMap` OK
* @response `403` `(HandlerMap & {
msg?: string,
})` Forbidden
* @response `404` `(HandlerMap & {
msg?: string,
})` Not Found
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
deletePage: (id: number, params?: RequestParams) => Promise<HttpResponse<HandlerMap, HandlerMap & {
msg?: string;
}>>;
/**
* @description Fetch the data of a specific page
*
* @tags Page
* @name FetchPage
* @summary Fetch Page Data
* @request POST:/pages/{id}/fetch
* @secure
* @response `200` `HandlerResponsePageFetch` OK
* @response `404` `(HandlerMap & {
msg?: string,
})` Not Found
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
fetchPage: (id: number, params?: RequestParams) => Promise<HttpResponse<HandlerResponsePageFetch, HandlerMap & {
msg?: string;
}>>;
};
sendEmail: {
/**
* @description Send an email to test the email sender
*
* @tags System
* @name SendEmail
* @summary Send Email
* @request POST:/send_email
* @secure
* @response `200` `HandlerMap` OK
* @response `403` `(HandlerMap & {
msg?: string,
})` Forbidden
* @response `500` `HandlerMap` Internal Server Error
*/
sendEmail: (email: HandlerParamsEmailSend, params?: RequestParams) => Promise<HttpResponse<HandlerMap, HandlerMap | (HandlerMap & {
msg?: string;
})>>;
};
settings: {
/**
* @description Get settings from app config file
*
* @tags System
* @name GetSettings
* @summary Get Settings
* @request GET:/settings
* @secure
* @response `200` `HandlerResponseSettingGet` OK
* @response `403` `(HandlerMap & {
msg?: string,
})` Forbidden
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
getSettings: (params?: RequestParams) => Promise<HttpResponse<HandlerResponseSettingGet, HandlerMap & {
msg?: string;
}>>;
/**
* @description Apply settings and restart the server
*
* @tags System
* @name ApplySettings
* @summary Save and apply Settings
* @request PUT:/settings
* @secure
* @response `200` `HandlerMap` OK
* @response `403` `(HandlerMap & {
msg?: string,
})` Forbidden
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
applySettings: (settings: HandlerParamsSettingApply, params?: RequestParams) => Promise<HttpResponse<HandlerMap, HandlerMap & {
msg?: string;
}>>;
/**
* @description Get config templates in different languages for rendering the settings page in the frontend
*
* @tags System
* @name GetSettingsTemplate
* @summary Get Settings Template
* @request GET:/settings/template/{locale}
* @secure
* @response `200` `HandlerResponseSettingTemplate` OK
*/
getSettingsTemplate: (locale: string, params?: RequestParams) => Promise<HttpResponse<HandlerResponseSettingTemplate, any>>;
};
sites: {
/**
* @description Get a list of sites by some conditions
*
* @tags Site
* @name GetSites
* @summary Get Site List
* @request GET:/sites
* @secure
* @response `200` `HandlerResponseSiteList` OK
*/
getSites: (params?: RequestParams) => Promise<HttpResponse<HandlerResponseSiteList, any>>;
/**
* @description Create a new site
*
* @tags Site
* @name CreateSite
* @summary Create Site
* @request POST:/sites
* @secure
* @response `200` `HandlerResponseSiteCreate` OK
* @response `400` `(HandlerMap & {
msg?: string,
})` Bad Request
* @response `403` `(HandlerMap & {
msg?: string,
})` Forbidden
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
createSite: (site: HandlerParamsSiteCreate, params?: RequestParams) => Promise<HttpResponse<HandlerResponseSiteCreate, HandlerMap & {
msg?: string;
}>>;
/**
* @description Update a specific site
*
* @tags Site
* @name UpdateSite
* @summary Update Site
* @request PUT:/sites/{id}
* @secure
* @response `200` `HandlerResponseSiteUpdate` OK
*/
updateSite: (id: number, site: HandlerParamsSiteUpdate, params?: RequestParams) => Promise<HttpResponse<HandlerResponseSiteUpdate, any>>;
/**
* @description Delete a specific site
*
* @tags Site
* @name DeleteSite
* @summary Site Delete
* @request DELETE:/sites/{id}
* @secure
* @response `200` `HandlerMap` OK
* @response `403` `(HandlerMap & {
msg?: string,
})` Forbidden
* @response `404` `(HandlerMap & {
msg?: string,
})` Not Found
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
deleteSite: (id: number, params?: RequestParams) => Promise<HttpResponse<HandlerMap, HandlerMap & {
msg?: string;
}>>;
};
stats: {
/**
* @description Get the statistics of various data analysis
*
* @tags Statistic
* @name GetStats
* @summary Statistic
* @request GET:/stats/{type}
* @response `200` `CommonJSONResult` OK
* @response `400` `(HandlerMap & {
msg?: string,
})` Bad Request
* @response `403` `(HandlerMap & {
msg?: string,
})` Forbidden
* @response `404` `(HandlerMap & {
msg?: string,
})` Not Found
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
getStats: (type: "latest_comments" | "latest_pages" | "pv_most_pages" | "comment_most_pages" | "page_pv" | "site_pv" | "page_comment" | "site_comment" | "rand_comments" | "rand_pages", query?: {
/** The limit for pagination */
limit?: number;
/** multiple page keys separated by commas */
page_keys?: string;
/** The site name of your content scope */
site_name?: string;
}, params?: RequestParams) => Promise<HttpResponse<CommonJSONResult, HandlerMap & {
msg?: string;
}>>;
};
transfer: {
/**
* @description Export data from Artalk
*
* @tags Transfer
* @name ExportArtrans
* @summary Export Artrans
* @request GET:/transfer/export
* @secure
* @response `200` `HandlerResponseTransferExport` OK
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
exportArtrans: (params?: RequestParams) => Promise<HttpResponse<HandlerResponseTransferExport, HandlerMap & {
msg?: string;
}>>;
/**
* @description Import data to Artalk
*
* @tags Transfer
* @name ImportArtrans
* @summary Import Artrans
* @request POST:/transfer/import
* @secure
* @response `200` `string` OK
*/
importArtrans: (data: HandlerParamsTransferImport, params?: RequestParams) => Promise<HttpResponse<string, any>>;
/**
* @description Upload a file to prepare to import
*
* @tags Transfer
* @name UploadArtrans
* @summary Upload Artrans
* @request POST:/transfer/upload
* @secure
* @response `200` `(HandlerResponseTransferUpload & {
filename?: string,
})` OK
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
uploadArtrans: (data: {
/**
* Upload file in preparation for import task
* @format binary
*/
file: File;
}, params?: RequestParams) => Promise<HttpResponse<HandlerResponseTransferUpload & {
filename?: string;
}, HandlerMap & {
msg?: string;
}>>;
};
upload: {
/**
* @description Upload file from this endpoint
*
* @tags Upload
* @name Upload
* @summary Upload
* @request POST:/upload
* @secure
* @response `200` `HandlerResponseUpload` OK
* @response `400` `(HandlerMap & {
msg?: string,
})` Bad Request
* @response `403` `(HandlerMap & {
msg?: string,
})` Forbidden
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
upload: (data: {
/**
* Upload file
* @format binary
*/
file: File;
}, params?: RequestParams) => Promise<HttpResponse<HandlerResponseUpload, HandlerMap & {
msg?: string;
}>>;
};
user: {
/**
* @description Get user info to prepare for login or check current user status
*
* @tags Auth
* @name GetUser
* @summary Get User Info
* @request GET:/user
* @secure
* @response `200` `HandlerResponseUserInfo` OK
* @response `400` `(HandlerMap & {
msg?: string,
})` Bad Request
*/
getUser: (query?: {
/** The user email */
email?: string;
/** The username */
name?: string;
}, params?: RequestParams) => Promise<HttpResponse<HandlerResponseUserInfo, HandlerMap & {
msg?: string;
}>>;
/**
* @description Update user profile when user is logged in
*
* @tags Auth
* @name UpdateProfile
* @summary Update user profile
* @request POST:/user
* @secure
* @response `200` `HandlerResponseUserInfoUpdate` OK
* @response `400` `(HandlerMap & {
msg?: string,
})` Bad Request
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
updateProfile: (data: HandlerRequestUserInfoUpdate, params?: RequestParams) => Promise<HttpResponse<HandlerResponseUserInfoUpdate, HandlerMap & {
msg?: string;
}>>;
/**
* @description Login user by name or email
*
* @tags Auth
* @name Login
* @summary Get Access Token
* @request POST:/user/access_token
* @response `200` `HandlerResponseUserLogin` OK
* @response `400` `(HandlerMap & {
data?: {
need_name_select?: (string)[],
},
msg?: string,
})` Multiple users with the same email address are matched
* @response `401` `(HandlerMap & {
msg?: string,
})` Unauthorized
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
login: (user: HandlerParamsUserLogin, params?: RequestParams) => Promise<HttpResponse<HandlerResponseUserLogin, (HandlerMap & {
data?: {
need_name_select?: string[];
};
msg?: string;
}) | (HandlerMap & {
msg?: string;
})>>;
/**
* @description Get user login status by header Authorization
*
* @tags Auth
* @name GetUserStatus
* @summary Get Login Status
* @request GET:/user/status
* @secure
* @response `200` `HandlerResponseUserStatus` OK
*/
getUserStatus: (query?: {
/** The user email */
email?: string;
/** The username */
name?: string;
}, params?: RequestParams) => Promise<HttpResponse<HandlerResponseUserStatus, any>>;
};
users: {
/**
* @description Create a new user
*
* @tags User
* @name CreateUser
* @summary Create User
* @request POST:/users
* @secure
* @response `200` `HandlerResponseUserCreate` OK
* @response `400` `(HandlerMap & {
msg?: string,
})` Bad Request
* @response `403` `(HandlerMap & {
msg?: string,
})` Forbidden
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
createUser: (user: HandlerParamsUserCreate, params?: RequestParams) => Promise<HttpResponse<HandlerResponseUserCreate, HandlerMap & {
msg?: string;
}>>;
/**
* @description Update a specific user
*
* @tags User
* @name UpdateUser
* @summary Update User
* @request PUT:/users/{id}
* @secure
* @response `200` `HandlerResponseUserUpdate` OK
* @response `400` `(HandlerMap & {
msg?: string,
})` Bad Request
* @response `403` `(HandlerMap & {
msg?: string,
})` Forbidden
* @response `404` `(HandlerMap & {
msg?: string,
})` Not Found
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
updateUser: (id: number, user: HandlerParamsUserUpdate, params?: RequestParams) => Promise<HttpResponse<HandlerResponseUserUpdate, HandlerMap & {
msg?: string;
}>>;
/**
* @description Delete a specific user
*
* @tags User
* @name DeleteUser
* @summary Delete User
* @request DELETE:/users/{id}
* @secure
* @response `200` `HandlerMap` OK
* @response `403` `(HandlerMap & {
msg?: string,
})` Forbidden
* @response `404` `(HandlerMap & {
msg?: string,
})` Not Found
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
deleteUser: (id: number, params?: RequestParams) => Promise<HttpResponse<HandlerMap, HandlerMap & {
msg?: string;
}>>;
/**
* @description Get a list of users by some conditions
*
* @tags User
* @name GetUsers
* @summary Get User List
* @request GET:/users/{type}
* @secure
* @response `200` `HandlerResponseAdminUserList` OK
* @response `403` `(HandlerMap & {
msg?: string,
})` Forbidden
*/
getUsers: (type?: "all" | "admin" | "in_conf", query?: {
/** The limit for pagination */
limit?: number;
/** The offset for pagination */
offset?: number;
/** Search keywords */
search?: string;
}, params?: RequestParams) => Promise<HttpResponse<HandlerResponseAdminUserList, HandlerMap & {
msg?: string;
}>>;
};
version: {
/**
* @description Get the version of Artalk
*
* @tags System
* @name GetVersion
* @summary Get Version Info
* @request GET:/version
* @response `200` `CommonApiVersionData` OK
*/
getVersion: (params?: RequestParams) => Promise<HttpResponse<CommonApiVersionData, any>>;
};
votes: {
/**
* @description Sync the number of votes in the `comments` or `pages` data tables to keep them the same as the `votes` table
*
* @tags Vote
* @name SyncVotes
* @summary Sync Vote Data
* @request POST:/votes/sync
* @secure
* @response `200` `HandlerMap` OK
* @response `403` `(HandlerMap & {
msg?: string,
})` Forbidden
*/
syncVotes: (params?: RequestParams) => Promise<HttpResponse<HandlerMap, HandlerMap & {
msg?: string;
}>>;
/**
* @description Get vote status for a specific comment or page
*
* @tags Vote
* @name GetVote
* @summary Get Vote Status
* @request GET:/votes/{target_name}/{target_id}
* @response `200` `HandlerResponseVote` OK
* @response `403` `(HandlerMap & {
msg?: string,
})` Forbidden
* @response `404` `(HandlerMap & {
msg?: string,
})` Not Found
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
getVote: (targetName: "comment" | "page", targetId: number, params?: RequestParams) => Promise<HttpResponse<HandlerResponseVote, HandlerMap & {
msg?: string;
}>>;
/**
* @description Create a new vote for a specific comment or page
*
* @tags Vote
* @name CreateVote
* @summary Create Vote
* @request POST:/votes/{target_name}/{target_id}/{choice}
* @response `200` `HandlerResponseVote` OK
* @response `403` `(HandlerMap & {
msg?: string,
})` Forbidden
* @response `404` `(HandlerMap & {
msg?: string,
})` Not Found
* @response `500` `(HandlerMap & {
msg?: string,
})` Internal Server Error
*/
createVote: (targetName: "comment" | "page", targetId: number, choice: "up" | "down", vote: HandlerParamsVoteCreate, params?: RequestParams) => Promise<HttpResponse<HandlerResponseVote, HandlerMap & {
msg?: string;
}>>;
};
}
declare interface ApiConfig<SecurityDataType = unknown> {
baseUrl?: string;
baseApiParams?: Omit<RequestParams, 'baseUrl' | 'cancelToken' | 'signal'>;
securityWorker?: (securityData: SecurityDataType | null) => Promise<RequestParams | void> | RequestParams | void;
customFetch?: typeof fetch;
}
declare interface ApiHandler<T extends PayloadKey = PayloadKey> {
action: T;
handler: (data: ApiHandlerPayload[T]) => Promise<void>;
}
declare interface ApiHandlerPayload {
need_captcha: {
img_data?: string;
iframe?: string;
};
need_login: object;
need_auth_login: object;
}
export declare interface ApiHandlers {
add: <T extends PayloadKey>(action: T, handler: (data: ApiHandlerPayload[T]) => Promise<void>) => void;
remove: (action: PayloadKey) => void;
get: () => ApiHandler[];
}
declare interface ApiOptions {
baseURL: string;
siteName: string;
pageKey: string;
pageTitle: string;
timeout?: number;
getApiToken?: () => string | undefined;
userInfo?: {
name: string;
email: string;
};
handlers?: ApiHandlers;
}
export declare interface ApiVersionData {
/** API 程序名 */
app: string;
/** API 程序版本号 */
version: string;
/** API 程序 CommitHash */
commit_hash: string;
}
/**
* Artalk
*
* @see https://artalk.js.org
*/
declare class Artalk {
ctx: Context;
constructor(conf: ConfigPartial);
/** Get the config of Artalk */
getConf(): Config;
/** Get the root element of Artalk */
getEl(): HTMLElement;
/** Update config of Artalk */
update(conf: ConfigPartial): void;
/** Reload comment list of Artalk */
reload(): void;
/** Destroy instance of Artalk */
destroy(): void;
/** Add an event listener */
on<K extends keyof EventPayloadMap>(name: K, handler: EventHandler<EventPayloadMap[K]>): void;
/** Remove an event listener */
off<K extends keyof EventPayloadMap>(name: K, handler: EventHandler<EventPayloadMap[K]>): void;
/** Trigger an event */
trigger<K extends keyof EventPayloadMap>(name: K, payload?: EventPayloadMap[K]): void;
/** Set dark mode */
setDarkMode(darkMode: boolean): void;
/** Init Artalk */
static init(conf: ConfigPartial): Artalk;
/** Use plugin, the plugin will be used when Artalk.init */
static use<T = any>(plugin: ArtalkPlugin<T>, options?: T): void;
/** Load count widget */
static loadCountWidget(c: ConfigPartial): void;
/** @deprecated Please use `getEl()` instead */
get $root(): HTMLElement;
/** @description Please use `getConf()` instead */
get conf(): Config;
}
export default Artalk;
export declare type ArtalkConfig = Config;
export declare type ArtalkPlugin<T = any> = (ctx: Context, options?: T) => void;
declare namespace ArtalkType {
export {
I18n,
I18nKeys,
Api,
ApiHandlers,
Config,
ConfigPartial,
ArtalkConfig,
ConfigManager,
CommentData,
ListData,
PageData,
SiteData,
UserData,
UserDataForAdmin,
NotifyData,
EmoticonGrpData,
EmoticonListData,
ApiVersionData,
ListFetchParams,
ListLastFetchData,
DataManager,
NotifyLevel,
UserInfoApiResponseData,
FetchError,
Context,
LocalUser,
UserManager,
List,
ListLayout,
EditorState,
Editor,
EditorPluginManager,
ListErrorData,
ListFetchedArgs,
EventPayloadMap,
EventHandler,
Event_2 as Event,
EventOptions,
EventManager,
ArtalkPlugin,
SidebarLayer,
SidebarShowPayload,
Layer,
LayerManager,
CheckerManager,
Services
}
}
export { ArtalkType }
declare interface AuthAuthProviderInfo {
icon: string;
label: string;
name: string;
path?: string;
}
declare type CancelToken = Symbol | string | number;
declare interface Checker<T = any> {
el?: HTMLElement;
inputType?: 'password' | 'text';
body: (checker: CheckerCtx) => HTMLElement;
request: (checker: CheckerCtx, inputVal: string) => Promise<T>;
onSuccess?: (checker: CheckerCtx, respData: T, inputVal: string, formEl: HTMLElement) => void;
onError?: (checker: CheckerCtx, errData: any, inputVal: string, formEl: HTMLElement) => void;
}
declare interface CheckerCaptchaPayload extends CheckerPayload {
img_data?: string;
iframe?: string;
}
declare interface CheckerCtx {
get<K extends keyof CheckerStore>(key: K): CheckerStore[K];
set<K extends keyof CheckerStore>(key: K, val: CheckerStore[K]): void;
getOpts(): CheckerLauncherOptions;
getApi(): Api;
getUser(): UserManager;
hideInteractInput(): void;
triggerSuccess(): void;
cancel(): void;
}
declare interface CheckerLauncherOptions {
getApi: () => Api;
getLayers: () => LayerManager;
getUser: () => UserManager;
getCaptchaIframeURL: () => string;
onReload: () => void;
}
export declare interface CheckerManager {
checkCaptcha: (payload: CheckerCaptchaPayload) => Promise<void>;
checkAdmin: (payload: CheckerPayload) => Promise<void>;
check: (checker: Checker, payload: CheckerPayload, beforeCheck?: (c: CheckerCtx) => void) => void;
}
declare interface CheckerPayload {
onSuccess?: () => void;
onMount?: (dialogEl: HTMLElement) => void;
onCancel?: () => void;
}
declare interface CheckerStore {
val?: string;
img_data?: string;
iframe?: string;
}
declare class CommentActions {
private comment;
private get data();
private get opts();
private getApi;
constructor(comment: CommentNode);
/** 投票操作 */
vote(choice: 'up' | 'down'): void;
/** 管理员 - 评论状态修改 */
adminEdit(type: 'collapsed' | 'pending' | 'pinned', btnElem: ActionBtn): void;
/** 管理员 - 评论删除 */
adminDelete(btnElem: ActionBtn): void;
/** 快速跳转到该评论 */
goToReplyComment(): void;
}
export declare interface CommentData {
/** 评论 ID */
id: number;
/** 评论正文 */
content: string;
/** 用户昵称 */
nick: string;
/** 用户邮箱 (该字段仅管理员可见) */
email?: string;
/** 用户邮箱(已加密) */
email_encrypted: string;
/** 用户链接 */
link: string;
/** 回复目标评论 ID */
rid: number;
/** User Agent */
ua: string;
/** 评论日期 */
date: string;
/** 是否折叠 */
is_collapsed: boolean;
/** 是否待审 */
is_pending: boolean;
/** 是否置顶 */
is_pinned: boolean;
/** 是否已验证 */
is_verified: boolean;
/** 徽章文字 */
badge_name?: string;
/** 徽章颜色 */
badge_color?: string;
/** IP 属地 */
ip_region?: string;
/** 是否允许回复 */
is_allow_reply: boolean;
/** 评论页面 key */
page_key: string;
/** 评论页面 url */
page_url?: string;
/** 是否可见 */
visible: boolean;
/** 站点名(用于隔离) */
site_name: string;
/** 赞同数 */
vote_up: number;
/** 反对数 */
vote_down: number;
}
declare class CommentNode {
$el?: HTMLElement;
private renderInstance;
private actionInstance;
private data;
private opts;
private parent;
private children;
private nestCurt;
constructor(data: CommentData, opts: CommentOptions);
/** 渲染 UI */
render(): void;
/** 获取评论操作实例对象 */
getActions(): CommentActions;
/** 获取评论渲染器实例对象 */
getRender(): Render;
/** 获取评论数据 */
getData(): CommentData;
/** 设置数据 */
setData(data: CommentData): void;
/** 获取父评论 */
getParent(): CommentNode | null;
/** 获取所有子评论 */
getChildren(): CommentNode[];
/** 获取当前嵌套层数 */
getNestCurt(): number;
/** 判断是否为根评论 */
getIsRoot(): boolean;
/** 获取评论 ID */
getID(): number;
/** 置入子评论 */
putChild(childNode: CommentNode, insertMode?: 'append' | 'prepend'): void;
/** 获取存放子评论的元素对象 */
getChildrenWrapEl(): HTMLElement;
/** 获取所有父评论 */
getParents(): CommentNode[];
/**
* Get the element of the comment
*
* The `getEl()` will always return the latest $el after calling `render()`.
* Please be aware of the memory leak if you use the $el reference directly.
*/
getEl(): HTMLElement;
/**
* Focus on the comment
*
* Scroll to the comment and perform flash animation
*/
focus(): void;
scrollIntoView(): void;
/**
* Remove the comment node
*/
remove(): void;
/** 获取 Gravatar 头像 URL */
getGravatarURL(): string;
/** 获取评论 markdown 解析后的内容 */
getContentMarked(): string;
/** 获取格式化后的日期 */
getDateFormatted(): any;
/** 获取用户 UserAgent 信息 */
getUserUA(): {
browser: string;
os: string;
};
/** 获取配置 */
getOpts(): CommentOptions;
}
declare interface CommentOptions {
onAfterRender?: () => void;
onDelete?: (c: CommentNode) => void;
/** The comment being replied to (linked comment) */
replyTo?: CommentData;
flatMode: boolean;
vote: boolean;
voteDown: boolean;
uaBadge: boolean;
nestMax: number;
gravatar: Config['gravatar'];
heightLimit: Config['heightLimit'];
avatarURLBuilder: Config['avatarURLBuilder'];
scrollRelativeTo: Config['scrollRelativeTo'];
dateFormatter: Config['dateFormatter'];
getApi: () => Api;
replyComment: Context['replyComment'];
editComment: Context['editComment'];
}
declare interface CommonApiVersionData {
app: string;
commit_hash: string;
version: string;
}
declare interface CommonConfData {
frontend_conf: CommonMap;
version: CommonApiVersionData;
}
declare interface CommonJSONResult {
/** Data */
data: any;
/** Message */
msg: string;
}
declare type