seyfert 2.1.0 → 2.1.1-dev-11310514874.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.
Files changed (240) hide show
  1. package/lib/api/Router.d.ts +2 -2
  2. package/lib/api/Router.js +2 -1
  3. package/lib/api/Routes/applications.d.ts +29 -30
  4. package/lib/api/Routes/cdn.d.ts +6 -1
  5. package/lib/api/Routes/channels.d.ts +44 -45
  6. package/lib/api/Routes/gateway.d.ts +3 -4
  7. package/lib/api/Routes/guilds.d.ts +81 -80
  8. package/lib/api/Routes/index.d.ts +3 -1
  9. package/lib/api/Routes/interactions.d.ts +6 -6
  10. package/lib/api/Routes/invites.d.ts +3 -4
  11. package/lib/api/Routes/skus.d.ts +4 -5
  12. package/lib/api/Routes/soundboard.d.ts +23 -0
  13. package/lib/api/Routes/soundboard.js +2 -0
  14. package/lib/api/Routes/stage-instances.d.ts +5 -6
  15. package/lib/api/Routes/stickers.d.ts +3 -4
  16. package/lib/api/Routes/users.d.ts +11 -12
  17. package/lib/api/Routes/voice.d.ts +2 -3
  18. package/lib/api/Routes/webhooks.d.ts +16 -15
  19. package/lib/api/api.d.ts +17 -11
  20. package/lib/api/api.js +12 -10
  21. package/lib/api/shared.d.ts +1 -1
  22. package/lib/api/utils/constants.d.ts +2 -0
  23. package/lib/api/utils/constants.js +2 -1
  24. package/lib/builders/ActionRow.d.ts +1 -1
  25. package/lib/builders/Attachment.d.ts +2 -2
  26. package/lib/builders/Attachment.js +1 -1
  27. package/lib/builders/Button.d.ts +1 -1
  28. package/lib/builders/Button.js +1 -1
  29. package/lib/builders/Embed.d.ts +1 -1
  30. package/lib/builders/Embed.js +2 -2
  31. package/lib/builders/Modal.d.ts +1 -1
  32. package/lib/builders/Poll.d.ts +1 -1
  33. package/lib/builders/Poll.js +1 -1
  34. package/lib/builders/SelectMenu.d.ts +1 -1
  35. package/lib/builders/SelectMenu.js +1 -1
  36. package/lib/builders/types.d.ts +2 -1
  37. package/lib/cache/adapters/default.js +5 -3
  38. package/lib/cache/adapters/limited.d.ts +1 -2
  39. package/lib/cache/adapters/limited.js +34 -30
  40. package/lib/cache/adapters/workeradapter.js +3 -1
  41. package/lib/cache/index.d.ts +8 -11
  42. package/lib/cache/index.js +38 -37
  43. package/lib/cache/resources/bans.d.ts +2 -2
  44. package/lib/cache/resources/bans.js +1 -1
  45. package/lib/cache/resources/channels.d.ts +1 -1
  46. package/lib/cache/resources/default/guild-related.d.ts +1 -2
  47. package/lib/cache/resources/emojis.d.ts +2 -2
  48. package/lib/cache/resources/emojis.js +1 -1
  49. package/lib/cache/resources/guilds.d.ts +2 -2
  50. package/lib/cache/resources/guilds.js +7 -11
  51. package/lib/cache/resources/members.d.ts +2 -2
  52. package/lib/cache/resources/members.js +1 -1
  53. package/lib/cache/resources/messages.d.ts +2 -2
  54. package/lib/cache/resources/messages.js +3 -3
  55. package/lib/cache/resources/overwrites.d.ts +1 -1
  56. package/lib/cache/resources/roles.d.ts +2 -2
  57. package/lib/cache/resources/roles.js +1 -1
  58. package/lib/cache/resources/stickers.d.ts +2 -2
  59. package/lib/cache/resources/stickers.js +1 -1
  60. package/lib/cache/resources/users.d.ts +2 -2
  61. package/lib/cache/resources/users.js +1 -1
  62. package/lib/cache/resources/voice-states.d.ts +2 -2
  63. package/lib/cache/resources/voice-states.js +1 -1
  64. package/lib/client/base.d.ts +9 -14
  65. package/lib/client/base.js +43 -44
  66. package/lib/client/client.d.ts +3 -7
  67. package/lib/client/client.js +24 -41
  68. package/lib/client/collectors.js +1 -1
  69. package/lib/client/httpclient.d.ts +1 -1
  70. package/lib/client/transformers.d.ts +37 -34
  71. package/lib/client/transformers.js +66 -63
  72. package/lib/client/workerclient.d.ts +10 -11
  73. package/lib/client/workerclient.js +180 -75
  74. package/lib/collection.d.ts +3 -3
  75. package/lib/commands/applications/chat.d.ts +3 -3
  76. package/lib/commands/applications/chat.js +5 -6
  77. package/lib/commands/applications/chatcontext.d.ts +6 -6
  78. package/lib/commands/applications/chatcontext.js +16 -8
  79. package/lib/commands/applications/entryPoint.d.ts +1 -1
  80. package/lib/commands/applications/entrycontext.d.ts +6 -6
  81. package/lib/commands/applications/entrycontext.js +4 -4
  82. package/lib/commands/applications/menu.d.ts +1 -1
  83. package/lib/commands/applications/menucontext.d.ts +5 -5
  84. package/lib/commands/applications/menucontext.js +6 -6
  85. package/lib/commands/applications/options.d.ts +4 -4
  86. package/lib/commands/applications/shared.d.ts +5 -2
  87. package/lib/commands/basecontext.d.ts +1 -1
  88. package/lib/commands/decorators.d.ts +10 -10
  89. package/lib/commands/decorators.js +5 -4
  90. package/lib/commands/handle.d.ts +9 -9
  91. package/lib/commands/handle.js +94 -68
  92. package/lib/commands/handler.d.ts +5 -5
  93. package/lib/commands/handler.js +21 -17
  94. package/lib/commands/optionresolver.d.ts +4 -4
  95. package/lib/commands/optionresolver.js +3 -3
  96. package/lib/common/it/formatter.d.ts +21 -21
  97. package/lib/common/it/formatter.js +40 -41
  98. package/lib/common/it/logger.js +1 -1
  99. package/lib/common/it/utils.d.ts +4 -3
  100. package/lib/common/it/utils.js +52 -27
  101. package/lib/common/shorters/application.d.ts +2 -3
  102. package/lib/common/shorters/application.js +3 -3
  103. package/lib/common/shorters/bans.js +1 -1
  104. package/lib/common/shorters/channels.d.ts +3 -3
  105. package/lib/common/shorters/channels.js +3 -3
  106. package/lib/common/shorters/emojis.js +4 -4
  107. package/lib/common/shorters/guilds.d.ts +3 -3
  108. package/lib/common/shorters/guilds.js +5 -9
  109. package/lib/common/shorters/interaction.d.ts +3 -3
  110. package/lib/common/shorters/interaction.js +6 -5
  111. package/lib/common/shorters/members.d.ts +4 -5
  112. package/lib/common/shorters/members.js +6 -7
  113. package/lib/common/shorters/messages.d.ts +1 -1
  114. package/lib/common/shorters/messages.js +4 -4
  115. package/lib/common/shorters/reactions.d.ts +1 -1
  116. package/lib/common/shorters/reactions.js +1 -1
  117. package/lib/common/shorters/roles.js +1 -1
  118. package/lib/common/shorters/templates.js +2 -2
  119. package/lib/common/shorters/threads.d.ts +1 -1
  120. package/lib/common/shorters/threads.js +17 -11
  121. package/lib/common/shorters/webhook.d.ts +1 -1
  122. package/lib/common/shorters/webhook.js +4 -4
  123. package/lib/common/types/options.d.ts +2 -2
  124. package/lib/common/types/resolvables.d.ts +1 -1
  125. package/lib/common/types/util.d.ts +4 -1
  126. package/lib/common/types/write.d.ts +1 -1
  127. package/lib/components/BaseComponent.js +1 -1
  128. package/lib/components/ButtonComponent.d.ts +1 -1
  129. package/lib/components/componentcommand.d.ts +1 -1
  130. package/lib/components/componentcontext.d.ts +4 -4
  131. package/lib/components/componentcontext.js +1 -1
  132. package/lib/components/handler.d.ts +10 -8
  133. package/lib/components/handler.js +16 -13
  134. package/lib/components/index.js +2 -1
  135. package/lib/components/modalcontext.d.ts +2 -2
  136. package/lib/components/modalcontext.js +1 -1
  137. package/lib/deps/mixer.d.ts +1 -1
  138. package/lib/events/handler.d.ts +5 -5
  139. package/lib/events/handler.js +66 -16
  140. package/lib/events/hooks/application_command.d.ts +1 -1
  141. package/lib/events/hooks/auto_moderation.d.ts +1 -1
  142. package/lib/events/hooks/auto_moderation.js +1 -1
  143. package/lib/events/hooks/channel.d.ts +1 -1
  144. package/lib/events/hooks/dispatch.d.ts +1 -1
  145. package/lib/events/hooks/entitlement.d.ts +4 -5
  146. package/lib/events/hooks/entitlement.js +4 -4
  147. package/lib/events/hooks/guild.d.ts +3 -3
  148. package/lib/events/hooks/guild.js +1 -1
  149. package/lib/events/hooks/index.d.ts +1 -0
  150. package/lib/events/hooks/index.js +1 -0
  151. package/lib/events/hooks/integration.d.ts +1 -1
  152. package/lib/events/hooks/integration.js +1 -1
  153. package/lib/events/hooks/interactions.d.ts +3 -3
  154. package/lib/events/hooks/invite.d.ts +1 -1
  155. package/lib/events/hooks/message.d.ts +3 -3
  156. package/lib/events/hooks/message.js +1 -1
  157. package/lib/events/hooks/presence.d.ts +2 -2
  158. package/lib/events/hooks/soundboard.d.ts +155 -0
  159. package/lib/events/hooks/soundboard.js +28 -0
  160. package/lib/events/hooks/stage.d.ts +2 -2
  161. package/lib/events/hooks/thread.d.ts +2 -2
  162. package/lib/events/hooks/thread.js +2 -2
  163. package/lib/events/hooks/typing.d.ts +1 -1
  164. package/lib/events/hooks/typing.js +1 -1
  165. package/lib/events/hooks/user.d.ts +2 -2
  166. package/lib/events/hooks/voice.d.ts +2 -2
  167. package/lib/events/hooks/voice.js +1 -1
  168. package/lib/events/hooks/webhook.d.ts +1 -1
  169. package/lib/index.d.ts +2 -2
  170. package/lib/index.js +3 -5
  171. package/lib/langs/handler.d.ts +2 -2
  172. package/lib/structures/Guild.d.ts +7 -4
  173. package/lib/structures/Guild.js +1 -1
  174. package/lib/structures/GuildBan.d.ts +1 -1
  175. package/lib/structures/GuildMember.d.ts +7 -5
  176. package/lib/structures/GuildMember.js +5 -3
  177. package/lib/structures/GuildRole.d.ts +1 -1
  178. package/lib/structures/GuildTemplate.d.ts +1 -1
  179. package/lib/structures/Interaction.d.ts +17 -14
  180. package/lib/structures/Interaction.js +28 -21
  181. package/lib/structures/Message.d.ts +4 -7
  182. package/lib/structures/Message.js +5 -5
  183. package/lib/structures/Poll.d.ts +3 -3
  184. package/lib/structures/Sticker.d.ts +2 -2
  185. package/lib/structures/Sticker.js +1 -1
  186. package/lib/structures/VoiceState.d.ts +2 -1
  187. package/lib/structures/VoiceState.js +1 -1
  188. package/lib/structures/Webhook.d.ts +3 -3
  189. package/lib/structures/Webhook.js +1 -1
  190. package/lib/structures/channels.d.ts +4 -4
  191. package/lib/structures/channels.js +6 -5
  192. package/lib/structures/extra/BitField.d.ts +3 -3
  193. package/lib/structures/extra/BitField.js +34 -33
  194. package/lib/structures/extra/DiscordBase.js +1 -1
  195. package/lib/structures/extra/Permissions.d.ts +2 -0
  196. package/lib/structures/extra/Permissions.js +21 -0
  197. package/lib/types/gateway.d.ts +53 -5
  198. package/lib/types/payloads/_interactions/base.d.ts +1 -1
  199. package/lib/types/payloads/channel.d.ts +2 -2
  200. package/lib/types/payloads/guild.d.ts +9 -1
  201. package/lib/types/payloads/guild.js +8 -0
  202. package/lib/types/payloads/index.d.ts +1 -0
  203. package/lib/types/payloads/index.js +1 -0
  204. package/lib/types/payloads/soundboard.d.ts +23 -0
  205. package/lib/types/payloads/soundboard.js +5 -0
  206. package/lib/types/payloads/user.js +0 -1
  207. package/lib/types/rest/application.d.ts +3 -3
  208. package/lib/types/rest/auditLog.d.ts +1 -1
  209. package/lib/types/rest/channel.d.ts +2 -2
  210. package/lib/types/rest/guild.d.ts +2 -2
  211. package/lib/types/rest/guildScheduledEvent.d.ts +1 -1
  212. package/lib/types/rest/index.d.ts +1 -0
  213. package/lib/types/rest/index.js +1 -0
  214. package/lib/types/rest/oauth2.d.ts +1 -1
  215. package/lib/types/rest/poll.d.ts +1 -1
  216. package/lib/types/rest/soundboard.d.ts +64 -0
  217. package/lib/types/rest/soundboard.js +2 -0
  218. package/lib/types/rest/stageInstance.d.ts +1 -1
  219. package/lib/types/rest/template.d.ts +1 -1
  220. package/lib/types/rest/user.d.ts +1 -1
  221. package/lib/types/rest/webhook.d.ts +1 -1
  222. package/lib/types/utils/index.d.ts +11 -2
  223. package/lib/types/utils/index.js +10 -2
  224. package/lib/websocket/SharedTypes.d.ts +11 -2
  225. package/lib/websocket/constants/index.js +0 -10
  226. package/lib/websocket/discord/basesocket.d.ts +1 -1
  227. package/lib/websocket/discord/shard.d.ts +1 -1
  228. package/lib/websocket/discord/shard.js +25 -16
  229. package/lib/websocket/discord/sharder.d.ts +9 -6
  230. package/lib/websocket/discord/sharder.js +91 -74
  231. package/lib/websocket/discord/shared.d.ts +3 -14
  232. package/lib/websocket/discord/socket/custom.js +19 -6
  233. package/lib/websocket/discord/worker.d.ts +8 -2
  234. package/lib/websocket/discord/workermanager.d.ts +42 -17
  235. package/lib/websocket/discord/workermanager.js +144 -37
  236. package/lib/websocket/structures/timeout.d.ts +4 -5
  237. package/lib/websocket/structures/timeout.js +23 -24
  238. package/package.json +72 -70
  239. package/lib/cache/resources/threads.d.ts +0 -14
  240. package/lib/cache/resources/threads.js +0 -32
