@slack/rtm-api
Advanced tools
Comparing version
@@ -22,3 +22,3 @@ /// <reference types="node" /> | ||
} | ||
export declare type RTMCallError = RTMPlatformError | RTMWebsocketError | RTMNoReplyReceivedError | RTMSendWhileDisconnectedError | RTMSendWhileNotReadyError; | ||
export type RTMCallError = RTMPlatformError | RTMWebsocketError | RTMNoReplyReceivedError | RTMSendWhileDisconnectedError | RTMSendWhileNotReadyError; | ||
export interface RTMPlatformError extends CodedError { | ||
@@ -25,0 +25,0 @@ code: ErrorCode.SendMessagePlatformError; |
@@ -26,3 +26,3 @@ "use strict"; | ||
// Logging | ||
this.logger = logger_1.getLogger(KeepAlive.loggerName, logLevel, logger); | ||
this.logger = (0, logger_1.getLogger)(KeepAlive.loggerName, logLevel, logger); | ||
} | ||
@@ -57,4 +57,6 @@ /** | ||
} | ||
this.lastPing = this.client = undefined; | ||
this.recommendReconnect = this.isMonitoring = false; | ||
this.lastPing = undefined; | ||
this.client = undefined; | ||
this.recommendReconnect = false; | ||
this.isMonitoring = false; | ||
} | ||
@@ -61,0 +63,0 @@ /** |
@@ -146,4 +146,4 @@ /// <reference types="node" /> | ||
*/ | ||
addOutgoingEvent(awaitReply: true, type: string, body?: {}): Promise<RTMCallResult>; | ||
addOutgoingEvent(awaitReply: false, type: string, body?: {}): Promise<void>; | ||
addOutgoingEvent(awaitReply: true, type: string, body?: Record<string, unknown>): Promise<RTMCallResult>; | ||
addOutgoingEvent(awaitReply: false, type: string, body?: Record<string, unknown>): Promise<void>; | ||
/** | ||
@@ -199,3 +199,3 @@ * Generic method for sending an outgoing message of an arbitrary type. The main difference between this method and | ||
} | ||
export declare type RTMStartOptions = RTMConnectArguments | RTMStartArguments; | ||
export type RTMStartOptions = RTMConnectArguments | RTMStartArguments; | ||
//# sourceMappingURL=RTMClient.d.ts.map |
@@ -8,6 +8,6 @@ "use strict"; | ||
const eventemitter3_1 = require("eventemitter3"); | ||
const ws_1 = __importDefault(require("ws")); // tslint:disable-line:import-name | ||
const finity_1 = __importDefault(require("finity")); // tslint:disable-line:import-name | ||
const p_queue_1 = __importDefault(require("p-queue")); // tslint:disable-line:import-name | ||
const p_cancelable_1 = __importDefault(require("p-cancelable")); // tslint:disable-line:import-name | ||
const ws_1 = __importDefault(require("ws")); | ||
const finity_1 = __importDefault(require("finity")); | ||
const p_queue_1 = __importDefault(require("p-queue")); | ||
const p_cancelable_1 = __importDefault(require("p-cancelable")); | ||
const web_api_1 = require("@slack/web-api"); | ||
@@ -17,3 +17,16 @@ const KeepAlive_1 = require("./KeepAlive"); | ||
const errors_1 = require("./errors"); | ||
const packageJson = require('../package.json'); // tslint:disable-line:no-require-imports no-var-requires | ||
const packageJson = require('../package.json'); // eslint-disable-line import/no-commonjs, @typescript-eslint/no-var-requires | ||
/* | ||
* Helpers | ||
*/ | ||
// NOTE: there may be a better way to add metadata to an error about being "unrecoverable" than to keep an | ||
// independent enum, probably a Set (this isn't used as a type). | ||
var UnrecoverableRTMStartError; | ||
(function (UnrecoverableRTMStartError) { | ||
UnrecoverableRTMStartError["NotAuthed"] = "not_authed"; | ||
UnrecoverableRTMStartError["InvalidAuth"] = "invalid_auth"; | ||
UnrecoverableRTMStartError["AccountInactive"] = "account_inactive"; | ||
UnrecoverableRTMStartError["UserRemovedFromTeam"] = "user_removed_from_team"; | ||
UnrecoverableRTMStartError["TeamDisabled"] = "team_disabled"; | ||
})(UnrecoverableRTMStartError || (UnrecoverableRTMStartError = {})); | ||
/** | ||
@@ -46,2 +59,3 @@ * An RTMClient allows programs to communicate with the {@link https://api.slack.com/rtm|Slack Platform's RTM API}. | ||
.configure() | ||
/* eslint-disable @typescript-eslint/indent, newline-per-chained-call */ | ||
.initialState('disconnected') | ||
@@ -55,3 +69,3 @@ .on('start').transitionTo('connecting') | ||
// for a reply from the server should be canceled | ||
this.awaitingReplyList.forEach(p => p.cancel()); | ||
this.awaitingReplyList.forEach((p) => { p.cancel(); }); | ||
}) | ||
@@ -140,3 +154,3 @@ .state('connecting') | ||
// them know that there are none expected to arrive. | ||
this.awaitingReplyList.forEach(p => p.cancel()); | ||
this.awaitingReplyList.forEach((p) => { p.cancel(); }); | ||
}) | ||
@@ -170,3 +184,4 @@ .state('ready') | ||
// clear data that is now stale | ||
this.activeUserId = this.activeTeamId = undefined; | ||
this.activeUserId = undefined; | ||
this.activeTeamId = undefined; | ||
this.keepAlive.stop(); | ||
@@ -256,3 +271,3 @@ this.outgoingEventQueue.pause(); | ||
// Logging | ||
this.logger = logger_1.getLogger(RTMClient.loggerName, logLevel, logger); | ||
this.logger = (0, logger_1.getLogger)(RTMClient.loggerName, logLevel, logger); | ||
this.stateMachine = finity_1.default.start(this.stateMachineConfig); | ||
@@ -329,2 +344,5 @@ this.logger.debug('initialized'); | ||
const replyPromise = new p_cancelable_1.default((resolve, reject, onCancel) => { | ||
// We only want the event handler to resolve the Promise in the case the message IDs match | ||
// therefore disable consistent-return | ||
// eslint-disable-next-line consistent-return | ||
const eventHandler = (_type, event) => { | ||
@@ -334,6 +352,6 @@ if (event.reply_to === messageId) { | ||
if (event.error !== undefined) { | ||
const error = errors_1.platformErrorFromEvent(event); | ||
const error = (0, errors_1.platformErrorFromEvent)(event); | ||
return reject(error); | ||
} | ||
resolve(event); | ||
return resolve(event); | ||
} | ||
@@ -343,3 +361,3 @@ }; | ||
this.off('slack_event', eventHandler); | ||
reject(errors_1.noReplyReceivedError()); | ||
reject((0, errors_1.noReplyReceivedError)()); | ||
}); | ||
@@ -370,6 +388,3 @@ this.on('slack_event', eventHandler); | ||
send(type, body = {}) { | ||
const message = Object.assign({}, body, { | ||
type, | ||
id: this.nextMessageId(), | ||
}); | ||
const message = Object.assign(Object.assign({}, body), { type, id: this.nextMessageId() }); | ||
return new Promise((resolve, reject) => { | ||
@@ -379,3 +394,3 @@ this.logger.debug(`send() in state: ${this.stateMachine.getStateHierarchy()}`); | ||
this.logger.error('cannot send message when client is not connected'); | ||
reject(errors_1.sendWhileDisconnectedError()); | ||
reject((0, errors_1.sendWhileDisconnectedError)()); | ||
} | ||
@@ -385,3 +400,3 @@ else if (!(this.stateMachine.getCurrentState() === 'connected' && | ||
this.logger.error('cannot send message when client is not ready'); | ||
reject(errors_1.sendWhileNotReadyError()); | ||
reject((0, errors_1.sendWhileNotReadyError)()); | ||
} | ||
@@ -396,5 +411,5 @@ else { | ||
this.logger.error(`failed to send message on websocket: ${error.message}`); | ||
return reject(errors_1.websocketErrorWithOriginal(error)); | ||
return reject((0, errors_1.websocketErrorWithOriginal)(error)); | ||
} | ||
resolve(message.id); | ||
return resolve(message.id); | ||
}); | ||
@@ -416,5 +431,3 @@ } | ||
// initialize the websocket | ||
const options = Object.assign({ | ||
perMessageDeflate: false, | ||
}, this.tlsConfig); | ||
const options = Object.assign({ perMessageDeflate: false }, this.tlsConfig); | ||
if (this.agentConfig !== undefined) { | ||
@@ -425,7 +438,7 @@ options.agent = this.agentConfig; | ||
// attach event listeners | ||
this.websocket.addEventListener('open', event => this.stateMachine.handle('websocket open', event)); | ||
this.websocket.addEventListener('close', event => this.stateMachine.handle('websocket close', event)); | ||
this.websocket.addEventListener('open', (event) => this.stateMachine.handle('websocket open', event)); | ||
this.websocket.addEventListener('close', (event) => this.stateMachine.handle('websocket close', event)); | ||
this.websocket.addEventListener('error', (event) => { | ||
this.logger.error(`A websocket error occurred: ${event.message}`); | ||
this.emit('error', errors_1.websocketErrorWithOriginal(event.error)); | ||
this.emit('error', (0, errors_1.websocketErrorWithOriginal)(event.error)); | ||
}); | ||
@@ -491,17 +504,4 @@ this.websocket.addEventListener('message', this.onWebsocketMessage.bind(this)); | ||
/* Instrumentation */ | ||
web_api_1.addAppMetadata({ name: packageJson.name, version: packageJson.version }); | ||
(0, web_api_1.addAppMetadata)({ name: packageJson.name, version: packageJson.version }); | ||
exports.default = RTMClient; | ||
/* | ||
* Helpers | ||
*/ | ||
// NOTE: there may be a better way to add metadata to an error about being "unrecoverable" than to keep an | ||
// independent enum, probably a Set (this isn't used as a type). | ||
var UnrecoverableRTMStartError; | ||
(function (UnrecoverableRTMStartError) { | ||
UnrecoverableRTMStartError["NotAuthed"] = "not_authed"; | ||
UnrecoverableRTMStartError["InvalidAuth"] = "invalid_auth"; | ||
UnrecoverableRTMStartError["AccountInactive"] = "account_inactive"; | ||
UnrecoverableRTMStartError["UserRemovedFromTeam"] = "user_removed_from_team"; | ||
UnrecoverableRTMStartError["TeamDisabled"] = "team_disabled"; | ||
})(UnrecoverableRTMStartError || (UnrecoverableRTMStartError = {})); | ||
//# sourceMappingURL=RTMClient.js.map |
{ | ||
"name": "@slack/rtm-api", | ||
"version": "6.0.0", | ||
"version": "6.1.0", | ||
"description": "Official library for using the Slack Platform's Real Time Messaging API", | ||
"author": "Slack Technologies, Inc.", | ||
"author": "Slack Technologies, LLC", | ||
"license": "MIT", | ||
@@ -40,4 +40,4 @@ "keywords": [ | ||
"build:clean": "shx rm -rf ./dist", | ||
"lint": "tslint --project .", | ||
"test": "npm run build && echo \"Tests are not implemented.\" && exit 0", | ||
"lint": "eslint --ext .ts src", | ||
"test": "npm run lint && npm run build && echo \"Tests are not implemented.\" && exit 0", | ||
"ref-docs:model": "api-extractor run" | ||
@@ -50,3 +50,3 @@ }, | ||
"@types/p-queue": "^2.3.2", | ||
"@types/ws": "^7.2.5", | ||
"@types/ws": "^7.4.7", | ||
"eventemitter3": "^3.1.0", | ||
@@ -56,11 +56,17 @@ "finity": "^0.5.4", | ||
"p-queue": "^2.4.2", | ||
"ws": "^5.2.0" | ||
"ws": "^7.5.3" | ||
}, | ||
"devDependencies": { | ||
"@microsoft/api-extractor": "^7.3.4", | ||
"@typescript-eslint/eslint-plugin": "^4.4.1", | ||
"@typescript-eslint/parser": "^4.4.0", | ||
"eslint": "^7.32.0", | ||
"eslint-config-airbnb-base": "^14.2.1", | ||
"eslint-config-airbnb-typescript": "^12.3.1", | ||
"eslint-plugin-import": "^2.22.1", | ||
"eslint-plugin-jsdoc": "^30.6.1", | ||
"eslint-plugin-node": "^11.1.0", | ||
"shx": "^0.3.2", | ||
"tslint": "^5.13.1", | ||
"tslint-config-airbnb": "^5.11.1", | ||
"typescript": "^4.1.0" | ||
} | ||
} |
# Slack Real Time Messaging API | ||
[](https://github.com/slackapi/node-slack-sdk/actions?query=workflow%3A%22CI+Build%22) | ||
<!-- TODO: per-flag badge https://docs.codecov.io/docs/flags#section-flag-badges-and-graphs --> | ||
[](https://codecov.io/gh/slackapi/node-slack-sdk) | ||
<!-- TODO: npm versions with scoped packages: https://github.com/rvagg/nodei.co/issues/24 --> | ||
The `@slack/rtm-api` package contains a simple, convenient, and configurable client for receiving events and sending simple messages to Slack's [Real Time Messaging API](https://api.slack.com/rtm). Use it in your | ||
@@ -438,3 +433,3 @@ app to stay connected to the Slack platform over a persistent Websocket connection. | ||
This package supports Node v8 LTS and higher. It's highly recommended to use [the latest LTS version of | ||
This package supports Node v14 and higher. It's highly recommended to use [the latest LTS version of | ||
node](https://github.com/nodejs/Release#release-schedule), and the documentation is written using syntax and features | ||
@@ -441,0 +436,0 @@ from that version. |
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
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
97778
0.24%1133
0.18%11
120%446
-1.11%1
Infinity%+ Added
- Removed
- Removed
Updated
Updated