Socket
Socket
Sign inDemoInstall

@slack/client

Package Overview
Dependencies
145
Maintainers
3
Versions
57
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 4.0.0 to 4.0.1

docs/_posts/2018-03-14-v4.0.1.md

5

.lintstagedrc.json
{
"*.ts": ["tslint --project . --fix", "git add"]
"linters": {
"*.ts": ["tslint --project . --fix", "git add"]
},
"ignore": ["test/**/*.ts"]
}

4

dist/IncomingWebhook.d.ts

@@ -16,3 +16,3 @@ import { MessageAttachment } from './methods';

export interface IncomingWebhookResultCallback {
(error: Error, result: any): void;
(error: Error): void;
}

@@ -31,3 +31,3 @@ /**

private defaults;
constructor(url: string, defaults: IncomingWebhookDefaultArguments);
constructor(url: string, defaults?: IncomingWebhookDefaultArguments);
/**

@@ -34,0 +34,0 @@ * Send a notification to a conversation

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const got = require("got"); // tslint:disable-line:no-require-imports
const util_1 = require("util");
const util_1 = require("./util");
/**

@@ -9,3 +9,3 @@ * A client for Slack's Incoming Webhooks

class IncomingWebhook {
constructor(url, defaults) {
constructor(url, defaults = {}) {
if (url === undefined) {

@@ -32,9 +32,8 @@ throw new Error('Incoming webhook URL is required');

}
const implementation = () => {
return got.post(this.url, {
json: true,
body: payload,
retries: 0,
});
};
const implementation = () => got.post(this.url, {
body: JSON.stringify(payload),
retries: 0,
}).then(() => {
return;
});
util_1.callbackify(implementation)(callback);

@@ -41,0 +40,0 @@ }

@@ -6,3 +6,4 @@ export { LoggingFunc, LogLevel } from './logger';

export { WebClient, WebClientOptions, WebAPICallOptions, WebAPICallResult, WebAPIPlatformError, WebAPIRequestError, WebAPIReadError, WebAPIHTTPError, WebAPICallError, WebAPIResultCallback } from './WebClient';
export * from './methods';
export { RTMClient, RTMClientOptions, RTMCallResult, RTMPlatformError, RTMWebsocketError, RTMCallError, RTMCallResultCallback } from './RTMClient';
export { IncomingWebhook, IncomingWebhookSendArguments, IncomingWebhookDefaultArguments, IncomingWebhookResultCallback } from './IncomingWebhook';

@@ -5,5 +5,5 @@ "use strict";

const EventEmitter = require("eventemitter3"); // tslint:disable-line:import-name no-require-imports
const pjson = require("pjson");
const logger_1 = require("./logger");
const errors_1 = require("./errors");
const pkg = require('../package.json'); // tslint:disable-line:no-require-imports no-var-requires
/**

@@ -127,4 +127,4 @@ * An object that monitors activity in an RTMClient and generates ping events in an effort to keep its websocket

*/
KeepAlive.loggerName = `${pjson.name}:KeepAlive`;
KeepAlive.loggerName = `${pkg.name}:KeepAlive`;
exports.KeepAlive = KeepAlive;
//# sourceMappingURL=KeepAlive.js.map

@@ -6,5 +6,8 @@ import { WebAPICallOptions, WebAPIResultCallback, WebAPICallResult } from './WebClient';