@@ -31,64 +31,6 @@ class ShardManager extends Map {
31
31
  if (worker_threads.parentPort)
32
32
  parentPort = worker_threads.parentPort;
33
33
  }
34
- if (this.options.resharding.interval <= 0)
35
- return;
36
- setInterval(async () => {
37
- this.debugger?.debug('Checking if reshard is needed');
38
- const info = await this.options.resharding.getInfo();
39
- if (info.shards <= this.totalShards)
40
- return this.debugger?.debug('Resharding not needed');
41
- //https://github.com/discordeno/discordeno/blob/6a5f446c0651b9fad9f1550ff1857fe7a026426b/packages/gateway/src/manager.ts#L106C8-L106C94
42
- const percentage = (info.shards / ((this.totalShards * 2500) / 1000)) * 100;
43
- if (percentage < this.options.resharding.percentage)
44
- return this.debugger?.debug(`Percentage is not enough to reshard ${percentage}/${this.options.resharding.percentage}`);
45
- this.debugger?.info('Starting resharding process');
46
- this.connectQueue.concurrency = info.session_start_limit.max_concurrency;
47
- this.options.totalShards = info.shards;
48
- this.options.info.session_start_limit.max_concurrency = info.session_start_limit.max_concurrency;
49
- let shardsConnected = 0;
50
- let handlePayload = async (sharder, _, packet) => {
51
- if ((packet.t === 'GUILD_CREATE' || packet.t === 'GUILD_DELETE') &&
52
- this.options.resharding.onGuild(packet.d.id)) {
53
- return;
54
- }
55
- if (packet.t !== 'READY')
56
- return;
57
- this.options.resharding.reloadGuilds(packet.d.guilds.map(x => x.id));
58
- if (++shardsConnected < info.shards)
59
- return; //waiting for last shard to connect
60
- // dont listen more events when all shards are ready
61
- handlePayload = async () => { };
62
- await this.disconnectAll();
63
- this.clear();
64
- for (const [id, shard] of sharder) {
65
- shard.options.handlePayload = (shardId, packet) => {
66
- return this.options.handlePayload(shardId, packet);
67
- };
68
- this.set(id, shard);
69
- }
70
- sharder.clear();
71
- };
72
- const resharder = new ShardManager({
73
- ...this.options,
74
- resharding: {
75
- // getInfo mock, we don't need it
76
- getInfo: () => ({}),
77
- interval: 0,
78
- percentage: 0,
79
- reloadGuilds() { },
80
- onGuild() {
81
- return true;
82
- },
83
- },
84
- handlePayload: (shardId, packet) => {
85
- return handlePayload(resharder, shardId, packet);
86
- },
87
- });
88
- // share ratelimit
89
- resharder.connectQueue = this.connectQueue;
90
- await resharder.spawnShards();
91
- }, this.options.resharding.interval);
92
34
  }
