@hubot-friends/hubot-slack 3.4.0 → 3.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +6 -6
- package/src/Bot.mjs +13 -7
- package/test/Bot.mjs +60 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hubot-friends/hubot-slack",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.6.0",
|
|
4
4
|
"description": "A new Slack adapter for Hubot",
|
|
5
5
|
"homepage": "https://github.com/hubot-friends/hubot-slack#readme",
|
|
6
6
|
"main": "./index.mjs",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"test": "node --test",
|
|
9
9
|
"test:watch": "node --test --watch",
|
|
10
10
|
"test:integration": "node --test --env-file=.env",
|
|
11
|
-
"start:local": "node --watch --env-file=.env node_modules/hubot/bin/hubot --adapter ../../../index.mjs --name
|
|
11
|
+
"start:local": "node --watch --env-file=.env node_modules/hubot/bin/hubot --adapter ../../../index.mjs --name gbot"
|
|
12
12
|
},
|
|
13
13
|
"keywords": [
|
|
14
14
|
"hubot",
|
|
@@ -25,15 +25,15 @@
|
|
|
25
25
|
"url": "https://github.com/hubot-friends/hubot-slack/issues"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@slack/socket-mode": "^
|
|
28
|
+
"@slack/socket-mode": "^2.0.4",
|
|
29
29
|
"@slack/web-api": "^6.11.2"
|
|
30
30
|
},
|
|
31
|
-
"peerDependencies": {
|
|
32
|
-
"hubot": "^11.6.0"
|
|
33
|
-
},
|
|
34
31
|
"engines": {
|
|
35
32
|
"node": ">= 18"
|
|
36
33
|
},
|
|
34
|
+
"peerDependencies": {
|
|
35
|
+
"hubot": "^12.0.0"
|
|
36
|
+
},
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"pino-pretty": "^10.0.1"
|
|
39
39
|
},
|
package/src/Bot.mjs
CHANGED
|
@@ -31,7 +31,7 @@ class SlackClient {
|
|
|
31
31
|
|
|
32
32
|
// Event handling
|
|
33
33
|
// NOTE: add channel join and leave events
|
|
34
|
-
this.socket.on(
|
|
34
|
+
this.socket.on("authenticated", this.eventWrapper, this);
|
|
35
35
|
this.socket.on("message", this.eventWrapper, this);
|
|
36
36
|
this.socket.on("reaction_added", this.eventWrapper, this);
|
|
37
37
|
this.socket.on("reaction_removed", this.eventWrapper, this);
|
|
@@ -203,8 +203,7 @@ class SlackBot extends Adapter {
|
|
|
203
203
|
}
|
|
204
204
|
|
|
205
205
|
this.client.socket.on("open", this.open.bind(this));
|
|
206
|
-
this.client.socket.on("close", this.
|
|
207
|
-
this.client.socket.on("disconnect", this.disconnect.bind(this));
|
|
206
|
+
this.client.socket.on("close", this.onSocketClose.bind(this));
|
|
208
207
|
this.client.socket.on("error", this.error.bind(this));
|
|
209
208
|
this.client.socket.on("authenticated", this.authenticated.bind(this));
|
|
210
209
|
this.client.onEvent(this.eventHandler.bind(this));
|
|
@@ -358,16 +357,23 @@ class SlackBot extends Adapter {
|
|
|
358
357
|
* Slack client has closed the connection
|
|
359
358
|
* @private
|
|
360
359
|
*/
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
if (this.options.autoReconnect) {
|
|
360
|
+
onSocketClose() {
|
|
361
|
+
if (this.socket.autoReconnectEnabled && !this.socket.shuttingDown) {
|
|
364
362
|
this.robot.logger.info("Disconnected from Slack Socket");
|
|
365
363
|
return this.robot.logger.info("Waiting for reconnect...");
|
|
366
364
|
} else {
|
|
367
|
-
return this.
|
|
365
|
+
return this.robot.logger.info("Disconnected from Slack Socket");
|
|
368
366
|
}
|
|
369
367
|
}
|
|
370
368
|
|
|
369
|
+
/**
|
|
370
|
+
* Close the connection
|
|
371
|
+
* @private
|
|
372
|
+
*/
|
|
373
|
+
close() {
|
|
374
|
+
this.disconnect();
|
|
375
|
+
}
|
|
376
|
+
|
|
371
377
|
/**
|
|
372
378
|
* Slack client has closed the connection and will not reconnect
|
|
373
379
|
* @private
|
package/test/Bot.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { describe, it, beforeEach } from 'node:test'
|
|
1
|
+
import { describe, it, beforeEach, mock } from 'node:test'
|
|
2
2
|
import assert from 'node:assert/strict'
|
|
3
3
|
import { SlackBot } from '../src/Bot.mjs'
|
|
4
4
|
import hubotSlackMock from '../index.mjs'
|
|
@@ -76,6 +76,65 @@ describe('Authenticate', () => {
|
|
|
76
76
|
})
|
|
77
77
|
})
|
|
78
78
|
|
|
79
|
+
describe('Socket', () => {
|
|
80
|
+
let stubs, slackbot
|
|
81
|
+
beforeEach(async () => {
|
|
82
|
+
({stubs, slackbot} = (await import('./Stubs.mjs')).default())
|
|
83
|
+
slackbot.socket.disconnect = mock.fn(() => {
|
|
84
|
+
slackbot.socket.shuttingDown = true
|
|
85
|
+
slackbot.socket.emit('close')
|
|
86
|
+
})
|
|
87
|
+
})
|
|
88
|
+
|
|
89
|
+
it('Should socket.disconnect() once', async () => {
|
|
90
|
+
slackbot.socket.autoReconnectEnabled = false
|
|
91
|
+
|
|
92
|
+
await slackbot.run()
|
|
93
|
+
await slackbot.socket.disconnect()
|
|
94
|
+
assert.equal(slackbot.socket.disconnect.mock.callCount(), 1)
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
it('Should log socket close event when we call socket.disconnect()', async () => {
|
|
98
|
+
const { logger } = slackbot.robot
|
|
99
|
+
|
|
100
|
+
slackbot.socket.autoReconnectEnabled = true
|
|
101
|
+
|
|
102
|
+
await slackbot.run()
|
|
103
|
+
await slackbot.socket.disconnect()
|
|
104
|
+
assert.deepEqual(logger.logs.info.slice(-1), ['Disconnected from Slack Socket'])
|
|
105
|
+
})
|
|
106
|
+
|
|
107
|
+
it('Should log waiting for reconnect on socket close event', async () => {
|
|
108
|
+
const { logger } = slackbot.robot
|
|
109
|
+
// Skip socket.disconnect() because it overrides automatic reconnect
|
|
110
|
+
slackbot.socket.websocket = {
|
|
111
|
+
disconnect: mock.fn(() => {
|
|
112
|
+
slackbot.socket.emit('close')
|
|
113
|
+
})
|
|
114
|
+
}
|
|
115
|
+
slackbot.socket.autoReconnectEnabled = true
|
|
116
|
+
|
|
117
|
+
await slackbot.run()
|
|
118
|
+
await slackbot.socket.websocket.disconnect()
|
|
119
|
+
assert.deepEqual(logger.logs.info.slice(-2), ['Disconnected from Slack Socket', 'Waiting for reconnect...'])
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
it('Should log socket close event', async () => {
|
|
123
|
+
const { logger } = slackbot.robot
|
|
124
|
+
// Skip socket.disconnect() because it overrides automatic reconnect
|
|
125
|
+
slackbot.socket.websocket = {
|
|
126
|
+
disconnect: mock.fn(() => {
|
|
127
|
+
slackbot.socket.emit('close')
|
|
128
|
+
})
|
|
129
|
+
}
|
|
130
|
+
slackbot.socket.autoReconnectEnabled = false
|
|
131
|
+
|
|
132
|
+
await slackbot.run()
|
|
133
|
+
await slackbot.socket.websocket.disconnect()
|
|
134
|
+
assert.deepEqual(logger.logs.info.slice(-1), ['Disconnected from Slack Socket'])
|
|
135
|
+
})
|
|
136
|
+
})
|
|
137
|
+
|
|
79
138
|
describe('Logger', () => {
|
|
80
139
|
let stubs, slackbot
|
|
81
140
|
beforeEach(async () => {
|