Socket
Socket
Sign inDemoInstall

@slack/client

Package Overview
Dependencies
145
Maintainers
4
Versions
57
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 4.2.2 to 4.3.0

2

dist/index.d.ts

@@ -8,2 +8,2 @@ export { LoggingFunc, LogLevel } from './logger';

export { RTMClient, RTMClientOptions, RTMCallResult, RTMPlatformError, RTMWebsocketError, RTMCallError, RTMCallResultCallback } from './RTMClient';
export { IncomingWebhook, IncomingWebhookSendArguments, IncomingWebhookDefaultArguments, IncomingWebhookResultCallback } from './IncomingWebhook';
export { IncomingWebhook, IncomingWebhookSendArguments, IncomingWebhookDefaultArguments, IncomingWebhookResult, IncomingWebhookResultCallback } from './IncomingWebhook';

@@ -121,2 +121,4 @@ /// <reference types="node" />

};
export declare type AppsPermissionsResourcesListArguments = TokenOverridable & CursorPaginationEnabled;
export declare type AppsPermissionsScopesListArguments = TokenOverridable & {};
export declare type AuthRevokeArguments = TokenOverridable & {

@@ -123,0 +125,0 @@ test: boolean;

@@ -109,3 +109,3 @@ /// <reference types="node" />

*/
start(options: methods.RTMStartArguments | methods.RTMConnectArguments): void;
start(options?: methods.RTMStartArguments | methods.RTMConnectArguments): void;
/**

@@ -112,0 +112,0 @@ * End an RTM session. After this method is called no messages will be sent or received unless you call

@@ -98,26 +98,3 @@ "use strict";

.on('websocket open').transitionTo('handshaking')
.on('websocket close')
.transitionTo('reconnecting').withCondition(() => this.autoReconnect)
.transitionTo('disconnected').withAction(() => {
// this transition circumvents the 'disconnecting' state (since the websocket is already closed), so we
// need to execute its onExit behavior here.
this.teardownWebsocket();
})
.state('handshaking') // a state in which to wait until the 'server hello' event
.on('websocket close')
.transitionTo('reconnecting').withCondition(() => this.autoReconnect)
.withAction((_from, _to, context) => {
this.logger.debug(`reconnecting after unexpected close ${context.eventPayload.reason} ` +
`${context.eventPayload.code} with isMonitoring set to ${this.keepAlive.isMonitoring} ` +
`and recommendReconnect set to ${this.keepAlive.recommendReconnect}`);
})
.transitionTo('disconnected')
.withAction((_from, _to, context) => {
this.logger.debug(`disconnected after unexpected close ${context.eventPayload.reason} ` +
`${context.eventPayload.code} with isMonitoring set to ${this.keepAlive.isMonitoring} ` +
`and recommendReconnect set to ${this.keepAlive.recommendReconnect}`);
// this transition circumvents the 'disconnecting' state (since the websocket is already closed),
// so we need to execute its onExit behavior here.
this.teardownWebsocket();
})
.global()

@@ -129,2 +106,9 @@ .onStateEnter((state) => {

.on('server hello').transitionTo('connected')
.on('websocket close')
.transitionTo('reconnecting').withCondition(() => this.autoReconnect)
.transitionTo('disconnected').withAction(() => {
// this transition circumvents the 'disconnecting' state (since the websocket is already closed), so we need
// to execute its onExit behavior here.
this.teardownWebsocket();
})
.on('failure').transitionTo('disconnected')

@@ -131,0 +115,0 @@ .state('connected')

@@ -78,2 +78,8 @@ import EventEmitter = require('eventemitter3');

request: Method<methods.AppsPermissionsRequestArguments>;
resources: {
list: Method<methods.AppsPermissionsResourcesListArguments>;
};
scopes: {
list: Method<methods.TokenOverridable>;
};
};

@@ -213,3 +219,3 @@ };

history: Method<methods.IMHistoryArguments>;
list: Method<methods.IMListArguments>;
list: Method<methods.AppsPermissionsResourcesListArguments>;
mark: Method<methods.IMMarkArguments>;

@@ -350,3 +356,3 @@ open: Method<methods.IMOpenArguments>;

* HTTP headers into the object.
* @param response
* @param response - an http response
*/

@@ -353,0 +359,0 @@ private buildResult(response);

@@ -52,2 +52,8 @@ "use strict";

request: (this.apiCall.bind(this, 'apps.permissions.request')),
resources: {
list: (this.apiCall.bind(this, 'apps.permissions.resources.list')),
},
scopes: {
list: (this.apiCall.bind(this, 'apps.permissions.scopes.list')),
},
},

@@ -352,2 +358,15 @@ };

}, this.tlsConfig))
.then((response) => {
const result = this.buildResult(response);
// log warnings in response metadata
if (result.response_metadata !== undefined && result.response_metadata.warnings !== undefined) {
result.response_metadata.warnings.forEach(this.logger.warn);
}
if (!result.ok) {
const error = errors_1.errorWithCode(new Error(`An API error occurred: ${result.error}`), errors_1.ErrorCode.PlatformError);
error.data = result;
throw new pRetry.AbortError(error);
}
return result;
})
.catch((error) => {

@@ -362,2 +381,11 @@ // Wrap errors in this packages own error types (abstract the implementation details' types)

else if (error.name === 'HTTPError') {
// Special case: retry if 429;
if (error.statusCode === 429) {
const result = this.buildResult(error.response);
const retryAfterMs = result.retryAfter !== undefined ? result.retryAfter : (60 * 1000);
this.emit('rate_limited', retryAfterMs / 1000);
this.logger.info(`API Call failed due to rate limiting. Will retry in ${retryAfterMs / 1000} seconds.`);
// wait and return the result from calling `task` again after the specified number of seconds
return delay(retryAfterMs).then(task);
}
throw httpErrorWithOriginal(error);

@@ -368,25 +396,2 @@ }

}
})
.then((response) => {
const result = this.buildResult(response);
// log warnings in response metadata
if (result.response_metadata !== undefined && result.response_metadata.warnings !== undefined) {
result.response_metadata.warnings.forEach(this.logger.warn);
}
// handle rate-limiting
if (response.statusCode !== undefined && response.statusCode === 429) {
const retryAfterMs = result.retryAfter !== undefined ? result.retryAfter : (60 * 1000);
// NOTE: the following event could have more information regarding the api call that is being delayed
this.emit('rate_limited', retryAfterMs / 1000);
this.logger.info(`API Call failed due to rate limiting. Will retry in ${retryAfterMs / 1000} seconds.`);
// wait and return the result from calling `task` again after the specified number of seconds
return delay(retryAfterMs).then(task);
}
// For any error in the API response, treat them as irrecoverable by throwing an AbortError to end retries.
if (!result.ok) {
const error = errors_1.errorWithCode(new Error(`An API error occurred: ${result.error}`), errors_1.ErrorCode.PlatformError);
error.data = result;
throw new pRetry.AbortError(error);
}
return result;
});

@@ -474,3 +479,3 @@ };

* HTTP headers into the object.
* @param response
* @param response - an http response
*/

@@ -514,3 +519,3 @@ buildResult(response) {

* A factory to create WebAPIRequestError objects
* @param original
* @param original - original error
*/

@@ -526,3 +531,3 @@ function requestErrorWithOriginal(original) {

* A factory to create WebAPIReadError objects
* @param original
* @param original - original error
*/

@@ -538,3 +543,3 @@ function readErrorWithOriginal(original) {

* A factory to create WebAPIHTTPError objects
* @param original
* @param original - original error
*/

@@ -541,0 +546,0 @@ function httpErrorWithOriginal(original) {

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

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

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