93
35
  get totalShards() {
94
36
  return this.options.totalShards ?? this.options.info.shards;
@@ -113,8 +55,8 @@ class ShardManager extends Map {
113
55
  calculateShardId(guildId) {
114
56
  return (0, common_1.calculateShardId)(guildId, this.totalShards);
115
57
  }
116
- spawn(shardId) {
117
- this.debugger?.info(`Spawn shard ${shardId}`);
58
+ create(shardId) {
59
+ this.debugger?.info(`Creating shard ${shardId}`);
118
60
  let shard = this.get(shardId);
119
61
  shard ??= new shard_1.Shard(shardId, {
120
62
  token: this.options.token,
@@ -131,7 +73,7 @@ class ShardManager extends Map {
131
73
  }
132
74
  async spawnShards() {
133
75
  const buckets = this.spawnBuckets();
134
- this.debugger?.info('Spawn shards');
76
+ this.debugger?.info('Spawning shards');
135
77
  for (const bucket of buckets) {
136
78
  for (const shard of bucket) {
137
79
  if (!shard) {
@@ -141,6 +83,81 @@ class ShardManager extends Map {
141
83
  this.connectQueue.push(shard.connect.bind(shard));
142
84
  }
143
85
  }
86
+ await this.startResharder();
87
+ }
88
+ async startResharder() {
89
+ if (this.options.resharding.interval <= 0)
90
+ return;
91
+ if (this.shardStart !== 0 || this.shardEnd !== this.totalShards)
92
+ return this.debugger?.debug('Cannot start resharder');
93
+ this.debugger?.debug('Resharder enabled');
94
+ setInterval(async () => {
95
+ this.debugger?.debug('Checking if reshard is needed');
96
+ const info = await this.options.resharding.getInfo();
97
+ if (info.shards <= this.totalShards)
98
+ return this.debugger?.debug('Resharding not needed');
99
+ //https://github.com/discordeno/discordeno/blob/6a5f446c0651b9fad9f1550ff1857fe7a026426b/packages/gateway/src/manager.ts#L106C8-L106C94
100
+ const percentage = (info.shards / ((this.totalShards * 2500) / 1000)) * 100;
101
+ if (percentage < this.options.resharding.percentage)
102
+ return this.debugger?.debug(`Percentage is not enough to reshard ${percentage}/${this.options.resharding.percentage}`);
103
+ this.debugger?.info('Starting resharding process');
104
+ this.connectQueue.concurrency = info.session_start_limit.max_concurrency;
105
+ this.options.info.session_start_limit.max_concurrency = info.session_start_limit.max_concurrency;
106
+ //waiting for all shards to connect
107
+ let shardsConnected = 0;
108
+ const handleGuilds = new Set();
109
+ let handlePayload = async (sharder, _, packet) => {
110
+ if (packet.t === 'GUILD_CREATE' || packet.t === 'GUILD_DELETE') {
111
+ handleGuilds.delete(packet.d.id);
112
+ if (shardsConnected === info.shards && !handleGuilds.size) {
113
+ return cleanProcess(sharder);
114
+ }
115
+ }
116
+ if (packet.t !== 'READY')
117
+ return;
118
+ for (const guild of packet.d.guilds) {
119
+ handleGuilds.add(guild.id);
120
+ }
121
+ if (++shardsConnected < info.shards || handleGuilds.size)
122
+ return;
123
+ cleanProcess(sharder);
124
+ // dont listen more events when all shards are ready
125
+ };
126
+ const cleanProcess = (sharder) => {
127
+ handlePayload = async () => {
128
+ //
129
+ };
130
+ this.disconnectAll();
131
+ this.clear();
132
+ this.options.totalShards = this.options.shardEnd = info.shards;
133
+ for (const [id, shard] of sharder) {
134
+ shard.options.handlePayload = (shardId, packet) => {
135
+ return this.options.handlePayload(shardId, packet);
136
+ };
137
+ this.set(id, shard);
138
+ }
139
+ sharder.clear();
140
+ };
141
+ const options = (0, common_1.MergeOptions)(this.options, {
142
+ totalShards: info.shards,
143
+ shardEnd: info.shards,
144
+ });
145
+ const resharder = new ShardManager({
146
+ ...options,
147
+ resharding: {
148
+ // getInfo mock, we don't need it
149
+ getInfo: () => ({}),
150
+ interval: 0,
151
+ percentage: 0,
152
+ },
153
+ handlePayload: (shardId, packet) => {
154
+ return handlePayload(resharder, shardId, packet);
155
+ },
156
+ });
157
+ // share ratelimit
158
+ resharder.connectQueue = this.connectQueue;
159
+ await resharder.spawnShards();
160
+ }, this.options.resharding.interval);
144
161
  }
145
162
  /*
146
163
  * spawns buckets in order
@@ -152,7 +169,7 @@ class ShardManager extends Map {
152
169
  chunks.forEach((arr, index) => {
153
170
  for (let i = 0; i < arr.length; i++) {
154
171
  const id = i + (index > 0 ? index * this.concurrency : 0) + this.shardStart;
155
- chunks[index][i] = this.spawn(id);
172
+ chunks[index][i] = this.create(id);
156
173
  }
157
174
  });
158
175
  this.debugger?.info(`${chunks.length} buckets created`);
@@ -160,7 +177,7 @@ class ShardManager extends Map {
160
177
  }
161
178
  forceIdentify(shardId) {
162
179
  this.debugger?.info(`Shard #${shardId} force identify`);
163
- return this.spawn(shardId).identify();
180
+ return this.create(shardId).identify();
164
181
  }
165
182
  disconnect(shardId) {
166
183
  this.debugger?.info(`Shard #${shardId} force disconnect`);
@@ -168,10 +185,7 @@ class ShardManager extends Map {
168
185
  }
169
186
  disconnectAll() {
170
187
  this.debugger?.info('Disconnect all shards');
171
- return new Promise(resolve => {
172
- this.forEach(shard => shard.disconnect());
173
- resolve(null);
174
- });
188
+ this.forEach(shard => shard.disconnect());
175
189
  }
176
190
  setShardPresence(shardId, payload) {
177
191
  this.debugger?.info(`Shard #${shardId} update presence`);
@@ -181,12 +195,9 @@ class ShardManager extends Map {
181
195
  });
182
196
  }
183
197
  setPresence(payload) {
184
- return new Promise(resolve => {
185
- this.forEach(shard => {
186
- this.setShardPresence(shard.id, payload);
187
- }, this);
188
- resolve();
189
- });
198
+ this.forEach(shard => {
199
+ this.setShardPresence(shard.id, payload);
200
+ }, this);
190
201
  }
191
202
  joinVoice(guild_id, channel_id, options) {
192
203
  const shardId = this.calculateShardId(guild_id);
@@ -202,7 +213,6 @@ class ShardManager extends Map {
202
213
  }
203
214
  leaveVoice(guild_id) {
204
215
  const shardId = this.calculateShardId(guild_id);
205
- this.debugger?.info(`Shard #${shardId} leave voice in ${guild_id}`);
206
216
  return this.send(shardId, {
207
217
  op: types_1.GatewayOpcodes.VoiceStateUpdate,
208
218
  d: {
@@ -223,5 +233,12 @@ class ShardManager extends Map {
223
233
  }
224
234
  this.get(shardId)?.send(false, payload);
225
235
  }
236
+ resume(shardId, shardData) {
237
+ if (this.has(shardId))
238
+ throw new Error('Cannot override existing shard');
239
+ const shard = this.create(shardId);
240
+ shard.data = shardData;
241
+ return this.connectQueue.push(shard.connect.bind(shard));
242
+ }
226
243
  }
227
244
  exports.ShardManager = ShardManager;
@@ -1,5 +1,5 @@
1
- import type { APIGatewayBotInfo, GatewayDispatchPayload, GatewayIntentBits, GatewayPresenceUpdateData } from '../../types';
2
1
  import type { Awaitable, DeepPartial, Logger } from '../../common';
2
+ import type { APIGatewayBotInfo, GatewayDispatchPayload, GatewayIntentBits, GatewayPresenceUpdateData } from '../../types';
3
3
  import type { IdentifyProperties } from '../constants';
4
4
  export interface ShardManagerOptions extends ShardDetails {
5
5
  /** Important data which is used by the manager to connect shards to the gateway. */
@@ -36,18 +36,6 @@ export interface ShardManagerOptions extends ShardDetails {
36
36
  getInfo(): Promise<APIGatewayBotInfo>;
37
37
  interval: number;
38
38
  percentage: number;
39
- /**
40
- *
41
- * @param ids
42
- * @returns
43
- */
44
- reloadGuilds: (ids: string[]) => unknown;
45
- /**
46
- *
47
- * @param id
48
- * @returns true if deleted
49
- */
50
- onGuild: (id: string) => boolean;
51
39
  };
52
40
  }
53
41
  export interface CustomManagerAdapter {
@@ -64,7 +52,7 @@ export interface WorkerManagerOptions extends Omit<ShardManagerOptions, 'handleP
64
52
  shardsPerWorker?: number;
65
53
  workerProxy?: boolean;
66
54
  path: string;
67
- handlePayload(shardId: number, workerId: number, packet: GatewayDispatchPayload): unknown;
55
+ handlePayload?(shardId: number, workerId: number, packet: GatewayDispatchPayload): any;
68
56
  properties?: DeepPartial<NonNullable<ShardManagerOptions['properties']>>;
69
57
  }
70
58
  export interface ShardData {
@@ -129,4 +117,5 @@ export interface WorkerData {
129
117
  debug: boolean;
130
118
  workerProxy: boolean;
131
119
  __USING_WATCHER__?: boolean;
120
+ resharding: boolean;
132
121
  }
@@ -186,12 +186,24 @@ class SeyfertWebSocket {
186
186
  frame.set(buffer, frame.length - length);
187
187
  this.socket?.write(frame);
188
188
  }
189
- onping(_data) { }
190
- onpong(_data) { }
191
- onopen() { }
192
- onmessage(_payload) { }
193
- onclose(_close) { }
194
- onerror(_err) { }
189
+ onping(_data) {
190
+ //
191
+ }
192
+ onpong(_data) {
193
+ //
194
+ }
195
+ onopen() {
196
+ //
197
+ }
198
+ onmessage(_payload) {
199
+ //
200
+ }
201
+ onclose(_close) {
202
+ //
203
+ }
204
+ onerror(_err) {
205
+ //
206
+ }
195
207
  close(code, reason) {
196
208
  this.__closeCalled = true;
197
209
  // alloc payload length
@@ -203,6 +215,7 @@ class SeyfertWebSocket {
203
215
  // message, close opcode
204
216
  this._write(buffer, 0x8);
205
217
  this.socket?.end();
218
+ this.onclose({ code, reason });
206
219
  }
207
220
  pong(data) {
208
221
  //send pong opcode (10)
@@ -9,13 +9,16 @@ export interface WorkerShardInfo {
9
9
  export type WorkerInfo = {
10
10
  shards: WorkerShardInfo[];
11
11
  };
12
- type CreateWorkerMessage<T extends string, D extends object = {}> = {
12
+ type CreateWorkerMessage<T extends string, D extends object = object> = {
13
13
  type: T;
14
14
  workerId: number;
15
15
  } & D;
16
16
  export type WorkerRequestConnect = CreateWorkerMessage<'CONNECT_QUEUE', {
17
17
  shardId: number;
18
18
  }>;
19
+ export type WorkerRequestConnectResharding = CreateWorkerMessage<'CONNECT_QUEUE_RESHARDING', {
20
+ shardId: number;
21
+ }>;
19
22
  export type WorkerReceivePayload = CreateWorkerMessage<'RECEIVE_PAYLOAD', {
20
23
  shardId: number;
21
24
  payload: GatewayDispatchPayload;
@@ -35,8 +38,11 @@ export type WorkerSendInfo = CreateWorkerMessage<'WORKER_INFO', WorkerInfo & {
35
38
  nonce: string;
36
39
  }>;
37
40
  export type WorkerReady = CreateWorkerMessage<'WORKER_READY'>;
41
+ export type WorkerReadyResharding = CreateWorkerMessage<'WORKER_READY_RESHARDING'>;
38
42
  export type WorkerShardsConnected = CreateWorkerMessage<'WORKER_SHARDS_CONNECTED'>;
39
43
  export type WorkerStart = CreateWorkerMessage<'WORKER_START'>;
44
+ export type WorkerStartResharding = CreateWorkerMessage<'WORKER_START_RESHARDING'>;
45
+ export type WorkerDisconnectedAllShardsResharding = CreateWorkerMessage<'DISCONNECTED_ALL_SHARDS_RESHARDING'>;
40
46
  export type WorkerSendApiRequest = CreateWorkerMessage<'WORKER_API_REQUEST', {
41
47
  method: HttpMethods;
42
48
  url: `/${string}`;
@@ -52,5 +58,5 @@ export type WorkerSendEval = CreateWorkerMessage<'EVAL', {
52
58
  nonce: string;
53
59
  toWorkerId: number;
54
60
  }>;
55
- export type WorkerMessage = WorkerRequestConnect | WorkerReceivePayload | WorkerSendResultPayload | WorkerSendCacheRequest | WorkerSendShardInfo | WorkerSendInfo | WorkerReady | WorkerShardsConnected | WorkerSendApiRequest | WorkerSendEvalResponse | WorkerSendEval | WorkerStart;
61
+ export type WorkerMessage = WorkerRequestConnect | WorkerReceivePayload | WorkerSendResultPayload | WorkerSendCacheRequest | WorkerSendShardInfo | WorkerSendInfo | WorkerReady | WorkerShardsConnected | WorkerSendApiRequest | WorkerSendEvalResponse | WorkerSendEval | WorkerStart | WorkerStartResharding | WorkerRequestConnectResharding | WorkerReadyResharding | WorkerDisconnectedAllShardsResharding;
56
62
  export {};
@@ -1,16 +1,23 @@
1
- import type { GatewayPresenceUpdateData, GatewaySendPayload } from '../../types';
2
1
  import { type Worker as ClusterWorker } from 'node:cluster';
3
2
  import { ApiHandler, Logger } from '../..';
4
3
  import { type Adapter } from '../../cache';
5
4
  import { type MakePartial } from '../../common';
5
+ import type { GatewayPresenceUpdateData, GatewaySendPayload } from '../../types';
6
6
  import { ConnectQueue } from '../structures/timeout';
7
7
  import type { ShardOptions, WorkerData, WorkerManagerOptions } from './shared';
8
8
  import type { WorkerInfo, WorkerMessage, WorkerShardInfo } from './worker';
9
9
  export declare class WorkerManager extends Map<number, (ClusterWorker | import('node:worker_threads').Worker | {
10
- ready: boolean;
10
+ ready?: boolean;
11
11
  }) & {
12
12
  ready?: boolean;
13
+ disconnected?: boolean;
14
+ resharded?: boolean;
13
15
  }> {
16
+ static prepareSpaces(options: {
17
+ shardStart: number;
18
+ shardEnd: number;
19
+ shardsPerWorker: number;
20
+ }, logger?: Logger): number[][];
14
21
  options: MakePartial<Required<WorkerManagerOptions>, 'adapter'>;
15
22
  debugger?: Logger;
16
23
  connectQueue: ConnectQueue;
@@ -21,7 +28,11 @@ export declare class WorkerManager extends Map<number, (ClusterWorker | import('
21
28
  timeout: NodeJS.Timeout;
22
29
  }>;
23
30
  rest: ApiHandler;
24
- constructor(options: MakePartial<WorkerManagerOptions, 'token' | 'intents' | 'info' | 'handlePayload'>);
31
+ reshardingWorkerQueue: (() => void)[];
32
+ private _info?;
33
+ constructor(options: Omit<MakePartial<WorkerManagerOptions, 'token' | 'intents' | 'info' | 'handlePayload'>, 'resharding'> & {
34
+ resharding?: MakePartial<NonNullable<WorkerManagerOptions['resharding']>, 'getInfo'>;
35
+ });
25
36
  setCache(adapter: Adapter): void;
26
37
  setRest(rest: ApiHandler): void;
27
38
  get remaining(): number;
@@ -31,36 +42,50 @@ export declare class WorkerManager extends Map<number, (ClusterWorker | import('
31
42
  get shardStart(): number;
32
43
  get shardEnd(): number;
33
44
  get shardsPerWorker(): number;
34
- get workers(): number;
35
- syncLatency({ shardId, workerId }: {
36
- shardId?: number;
45
+ syncLatency({ shardId, workerId, }: {
46
+ shardId: number;
37
47
  workerId?: number;
38
- }): Promise<number | undefined>;
48
+ } | {
49
+ shardId?: number;
50
+ workerId: number;
51
+ }): Promise<number>;
39
52
  calculateShardId(guildId: string): number;
40
53
  calculateWorkerId(shardId: number): number;
41
- prepareSpaces(): number[][];
42
- postMessage(id: number, body: any): void;
43
- prepareWorkers(shards: number[][]): Promise<void>;
44
- createWorker(workerData: WorkerData): ClusterWorker | import("worker_threads").Worker | {
45
- ready: boolean;
46
- };
47
- spawn(workerId: number, shardId: number): void;
54
+ postMessage(id: number, body: ManagerMessages): void;
55
+ prepareWorkers(shards: number[][], resharding?: boolean): Promise<void>;
56
+ createWorker(workerData: WorkerData): ClusterWorker | import("worker_threads").Worker | ({
57
+ ready?: boolean;
58
+ } & {
59
+ ready?: boolean;
60
+ disconnected?: boolean;
61
+ resharded?: boolean;
62
+ });
63
+ spawn(workerId: number, shardId: number, resharding?: boolean): void;
48
64
  handleWorkerMessage(message: WorkerMessage): Promise<void>;
49
65
  private generateNonce;
50
66
  private generateSendPromise;
51
67
  send(data: GatewaySendPayload, shardId: number): Promise<true>;
52
68
  getShardInfo(shardId: number): Promise<WorkerShardInfo>;
53
69
  getWorkerInfo(workerId: number): Promise<WorkerInfo>;
54
- start(): Promise<void | undefined>;
70
+ start(): Promise<void>;
71
+ startResharding(): Promise<void>;
55
72
  }
56
- type CreateManagerMessage<T extends string, D extends object = {}> = {
73
+ type CreateManagerMessage<T extends string, D extends object = object> = {
57
74
  type: T;
58
75
  } & D;
59
76
  export type ManagerAllowConnect = CreateManagerMessage<'ALLOW_CONNECT', {
60
77
  shardId: number;
61
78
  presence: GatewayPresenceUpdateData;
62
79
  }>;
80
+ export type ManagerAllowConnectResharding = CreateManagerMessage<'ALLOW_CONNECT_RESHARDING', {
81
+ shardId: number;
82
+ presence: GatewayPresenceUpdateData;
83
+ }>;
84
+ export type ManagerWorkerAlreadyExistsResharding = CreateManagerMessage<'WORKER_ALREADY_EXISTS_RESHARDING'>;
63
85
  export type ManagerSpawnShards = CreateManagerMessage<'SPAWN_SHARDS', Pick<ShardOptions, 'info' | 'properties' | 'compress'>>;
86
+ export type ManagerSpawnShardsResharding = CreateManagerMessage<'SPAWN_SHARDS_RESHARDING', Pick<ShardOptions, 'info' | 'properties' | 'compress'>>;
87
+ export type DisconnectAllShardsResharding = CreateManagerMessage<'DISCONNECT_ALL_SHARDS_RESHARDING'>;
88
+ export type ConnnectAllShardsResharding = CreateManagerMessage<'CONNECT_ALL_SHARDS_RESHARDING'>;
64
89
  export type ManagerSendPayload = CreateManagerMessage<'SEND_PAYLOAD', GatewaySendPayload & {
65
90
  shardId: number;
66
91
  nonce: string;
@@ -91,5 +116,5 @@ export type ManagerSendEvalResponse = CreateManagerMessage<'EVAL_RESPONSE', {
91
116
  response: any;
92
117
  nonce: string;
93
118
  }>;
94
- export type ManagerMessages = ManagerAllowConnect | ManagerSpawnShards | ManagerSendPayload | ManagerRequestShardInfo | ManagerRequestWorkerInfo | ManagerSendCacheResult | ManagerSendBotReady | ManagerSendApiResponse | ManagerSendEvalResponse | ManagerExecuteEval;
119
+ export type ManagerMessages = ManagerAllowConnect | ManagerSpawnShards | ManagerSendPayload | ManagerRequestShardInfo | ManagerRequestWorkerInfo | ManagerSendCacheResult | ManagerSendBotReady | ManagerSendApiResponse | ManagerSendEvalResponse | ManagerExecuteEval | ManagerWorkerAlreadyExistsResharding | ManagerSpawnShardsResharding | ManagerAllowConnectResharding | DisconnectAllShardsResharding | ConnnectAllShardsResharding;
95
120
  export {};