export default interface Method<MethodArguments extends WebAPICallOptions> {
(options?: MethodArguments): Promise<WebAPICallResult>;
(options: MethodArguments, callback: WebAPIResultCallback): void;
(options?: MethodArguments & AuxiliaryArguments): Promise<WebAPICallResult>;
(options: MethodArguments & AuxiliaryArguments, callback: WebAPIResultCallback): void;
}
export interface AuxiliaryArguments {
[unknownArg: string]: any;
}
export interface TokenOverridable {

@@ -149,3 +152,3 @@ token?: string;

text: string;
as_user?: string;
as_user?: boolean;
attachments?: MessageAttachment[];

@@ -242,4 +245,15 @@ icon_emoji?: string;

export declare type MPIMRepliesArguments = TokenOverridable & {};
export declare type OAuthAccessArguments = TokenOverridable & {};
export declare type OAuthTokenArguments = TokenOverridable & {};
export declare type OAuthAccessArguments = {
client_id: string;
client_secret: string;
code: string;
redirect_uri?: string;
};
export declare type OAuthTokenArguments = {
client_id: string;
client_secret: string;
code: string;
redirect_uri?: string;
single_channel?: '0' | '1';
};
export declare type PinsAddArguments = TokenOverridable & {};

@@ -246,0 +260,0 @@ export declare type PinsListArguments = TokenOverridable & {};

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const pjson = require("pjson");
const objectValues = require("object.values"); // tslint:disable-line:import-name no-require-imports

@@ -15,2 +14,3 @@ const EventEmitter = require("eventemitter3"); // tslint:disable-line:import-name no-require-imports

const util_1 = require("./util");
const pkg = require('../package.json'); // tslint:disable-line:no-require-imports no-var-requires
/**

@@ -441,3 +441,3 @@ * An RTMClient allows programs to communicate with the {@link https://api.slack.com/rtm|Slack Platform's RTM API}.

*/
RTMClient.loggerName = `${pjson.name}:RTMClient`;
RTMClient.loggerName = `${pkg.name}:RTMClient`;
exports.RTMClient = RTMClient;

@@ -444,0 +444,0 @@ exports.default = RTMClient;

@@ -5,4 +5,4 @@ "use strict";

const os = require("os");
const pjson = require("pjson");
const objectEntries = require("object.entries"); // tslint:disable-line:no-require-imports
const pkg = require('../package.json'); // tslint:disable-line:no-require-imports no-var-requires
/**

@@ -20,3 +20,3 @@ * For when you need a function that does nothing

}
const baseUserAgent = `${replaceSlashes(pjson.name)}/${pjson.version} ` +
const baseUserAgent = `${replaceSlashes(pkg.name)}/${pkg.version} ` +
`node/${process.version.replace('v', '')} ` +

@@ -23,0 +23,0 @@ `${os.platform()}/${os.release()}`;

@@ -10,3 +10,3 @@ import EventEmitter = require('eventemitter3');

*
* This client provides a function for each {@link https://api.slack.com/methods|Web API method}. They are each
* 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.

@@ -18,3 +18,3 @@ */

*/
readonly token: string;
readonly token?: string;
/**

@@ -57,3 +57,3 @@ * The base URL for reaching Slack's Web API. Consider changing this value for testing purposes.

*/
constructor(token: string, {slackApiUrl, logger, logLevel, maxRequestConcurrency, retryConfig, agent, tls}?: WebClientOptions);
constructor(token?: string, {slackApiUrl, logger, logLevel, maxRequestConcurrency, retryConfig, agent, tls}?: WebClientOptions);
/**

@@ -241,4 +241,4 @@ * Generic method for calling a Web API method

readonly oauth: {
access: Method<methods.TokenOverridable>;
token: Method<methods.TokenOverridable>;
access: Method<methods.OAuthAccessArguments>;
token: Method<methods.OAuthTokenArguments>;
};

@@ -245,0 +245,0 @@ /**

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const objectEntries = require("object.entries"); // tslint:disable-line:no-require-imports
const pjson = require("pjson");
const urlJoin = require("url-join"); // tslint:disable-line:no-require-imports

@@ -18,6 +17,7 @@ const isStream = require("is-stream"); // tslint:disable-line:no-require-imports

const retry_policies_1 = require("./retry-policies");
const pkg = require('../package.json'); // tslint:disable-line:no-require-imports no-var-requires
/**
* A client for Slack's Web API
*
* This client provides a function for each {@link https://api.slack.com/methods|Web API method}. They are each
* 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.

@@ -481,3 +481,3 @@ */

*/
WebClient.loggerName = `${pjson.name}:WebClient`;
WebClient.loggerName = `${pkg.name}:WebClient`;
exports.WebClient = WebClient;

@@ -484,0 +484,0 @@ exports.default = WebClient;

@@ -8,3 +8,3 @@ ---

This client provides a function for each [Web API method](https://api.slack.com/methods). They are each
This client provides an alias for each [Web API method](https://api.slack.com/methods). Each method is
a convenience wrapper for calling the [WebClient#apiCall](WebClient#apiCall) method using the method name as the first parameter.

@@ -20,200 +20,2 @@

| [slackApiUrl] | <code>string</code> | The base URL for reaching Slack's Web API. Consider changing this value for testing purposes. |
| [api={
test: (this.apiCall.bind(this, 'api.test')) as Method<methods.APITestArguments>,
}] | <code>module:@slack/client/dist/WebClient.__object</code> | api method family |
| [apps={
permissions: {
info: (this.apiCall.bind(this, 'apps.permissions.info')) as Method<methods.AppsPermissionsInfoArguments>,
request: (this.apiCall.bind(this, 'apps.permissions.request')) as Method<methods.AppsPermissionsRequestArguments>,
},
}] | <code>module:@slack/client/dist/WebClient.__object</code> | apps method family |
| [auth={
revoke: (this.apiCall.bind(this, 'auth.revoke')) as Method<methods.AuthRevokeArguments>,
test: (this.apiCall.bind(this, 'auth.test')) as Method<methods.AuthTestArguments>,
}] | <code>module:@slack/client/dist/WebClient.__object</code> | auth method family |
| [bots={
info: (this.apiCall.bind(this, 'bots.info')) as Method<methods.BotsInfoArguments>,
}] | <code>module:@slack/client/dist/WebClient.__object</code> | bots method family |
| [channels={
archive: (this.apiCall.bind(this, 'channels.archive')) as Method<methods.ChannelsArchiveArguments>,
create: (this.apiCall.bind(this, 'channels.create')) as Method<methods.ChannelsCreateArguments>,
history: (this.apiCall.bind(this, 'channels.history')) as Method<methods.ChannelsHistoryArguments>,
info: (this.apiCall.bind(this, 'channels.info')) as Method<methods.ChannelsInfoArguments>,
invite: (this.apiCall.bind(this, 'channels.invite')) as Method<methods.ChannelsInviteArguments>,
join: (this.apiCall.bind(this, 'channels.join')) as Method<methods.ChannelsJoinArguments>,
kick: (this.apiCall.bind(this, 'channels.kick')) as Method<methods.ChannelsKickArguments>,
leave: (this.apiCall.bind(this, 'channels.leave')) as Method<methods.ChannelsLeaveArguments>,
list: (this.apiCall.bind(this, 'channels.list')) as Method<methods.ChannelsListArguments>,
mark: (this.apiCall.bind(this, 'channels.mark')) as Method<methods.ChannelsMarkArguments>,
rename: (this.apiCall.bind(this, 'channels.rename')) as Method<methods.ChannelsRenameArguments>,
replies: (this.apiCall.bind(this, 'channels.replies')) as Method<methods.ChannelsRepliesArguments>,
setPurpose: (this.apiCall.bind(this, 'channels.setPurpose')) as Method<methods.ChannelsSetPurposeArguments>,
setTopic: (this.apiCall.bind(this, 'channels.setTopic')) as Method<methods.ChannelsSetTopicArguments>,
unarchive: (this.apiCall.bind(this, 'channels.unarchive')) as Method<methods.ChannelsUnarchiveArguments>,
}] | <code>module:@slack/client/dist/WebClient.__object</code> | channels method family |
| [chat={
delete: (this.apiCall.bind(this, 'chat.delete')) as Method<methods.ChatDeleteArguments>,
getPermalink: (this.apiCall.bind(this, 'chat.getPermalink')) as Method<methods.ChatGetPermalinkArguments>,
meMessage: (this.apiCall.bind(this, 'chat.meMessage')) as Method<methods.ChatMeMessageArguments>,
postEphemeral: (this.apiCall.bind(this, 'chat.postEphemeral')) as Method<methods.ChatPostEphemeralArguments>,
postMessage: (this.apiCall.bind(this, 'chat.postMessage')) as Method<methods.ChatPostMessageArguments>,
unfurl: (this.apiCall.bind(this, 'chat.unfurl')) as Method<methods.ChatUnfurlArguments>,
update: (this.apiCall.bind(this, 'chat.update')) as Method<methods.ChatUpdateArguments>,
}] | <code>module:@slack/client/dist/WebClient.__object</code> | chat method family |
| [conversations={
archive: (this.apiCall.bind(this, 'conversations.archive')) as Method<methods.ConversationsArchiveArguments>,
close: (this.apiCall.bind(this, 'conversations.close')) as Method<methods.ConversationsCloseArguments>,
create: (this.apiCall.bind(this, 'conversations.create')) as Method<methods.ConversationsCreateArguments>,
history: (this.apiCall.bind(this, 'conversations.history')) as Method<methods.ConversationsHistoryArguments>,
info: (this.apiCall.bind(this, 'conversations.info')) as Method<methods.ConversationsInfoArguments>,
invite: (this.apiCall.bind(this, 'conversations.invite')) as Method<methods.ConversationsInviteArguments>,
join: (this.apiCall.bind(this, 'conversations.join')) as Method<methods.ConversationsJoinArguments>,
kick: (this.apiCall.bind(this, 'conversations.kick')) as Method<methods.ConversationsKickArguments>,
leave: (this.apiCall.bind(this, 'conversations.leave')) as Method<methods.ConversationsLeaveArguments>,
list: (this.apiCall.bind(this, 'conversations.list')) as Method<methods.ConversationsListArguments>,
members: (this.apiCall.bind(this, 'conversations.members')) as Method<methods.ConversationsMembersArguments>,
open: (this.apiCall.bind(this, 'conversations.open')) as Method<methods.ConversationsOpenArguments>,
rename: (this.apiCall.bind(this, 'conversations.rename')) as Method<methods.ConversationsRenameArguments>,
replies: (this.apiCall.bind(this, 'conversations.replies')) as Method<methods.ConversationsRepliesArguments>,
setPurpose:
(this.apiCall.bind(this, 'conversations.setPurpose')) as Method<methods.ConversationsSetPurposeArguments>,
setTopic: (this.apiCall.bind(this, 'conversations.setTopic')) as Method<methods.ConversationsSetTopicArguments>,
unarchive: (this.apiCall.bind(this, 'conversations.unarchive')) as Method<methods.ConversationsUnarchiveArguments>,
}] | <code>module:@slack/client/dist/WebClient.__object</code> | conversations method family |
| [dialog={
open: (this.apiCall.bind(this, 'dialog.open')) as Method<methods.DialogOpenArguments>,
}] | <code>module:@slack/client/dist/WebClient.__object</code> | dialog method family |
| [dnd={
endDnd: (this.apiCall.bind(this, 'dnd.endDnd')) as Method<methods.DndEndDndArguments>,
endSnooze: (this.apiCall.bind(this, 'dnd.endSnooze')) as Method<methods.DndEndSnoozeArguments>,
info: (this.apiCall.bind(this, 'dnd.info')) as Method<methods.DndInfoArguments>,
setSnooze: (this.apiCall.bind(this, 'dnd.setSnooze')) as Method<methods.DndSetSnoozeArguments>,
teamInfo: (this.apiCall.bind(this, 'dnd.teamInfo')) as Method<methods.DndTeamInfoArguments>,
}] | <code>module:@slack/client/dist/WebClient.__object</code> | dnd method family |
| [emoji={
list: (this.apiCall.bind(this, 'emoji.list')) as Method<methods.EmojiListArguments>,
}] | <code>module:@slack/client/dist/WebClient.__object</code> | emoji method family |
| [files={
delete: (this.apiCall.bind(this, 'files.delete')) as Method<methods.FilesDeleteArguments>,
info: (this.apiCall.bind(this, 'files.info')) as Method<methods.FilesInfoArguments>,
list: (this.apiCall.bind(this, 'files.list')) as Method<methods.FilesListArguments>,
revokePublicURL:
(this.apiCall.bind(this, 'files.revokePublicURL')) as Method<methods.FilesRevokePublicURLArguments>,
sharedPublicURL:
(this.apiCall.bind(this, 'files.sharedPublicURL')) as Method<methods.FilesSharedPublicURLArguments>,
upload: (this.apiCall.bind(this, 'files.upload')) as Method<methods.FilesUploadArguments>,
comments: {
add: (this.apiCall.bind(this, 'files.comments.add')) as Method<methods.FilesCommentsAddArguments>,
delete: (this.apiCall.bind(this, 'files.comments.delete')) as Method<methods.FilesCommentsDeleteArguments>,
edit: (this.apiCall.bind(this, 'files.comments.edit')) as Method<methods.FilesCommentsEditArguments>,
},
}] | <code>module:@slack/client/dist/WebClient.__object</code> | files method family |
| [groups={
archive: (this.apiCall.bind(this, 'groups.archive')) as Method<methods.GroupsArchiveArguments>,
create: (this.apiCall.bind(this, 'groups.create')) as Method<methods.GroupsCreateArguments>,
createChild: (this.apiCall.bind(this, 'groups.createChild')) as Method<methods.GroupsCreateChildArguments>,
history: (this.apiCall.bind(this, 'groups.history')) as Method<methods.GroupsHistoryArguments>,
info: (this.apiCall.bind(this, 'groups.info')) as Method<methods.GroupsInfoArguments>,
invite: (this.apiCall.bind(this, 'groups.invite')) as Method<methods.GroupsInviteArguments>,
kick: (this.apiCall.bind(this, 'groups.kick')) as Method<methods.GroupsKickArguments>,
leave: (this.apiCall.bind(this, 'groups.leave')) as Method<methods.GroupsLeaveArguments>,
list: (this.apiCall.bind(this, 'groups.list')) as Method<methods.GroupsListArguments>,
mark: (this.apiCall.bind(this, 'groups.mark')) as Method<methods.GroupsMarkArguments>,
open: (this.apiCall.bind(this, 'groups.open')) as Method<methods.GroupsOpenArguments>,
rename: (this.apiCall.bind(this, 'groups.rename')) as Method<methods.GroupsRenameArguments>,
replies: (this.apiCall.bind(this, 'groups.replies')) as Method<methods.GroupsRepliesArguments>,
setPurpose: (this.apiCall.bind(this, 'groups.setPurpose')) as Method<methods.GroupsSetPurposeArguments>,
setTopic: (this.apiCall.bind(this, 'groups.setTopic')) as Method<methods.GroupsSetTopicArguments>,
unarchive: (this.apiCall.bind(this, 'groups.unarchive')) as Method<methods.GroupsUnarchiveArguments>,
}] | <code>module:@slack/client/dist/WebClient.__object</code> | groups method family |
| [im={
close: (this.apiCall.bind(this, 'im.close')) as Method<methods.IMCloseArguments>,
history: (this.apiCall.bind(this, 'im.history')) as Method<methods.IMHistoryArguments>,
list: (this.apiCall.bind(this, 'im.list')) as Method<methods.IMListArguments>,
mark: (this.apiCall.bind(this, 'im.mark')) as Method<methods.IMMarkArguments>,
open: (this.apiCall.bind(this, 'im.open')) as Method<methods.IMOpenArguments>,
replies: (this.apiCall.bind(this, 'im.replies')) as Method<methods.IMRepliesArguments>,
}] | <code>module:@slack/client/dist/WebClient.__object</code> | im method family |
| [migration={
exchange: (this.apiCall.bind(this, 'migration.exchange')) as Method<methods.MigrationExchangeArguments>,
}] | <code>module:@slack/client/dist/WebClient.__object</code> | migration method family |
| [mpim={
close: (this.apiCall.bind(this, 'mpim.close')) as Method<methods.MPIMCloseArguments>,
history: (this.apiCall.bind(this, 'mpim.history')) as Method<methods.MPIMHistoryArguments>,
list: (this.apiCall.bind(this, 'mpim.list')) as Method<methods.MPIMListArguments>,
mark: (this.apiCall.bind(this, 'mpim.mark')) as Method<methods.MPIMMarkArguments>,
open: (this.apiCall.bind(this, 'mpim.open')) as Method<methods.MPIMOpenArguments>,
replies: (this.apiCall.bind(this, 'mpim.replies')) as Method<methods.MPIMRepliesArguments>,
}] | <code>module:@slack/client/dist/WebClient.__object</code> | mpim method family |
| [oauth={
access: (this.apiCall.bind(this, 'oauth.access')) as Method<methods.OAuthAccessArguments>,
token: (this.apiCall.bind(this, 'oauth.token')) as Method<methods.OAuthTokenArguments>,
}] | <code>module:@slack/client/dist/WebClient.__object</code> | oauth method family |
| [pins={
add: (this.apiCall.bind(this, 'pins.add')) as Method<methods.PinsAddArguments>,
list: (this.apiCall.bind(this, 'pins.list')) as Method<methods.PinsListArguments>,
remove: (this.apiCall.bind(this, 'pins.remove')) as Method<methods.PinsRemoveArguments>,
}] | <code>module:@slack/client/dist/WebClient.__object</code> | pins method family |
| [reactions={
add: (this.apiCall.bind(this, 'reactions.add')) as Method<methods.ReactionsAddArguments>,
get: (this.apiCall.bind(this, 'reactions.get')) as Method<methods.ReactionsGetArguments>,
list: (this.apiCall.bind(this, 'reactions.list')) as Method<methods.ReactionsListArguments>,
remove: (this.apiCall.bind(this, 'reactions.remove')) as Method<methods.ReactionsRemoveArguments>,
}] | <code>module:@slack/client/dist/WebClient.__object</code> | reactions method family |
| [reminders={
add: (this.apiCall.bind(this, 'reminders.add')) as Method<methods.RemindersAddArguments>,
complete: (this.apiCall.bind(this, 'reminders.complete')) as Method<methods.RemindersCompleteArguments>,
delete: (this.apiCall.bind(this, 'reminders.delete')) as Method<methods.RemindersDeleteArguments>,
info: (this.apiCall.bind(this, 'reminders.info')) as Method<methods.RemindersInfoArguments>,
list: (this.apiCall.bind(this, 'reminders.list')) as Method<methods.RemindersListArguments>,
}] | <code>module:@slack/client/dist/WebClient.__object</code> | reminders method family |
| [rtm={
connect: (this.apiCall.bind(this, 'rtm.connect')) as Method<methods.RTMConnectArguments>,
start: (this.apiCall.bind(this, 'rtm.start')) as Method<methods.RTMStartArguments>,
}] | <code>module:@slack/client/dist/WebClient.__object</code> | rtm method family |
| [search={
all: (this.apiCall.bind(this, 'search.all')) as Method<methods.SearchAllArguments>,
files: (this.apiCall.bind(this, 'search.files')) as Method<methods.SearchFilesArguments>,
messages: (this.apiCall.bind(this, 'search.messages')) as Method<methods.SearchMessagesArguments>,
}] | <code>module:@slack/client/dist/WebClient.__object</code> | search method family |
| [stars={
add: (this.apiCall.bind(this, 'stars.add')) as Method<methods.StarsAddArguments>,
list: (this.apiCall.bind(this, 'stars.list')) as Method<methods.StarsListArguments>,
remove: (this.apiCall.bind(this, 'stars.remove')) as Method<methods.StarsRemoveArguments>,
}] | <code>module:@slack/client/dist/WebClient.__object</code> | stars method family |
| [team={
accessLogs: (this.apiCall.bind(this, 'team.accessLogs')) as Method<methods.TeamAccessLogsArguments>,
billableInfo: (this.apiCall.bind(this, 'team.billableInfo')) as Method<methods.TeamBillableInfoArguments>,
info: (this.apiCall.bind(this, 'team.info')) as Method<methods.TeamInfoArguments>,
integrationLogs: (this.apiCall.bind(this, 'team.integrationLogs')) as Method<methods.TeamIntegrationLogsArguments>,
profile: {
get: (this.apiCall.bind(this, 'team.profile.get')) as Method<methods.TeamProfileGetArguments>,
},
}] | <code>module:@slack/client/dist/WebClient.__object</code> | team method family |
| [usergroups={
create: (this.apiCall.bind(this, 'usergroups.create')) as Method<methods.UsergroupsCreateArguments>,
disable: (this.apiCall.bind(this, 'usergroups.disable')) as Method<methods.UsergroupsDisableArguments>,
enable: (this.apiCall.bind(this, 'usergroups.enable')) as Method<methods.UsergroupsEnableArguments>,
list: (this.apiCall.bind(this, 'usergroups.list')) as Method<methods.UsergroupsListArguments>,
update: (this.apiCall.bind(this, 'usergroups.update')) as Method<methods.UsergroupsUpdateArguments>,
users: {
list: (this.apiCall.bind(this, 'usergroups.users.list')) as Method<methods.UsergroupsUsersListArguments>,
update: (this.apiCall.bind(this, 'usergroups.users.update')) as Method<methods.UsergroupsUsersUpdateArguments>,
},
}] | <code>module:@slack/client/dist/WebClient.__object</code> | usergroups method family |
| [users={
deletePhoto: (this.apiCall.bind(this, 'users.deletePhoto')) as Method<methods.UsersDeletePhotoArguments>,
getPresence: (this.apiCall.bind(this, 'users.getPresence')) as Method<methods.UsersGetPresenceArguments>,
identity: (this.apiCall.bind(this, 'users.identity')) as Method<methods.UsersIdentityArguments>,
info: (this.apiCall.bind(this, 'users.info')) as Method<methods.UsersInfoArguments>,
list: (this.apiCall.bind(this, 'users.list')) as Method<methods.UsersListArguments>,
lookupByEmail: (this.apiCall.bind(this, 'users.lookupByEmail')) as Method<methods.UsersLookupByEmailArguments>,
setActive: (this.apiCall.bind(this, 'users.setActive')) as Method<methods.UsersSetActiveArguments>,
setPhoto: (this.apiCall.bind(this, 'users.setPhoto')) as Method<methods.UsersSetPhotoArguments>,
setPresence: (this.apiCall.bind(this, 'users.setPresence')) as Method<methods.UsersSetPresenceArguments>,
profile: {
get: (this.apiCall.bind(this, 'users.profile.get')) as Method<methods.UsersProfileGetArguments>,
set: (this.apiCall.bind(this, 'users.profile.set')) as Method<methods.UsersProfileSetArguments>,
},
}] | <code>module:@slack/client/dist/WebClient.__object</code> | users method family |

@@ -220,0 +22,0 @@

@@ -54,2 +54,6 @@ ---

**Upgrading from version 3?** The
[migration guide](https://github.com/slackapi/node-slack-sdk/wiki/Migration-Guide-for-v4) has all the information you
need to bring your app up to speed
---

@@ -56,0 +60,0 @@

@@ -217,2 +217,35 @@ This migration guide helps you transition an application written using the `v3.x` series of this package, to the `v4.x`

## CLIENT_EVENTS, RTM_EVENTS, RTM_MESSAGE_SUBTYPES
These constants have been removed. We recommend using simple strings for event names. The values that were in
`CLIENT_EVENTS` have been migrated according to the [events table above](#events). The `RTM_EVENTS` dictionary isn't
necessary, just directly subscribe to the event name as a string.
**Before:**
```javascript
rtm.on(CLIENT_EVENTS.RTM.AUTHENTICATED, (connectionData) => {
console.log('RTMClient authenticated');
});
rtm.on(RTM_EVENTS.MESSAGE, (event) => {
console.log(`Incoming message: ${event.ts}`);
})
```
**After:**
```javascript
rtm.on('authenticated', (connectionData) => {
console.log('RTMClient authenticated');
});
rtm.on('message', (event) => {
console.log(`Incoming message: ${event.ts}`);
})
```
## RETRY_POLICIES
The names of these policies have slightly changed for more consistency with our style guide. The dictionary of policies
is now exported under the name `retryPolicies`. See `src/retry-policies.ts` for details.
## Proxy Support with `agent`

@@ -219,0 +252,0 @@

{
"name": "@slack/client",
"version": "4.0.0",
"version": "4.0.1",
"description": "Slack Developer Kit - official clients for the Web API, RTM API, and Incoming Webhooks",

@@ -33,4 +33,5 @@ "author": "Slack Technologies, Inc.",

"lint": "tslint --project .",
"test": "npm run test:spec",
"test": "npm run build && npm run test:spec && npm run test:integration",
"test:spec": "nyc mocha --opts src/mocha.opts src/*.spec.js src/**/*.spec.js",
"test:integration": "mocha --opts test/mocha.opts test/typescript/test.ts",
"coverage": "codecov",

@@ -67,3 +68,2 @@ "build": "npm run build:clean && tsc",

"p-retry": "^1.0.0",
"pjson": "^1.0.9",
"retry": "^0.10.1",

@@ -95,4 +95,5 @@ "url-join": "^4.0.0",

"tslint-config-airbnb": "^5.5.0",
"typescript": "^2.7.1"
"typescript": "^2.7.1",
"typings-tester": "^0.3.1"
}
}

@@ -13,2 +13,6 @@ # Node Slack SDK

**Upgrading from version 3?** The
[migration guide](https://github.com/slackapi/node-slack-sdk/wiki/Migration-Guide-for-v4) has all the information you
need to bring your app up to speed.
## Requirements

@@ -15,0 +19,0 @@

import got = require('got'); // tslint:disable-line:no-require-imports
import { MessageAttachment } from './methods';
import { callbackify } from 'util';
import { callbackify } from './util';

@@ -21,3 +21,3 @@ export interface IncomingWebhookDefaultArguments {

export interface IncomingWebhookResultCallback {
(error: Error, result: any): void;
(error: Error): void;
}

@@ -39,3 +39,3 @@

constructor(url: string, defaults: IncomingWebhookDefaultArguments) {
constructor(url: string, defaults: IncomingWebhookDefaultArguments = {}) {
if (url === undefined) {

@@ -65,9 +65,8 @@ throw new Error('Incoming webhook URL is required');

const implementation = () => {
return got.post(this.url, {
json: true,
body: payload,
retries: 0,
});
};
const implementation = () => got.post(this.url, {
body: JSON.stringify(payload),
retries: 0,
}).then(() => {
return;
});

@@ -74,0 +73,0 @@ callbackify(implementation)(callback);

@@ -35,2 +35,4 @@ export {

export * from './methods';
export {

@@ -37,0 +39,0 @@ RTMClient,

import { RTMClient, ErrorCode } from './';
import EventEmitter = require('eventemitter3'); // tslint:disable-line:import-name no-require-imports
import * as pjson from 'pjson';
import { LogLevel, Logger, LoggingFunc, getLogger, loggerFromLoggingFunc } from './logger';
import { errorWithCode } from './errors';
const pkg = require('../package.json'); // tslint:disable-line:no-require-imports no-var-requires

@@ -53,3 +53,3 @@ export interface KeepAliveOptions {

*/
private static loggerName = `${pjson.name}:KeepAlive`;
private static loggerName = `${pkg.name}:KeepAlive`;

@@ -56,0 +56,0 @@ /**

@@ -11,4 +11,4 @@ import { WebAPICallOptions, WebAPIResultCallback, WebAPICallResult } from './WebClient';

// TODO: can we create a relationship between MethodArguments and a MethodResult type?
(options?: MethodArguments): Promise<WebAPICallResult>;
(options: MethodArguments, callback: WebAPIResultCallback): void;
(options?: MethodArguments & AuxiliaryArguments): Promise<WebAPICallResult>;
(options: MethodArguments & AuxiliaryArguments, callback: WebAPIResultCallback): void;
}

@@ -20,2 +20,6 @@

export interface AuxiliaryArguments {
[unknownArg: string]: any;
}
export interface TokenOverridable {

@@ -196,3 +200,3 @@ token?: string;

text: string;
as_user?: string;
as_user?: boolean;
attachments?: MessageAttachment[];

@@ -331,4 +335,15 @@ icon_emoji?: string; // if specified, as_user must be false

*/
export type OAuthAccessArguments = TokenOverridable & {};
export type OAuthTokenArguments = TokenOverridable & {};
export type OAuthAccessArguments = {
client_id: string;
client_secret: string;
code: string;
redirect_uri?: string;
};
export type OAuthTokenArguments = {
client_id: string;
client_secret: string;
code: string;
redirect_uri?: string;
single_channel?: '0' | '1';
};

@@ -335,0 +350,0 @@ /*

import { Agent } from 'http';
import * as pjson from 'pjson';
import objectValues = require('object.values'); // tslint:disable-line:import-name no-require-imports

@@ -16,2 +15,3 @@ import EventEmitter = require('eventemitter3'); // tslint:disable-line:import-name no-require-imports

import { callbackify, TLSOptions } from './util';
const pkg = require('../package.json'); // tslint:disable-line:no-require-imports no-var-requires

@@ -276,3 +276,3 @@ /**

*/
private static loggerName = `${pjson.name}:RTMClient`;
private static loggerName = `${pkg.name}:RTMClient`;

@@ -279,0 +279,0 @@

import * as util from 'util';
import * as os from 'os';
import * as pjson from 'pjson';
import { Agent } from 'http';
import objectEntries = require('object.entries'); // tslint:disable-line:no-require-imports
const pkg = require('../package.json'); // tslint:disable-line:no-require-imports no-var-requires

@@ -20,3 +20,3 @@ /**

const baseUserAgent = `${replaceSlashes(pjson.name)}/${pjson.version} ` +
const baseUserAgent = `${replaceSlashes(pkg.name)}/${pkg.version} ` +
`node/${process.version.replace('v', '')} ` +

@@ -23,0 +23,0 @@ `${os.platform()}/${os.release()}`;

@@ -26,2 +26,7 @@ require('mocha');

});
it('should build a client without a token', function () {
const client = new WebClient();
assert.instanceOf(client, WebClient);
});
});

@@ -315,2 +320,17 @@

describe('apiCall() - without a token', function () {
const client = new WebClient(undefined, { retryConfig: fastRetriesForTest });
const scope = nock('https://slack.com')
// NOTE: this could create false negatives if the serialization order changes (it shouldn't matter)
.post(/api/, 'foo=stringval')
.reply(200, { ok: true });
const r = client.apiCall('method', { foo: 'stringval' });
assert(isPromise(r));
return r.then(result => {
scope.done();
});
});
describe('named method aliases (facets)', function () {

@@ -317,0 +337,0 @@ beforeEach(function () {

import { Readable } from 'stream';
import objectEntries = require('object.entries'); // tslint:disable-line:no-require-imports
import * as pjson from 'pjson';
import urlJoin = require('url-join'); // tslint:disable-line:no-require-imports

@@ -18,2 +17,3 @@ import isStream = require('is-stream'); // tslint:disable-line:no-require-imports

import Method, * as methods from './methods'; // tslint:disable-line:import-name
const pkg = require('../package.json'); // tslint:disable-line:no-require-imports no-var-requires

@@ -23,3 +23,3 @@ /**

*
* This client provides a function for each {@link https://api.slack.com/methods|Web API method}. They are each
* 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.

@@ -31,3 +31,3 @@ */

*/
public readonly token: string;
public readonly token?: string;

@@ -64,3 +64,3 @@ /**

*/
private static loggerName = `${pjson.name}:WebClient`;
private static loggerName = `${pkg.name}:WebClient`;

@@ -80,3 +80,3 @@ /**

*/
constructor(token: string, {
constructor(token?: string, {
slackApiUrl = 'https://slack.com/api/',

@@ -83,0 +83,0 @@ logger = undefined,

@@ -6,2 +6,8 @@ /**

/**
* @interface module:@slack/client/dist/methods.AuxiliaryArguments
*/
export class AuxiliaryArguments {
}
/**
* @interface module:@slack/client/dist/methods.CursorPaginationEnabled

@@ -8,0 +14,0 @@ * @property {number} [limit]

@@ -1,2 +0,2 @@

/**
/**
* @module @slack/client

@@ -136,3 +136,3 @@ */

* will buffer until the client is in a state where they can be sent.
*
*
* If the awaitReply parameter is set to true, then the returned Promise is resolved with the platform's

@@ -142,3 +142,3 @@ * acknowledgement response. Not all message types will result in an acknowledgement response, so use this carefully.

* reconnects before recieving the acknowledgement response.
*
*
* If the awaitReply parameter is set to false, then the returned Promise is resolved as soon as the message is sent

@@ -342,4 +342,4 @@ * from the websocket.

* A client for Slack's Web API
*
* This client provides a function for each {@link https://api.slack.com/methods|Web API method}. They are each
*
* 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.

@@ -349,200 +349,2 @@ * @extends EventEmitter

* @property {string} [slackApiUrl] The base URL for reaching Slack's Web API. Consider changing this value for testing purposes.
* @property {module:@slack/client/dist/WebClient.__object} [api={
test: (this.apiCall.bind(this, 'api.test')) as Method<methods.APITestArguments>,
}] api method family
* @property {module:@slack/client/dist/WebClient.__object} [apps={
permissions: {
info: (this.apiCall.bind(this, 'apps.permissions.info')) as Method<methods.AppsPermissionsInfoArguments>,
request: (this.apiCall.bind(this, 'apps.permissions.request')) as Method<methods.AppsPermissionsRequestArguments>,
},
}] apps method family
* @property {module:@slack/client/dist/WebClient.__object} [auth={
revoke: (this.apiCall.bind(this, 'auth.revoke')) as Method<methods.AuthRevokeArguments>,
test: (this.apiCall.bind(this, 'auth.test')) as Method<methods.AuthTestArguments>,
}] auth method family
* @property {module:@slack/client/dist/WebClient.__object} [bots={
info: (this.apiCall.bind(this, 'bots.info')) as Method<methods.BotsInfoArguments>,
}] bots method family
* @property {module:@slack/client/dist/WebClient.__object} [channels={
archive: (this.apiCall.bind(this, 'channels.archive')) as Method<methods.ChannelsArchiveArguments>,
create: (this.apiCall.bind(this, 'channels.create')) as Method<methods.ChannelsCreateArguments>,
history: (this.apiCall.bind(this, 'channels.history')) as Method<methods.ChannelsHistoryArguments>,
info: (this.apiCall.bind(this, 'channels.info')) as Method<methods.ChannelsInfoArguments>,
invite: (this.apiCall.bind(this, 'channels.invite')) as Method<methods.ChannelsInviteArguments>,
join: (this.apiCall.bind(this, 'channels.join')) as Method<methods.ChannelsJoinArguments>,
kick: (this.apiCall.bind(this, 'channels.kick')) as Method<methods.ChannelsKickArguments>,
leave: (this.apiCall.bind(this, 'channels.leave')) as Method<methods.ChannelsLeaveArguments>,
list: (this.apiCall.bind(this, 'channels.list')) as Method<methods.ChannelsListArguments>,
mark: (this.apiCall.bind(this, 'channels.mark')) as Method<methods.ChannelsMarkArguments>,
rename: (this.apiCall.bind(this, 'channels.rename')) as Method<methods.ChannelsRenameArguments>,
replies: (this.apiCall.bind(this, 'channels.replies')) as Method<methods.ChannelsRepliesArguments>,
setPurpose: (this.apiCall.bind(this, 'channels.setPurpose')) as Method<methods.ChannelsSetPurposeArguments>,
setTopic: (this.apiCall.bind(this, 'channels.setTopic')) as Method<methods.ChannelsSetTopicArguments>,
unarchive: (this.apiCall.bind(this, 'channels.unarchive')) as Method<methods.ChannelsUnarchiveArguments>,
}] channels method family
* @property {module:@slack/client/dist/WebClient.__object} [chat={
delete: (this.apiCall.bind(this, 'chat.delete')) as Method<methods.ChatDeleteArguments>,
getPermalink: (this.apiCall.bind(this, 'chat.getPermalink')) as Method<methods.ChatGetPermalinkArguments>,
meMessage: (this.apiCall.bind(this, 'chat.meMessage')) as Method<methods.ChatMeMessageArguments>,
postEphemeral: (this.apiCall.bind(this, 'chat.postEphemeral')) as Method<methods.ChatPostEphemeralArguments>,
postMessage: (this.apiCall.bind(this, 'chat.postMessage')) as Method<methods.ChatPostMessageArguments>,
unfurl: (this.apiCall.bind(this, 'chat.unfurl')) as Method<methods.ChatUnfurlArguments>,
update: (this.apiCall.bind(this, 'chat.update')) as Method<methods.ChatUpdateArguments>,
}] chat method family
* @property {module:@slack/client/dist/WebClient.__object} [conversations={
archive: (this.apiCall.bind(this, 'conversations.archive')) as Method<methods.ConversationsArchiveArguments>,
close: (this.apiCall.bind(this, 'conversations.close')) as Method<methods.ConversationsCloseArguments>,
create: (this.apiCall.bind(this, 'conversations.create')) as Method<methods.ConversationsCreateArguments>,
history: (this.apiCall.bind(this, 'conversations.history')) as Method<methods.ConversationsHistoryArguments>,
info: (this.apiCall.bind(this, 'conversations.info')) as Method<methods.ConversationsInfoArguments>,
invite: (this.apiCall.bind(this, 'conversations.invite')) as Method<methods.ConversationsInviteArguments>,
join: (this.apiCall.bind(this, 'conversations.join')) as Method<methods.ConversationsJoinArguments>,
kick: (this.apiCall.bind(this, 'conversations.kick')) as Method<methods.ConversationsKickArguments>,
leave: (this.apiCall.bind(this, 'conversations.leave')) as Method<methods.ConversationsLeaveArguments>,
list: (this.apiCall.bind(this, 'conversations.list')) as Method<methods.ConversationsListArguments>,
members: (this.apiCall.bind(this, 'conversations.members')) as Method<methods.ConversationsMembersArguments>,
open: (this.apiCall.bind(this, 'conversations.open')) as Method<methods.ConversationsOpenArguments>,
rename: (this.apiCall.bind(this, 'conversations.rename')) as Method<methods.ConversationsRenameArguments>,
replies: (this.apiCall.bind(this, 'conversations.replies')) as Method<methods.ConversationsRepliesArguments>,
setPurpose:
(this.apiCall.bind(this, 'conversations.setPurpose')) as Method<methods.ConversationsSetPurposeArguments>,
setTopic: (this.apiCall.bind(this, 'conversations.setTopic')) as Method<methods.ConversationsSetTopicArguments>,
unarchive: (this.apiCall.bind(this, 'conversations.unarchive')) as Method<methods.ConversationsUnarchiveArguments>,
}] conversations method family
* @property {module:@slack/client/dist/WebClient.__object} [dialog={
open: (this.apiCall.bind(this, 'dialog.open')) as Method<methods.DialogOpenArguments>,
}] dialog method family
* @property {module:@slack/client/dist/WebClient.__object} [dnd={
endDnd: (this.apiCall.bind(this, 'dnd.endDnd')) as Method<methods.DndEndDndArguments>,
endSnooze: (this.apiCall.bind(this, 'dnd.endSnooze')) as Method<methods.DndEndSnoozeArguments>,
info: (this.apiCall.bind(this, 'dnd.info')) as Method<methods.DndInfoArguments>,
setSnooze: (this.apiCall.bind(this, 'dnd.setSnooze')) as Method<methods.DndSetSnoozeArguments>,
teamInfo: (this.apiCall.bind(this, 'dnd.teamInfo')) as Method<methods.DndTeamInfoArguments>,
}] dnd method family
* @property {module:@slack/client/dist/WebClient.__object} [emoji={
list: (this.apiCall.bind(this, 'emoji.list')) as Method<methods.EmojiListArguments>,
}] emoji method family
* @property {module:@slack/client/dist/WebClient.__object} [files={
delete: (this.apiCall.bind(this, 'files.delete')) as Method<methods.FilesDeleteArguments>,
info: (this.apiCall.bind(this, 'files.info')) as Method<methods.FilesInfoArguments>,
list: (this.apiCall.bind(this, 'files.list')) as Method<methods.FilesListArguments>,
revokePublicURL:
(this.apiCall.bind(this, 'files.revokePublicURL')) as Method<methods.FilesRevokePublicURLArguments>,
sharedPublicURL:
(this.apiCall.bind(this, 'files.sharedPublicURL')) as Method<methods.FilesSharedPublicURLArguments>,
upload: (this.apiCall.bind(this, 'files.upload')) as Method<methods.FilesUploadArguments>,
comments: {
add: (this.apiCall.bind(this, 'files.comments.add')) as Method<methods.FilesCommentsAddArguments>,
delete: (this.apiCall.bind(this, 'files.comments.delete')) as Method<methods.FilesCommentsDeleteArguments>,
edit: (this.apiCall.bind(this, 'files.comments.edit')) as Method<methods.FilesCommentsEditArguments>,
},
}] files method family
* @property {module:@slack/client/dist/WebClient.__object} [groups={
archive: (this.apiCall.bind(this, 'groups.archive')) as Method<methods.GroupsArchiveArguments>,
create: (this.apiCall.bind(this, 'groups.create')) as Method<methods.GroupsCreateArguments>,
createChild: (this.apiCall.bind(this, 'groups.createChild')) as Method<methods.GroupsCreateChildArguments>,
history: (this.apiCall.bind(this, 'groups.history')) as Method<methods.GroupsHistoryArguments>,
info: (this.apiCall.bind(this, 'groups.info')) as Method<methods.GroupsInfoArguments>,
invite: (this.apiCall.bind(this, 'groups.invite')) as Method<methods.GroupsInviteArguments>,
kick: (this.apiCall.bind(this, 'groups.kick')) as Method<methods.GroupsKickArguments>,
leave: (this.apiCall.bind(this, 'groups.leave')) as Method<methods.GroupsLeaveArguments>,
list: (this.apiCall.bind(this, 'groups.list')) as Method<methods.GroupsListArguments>,
mark: (this.apiCall.bind(this, 'groups.mark')) as Method<methods.GroupsMarkArguments>,
open: (this.apiCall.bind(this, 'groups.open')) as Method<methods.GroupsOpenArguments>,
rename: (this.apiCall.bind(this, 'groups.rename')) as Method<methods.GroupsRenameArguments>,
replies: (this.apiCall.bind(this, 'groups.replies')) as Method<methods.GroupsRepliesArguments>,
setPurpose: (this.apiCall.bind(this, 'groups.setPurpose')) as Method<methods.GroupsSetPurposeArguments>,
setTopic: (this.apiCall.bind(this, 'groups.setTopic')) as Method<methods.GroupsSetTopicArguments>,
unarchive: (this.apiCall.bind(this, 'groups.unarchive')) as Method<methods.GroupsUnarchiveArguments>,
}] groups method family
* @property {module:@slack/client/dist/WebClient.__object} [im={
close: (this.apiCall.bind(this, 'im.close')) as Method<methods.IMCloseArguments>,
history: (this.apiCall.bind(this, 'im.history')) as Method<methods.IMHistoryArguments>,
list: (this.apiCall.bind(this, 'im.list')) as Method<methods.IMListArguments>,
mark: (this.apiCall.bind(this, 'im.mark')) as Method<methods.IMMarkArguments>,
open: (this.apiCall.bind(this, 'im.open')) as Method<methods.IMOpenArguments>,
replies: (this.apiCall.bind(this, 'im.replies')) as Method<methods.IMRepliesArguments>,
}] im method family
* @property {module:@slack/client/dist/WebClient.__object} [migration={
exchange: (this.apiCall.bind(this, 'migration.exchange')) as Method<methods.MigrationExchangeArguments>,
}] migration method family
* @property {module:@slack/client/dist/WebClient.__object} [mpim={
close: (this.apiCall.bind(this, 'mpim.close')) as Method<methods.MPIMCloseArguments>,
history: (this.apiCall.bind(this, 'mpim.history')) as Method<methods.MPIMHistoryArguments>,
list: (this.apiCall.bind(this, 'mpim.list')) as Method<methods.MPIMListArguments>,
mark: (this.apiCall.bind(this, 'mpim.mark')) as Method<methods.MPIMMarkArguments>,
open: (this.apiCall.bind(this, 'mpim.open')) as Method<methods.MPIMOpenArguments>,
replies: (this.apiCall.bind(this, 'mpim.replies')) as Method<methods.MPIMRepliesArguments>,
}] mpim method family
* @property {module:@slack/client/dist/WebClient.__object} [oauth={
access: (this.apiCall.bind(this, 'oauth.access')) as Method<methods.OAuthAccessArguments>,
token: (this.apiCall.bind(this, 'oauth.token')) as Method<methods.OAuthTokenArguments>,
}] oauth method family
* @property {module:@slack/client/dist/WebClient.__object} [pins={
add: (this.apiCall.bind(this, 'pins.add')) as Method<methods.PinsAddArguments>,
list: (this.apiCall.bind(this, 'pins.list')) as Method<methods.PinsListArguments>,
remove: (this.apiCall.bind(this, 'pins.remove')) as Method<methods.PinsRemoveArguments>,
}] pins method family
* @property {module:@slack/client/dist/WebClient.__object} [reactions={
add: (this.apiCall.bind(this, 'reactions.add')) as Method<methods.ReactionsAddArguments>,
get: (this.apiCall.bind(this, 'reactions.get')) as Method<methods.ReactionsGetArguments>,
list: (this.apiCall.bind(this, 'reactions.list')) as Method<methods.ReactionsListArguments>,
remove: (this.apiCall.bind(this, 'reactions.remove')) as Method<methods.ReactionsRemoveArguments>,
}] reactions method family
* @property {module:@slack/client/dist/WebClient.__object} [reminders={
add: (this.apiCall.bind(this, 'reminders.add')) as Method<methods.RemindersAddArguments>,
complete: (this.apiCall.bind(this, 'reminders.complete')) as Method<methods.RemindersCompleteArguments>,
delete: (this.apiCall.bind(this, 'reminders.delete')) as Method<methods.RemindersDeleteArguments>,
info: (this.apiCall.bind(this, 'reminders.info')) as Method<methods.RemindersInfoArguments>,
list: (this.apiCall.bind(this, 'reminders.list')) as Method<methods.RemindersListArguments>,
}] reminders method family
* @property {module:@slack/client/dist/WebClient.__object} [rtm={
connect: (this.apiCall.bind(this, 'rtm.connect')) as Method<methods.RTMConnectArguments>,
start: (this.apiCall.bind(this, 'rtm.start')) as Method<methods.RTMStartArguments>,
}] rtm method family
* @property {module:@slack/client/dist/WebClient.__object} [search={
all: (this.apiCall.bind(this, 'search.all')) as Method<methods.SearchAllArguments>,
files: (this.apiCall.bind(this, 'search.files')) as Method<methods.SearchFilesArguments>,
messages: (this.apiCall.bind(this, 'search.messages')) as Method<methods.SearchMessagesArguments>,
}] search method family
* @property {module:@slack/client/dist/WebClient.__object} [stars={
add: (this.apiCall.bind(this, 'stars.add')) as Method<methods.StarsAddArguments>,
list: (this.apiCall.bind(this, 'stars.list')) as Method<methods.StarsListArguments>,
remove: (this.apiCall.bind(this, 'stars.remove')) as Method<methods.StarsRemoveArguments>,
}] stars method family
* @property {module:@slack/client/dist/WebClient.__object} [team={
accessLogs: (this.apiCall.bind(this, 'team.accessLogs')) as Method<methods.TeamAccessLogsArguments>,
billableInfo: (this.apiCall.bind(this, 'team.billableInfo')) as Method<methods.TeamBillableInfoArguments>,
info: (this.apiCall.bind(this, 'team.info')) as Method<methods.TeamInfoArguments>,
integrationLogs: (this.apiCall.bind(this, 'team.integrationLogs')) as Method<methods.TeamIntegrationLogsArguments>,
profile: {
get: (this.apiCall.bind(this, 'team.profile.get')) as Method<methods.TeamProfileGetArguments>,
},
}] team method family
* @property {module:@slack/client/dist/WebClient.__object} [usergroups={
create: (this.apiCall.bind(this, 'usergroups.create')) as Method<methods.UsergroupsCreateArguments>,
disable: (this.apiCall.bind(this, 'usergroups.disable')) as Method<methods.UsergroupsDisableArguments>,
enable: (this.apiCall.bind(this, 'usergroups.enable')) as Method<methods.UsergroupsEnableArguments>,
list: (this.apiCall.bind(this, 'usergroups.list')) as Method<methods.UsergroupsListArguments>,
update: (this.apiCall.bind(this, 'usergroups.update')) as Method<methods.UsergroupsUpdateArguments>,
users: {
list: (this.apiCall.bind(this, 'usergroups.users.list')) as Method<methods.UsergroupsUsersListArguments>,
update: (this.apiCall.bind(this, 'usergroups.users.update')) as Method<methods.UsergroupsUsersUpdateArguments>,
},
}] usergroups method family
* @property {module:@slack/client/dist/WebClient.__object} [users={
deletePhoto: (this.apiCall.bind(this, 'users.deletePhoto')) as Method<methods.UsersDeletePhotoArguments>,
getPresence: (this.apiCall.bind(this, 'users.getPresence')) as Method<methods.UsersGetPresenceArguments>,
identity: (this.apiCall.bind(this, 'users.identity')) as Method<methods.UsersIdentityArguments>,
info: (this.apiCall.bind(this, 'users.info')) as Method<methods.UsersInfoArguments>,
list: (this.apiCall.bind(this, 'users.list')) as Method<methods.UsersListArguments>,
lookupByEmail: (this.apiCall.bind(this, 'users.lookupByEmail')) as Method<methods.UsersLookupByEmailArguments>,
setActive: (this.apiCall.bind(this, 'users.setActive')) as Method<methods.UsersSetActiveArguments>,
setPhoto: (this.apiCall.bind(this, 'users.setPhoto')) as Method<methods.UsersSetPhotoArguments>,
setPresence: (this.apiCall.bind(this, 'users.setPresence')) as Method<methods.UsersSetPresenceArguments>,
profile: {
get: (this.apiCall.bind(this, 'users.profile.get')) as Method<methods.UsersProfileGetArguments>,
set: (this.apiCall.bind(this, 'users.profile.set')) as Method<methods.UsersProfileSetArguments>,
},
}] users method family
*/

@@ -549,0 +351,0 @@ export class WebClient {

@@ -1,3 +0,1 @@

replace 'async' with 'p-queue'
are the default values clear in option bags in constructors? what does intellisense offer when calling a constructor?

@@ -7,39 +5,7 @@

integration test ideas:
- written with steno
- show use of proxy agent
-- pull out migration guide content for WebClient
-- implement TLS options in WebClient and RTMClient
-- finish missing features in RTMClient: substate events, message subtype events
-- look into docs generation script
-- remove TODO and SEMVER comments from RTMClient
-- rewrite README, docs examples and /examples directory
-- add event lifecycle to guide
-- export .d.ts file
-- figure out the test script
-- write IncomingWebhook, fix its exports, write its docs
write release notes, update migration guide
add info about retryPolicies into migration guide
add Constants section to migration guide
finish writing the argument types for Web API methods
write RTMClient tests (maybe KeepAlive, logger, IncomingWebhook too)
restructure event types and enums
improve interfaces in RTMClient and WebClient
hosting the v3 docs in a sub-path
GitHub Issues to make
* Improve documentation output
- emit all Web API methods
- emit enums LogLevel and ErrorCode
- emit interfaces CodedError, LoggingFunc, RetryOptions, etc.
- emit top-level functions addAppMetadata
- what happened to retryPolicies?
* New documentation generation process
- search, web api methods
* ts2jsdoc feature request: handle @event
* WebClient config to turn rate limit management off, or give it a separate retry policy

@@ -49,36 +15,1 @@ - event emitted should contain the response with the retry-after headers

* RTMClient rate limit handling
* complete the WebAPI method argument interfaces (`help wanted`)
NEW - client is initialized but has no connection
CONNECTING - user has called start()
AUTHENTICATING
AUTHENTICATED / WS_OPENING - start data is availalbe for the user
WS_OPENED
CONNECTED - server has acknowledged connection with hello message, user may send messages. aka RTM_CONNECTION_OPENED
RECONNECTING - messages can still be sent but will be queued until the websocket is open again
const rtm = new RTMClient(token);
rtm.start();
rtm.sendMessage('hello world').then(console.log).catch(console.error);
const rtm = new RTMClient(token);
rtm.on('open', () => {
rtm.sendMessage('hello world').then(console.log).catch(console.error);
});
rtm.start();
generating documentation:
1. use the ts2jsdoc converter to generate a JSDoc interface that is semi-close, hand edit it, commit it to the repo.
then use the old pipeline for converting JSDoc comments into markdown, and then into the jekyll site build.
- biggest issue seems to be the WebAPI methods are not understood by the generator at all
2. ESDoc with typescript plugin and markdown export plugin
- doesn't understand overloaded function/method definitions.
- other hard to decipher errors
- project maintainer seems unresponsive
3. typedoc
- completely different output than i'd expect
- uses JavaDoc syntax?

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc