bot18
Version:
A high-frequency cryptocurrency trading bot by Zenbot creator @carlos8f
396 lines (395 loc) • 14.3 kB
TypeScript
import EventEmitter = require('eventemitter3');
import { AgentOption, TLSOptions } from './util';
import { CodedError, ErrorCode } from './errors';
import { LogLevel, LoggingFunc } from './logger';
import { RetryOptions } from './retry-policies';
import Method, * as methods from './methods';
/**
* A client for Slack's Web API
*
* This client provides an alias for each {@link https://api.slack.com/methods|Web API method}. Each method is
* a convenience wrapper for calling the {@link WebClient#apiCall} method using the method name as the first parameter.
*/
export declare class WebClient extends EventEmitter {
/**
* Authentication and authorization token for accessing Slack Web API (usually begins with `xoxp`, `xoxb`, or `xoxa`)
*/
readonly token?: string;
/**
* The base URL for reaching Slack's Web API. Consider changing this value for testing purposes.
*/
readonly slackApiUrl: string;
/**
* Configuration for retry operations. See {@link https://github.com/tim-kos/node-retry|node-retry} for more details.
*/
private retryConfig;
/**
* Queue of requests in which a maximum of {@link WebClientOptions.maxRequestConcurrency} can concurrently be
* in-flight.
*/
private requestQueue;
/**
* An agent used to manage TCP connections for requests. Most commonly used to implement proxy support. See
* npm packages `tunnel` and `https-proxy-agent` for information on how to construct a proxy agent.
*/
private agentConfig?;
/**
* Configuration for custom TLS handling
*/
private tlsConfig;
/**
* The name used to prefix all logging generated from this object
*/
private static loggerName;
/**
* This object's logger instance
*/
private logger;
/**
* The value for the User-Agent HTTP header (used for instrumentation).
*/
private userAgent;
/**
* @param token - An API token to authenticate/authorize with Slack (usually start with `xoxp`, `xoxb`, or `xoxa`)
*/
constructor(token?: string, {slackApiUrl, logger, logLevel, maxRequestConcurrency, retryConfig, agent, tls}?: WebClientOptions);
/**
* Generic method for calling a Web API method
*
* @param method the Web API method to call {@see https://api.slack.com/methods}
* @param options options
* @param callback callback if you don't want a promise returned
*/
apiCall(method: string, options?: WebAPICallOptions): Promise<WebAPICallResult>;
apiCall(method: string, options: WebAPICallOptions, callback: WebAPIResultCallback): void;
/**
* api method family
*/
readonly api: {
test: Method<methods.APITestArguments>;
};
/**
* apps method family
*/
readonly apps: {
permissions: {
info: Method<methods.TokenOverridable>;
request: Method<methods.AppsPermissionsRequestArguments>;
};
};
/**
* auth method family
*/
readonly auth: {
revoke: Method<methods.AuthRevokeArguments>;
test: Method<methods.TokenOverridable>;
};
/**
* bots method family
*/
readonly bots: {
info: Method<methods.BotsInfoArguments>;
};
/**
* channels method family
*/
readonly channels: {
archive: Method<methods.ChannelsArchiveArguments>;
create: Method<methods.ChannelsCreateArguments>;
history: Method<methods.ChannelsHistoryArguments>;
info: Method<methods.ChannelsInfoArguments>;
invite: Method<methods.ChannelsInviteArguments>;
join: Method<methods.ChannelsJoinArguments>;
kick: Method<methods.ChannelsKickArguments>;
leave: Method<methods.ChannelsLeaveArguments>;
list: Method<methods.ChannelsListArguments>;
mark: Method<methods.ChannelsMarkArguments>;
rename: Method<methods.ChannelsRenameArguments>;
replies: Method<methods.ChannelsRepliesArguments>;
setPurpose: Method<methods.ChannelsSetPurposeArguments>;
setTopic: Method<methods.ChannelsSetTopicArguments>;
unarchive: Method<methods.ChannelsUnarchiveArguments>;
};
/**
* chat method family
*/
readonly chat: {
delete: Method<methods.ChatDeleteArguments>;
getPermalink: Method<methods.ChatGetPermalinkArguments>;
meMessage: Method<methods.ChatMeMessageArguments>;
postEphemeral: Method<methods.ChatPostEphemeralArguments>;
postMessage: Method<methods.ChatPostMessageArguments>;
unfurl: Method<methods.ChatUnfurlArguments>;
update: Method<methods.ChatUpdateArguments>;
};
/**
* conversations method family
*/
readonly conversations: {
archive: Method<methods.ConversationsArchiveArguments>;
close: Method<methods.ConversationsCloseArguments>;
create: Method<methods.ConversationsCreateArguments>;
history: Method<methods.ConversationsHistoryArguments>;
info: Method<methods.ConversationsInfoArguments>;
invite: Method<methods.ConversationsInviteArguments>;
join: Method<methods.ConversationsJoinArguments>;
kick: Method<methods.ConversationsKickArguments>;
leave: Method<methods.ConversationsLeaveArguments>;
list: Method<methods.ConversationsListArguments>;
members: Method<methods.ConversationsMembersArguments>;
open: Method<methods.ConversationsOpenArguments>;
rename: Method<methods.ConversationsRenameArguments>;
replies: Method<methods.ConversationsRepliesArguments>;
setPurpose: Method<methods.ConversationsSetPurposeArguments>;
setTopic: Method<methods.ConversationsSetTopicArguments>;
unarchive: Method<methods.ConversationsUnarchiveArguments>;
};
/**
* dialog method family
*/
readonly dialog: {
open: Method<methods.DialogOpenArguments>;
};
/**
* dnd method family
*/
readonly dnd: {
endDnd: Method<methods.TokenOverridable>;
endSnooze: Method<methods.TokenOverridable>;
info: Method<methods.DndInfoArguments>;
setSnooze: Method<methods.DndSetSnoozeArguments>;
teamInfo: Method<methods.DndTeamInfoArguments>;
};
/**
* emoji method family
*/
readonly emoji: {
list: Method<methods.TokenOverridable>;
};
/**
* files method family
*/
readonly files: {
delete: Method<methods.FilesDeleteArguments>;
info: Method<methods.FilesInfoArguments>;
list: Method<methods.FilesListArguments>;
revokePublicURL: Method<methods.FilesRevokePublicURLArguments>;
sharedPublicURL: Method<methods.FilesSharedPublicURLArguments>;
upload: Method<methods.FilesUploadArguments>;
comments: {
add: Method<methods.FilesCommentsAddArguments>;
delete: Method<methods.FilesCommentsDeleteArguments>;
edit: Method<methods.FilesCommentsEditArguments>;
};
};
/**
* groups method family
*/
readonly groups: {
archive: Method<methods.GroupsArchiveArguments>;
create: Method<methods.GroupsCreateArguments>;
createChild: Method<methods.GroupsCreateChildArguments>;
history: Method<methods.GroupsHistoryArguments>;
info: Method<methods.GroupsInfoArguments>;
invite: Method<methods.GroupsInviteArguments>;
kick: Method<methods.GroupsKickArguments>;
leave: Method<methods.GroupsLeaveArguments>;
list: Method<methods.GroupsListArguments>;
mark: Method<methods.GroupsMarkArguments>;
open: Method<methods.GroupsOpenArguments>;
rename: Method<methods.GroupsRenameArguments>;
replies: Method<methods.GroupsRepliesArguments>;
setPurpose: Method<methods.GroupsSetPurposeArguments>;
setTopic: Method<methods.GroupsSetTopicArguments>;
unarchive: Method<methods.GroupsUnarchiveArguments>;
};
/**
* im method family
*/
readonly im: {
close: Method<methods.IMCloseArguments>;
history: Method<methods.IMHistoryArguments>;
list: Method<methods.IMListArguments>;
mark: Method<methods.IMMarkArguments>;
open: Method<methods.IMOpenArguments>;
replies: Method<methods.IMRepliesArguments>;
};
/**
* migration method family
*/
readonly migration: {
exchange: Method<methods.MigrationExchangeArguments>;
};
/**
* mpim method family
*/
readonly mpim: {
close: Method<methods.MPIMCloseArguments>;
history: Method<methods.MPIMHistoryArguments>;
list: Method<methods.TokenOverridable>;
mark: Method<methods.MPIMMarkArguments>;
open: Method<methods.MPIMOpenArguments>;
replies: Method<methods.MPIMRepliesArguments>;
};
/**
* oauth method family
*/
readonly oauth: {
access: Method<methods.OAuthAccessArguments>;
token: Method<methods.OAuthTokenArguments>;
};
/**
* pins method family
*/
readonly pins: {
add: Method<methods.PinsAddArguments>;
list: Method<methods.PinsListArguments>;
remove: Method<methods.PinsRemoveArguments>;
};
/**
* reactions method family
*/
readonly reactions: {
add: Method<methods.ReactionsAddArguments>;
get: Method<methods.ReactionsGetArguments>;
list: Method<methods.ReactionsListArguments>;
remove: Method<methods.ReactionsRemoveArguments>;
};
/**
* reminders method family
*/
readonly reminders: {
add: Method<methods.RemindersAddArguments>;
complete: Method<methods.RemindersCompleteArguments>;
delete: Method<methods.RemindersDeleteArguments>;
info: Method<methods.RemindersInfoArguments>;
list: Method<methods.TokenOverridable>;
};
/**
* rtm method family
*/
readonly rtm: {
connect: Method<methods.RTMConnectArguments>;
start: Method<methods.RTMStartArguments>;
};
/**
* search method family
*/
readonly search: {
all: Method<methods.SearchAllArguments>;
files: Method<methods.SearchAllArguments>;
messages: Method<methods.SearchAllArguments>;
};
/**
* stars method family
*/
readonly stars: {
add: Method<methods.StarsAddArguments>;
list: Method<methods.StarsListArguments>;
remove: Method<methods.StarsRemoveArguments>;
};
/**
* team method family
*/
readonly team: {
accessLogs: Method<methods.TeamAccessLogsArguments>;
billableInfo: Method<methods.TeamBillableInfoArguments>;
info: Method<methods.TokenOverridable>;
integrationLogs: Method<methods.TeamIntegrationLogsArguments>;
profile: {
get: Method<methods.TeamProfileGetArguments>;
};
};
/**
* usergroups method family
*/
readonly usergroups: {
create: Method<methods.UsergroupsCreateArguments>;
disable: Method<methods.UsergroupsDisableArguments>;
enable: Method<methods.UsergroupsEnableArguments>;
list: Method<methods.UsergroupsListArguments>;
update: Method<methods.UsergroupsUpdateArguments>;
users: {
list: Method<methods.UsergroupsUsersListArguments>;
update: Method<methods.UsergroupsUsersUpdateArguments>;
};
};
/**
* users method family
*/
readonly users: {
conversations: Method<methods.UsersConversationsArguments>;
deletePhoto: Method<methods.TokenOverridable>;
getPresence: Method<methods.UsersGetPresenceArguments>;
identity: Method<methods.TokenOverridable>;
info: Method<methods.UsersInfoArguments>;
list: Method<methods.UsersListArguments>;
lookupByEmail: Method<methods.UsersLookupByEmailArguments>;
setActive: Method<methods.TokenOverridable>;
setPhoto: Method<methods.UsersSetPhotoArguments>;
setPresence: Method<methods.UsersSetPresenceArguments>;
profile: {
get: Method<methods.UsersProfileGetArguments>;
set: Method<methods.UsersProfileSetArguments>;
};
};
/**
* Transforms options into an object suitable for got to use as a body. This can be one of two things:
* - A FormCanBeURLEncoded object, which is just a key-value object where the values have been flattened and
* got can serialize it into application/x-www-form-urlencoded content type.
* - A BodyCanBeFormMultipart: when the options includes a file, and got must use multipart/form-data content type.
*
* @param options arguments for the Web API method
*/
private serializeApiCallOptions(options);
/**
* Processes an HTTP response into a WebAPICallResult by performing JSON parsing on the body and merging relevent
* HTTP headers into the object.
* @param response
*/
private buildResult(response);
}
export default WebClient;
export interface WebClientOptions {
slackApiUrl?: string;
logger?: LoggingFunc;
logLevel?: LogLevel;
maxRequestConcurrency?: number;
retryConfig?: RetryOptions;
agent?: AgentOption;
tls?: TLSOptions;
}
export interface WebAPICallOptions {
}
export interface WebAPICallResult {
ok: boolean;
error?: string;
scopes?: string[];
acceptedScopes?: string[];
retryAfter?: number;
response_metadata?: {
warnings?: string[];
};
}
export interface WebAPIResultCallback {
(error: WebAPICallError, result: WebAPICallResult): void;
}
export declare type WebAPICallError = WebAPIPlatformError | WebAPIRequestError | WebAPIReadError | WebAPIHTTPError;
export interface WebAPIPlatformError extends CodedError {
code: ErrorCode.PlatformError;
data: WebAPICallResult & {
error: string;
};
}
export interface WebAPIRequestError extends CodedError {
code: ErrorCode.RequestError;
original: Error;
}
export interface WebAPIReadError extends CodedError {
code: ErrorCode.ReadError;
original: Error;
}
export interface WebAPIHTTPError extends CodedError {
code: ErrorCode.HTTPError;
original: Error;
}