dfx 0.3.1 → 0.5.1

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 (307) hide show
  1. package/dist/DiscordConfig/index.d.ts +40 -0
  2. package/dist/DiscordConfig/index.d.ts.map +1 -0
  3. package/dist/DiscordConfig/index.js +29 -0
  4. package/dist/DiscordConfig/index.js.map +1 -0
  5. package/dist/DiscordGateway/DiscordWS/index.d.ts +23 -0
  6. package/dist/DiscordGateway/DiscordWS/index.d.ts.map +1 -0
  7. package/dist/DiscordGateway/DiscordWS/index.js +25 -0
  8. package/dist/DiscordGateway/DiscordWS/index.js.map +1 -0
  9. package/dist/DiscordGateway/Shard/heartbeats.d.ts +3 -0
  10. package/dist/DiscordGateway/Shard/heartbeats.d.ts.map +1 -0
  11. package/dist/DiscordGateway/Shard/heartbeats.js +23 -0
  12. package/dist/DiscordGateway/Shard/heartbeats.js.map +1 -0
  13. package/dist/DiscordGateway/Shard/identify.d.ts +13 -0
  14. package/dist/DiscordGateway/Shard/identify.d.ts.map +1 -0
  15. package/dist/DiscordGateway/Shard/identify.js +30 -0
  16. package/dist/DiscordGateway/Shard/identify.js.map +1 -0
  17. package/dist/DiscordGateway/Shard/index.d.ts +9 -0
  18. package/dist/DiscordGateway/Shard/index.d.ts.map +1 -0
  19. package/dist/DiscordGateway/Shard/index.js +51 -0
  20. package/dist/DiscordGateway/Shard/index.js.map +1 -0
  21. package/dist/DiscordGateway/Shard/invalidSession.d.ts +3 -0
  22. package/dist/DiscordGateway/Shard/invalidSession.d.ts.map +1 -0
  23. package/dist/DiscordGateway/Shard/invalidSession.js +9 -0
  24. package/dist/DiscordGateway/Shard/invalidSession.js.map +1 -0
  25. package/dist/DiscordGateway/Shard/sendEvents.d.ts +8 -0
  26. package/dist/DiscordGateway/Shard/sendEvents.d.ts.map +1 -0
  27. package/dist/DiscordGateway/Shard/sendEvents.js +26 -0
  28. package/dist/DiscordGateway/Shard/sendEvents.js.map +1 -0
  29. package/dist/DiscordGateway/Shard/utils.d.ts +4 -0
  30. package/dist/DiscordGateway/Shard/utils.d.ts.map +1 -0
  31. package/dist/DiscordGateway/Shard/utils.js +9 -0
  32. package/dist/DiscordGateway/Shard/utils.js.map +1 -0
  33. package/dist/DiscordGateway/ShardStore/index.d.ts +13 -0
  34. package/dist/DiscordGateway/ShardStore/index.d.ts.map +1 -0
  35. package/dist/DiscordGateway/ShardStore/index.js +22 -0
  36. package/dist/DiscordGateway/ShardStore/index.js.map +1 -0
  37. package/dist/DiscordGateway/Sharder/index.d.ts +10 -0
  38. package/dist/DiscordGateway/Sharder/index.d.ts.map +1 -0
  39. package/dist/DiscordGateway/Sharder/index.js +60 -0
  40. package/dist/DiscordGateway/Sharder/index.js.map +1 -0
  41. package/dist/DiscordGateway/WS/index.d.ts +28 -0
  42. package/dist/DiscordGateway/WS/index.d.ts.map +1 -0
  43. package/dist/DiscordGateway/WS/index.js +82 -0
  44. package/dist/DiscordGateway/WS/index.js.map +1 -0
  45. package/dist/DiscordGateway/index.d.ts +21 -0
  46. package/dist/DiscordGateway/index.d.ts.map +1 -0
  47. package/dist/DiscordGateway/index.js +27 -0
  48. package/dist/DiscordGateway/index.js.map +1 -0
  49. package/dist/DiscordREST/index.d.ts +13 -0
  50. package/dist/DiscordREST/index.d.ts.map +1 -0
  51. package/dist/DiscordREST/index.js +85 -0
  52. package/dist/DiscordREST/index.js.map +1 -0
  53. package/dist/DiscordREST/types.d.ts +10 -0
  54. package/dist/DiscordREST/types.d.ts.map +1 -0
  55. package/dist/DiscordREST/types.js +2 -0
  56. package/{esm → dist}/DiscordREST/types.js.map +1 -1
  57. package/dist/DiscordREST/utils.d.ts +11 -0
  58. package/dist/DiscordREST/utils.d.ts.map +1 -0
  59. package/dist/DiscordREST/utils.js +22 -0
  60. package/dist/DiscordREST/utils.js.map +1 -0
  61. package/dist/Helpers/flags.d.ts +28 -0
  62. package/dist/Helpers/flags.d.ts.map +1 -0
  63. package/dist/Helpers/flags.js +36 -0
  64. package/dist/Helpers/flags.js.map +1 -0
  65. package/dist/Helpers/intents.d.ts +25 -0
  66. package/dist/Helpers/intents.d.ts.map +1 -0
  67. package/dist/Helpers/intents.js +28 -0
  68. package/dist/Helpers/intents.js.map +1 -0
  69. package/dist/Helpers/interactions.d.ts +74 -0
  70. package/dist/Helpers/interactions.d.ts.map +1 -0
  71. package/dist/Helpers/interactions.js +93 -0
  72. package/dist/Helpers/interactions.js.map +1 -0
  73. package/dist/Helpers/members.d.ts +10 -0
  74. package/dist/Helpers/members.d.ts.map +1 -0
  75. package/dist/Helpers/members.js +10 -0
  76. package/dist/Helpers/members.js.map +1 -0
  77. package/dist/Helpers/permissions.d.ts +35 -0
  78. package/dist/Helpers/permissions.d.ts.map +1 -0
  79. package/dist/Helpers/permissions.js +69 -0
  80. package/dist/Helpers/permissions.js.map +1 -0
  81. package/dist/Helpers/ui.d.ts +48 -0
  82. package/dist/Helpers/ui.d.ts.map +1 -0
  83. package/dist/Helpers/ui.js +67 -0
  84. package/dist/Helpers/ui.js.map +1 -0
  85. package/dist/Http/index.d.ts +31 -0
  86. package/dist/Http/index.d.ts.map +1 -0
  87. package/dist/Http/index.js +54 -0
  88. package/dist/Http/index.js.map +1 -0
  89. package/dist/Interactions/context.d.ts +29 -0
  90. package/dist/Interactions/context.d.ts.map +1 -0
  91. package/dist/Interactions/context.js +23 -0
  92. package/dist/Interactions/context.js.map +1 -0
  93. package/dist/Interactions/definitions.d.ts +55 -0
  94. package/dist/Interactions/definitions.d.ts.map +1 -0
  95. package/dist/Interactions/definitions.js +52 -0
  96. package/dist/Interactions/definitions.js.map +1 -0
  97. package/dist/Interactions/gateway.d.ts +6 -0
  98. package/dist/Interactions/gateway.d.ts.map +1 -0
  99. package/dist/Interactions/gateway.js +17 -0
  100. package/dist/Interactions/gateway.js.map +1 -0
  101. package/dist/Interactions/handlers.d.ts +9 -0
  102. package/dist/Interactions/handlers.d.ts.map +1 -0
  103. package/dist/Interactions/handlers.js +49 -0
  104. package/dist/Interactions/handlers.js.map +1 -0
  105. package/dist/Interactions/index.d.ts +20 -0
  106. package/dist/Interactions/index.d.ts.map +1 -0
  107. package/dist/Interactions/index.js +31 -0
  108. package/dist/Interactions/index.js.map +1 -0
  109. package/dist/Interactions/utils.d.ts +10 -0
  110. package/dist/Interactions/utils.d.ts.map +1 -0
  111. package/dist/Interactions/utils.js +20 -0
  112. package/dist/Interactions/utils.js.map +1 -0
  113. package/dist/Interactions/webhook.d.ts +18 -0
  114. package/dist/Interactions/webhook.d.ts.map +1 -0
  115. package/dist/Interactions/webhook.js +26 -0
  116. package/dist/Interactions/webhook.js.map +1 -0
  117. package/dist/Log/index.d.ts +13 -0
  118. package/dist/Log/index.d.ts.map +1 -0
  119. package/dist/Log/index.js +19 -0
  120. package/dist/Log/index.js.map +1 -0
  121. package/dist/RateLimitStore/index.d.ts +25 -0
  122. package/dist/RateLimitStore/index.d.ts.map +1 -0
  123. package/dist/RateLimitStore/index.js +24 -0
  124. package/dist/RateLimitStore/index.js.map +1 -0
  125. package/dist/RateLimitStore/memory.d.ts +3 -0
  126. package/dist/RateLimitStore/memory.d.ts.map +1 -0
  127. package/dist/RateLimitStore/memory.js +31 -0
  128. package/dist/RateLimitStore/memory.js.map +1 -0
  129. package/dist/RateLimitStore/utils.d.ts +3 -0
  130. package/dist/RateLimitStore/utils.d.ts.map +1 -0
  131. package/dist/RateLimitStore/utils.js +18 -0
  132. package/dist/RateLimitStore/utils.js.map +1 -0
  133. package/dist/common.d.ts +34 -0
  134. package/dist/common.d.ts.map +1 -0
  135. package/dist/common.js +21 -0
  136. package/dist/common.js.map +1 -0
  137. package/dist/global.d.ts +14 -0
  138. package/dist/global.d.ts.map +1 -0
  139. package/dist/global.js +2 -0
  140. package/dist/global.js.map +1 -0
  141. package/dist/index.d.ts +21 -0
  142. package/dist/index.d.ts.map +1 -0
  143. package/dist/index.js +33 -0
  144. package/dist/index.js.map +1 -0
  145. package/{types.d.ts → dist/types.d.ts} +1455 -824
  146. package/dist/types.d.ts.map +1 -0
  147. package/{esm → dist}/types.js +283 -46
  148. package/dist/types.js.map +1 -0
  149. package/dist/utils/effect.d.ts +3 -0
  150. package/dist/utils/effect.d.ts.map +1 -0
  151. package/dist/utils/effect.js +2 -0
  152. package/dist/utils/effect.js.map +1 -0
  153. package/dist/utils/tsplus.d.ts +14 -0
  154. package/dist/utils/tsplus.d.ts.map +1 -0
  155. package/dist/utils/tsplus.js +2 -0
  156. package/dist/utils/tsplus.js.map +1 -0
  157. package/package.json +34 -51
  158. package/src/DiscordConfig/index.ts +52 -0
  159. package/src/DiscordGateway/DiscordWS/index.ts +50 -0
  160. package/src/DiscordGateway/Shard/heartbeats.ts +39 -0
  161. package/src/DiscordGateway/Shard/identify.ts +61 -0
  162. package/src/DiscordGateway/Shard/index.ts +90 -0
  163. package/src/DiscordGateway/Shard/invalidSession.ts +11 -0
  164. package/src/DiscordGateway/Shard/sendEvents.ts +35 -0
  165. package/src/DiscordGateway/Shard/utils.ts +14 -0
  166. package/src/DiscordGateway/ShardStore/index.ts +33 -0
  167. package/src/DiscordGateway/Sharder/index.ts +95 -0
  168. package/src/DiscordGateway/WS/index.ts +99 -0
  169. package/src/DiscordGateway/index.ts +55 -0
  170. package/src/DiscordREST/index.ts +132 -0
  171. package/src/DiscordREST/types.ts +14 -0
  172. package/src/DiscordREST/utils.ts +35 -0
  173. package/src/Helpers/flags.ts +68 -0
  174. package/src/Helpers/intents.ts +32 -0
  175. package/src/Helpers/interactions.ts +180 -0
  176. package/src/Helpers/members.ts +14 -0
  177. package/src/Helpers/permissions.ts +102 -0
  178. package/src/Helpers/ui.ts +103 -0
  179. package/src/Http/index.ts +65 -0
  180. package/src/Interactions/context.ts +76 -0
  181. package/src/Interactions/definitions.ts +124 -0
  182. package/src/Interactions/gateway.ts +44 -0
  183. package/src/Interactions/handlers.ts +139 -0
  184. package/src/Interactions/index.ts +57 -0
  185. package/src/Interactions/utils.ts +47 -0
  186. package/src/Interactions/webhook.ts +59 -0
  187. package/src/Log/index.ts +23 -0
  188. package/src/RateLimitStore/index.ts +65 -0
  189. package/src/RateLimitStore/memory.ts +48 -0
  190. package/src/RateLimitStore/utils.ts +27 -0
  191. package/src/common.ts +35 -0
  192. package/src/global.ts +50 -0
  193. package/src/index.ts +45 -0
  194. package/src/json.d.ts +1 -0
  195. package/{types.ts → src/types.ts} +1615 -875
  196. package/src/utils/effect.ts +7 -0
  197. package/src/utils/tsplus.ts +11 -0
  198. package/DiscordConfig/index.d.ts +0 -29
  199. package/DiscordConfig/index.js +0 -31
  200. package/DiscordConfig/index.js.map +0 -1
  201. package/DiscordConfig/index.ts +0 -45
  202. package/DiscordGateway/index.d.ts +0 -23
  203. package/DiscordGateway/index.js +0 -25
  204. package/DiscordGateway/index.js.map +0 -1
  205. package/DiscordGateway/index.ts +0 -34
  206. package/DiscordGateway/utils.d.ts +0 -3
  207. package/DiscordGateway/utils.js +0 -12
  208. package/DiscordGateway/utils.js.map +0 -1
  209. package/DiscordGateway/utils.ts +0 -17
  210. package/DiscordREST/http.d.ts +0 -3
  211. package/DiscordREST/http.js +0 -20
  212. package/DiscordREST/http.js.map +0 -1
  213. package/DiscordREST/http.ts +0 -21
  214. package/DiscordREST/index.d.ts +0 -15
  215. package/DiscordREST/index.js +0 -63
  216. package/DiscordREST/index.js.map +0 -1
  217. package/DiscordREST/index.ts +0 -79
  218. package/DiscordREST/types.d.ts +0 -14
  219. package/DiscordREST/types.js +0 -6
  220. package/DiscordREST/types.js.map +0 -1
  221. package/DiscordREST/types.ts +0 -15
  222. package/DiscordShard/commands.d.ts +0 -7
  223. package/DiscordShard/commands.js +0 -38
  224. package/DiscordShard/commands.js.map +0 -1
  225. package/DiscordShard/commands.ts +0 -40
  226. package/DiscordShard/heartbeats.d.ts +0 -6
  227. package/DiscordShard/heartbeats.js +0 -29
  228. package/DiscordShard/heartbeats.js.map +0 -1
  229. package/DiscordShard/heartbeats.ts +0 -65
  230. package/DiscordShard/identify.d.ts +0 -15
  231. package/DiscordShard/identify.js +0 -35
  232. package/DiscordShard/identify.js.map +0 -1
  233. package/DiscordShard/identify.ts +0 -75
  234. package/DiscordShard/index.d.ts +0 -32
  235. package/DiscordShard/index.js +0 -65
  236. package/DiscordShard/index.js.map +0 -1
  237. package/DiscordShard/index.ts +0 -124
  238. package/DiscordShard/invalidSession.d.ts +0 -6
  239. package/DiscordShard/invalidSession.js +0 -17
  240. package/DiscordShard/invalidSession.js.map +0 -1
  241. package/DiscordShard/invalidSession.ts +0 -24
  242. package/DiscordShard/utils.d.ts +0 -7
  243. package/DiscordShard/utils.js +0 -17
  244. package/DiscordShard/utils.js.map +0 -1
  245. package/DiscordShard/utils.ts +0 -32
  246. package/DiscordWS/index.d.ts +0 -36
  247. package/DiscordWS/index.js +0 -33
  248. package/DiscordWS/index.js.map +0 -1
  249. package/DiscordWS/index.ts +0 -78
  250. package/Log/index.d.ts +0 -15
  251. package/Log/index.js +0 -28
  252. package/Log/index.js.map +0 -1
  253. package/Log/index.ts +0 -30
  254. package/Utils/memoize.d.ts +0 -3
  255. package/Utils/memoize.js +0 -16
  256. package/Utils/memoize.js.map +0 -1
  257. package/Utils/memoize.ts +0 -15
  258. package/WS/index.d.ts +0 -30
  259. package/WS/index.js +0 -70
  260. package/WS/index.js.map +0 -1
  261. package/WS/index.ts +0 -106
  262. package/bot.d.ts +0 -1
  263. package/bot.js +0 -28
  264. package/bot.js.map +0 -1
  265. package/bot.ts +0 -48
  266. package/esm/DiscordConfig/index.js +0 -26
  267. package/esm/DiscordConfig/index.js.map +0 -1
  268. package/esm/DiscordGateway/index.js +0 -20
  269. package/esm/DiscordGateway/index.js.map +0 -1
  270. package/esm/DiscordGateway/utils.js +0 -7
  271. package/esm/DiscordGateway/utils.js.map +0 -1
  272. package/esm/DiscordREST/http.js +0 -15
  273. package/esm/DiscordREST/http.js.map +0 -1
  274. package/esm/DiscordREST/index.js +0 -59
  275. package/esm/DiscordREST/index.js.map +0 -1
  276. package/esm/DiscordREST/types.js +0 -3
  277. package/esm/DiscordShard/commands.js +0 -28
  278. package/esm/DiscordShard/commands.js.map +0 -1
  279. package/esm/DiscordShard/heartbeats.js +0 -24
  280. package/esm/DiscordShard/heartbeats.js.map +0 -1
  281. package/esm/DiscordShard/identify.js +0 -30
  282. package/esm/DiscordShard/identify.js.map +0 -1
  283. package/esm/DiscordShard/index.js +0 -60
  284. package/esm/DiscordShard/index.js.map +0 -1
  285. package/esm/DiscordShard/invalidSession.js +0 -12
  286. package/esm/DiscordShard/invalidSession.js.map +0 -1
  287. package/esm/DiscordShard/utils.js +0 -11
  288. package/esm/DiscordShard/utils.js.map +0 -1
  289. package/esm/DiscordWS/index.js +0 -28
  290. package/esm/DiscordWS/index.js.map +0 -1
  291. package/esm/Log/index.js +0 -22
  292. package/esm/Log/index.js.map +0 -1
  293. package/esm/Utils/memoize.js +0 -12
  294. package/esm/Utils/memoize.js.map +0 -1
  295. package/esm/WS/index.js +0 -65
  296. package/esm/WS/index.js.map +0 -1
  297. package/esm/bot.js +0 -25
  298. package/esm/bot.js.map +0 -1
  299. package/esm/mod.js +0 -16
  300. package/esm/mod.js.map +0 -1
  301. package/esm/types.js.map +0 -1
  302. package/mod.d.ts +0 -7
  303. package/mod.js +0 -25
  304. package/mod.js.map +0 -1
  305. package/mod.ts +0 -19
  306. package/types.js +0 -1564
  307. package/types.js.map +0 -1
@@ -0,0 +1,40 @@
1
+ import { Duration, Discord } from "dfx/common";
2
+ export interface DiscordConfig {
3
+ token: string;
4
+ rest: {
5
+ baseUrl: string;
6
+ globalRateLimit: {
7
+ limit: number;
8
+ window: Duration;
9
+ };
10
+ };
11
+ gateway: {
12
+ intents: number;
13
+ presence?: Discord.UpdatePresence;
14
+ shardCount?: number;
15
+ identifyRateLimit: readonly [window: number, limit: number];
16
+ };
17
+ }
18
+ export declare const DiscordConfig: import("../common.js").Tag<DiscordConfig>;
19
+ export interface MakeOpts {
20
+ token: string;
21
+ rest?: Partial<DiscordConfig["rest"]>;
22
+ gateway?: Partial<DiscordConfig["gateway"]>;
23
+ }
24
+ export declare const make: ({ token, rest, gateway }: MakeOpts) => DiscordConfig;
25
+ export declare const makeLayer: (a_0: MakeOpts) => import("../common.js").Layer<never, never, DiscordConfig>;
26
+ export declare const token: import("../common.js").Effect<DiscordConfig, never, string>;
27
+ export declare const rest: import("../common.js").Effect<DiscordConfig, never, {
28
+ baseUrl: string;
29
+ globalRateLimit: {
30
+ limit: number;
31
+ window: Duration;
32
+ };
33
+ }>;
34
+ export declare const gateway: import("../common.js").Effect<DiscordConfig, never, {
35
+ intents: number;
36
+ presence?: import("../types.js").UpdatePresence | undefined;
37
+ shardCount?: number | undefined;
38
+ identifyRateLimit: readonly [window: number, limit: number];
39
+ }>;
40
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/DiscordConfig/index.ts"],"names":[],"mappings":";AAEA,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAA;QACf,eAAe,EAAE;YACf,KAAK,EAAE,MAAM,CAAA;YACb,MAAM,EAAE,QAAQ,CAAA;SACjB,CAAA;KACF,CAAA;IACD,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAA;QACf,QAAQ,CAAC,EAAE,OAAO,CAAC,cAAc,CAAA;QACjC,UAAU,CAAC,EAAE,MAAM,CAAA;QAEnB,iBAAiB,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;KAC5D,CAAA;CACF;AACD,eAAO,MAAM,aAAa,2CAAuB,CAAA;AAEjD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAA;CAC5C;AAED,eAAO,MAAM,IAAI,6BAA8B,QAAQ,KAAG,aAgBxD,CAAA;AAEF,eAAO,MAAM,SAAS,8EAA2C,CAAA;AAEjE,eAAO,MAAM,KAAK,6DAA0D,CAAA;AAC5E,eAAO,MAAM,IAAI;aA3CJ,MAAM;qBACE;QACf,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,QAAQ,CAAA;KACjB;EAuCoE,CAAA;AACzE,eAAO,MAAM,OAAO;aArCP,MAAM;;;uBAII,SAAS,CAAC,QAAQ,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;EAmC9D,CAAA"}
@@ -0,0 +1,29 @@
1
+ import * as tsplus_module_1 from "dfx/common";
2
+ import * as tsplus_module_2 from "@fp-ts/data/Duration";
3
+ import * as tsplus_module_3 from "@effect/io/Layer";
4
+ import * as tsplus_module_4 from "@fp-ts/data/Function";
5
+ import * as tsplus_module_5 from "@effect/io/Effect";
6
+ const VERSION = 9;
7
+ export const DiscordConfig = tsplus_module_1.Tag();
8
+ export const make = ({ token, rest, gateway }) => ({
9
+ token,
10
+ rest: {
11
+ baseUrl: `https://discord.com/api/v${VERSION}`,
12
+ ...(rest ?? {}),
13
+ globalRateLimit: {
14
+ limit: 50,
15
+ window: tsplus_module_2.seconds(1),
16
+ ...(rest?.globalRateLimit ?? {}),
17
+ },
18
+ },
19
+ gateway: {
20
+ intents: tsplus_module_1.Discord.GatewayIntents.GUILDS,
21
+ identifyRateLimit: [5000, 1],
22
+ ...(gateway ?? {}),
23
+ },
24
+ });
25
+ export const makeLayer = tsplus_module_4.flow(make, tsplus_module_3.succeed(DiscordConfig));
26
+ export const token = tsplus_module_5.serviceWith(DiscordConfig)(({ token }) => token);
27
+ export const rest = tsplus_module_5.serviceWith(DiscordConfig)(({ rest }) => rest);
28
+ export const gateway = tsplus_module_5.serviceWith(DiscordConfig)(({ gateway }) => gateway);
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/DiscordConfig/index.ts"],"names":[],"mappings":";;;;;AAAA,MAAM,OAAO,GAAG,CAAC,CAAA;AAmBjB,MAAM,CAAC,MAAM,aAAa,GAAG,gBAAA,GAAG,EAAiB,CAAA;AAQjD,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAY,EAAiB,EAAE,CAAC,CAAC;IAC1E,KAAK;IACL,IAAI,EAAE;QACJ,OAAO,EAAE,4BAA4B,OAAO,EAAE;QAC9C,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QACf,eAAe,EAAE;YACf,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,wBAAiB,CAAC,CAAC;YAC3B,GAAG,CAAC,IAAI,EAAE,eAAe,IAAI,EAAE,CAAC;SACjC;KACF;IACD,OAAO,EAAE;QACP,OAAO,EAAE,gBAAA,OAAO,CAAC,cAAc,CAAC,MAAM;QACtC,iBAAiB,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5B,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;KACnB;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,gBAAA,IAAI,CAAC,IAAI,EAAE,wBAAc,aAAa,CAAC,CAAC,CAAA;AAEjE,MAAM,CAAC,MAAM,KAAK,GAAG,4BAAmB,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAA;AAC5E,MAAM,CAAC,MAAM,IAAI,GAAG,4BAAmB,aAAa,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAA;AACzE,MAAM,CAAC,MAAM,OAAO,GAAG,4BAAmB,aAAa,CAAC,CACtD,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CACzB,CAAA"}
@@ -0,0 +1,23 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ /// <reference types="ws" />
3
+ import { Discord, WS, EffectSource } from "dfx/common";
4
+ import WebSocket from "isomorphic-ws";
5
+ export type Message = Discord.GatewayPayload | WS.Reconnect;
6
+ export interface OpenOpts {
7
+ url?: string;
8
+ version?: number;
9
+ encoding?: DiscordWSCodec;
10
+ }
11
+ export interface DiscordWSCodec {
12
+ type: "json" | "etf";
13
+ encode: (p: Discord.GatewayPayload) => string | Buffer | ArrayBuffer;
14
+ decode: (p: WebSocket.RawData) => Discord.GatewayPayload;
15
+ }
16
+ export declare const DiscordWSCodec: import("../../common.js").Tag<DiscordWSCodec>;
17
+ export declare const LiveJsonDiscordWSCodec: import("../../common.js").Layer<never, never, DiscordWSCodec>;
18
+ export declare const make: ({ url, version, }?: OpenOpts) => import("../../common.js").Effect<import("../../Log/index.js").Log | DiscordWSCodec, never, {
19
+ source: import("callbag-effect-ts/Source").EffectSource<never, never, import("../../types.js").GatewayPayload<any>>;
20
+ sink: import("callbag-effect-ts/Sink").EffectSink<never, never, never, Message>;
21
+ setUrl: (url: string) => import("../../common.js").Effect<never, never, void>;
22
+ }>;
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/DiscordGateway/DiscordWS/index.ts"],"names":[],"mappings":";;;AAAA,OAAO,SAAS,MAAM,eAAe,CAAA;AAErC,MAAM,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,GAAG,EAAE,CAAC,SAAS,CAAA;AAE3D,MAAM,WAAW,QAAQ;IACvB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,cAAc,CAAA;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,GAAG,KAAK,CAAA;IACpB,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,cAAc,KAAK,MAAM,GAAG,MAAM,GAAG,WAAW,CAAA;IACpE,MAAM,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,OAAO,KAAK,OAAO,CAAC,cAAc,CAAA;CACzD;AACD,eAAO,MAAM,cAAc,+CAAwB,CAAA;AACnD,eAAO,MAAM,sBAAsB,+DAIjC,CAAA;AAEF,eAAO,MAAM,IAAI,uBAGd,QAAQ;;;kBAIc,MAAM;EAoB3B,CAAA"}
@@ -0,0 +1,25 @@
1
+ import * as tsplus_module_1 from "dfx/common";
2
+ import * as tsplus_module_2 from "@effect/io/Layer";
3
+ import * as tsplus_module_3 from "callbag-effect-ts/Sink/map";
4
+ import * as tsplus_module_4 from "@fp-ts/data/Duration";
5
+ import * as tsplus_module_5 from "@effect/io/Schedule";
6
+ import * as tsplus_module_6 from "callbag-effect-ts/Source/tapError";
7
+ import * as tsplus_module_7 from "callbag-effect-ts/Source/retry";
8
+ import * as tsplus_module_8 from "callbag-effect-ts/Source/map";
9
+ import * as tsplus_module_9 from "@effect/io/Effect";
10
+ import * as tsplus_module_10 from "@effect/io/Ref";
11
+ export const DiscordWSCodec = tsplus_module_1.Tag();
12
+ export const LiveJsonDiscordWSCodec = tsplus_module_2.succeed(DiscordWSCodec)({
13
+ type: "json",
14
+ encode: (p) => JSON.stringify(p),
15
+ decode: (p) => JSON.parse(p.toString("utf8")),
16
+ });
17
+ export const make = ({ url = "wss://gateway.discord.gg/", version = 10, } = {}) => tsplus_module_9.flatMap(encoding => tsplus_module_9.flatMap(urlRef => {
18
+ const setUrl = (url) => tsplus_module_10.set(`${url}?v=${version}&encoding=${encoding.type}`)(urlRef);
19
+ return tsplus_module_9.flatMap(ws => tsplus_module_9.map(log => {
20
+ const source = tsplus_module_8.map(encoding.decode)(tsplus_module_7.retry(tsplus_module_5.exponential(tsplus_module_4.seconds(0.5)))(tsplus_module_6.tapError((e) => log.info("DiscordWS", "ERROR", e))(ws.source)));
21
+ const sink = tsplus_module_3.map((msg) => msg === tsplus_module_1.WS.Reconnect ? msg : encoding.encode(msg))(ws.sink);
22
+ return { source, sink, setUrl };
23
+ })(tsplus_module_9.service(tsplus_module_1.Log.Log)))(tsplus_module_1.WS.make(urlRef, { perMessageDeflate: false }));
24
+ })(tsplus_module_10.make(`${url}?v=${version}&encoding=${encoding.type}`)))(tsplus_module_9.service(DiscordWSCodec));
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/DiscordGateway/DiscordWS/index.ts"],"names":[],"mappings":";;;;;;;;;;AAeA,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAA,GAAG,EAAkB,CAAA;AACnD,MAAM,CAAC,MAAM,sBAAsB,GAAG,wBAAc,cAAc,CAAC,CAAC;IAClE,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAChC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;CAC9C,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,EACnB,GAAG,GAAG,2BAA2B,EACjC,OAAO,GAAG,EAAE,MACA,EAAE,EAAE,EAAE,yBAEV,QAAQ,4BACR,MAAM;IACZ,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE,CAC7B,qBAAW,GAAG,GAAG,MAAM,OAAO,aAAa,QAAQ,CAAC,IAAI,EAAE,EAA1D,MAAM,CAAqD,CAAA;mCAEvD,EAAE,wBAEF,GAAG;QACT,MAAM,MAAM,GAAG,oBAGR,QAAQ,CAAC,MAAM,EAHP,sBAEN,4BAAqB,wBAAiB,GAAG,CAAC,CAAC,EAFrC,yBACH,CAAC,CAAM,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,EAD1C,EAAE,CAAC,MAAM,CACkC,CACL,CAKpD,CAAA;QAED,MAAM,IAAI,GAAG,oBAAY,CAAC,GAAY,EAAE,EAAE,CACxC,GAAG,KAAK,gBAAA,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EADtC,EAAE,CAAC,IAAI,CAEnB,CAAA;QAED,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;OAdjB,wBAAe,gBAAA,GAAG,CAAC,GAAG,CAAC,GAFxB,gBAAA,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC;GAJzC,sBAAS,GAAG,GAAG,MAAM,OAAO,aAAa,QAAQ,CAAC,IAAI,EAAE,CAAC,GADvD,wBAAe,cAAc,CAAC,CAsBjD,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { Ref, Maybe, Effect, DWS, EffectSource, Discord } from "dfx/common";
2
+ export declare const fromRaw: <R, E>(source: import("callbag-effect-ts/Source").EffectSource<R, E, import("../../types.js").GatewayPayload<any>>, seqRef: Ref<Maybe<number>>) => import("callbag-effect-ts/Source").EffectSource<R, E, import("../DiscordWS/index.js").Message>;
3
+ //# sourceMappingURL=heartbeats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heartbeats.d.ts","sourceRoot":"","sources":["../../../src/DiscordGateway/Shard/heartbeats.ts"],"names":[],"mappings":";AAeA,eAAO,MAAM,OAAO,8HAEV,IAAI,MAAM,MAAM,CAAC,CAAC,mGAqBjB,CAAA"}
@@ -0,0 +1,23 @@
1
+ import * as tsplus_module_1 from "@effect/io/Ref";
2
+ import * as tsplus_module_2 from "@fp-ts/data/Option";
3
+ import * as tsplus_module_3 from "@effect/io/Effect";
4
+ import * as tsplus_module_4 from "dfx/common";
5
+ import * as tsplus_module_5 from "@effect/io/Schedule";
6
+ import * as tsplus_module_6 from "callbag-effect-ts/Source/fromSchedule";
7
+ import * as tsplus_module_7 from "callbag-effect-ts/Source/tap";
8
+ import * as tsplus_module_8 from "callbag-effect-ts/Source/switchMap";
9
+ import * as tsplus_module_9 from "callbag-effect-ts/Source/mapEffect";
10
+ import * as tsplus_module_10 from "callbag-effect-ts/Source/drain";
11
+ import * as tsplus_module_11 from "callbag-effect-ts/Source/merge";
12
+ import * as tsplus_module_12 from "callbag-effect-ts/Source/unwrap";
13
+ import { millis } from "@fp-ts/data/Duration";
14
+ import * as SendEvents from "./sendEvents.js";
15
+ import * as Utils from "./utils.js";
16
+ const send = (ref, seqRef) => tsplus_module_3.tap(() => tsplus_module_1.set(false)(ref))(tsplus_module_3.map((a) => SendEvents.heartbeat(tsplus_module_2.getOrNull(a)))(tsplus_module_1.get(seqRef)));
17
+ const maybeSend = (ref, seqRef) => tsplus_module_3.flatMap((acked) => acked ? send(ref, seqRef) : tsplus_module_3.succeed(tsplus_module_4.WS.Reconnect))(tsplus_module_1.get(ref));
18
+ export const fromRaw = (source, seqRef) => tsplus_module_12.unwrap(tsplus_module_3.map((ackedRef) => {
19
+ const heartbeats = tsplus_module_9.mapEffect(() => maybeSend(ackedRef, seqRef))(tsplus_module_8.switchMap((p) => tsplus_module_6.fromSchedule(tsplus_module_5.andThen(tsplus_module_5.spaced(millis(p.d.heartbeat_interval)))(tsplus_module_5.duration(millis(p.d.heartbeat_interval * Math.random())))))(tsplus_module_7.tap(() => tsplus_module_1.set(true)(ackedRef))(Utils.opCode(source)(tsplus_module_4.Discord.GatewayOpcode.HELLO))));
20
+ const acks = tsplus_module_10.drain(tsplus_module_7.tap(() => tsplus_module_1.set(true)(ackedRef))(Utils.opCode(source)(tsplus_module_4.Discord.GatewayOpcode.HEARTBEAT_ACK)));
21
+ return tsplus_module_11.merge(acks)(heartbeats);
22
+ })(tsplus_module_1.make(true)));
23
+ //# sourceMappingURL=heartbeats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heartbeats.js","sourceRoot":"","sources":["../../../src/DiscordGateway/Shard/heartbeats.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC,MAAM,IAAI,GAAG,CAAC,GAAiB,EAAE,MAA0B,EAAE,EAAE,CAC7D,oBAEO,GAAG,EAAE,CAAC,oBAAQ,KAAK,EAAb,GAAG,CAAW,EAF3B,oBACO,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,2BAAC,CAAC,EAAW,sBAD/C,MAAM,EAC0C,CACpB,CAAA;AAE9B,MAAM,SAAS,GAAG,CAAC,GAAiB,EAAE,MAA0B,EAAE,EAAE,CAClE,wBACE,CAAC,KAAK,EAAqC,EAAE,CAC3C,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,wBAAe,gBAAA,EAAE,CAAC,SAAS,CAAC,sBAF5D,GAAG,EAGF,CAAA;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,MAAkD,EAClD,MAA0B,EAC1B,EAAE,yBACF,oBAAmB,CAAC,QAAQ,EAAE,EAAE;IAC9B,MAAM,UAAU,GAAG,0BAWN,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,EAX3B,0BAIN,CAAC,CAAC,EAAE,EAAE,CACf,6BACE,wBAEU,uBAAgB,MAAM,CAAC,CAAC,CAAC,CAAE,CAAC,kBAAkB,CAAC,CAAC,EAF1D,yBACE,MAAM,CAAC,CAAC,CAAC,CAAE,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAChD,CAA0D,CAC5D,EATc,oBAGZ,GAAG,EAAE,CAAC,oBAAa,IAAI,EAAjB,QAAQ,CAAU,EAHZ,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CACrC,gBAAA,OAAO,CAAC,aAAa,CAAC,KAAK,CAC5B,CAC+B,CAO7B,CAC4C,CAAA;IAE/C,MAAM,IAAI,0BAAG,oBACX,GAAG,EAAE,CAAC,oBAAa,IAAI,EAAjB,QAAQ,CAAU,EADb,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,gBAAA,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,CAErE,CAAM,CAAA;IAEP,OAAO,uBAAiB,IAAI,EAArB,UAAU,CAAY,CAAA;AAC/B,CAAC,EAnBD,qBAAS,IAAI,CAAC,CAmBZ,CAAO,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { Discord, Ref, Maybe, EffectSource } from "dfx/common";
2
+ export interface Options {
3
+ token: string;
4
+ intents: number;
5
+ shard: [number, number];
6
+ presence?: Discord.UpdatePresence;
7
+ }
8
+ export interface Requirements {
9
+ latestReady: Ref<Maybe<Discord.ReadyEvent>>;
10
+ latestSequence: Ref<Maybe<number>>;
11
+ }
12
+ export declare const fromRaw: <R, E>(source: import("callbag-effect-ts/Source").EffectSource<R, E, import("../../types.js").GatewayPayload<any>>, { latestReady, latestSequence, ...opts }: Options & Requirements) => import("callbag-effect-ts/Source").EffectSource<R, E, import("../../types.js").GatewayPayload<any>>;
13
+ //# sourceMappingURL=identify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identify.d.ts","sourceRoot":"","sources":["../../../src/DiscordGateway/Shard/identify.ts"],"names":[],"mappings":";AAIA,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC,cAAc,CAAA;CAClC;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAA;IAC3C,cAAc,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;CACnC;AAwCD,eAAO,MAAM,OAAO,gKAEwB,OAAO,GAAG,YAAY,wGAI/D,CAAA"}
@@ -0,0 +1,30 @@
1
+ import * as tsplus_module_1 from "@fp-ts/data/Option";
2
+ import * as tsplus_module_2 from "@effect/io/Ref";
3
+ import * as tsplus_module_3 from "@effect/io/Effect";
4
+ import * as tsplus_module_4 from "dfx/common";
5
+ import * as tsplus_module_5 from "callbag-effect-ts/Source/mapEffect";
6
+ import * as SendEvents from "./sendEvents.js";
7
+ import * as OS from "os";
8
+ import { opCode } from "./utils.js";
9
+ const identify = ({ token, intents, shard, presence }) => SendEvents.identify({
10
+ token,
11
+ intents,
12
+ properties: {
13
+ os: OS.platform(),
14
+ browser: "dfx",
15
+ device: "dfx",
16
+ },
17
+ shard,
18
+ presence,
19
+ });
20
+ const resume = (token, ready, seq) => SendEvents.resume({
21
+ token,
22
+ session_id: ready.session_id,
23
+ seq,
24
+ });
25
+ const identifyOrResume = (opts, ready, seq) => tsplus_module_3.flatMap(readyEvent => tsplus_module_3.map(seqNumber => tsplus_module_1.match(() => identify(opts), ({ readyEvent, seqNumber }) => resume(opts.token, readyEvent, seqNumber))(tsplus_module_1.struct({
26
+ readyEvent,
27
+ seqNumber,
28
+ })))(tsplus_module_2.get(seq)))(tsplus_module_2.get(ready));
29
+ export const fromRaw = (source, { latestReady, latestSequence, ...opts }) => tsplus_module_5.mapEffect(() => identifyOrResume(opts, latestReady, latestSequence))(opCode(source)(tsplus_module_4.Discord.GatewayOpcode.HELLO));
30
+ //# sourceMappingURL=identify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identify.js","sourceRoot":"","sources":["../../../src/DiscordGateway/Shard/identify.ts"],"names":[],"mappings":";;;;;AAAA,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAcnC,MAAM,QAAQ,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAW,EAAE,EAAE,CAChE,UAAU,CAAC,QAAQ,CAAC;IAClB,KAAK;IACL,OAAO;IACP,UAAU,EAAE;QACV,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE;QACjB,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,KAAK;KACd;IACD,KAAK;IACL,QAAQ;CACT,CAAC,CAAA;AAEJ,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,KAAyB,EAAE,GAAW,EAAE,EAAE,CACvE,UAAU,CAAC,MAAM,CAAC;IAChB,KAAK;IACL,UAAU,EAAE,KAAK,CAAC,UAAU;IAC5B,GAAG;CACJ,CAAC,CAAA;AAEJ,MAAM,gBAAgB,GAAG,CACvB,IAAa,EACb,KAAqC,EACrC,GAAuB,EACvB,EAAE,yBAEM,UAAU,wBACV,SAAS,IAER,sBAIL,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EACpB,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,EALnE,uBAAa;IAClB,UAAU;IACV,SAAS;CACV,CAAC,CAGD,sBARmB,GAAG,wBADF,KAAK,EAU1B,CAAA;AAEJ,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,MAAkD,EAClD,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,IAAI,EAA0B,EAChE,EAAE,CACF,0BACE,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,cAAc,CAAC,EAD3D,MAAM,CAAC,MAAM,CAAC,CAAqB,gBAAA,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAE9D,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { DWS, Discord } from "dfx/common";
2
+ export declare const make: (shard: [id: number, count: number]) => import("../../common.js").Effect<import("../../DiscordConfig/index.js").DiscordConfig | import("../../Log/index.js").Log | import("../../RateLimitStore/index.js").RateLimiter | import("../DiscordWS/index.js").DiscordWSCodec, never, {
3
+ run: import("../../common.js").Effect<never, never, readonly [readonly [readonly [readonly [void, void], void], void], void]>;
4
+ raw: import("callbag-effect-ts/Source").EffectSource<never, never, import("../../types.js").GatewayPayload<any>>;
5
+ dispatch: import("callbag-effect-ts/Source").EffectSource<never, never, import("../../types.js").GatewayPayload<import("../../types.js").ReceiveEvent>>;
6
+ send: (p: Discord.GatewayPayload) => void;
7
+ reconnect: () => void;
8
+ }>;
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/DiscordGateway/Shard/index.ts"],"names":[],"mappings":";AAKA,eAAO,MAAM,IAAI,UAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;;;;cAiFvC,QAAQ,cAAc;;EAGlC,CAAA"}
@@ -0,0 +1,51 @@
1
+ import * as tsplus_module_1 from "@effect/io/Effect";
2
+ import * as tsplus_module_2 from "dfx/common";
3
+ import * as tsplus_module_3 from "callbag-effect-ts/Source/forEach";
4
+ import * as tsplus_module_4 from "callbag-effect-ts/Source/filter";
5
+ import * as tsplus_module_5 from "callbag-effect-ts/Source/tap";
6
+ import * as tsplus_module_6 from "callbag-effect-ts/Source/run";
7
+ import * as tsplus_module_7 from "@fp-ts/data/Option";
8
+ import * as tsplus_module_8 from "callbag-effect-ts/Source/share";
9
+ import * as tsplus_module_9 from "@fp-ts/data/Duration";
10
+ import * as tsplus_module_10 from "callbag-effect-ts/Source/async";
11
+ import * as Heartbeats from "./heartbeats.js";
12
+ import * as Identify from "./identify.js";
13
+ import * as InvalidSession from "./invalidSession.js";
14
+ import * as Utils from "./utils.js";
15
+ export const make = (shard) => tsplus_module_1.flatMap(({ token, gateway }) => tsplus_module_1.flatMap(socket => {
16
+ const [emit, outgoing] = tsplus_module_10.asyncEmitter();
17
+ return tsplus_module_1.flatMap(limiter => {
18
+ const sendEffect = tsplus_module_6.run(tsplus_module_5.tap(() => limiter.maybeWait("shard.send", tsplus_module_9.minutes(1), 120))(outgoing), socket.sink);
19
+ return tsplus_module_1.flatMap(raw => {
20
+ const sendMessage = (a) => tsplus_module_1.sync(() => {
21
+ emit.data(a);
22
+ });
23
+ return tsplus_module_1.flatMap(([latestReady, updateLatestReady]) => tsplus_module_1.map(([latestSequence, updateLatestSequence]) => {
24
+ const maybeUpdateUrl = (p) => tsplus_module_7.match(() => tsplus_module_1.unit(), (a) => socket.setUrl(a.resume_gateway_url))(tsplus_module_7.map((p) => p.d)(tsplus_module_7.filter((p) => p.op === tsplus_module_2.Discord.GatewayOpcode.DISPATCH && p.t === "READY")(tsplus_module_7.some(p))));
25
+ const updateRefs = tsplus_module_6.runDrain(tsplus_module_5.tap(maybeUpdateUrl)(tsplus_module_5.tap(updateLatestSequence)(tsplus_module_5.tap(updateLatestReady)(raw))));
26
+ // heartbeats
27
+ const heartbeatEffects = tsplus_module_3.forEach(sendMessage)(Heartbeats.fromRaw(raw, latestSequence));
28
+ const dispatch = tsplus_module_4.filter((p) => p.op === tsplus_module_2.Discord.GatewayOpcode.DISPATCH)(raw);
29
+ // identify
30
+ const identifyEffects = tsplus_module_3.forEach(sendMessage)(Identify.fromRaw(raw, {
31
+ token,
32
+ shard,
33
+ intents: gateway.intents,
34
+ presence: gateway.presence,
35
+ latestSequence,
36
+ latestReady,
37
+ }));
38
+ // invalid session
39
+ const invalidEffects = tsplus_module_3.forEach(sendMessage)(InvalidSession.fromRaw(raw, latestReady));
40
+ return {
41
+ run: tsplus_module_1.zipPar(sendEffect)(tsplus_module_1.zipPar(invalidEffects)(tsplus_module_1.zipPar(identifyEffects)(tsplus_module_1.zipPar(heartbeatEffects)(updateRefs)))),
42
+ raw,
43
+ dispatch,
44
+ send: (p) => emit.data(p),
45
+ reconnect: () => emit.data(tsplus_module_2.WS.Reconnect),
46
+ };
47
+ })(Utils.latest((p) => tsplus_module_7.fromNullable(p.s))))(Utils.latest((p) => tsplus_module_7.map((p) => p.d)(tsplus_module_7.filter((p) => p.op === tsplus_module_2.Discord.GatewayOpcode.DISPATCH && p.t === "READY")(tsplus_module_7.some(p)))));
48
+ })(tsplus_module_8.share(socket.source));
49
+ })(tsplus_module_1.service(tsplus_module_2.RateLimitStore.RateLimiter));
50
+ })(tsplus_module_2.DWS.make()))(tsplus_module_1.service(tsplus_module_2.Config.DiscordConfig));
51
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/DiscordGateway/Shard/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { EffectSource, Discord, Ref, Maybe, DWS } from "dfx/common";
2
+ export declare const fromRaw: <R, E>(raw: import("callbag-effect-ts/Source").EffectSource<R, E, import("../../types.js").GatewayPayload<any>>, latestReady: Ref<Maybe<Discord.ReadyEvent>>) => import("callbag-effect-ts/Source").EffectSource<R, E, import("../DiscordWS/index.js").Message>;
3
+ //# sourceMappingURL=invalidSession.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invalidSession.d.ts","sourceRoot":"","sources":["../../../src/DiscordGateway/Shard/invalidSession.ts"],"names":[],"mappings":";AAEA,eAAO,MAAM,OAAO,gIAEL,IAAI,MAAM,QAAQ,UAAU,CAAC,CAAC,mGAMJ,CAAA"}
@@ -0,0 +1,9 @@
1
+ import * as tsplus_module_1 from "dfx/common";
2
+ import * as tsplus_module_2 from "@effect/io/Effect";
3
+ import * as tsplus_module_3 from "@fp-ts/data/Option";
4
+ import * as tsplus_module_4 from "@effect/io/Ref";
5
+ import * as tsplus_module_5 from "callbag-effect-ts/Source/tap";
6
+ import * as tsplus_module_6 from "callbag-effect-ts/Source/map";
7
+ import { opCode } from "./utils.js";
8
+ export const fromRaw = (raw, latestReady) => tsplus_module_6.map(() => tsplus_module_1.WS.Reconnect)(tsplus_module_5.tap((p) => (p.d ? tsplus_module_2.unit() : tsplus_module_4.set(tsplus_module_3.none)(latestReady)))(opCode(raw)(tsplus_module_1.Discord.GatewayOpcode.INVALID_SESSION)));
9
+ //# sourceMappingURL=invalidSession.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invalidSession.js","sourceRoot":"","sources":["../../../src/DiscordGateway/Shard/invalidSession.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAEnC,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,GAA+C,EAC/C,WAA2C,EAC3C,EAAE,CACF,oBAIO,GAAgB,EAAE,CAAC,gBAAA,EAAE,CAAC,SAAS,EAJtC,oBAGO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAa,CAAC,CAAC,CAAC,0CAAA,WAAW,CAAgB,CAAC,EAHjE,MAAM,CAAC,GAAG,CAAC,CACT,gBAAA,OAAO,CAAC,aAAa,CAAC,eAAe,CACtC,CACiE,CAC3B,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { Discord } from "dfx/common";
2
+ export declare const heartbeat: (d: Discord.Heartbeat) => Discord.GatewayPayload;
3
+ export declare const identify: (d: Discord.Identify) => Discord.GatewayPayload;
4
+ export declare const resume: (d: Discord.Resume) => Discord.GatewayPayload;
5
+ export declare const requestGuildMembers: (d: Discord.RequestGuildMember) => Discord.GatewayPayload;
6
+ export declare const voiceStateUpdate: (d: Discord.UpdateVoiceState) => Discord.GatewayPayload;
7
+ export declare const presenceUpdate: (d: Discord.UpdatePresence) => Discord.GatewayPayload;
8
+ //# sourceMappingURL=sendEvents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sendEvents.d.ts","sourceRoot":"","sources":["../../../src/DiscordGateway/Shard/sendEvents.ts"],"names":[],"mappings":";AAAA,eAAO,MAAM,SAAS,MAAO,QAAQ,SAAS,KAAG,QAAQ,cAGvD,CAAA;AAEF,eAAO,MAAM,QAAQ,MAAO,QAAQ,QAAQ,KAAG,QAAQ,cAGrD,CAAA;AAEF,eAAO,MAAM,MAAM,MAAO,QAAQ,MAAM,KAAG,QAAQ,cAGjD,CAAA;AAEF,eAAO,MAAM,mBAAmB,MAC3B,QAAQ,kBAAkB,KAC5B,QAAQ,cAGT,CAAA;AAEF,eAAO,MAAM,gBAAgB,MACxB,QAAQ,gBAAgB,KAC1B,QAAQ,cAGT,CAAA;AAEF,eAAO,MAAM,cAAc,MACtB,QAAQ,cAAc,KACxB,QAAQ,cAGT,CAAA"}
@@ -0,0 +1,26 @@
1
+ import * as tsplus_module_1 from "dfx/common";
2
+ export const heartbeat = (d) => ({
3
+ op: tsplus_module_1.Discord.GatewayOpcode.HEARTBEAT,
4
+ d,
5
+ });
6
+ export const identify = (d) => ({
7
+ op: tsplus_module_1.Discord.GatewayOpcode.IDENTIFY,
8
+ d,
9
+ });
10
+ export const resume = (d) => ({
11
+ op: tsplus_module_1.Discord.GatewayOpcode.RESUME,
12
+ d,
13
+ });
14
+ export const requestGuildMembers = (d) => ({
15
+ op: tsplus_module_1.Discord.GatewayOpcode.REQUEST_GUILD_MEMBERS,
16
+ d,
17
+ });
18
+ export const voiceStateUpdate = (d) => ({
19
+ op: tsplus_module_1.Discord.GatewayOpcode.VOICE_STATE_UPDATE,
20
+ d,
21
+ });
22
+ export const presenceUpdate = (d) => ({
23
+ op: tsplus_module_1.Discord.GatewayOpcode.PRESENCE_UPDATE,
24
+ d,
25
+ });
26
+ //# sourceMappingURL=sendEvents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sendEvents.js","sourceRoot":"","sources":["../../../src/DiscordGateway/Shard/sendEvents.ts"],"names":[],"mappings":";AAAA,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAoB,EAA0B,EAAE,CAAC,CAAC;IAC1E,EAAE,EAAE,gBAAA,OAAO,CAAC,aAAa,CAAC,SAAS;IACnC,CAAC;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAmB,EAA0B,EAAE,CAAC,CAAC;IACxE,EAAE,EAAE,gBAAA,OAAO,CAAC,aAAa,CAAC,QAAQ;IAClC,CAAC;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAiB,EAA0B,EAAE,CAAC,CAAC;IACpE,EAAE,EAAE,gBAAA,OAAO,CAAC,aAAa,CAAC,MAAM;IAChC,CAAC;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,CAA6B,EACL,EAAE,CAAC,CAAC;IAC5B,EAAE,EAAE,gBAAA,OAAO,CAAC,aAAa,CAAC,qBAAqB;IAC/C,CAAC;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,CAA2B,EACH,EAAE,CAAC,CAAC;IAC5B,EAAE,EAAE,gBAAA,OAAO,CAAC,aAAa,CAAC,kBAAkB;IAC5C,CAAC;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,CAAyB,EACD,EAAE,CAAC,CAAC;IAC5B,EAAE,EAAE,gBAAA,OAAO,CAAC,aAAa,CAAC,eAAe;IACzC,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { EffectSource, Discord, Maybe, Ref } from "dfx/common";
2
+ export declare const opCode: <R, E>(source: import("callbag-effect-ts/Source").EffectSource<R, E, import("../../types.js").GatewayPayload<any>>) => <T = any>(code: Discord.GatewayOpcode) => import("callbag-effect-ts/Source").EffectSource<R, E, import("../../types.js").GatewayPayload<T>>;
3
+ export declare const latest: <T>(f: (p: Discord.GatewayPayload) => import("../../common.js").Maybe<T>) => import("../../common.js").Effect<never, never, readonly [import("../../common.js").Ref<import("../../common.js").Maybe<T>>, (p: import("../../types.js").GatewayPayload<any>) => import("../../common.js").Effect<never, never, void>]>;
4
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/DiscordGateway/Shard/utils.ts"],"names":[],"mappings":";AAAA,eAAO,MAAM,MAAM,yIAED,QAAQ,aAAa,sGACgC,CAAA;AAOvE,eAAO,MAAM,MAAM,aAAc,QAAQ,cAAc,mRAGpD,CAAA"}
@@ -0,0 +1,9 @@
1
+ import * as tsplus_module_1 from "callbag-effect-ts/Source/filter";
2
+ import * as tsplus_module_2 from "@effect/io/Effect";
3
+ import * as tsplus_module_3 from "@fp-ts/data/Option";
4
+ import * as tsplus_module_4 from "@effect/io/Ref";
5
+ import * as tsplus_module_5 from "@fp-ts/data/Function";
6
+ export const opCode = (source) => (code) => tsplus_module_1.filter((p) => p.op === code)(source);
7
+ const maybeUpdateRef = (f, ref) => tsplus_module_5.flow(f, (o) => tsplus_module_3.match(tsplus_module_2.unit, (a) => tsplus_module_4.set(tsplus_module_3.some(a))(ref))(o));
8
+ export const latest = (f) => tsplus_module_2.map((ref) => [ref, maybeUpdateRef(f, ref)])(tsplus_module_4.make(tsplus_module_3.none));
9
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/DiscordGateway/Shard/utils.ts"],"names":[],"mappings":";;;;;AAAA,MAAM,CAAC,MAAM,MAAM,GACjB,CAAO,MAAkD,EAAE,EAAE,CAC7D,CAAU,IAA2B,EAAE,EAAE,CACvC,uBAAc,CAAC,CAAC,EAAkC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAlE,MAAM,CAA6D,CAAA;AAEvE,MAAM,cAAc,GAAG,CACrB,CAA0C,EAC1C,GAAkB,EAClB,EAAE,CAAC,gBAAA,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,4CAAqB,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAQ,qBAAW,CAAC,CAAC,EAArB,GAAG,CAAmB,EAAlD,CAAC,CAAkD,CAAC,CAAA;AAExE,MAAM,CAAC,MAAM,MAAM,GAAG,CAAI,CAA0C,EAAE,EAAE,CACtE,oBACE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,EAAE,GAAG,CAAC,CAAU,EADjD,0CAA8B,CAE7B,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { Effect, Maybe } from "dfx/common";
2
+ export interface ClaimIdContext {
3
+ sharderCount: number;
4
+ totalCount: number;
5
+ }
6
+ export interface ShardStore {
7
+ claimId: (ctx: ClaimIdContext) => Effect<never, never, Maybe<number>>;
8
+ allClaimed: (totalCount: number) => Effect<never, never, boolean>;
9
+ heartbeat?: (shardId: number) => Effect<never, never, void>;
10
+ }
11
+ export declare const ShardStore: import("../../common.js").Tag<ShardStore>;
12
+ export declare const LiveMemoryShardStore: import("../../common.js").Layer<never, never, ShardStore>;
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/DiscordGateway/ShardStore/index.ts"],"names":[],"mappings":";AAAA,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;IACrE,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;IACjE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;CAC5D;AACD,eAAO,MAAM,UAAU,2CAAoB,CAAA;AAsB3C,eAAO,MAAM,oBAAoB,2DAAsC,CAAA"}
@@ -0,0 +1,22 @@
1
+ import * as tsplus_module_1 from "dfx/common";
2
+ import * as tsplus_module_2 from "@fp-ts/data/Option";
3
+ import * as tsplus_module_3 from "@effect/io/Effect";
4
+ import * as tsplus_module_4 from "@effect/io/Layer";
5
+ export const ShardStore = tsplus_module_1.Tag();
6
+ // Very basic shard id store, that does no health checks
7
+ const memoryStore = () => {
8
+ let currentId = 0;
9
+ return {
10
+ claimId: ({ totalCount }) => tsplus_module_3.sync(() => {
11
+ if (currentId >= totalCount) {
12
+ return tsplus_module_2.none;
13
+ }
14
+ const id = currentId;
15
+ currentId++;
16
+ return tsplus_module_2.some(id);
17
+ }),
18
+ allClaimed: (totalCount) => tsplus_module_3.sync(() => currentId >= totalCount),
19
+ };
20
+ };
21
+ export const LiveMemoryShardStore = tsplus_module_4.sync(ShardStore)(memoryStore);
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/DiscordGateway/ShardStore/index.ts"],"names":[],"mappings":";;;;AAUA,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAA,GAAG,EAAc,CAAA;AAE3C,wDAAwD;AACxD,MAAM,WAAW,GAAG,GAAe,EAAE;IACnC,IAAI,SAAS,GAAG,CAAC,CAAA;IAEjB,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAC1B,qBAAY,GAAG,EAAE;YACf,IAAI,SAAS,IAAI,UAAU,EAAE;gBAC3B,4BAAiB;aAClB;YAED,MAAM,EAAE,GAAG,SAAS,CAAA;YACpB,SAAS,EAAE,CAAA;YACX,OAAO,qBAAW,EAAE,CAAC,CAAA;QACvB,CAAC,CAAC;QAEJ,UAAU,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,qBAAY,GAAG,EAAE,CAAC,SAAS,IAAI,UAAU,CAAC;KACvE,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,qBAAW,UAAU,CAAC,CAAC,WAAW,CAAC,CAAA"}
@@ -0,0 +1,10 @@
1
+ import { Effect, Maybe, EffectSource, Discord } from "dfx/common";
2
+ import { ShardStore } from "../ShardStore/index.js";
3
+ export declare const spawn: import("callbag-effect-ts/Source").EffectSource<import("../../DiscordConfig/index.js").DiscordConfig | import("../../Log/index.js").Log | import("../../RateLimitStore/index.js").RateLimiter | import("../../index.js").DiscordREST | ShardStore | import("../DiscordWS/index.js").DiscordWSCodec, never, {
4
+ run: import("../../common.js").Effect<never, never, readonly [readonly [readonly [readonly [void, void], void], void], void]>;
5
+ raw: import("callbag-effect-ts/Source").EffectSource<never, never, import("../../types.js").GatewayPayload<any>>;
6
+ dispatch: import("callbag-effect-ts/Source").EffectSource<never, never, import("../../types.js").GatewayPayload<import("../../types.js").ReceiveEvent>>;
7
+ send: (p: import("../../types.js").GatewayPayload<any>) => void;
8
+ reconnect: () => void;
9
+ }>;
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/DiscordGateway/Sharder/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AA0FnD,eAAO,MAAM,KAAK;;;;;;EAEjB,CAAA"}
@@ -0,0 +1,60 @@
1
+ import * as tsplus_module_1 from "callbag-effect-ts/Source/fromEffect";
2
+ import * as tsplus_module_2 from "callbag-effect-ts/Source/resource";
3
+ import * as tsplus_module_3 from "callbag-effect-ts/Source/map";
4
+ import * as tsplus_module_4 from "@fp-ts/data/Duration";
5
+ import * as tsplus_module_5 from "@fp-ts/data/Option";
6
+ import * as tsplus_module_6 from "callbag-effect-ts/Source/empty";
7
+ import * as tsplus_module_7 from "@effect/io/Effect";
8
+ import * as tsplus_module_8 from "callbag-effect-ts/Source/of";
9
+ import * as tsplus_module_9 from "dfx/common";
10
+ import * as tsplus_module_10 from "callbag-effect-ts/Source/tap";
11
+ import * as tsplus_module_11 from "callbag-effect-ts/Source/mapEffect";
12
+ import * as tsplus_module_12 from "callbag-effect-ts/Source/groupBy";
13
+ import * as tsplus_module_13 from "callbag-effect-ts/Source/chainPar";
14
+ import * as tsplus_module_14 from "callbag-effect-ts/Source/drain";
15
+ import * as tsplus_module_15 from "callbag-effect-ts/Source/merge";
16
+ import * as tsplus_module_16 from "callbag-effect-ts/Source/unwrap";
17
+ import { millis } from "@fp-ts/data/Duration";
18
+ import { overridePull } from "callbag-effect-ts/Source";
19
+ import { ShardStore } from "../ShardStore/index.js";
20
+ const configs = (totalCount) => tsplus_module_7.map(store => {
21
+ const claimId = (sharderCount) => tsplus_module_7.flatMap((a) => tsplus_module_5.match(() => tsplus_module_7.delay(tsplus_module_4.minutes(3))(tsplus_module_7.succeed([
22
+ tsplus_module_5.some(sharderCount),
23
+ tsplus_module_6.empty,
24
+ ])), (id) => tsplus_module_7.succeed([
25
+ tsplus_module_5.some(sharderCount + 1),
26
+ tsplus_module_8.of(id),
27
+ ]))(a))(store
28
+ .claimId({
29
+ totalCount,
30
+ sharderCount,
31
+ }));
32
+ return tsplus_module_3.map((id) => ({
33
+ id,
34
+ totalCount,
35
+ }))(tsplus_module_2.resource(0, (sharderCount) => tsplus_module_1.fromEffect(claimId(sharderCount))));
36
+ })(tsplus_module_7.service(ShardStore));
37
+ const spawnEffect = tsplus_module_7.map(({ gateway, config, configs, limiter }) => {
38
+ const [source, pull] = overridePull(configs, gateway.session_start_limit.max_concurrency);
39
+ return tsplus_module_10.tap(() => tsplus_module_7.sync(pull))(tsplus_module_13.chainPar(([shardConfig, key]) => tsplus_module_11.mapEffect((c) => tsplus_module_9.Shard.make([c.id, c.totalCount]))(tsplus_module_10.tap(() => limiter.maybeWait(`gateway.sharder.${key}`, millis(config.identifyRateLimit[0]), config.identifyRateLimit[1]))(shardConfig)))(tsplus_module_12.groupBy((c) => c.id % c.concurrency)(tsplus_module_3.map((config) => ({
40
+ ...config,
41
+ url: gateway.url,
42
+ concurrency: gateway.session_start_limit.max_concurrency,
43
+ }))(source))));
44
+ })(tsplus_module_7.bind("configs", ({ gateway, config }) => configs(config.shardCount ?? gateway.shards))(tsplus_module_7.structPar({
45
+ gateway: tsplus_module_7.catchAll(() => tsplus_module_7.succeed({
46
+ url: "wss://gateway.discord.gg/",
47
+ shards: 1,
48
+ session_start_limit: {
49
+ total: 0,
50
+ remaining: 0,
51
+ reset_after: 0,
52
+ max_concurrency: 1,
53
+ },
54
+ }))(tsplus_module_7.flatMap((r) => r.json)(tsplus_module_9.Rest.rest
55
+ .getGatewayBot())),
56
+ config: tsplus_module_9.Config.gateway,
57
+ limiter: tsplus_module_7.service(tsplus_module_9.RateLimitStore.RateLimiter),
58
+ })));
59
+ export const spawn = tsplus_module_13.chainPar((shard) => tsplus_module_15.merge(tsplus_module_14.drain(tsplus_module_1.fromEffect(shard.run)))(tsplus_module_8.of(shard)))(tsplus_module_16.unwrap(spawnEffect));
60
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/DiscordGateway/Sharder/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ /// <reference types="ws" />
3
+ import { Ref, EffectSource } from "dfx/common";
4
+ import WebSocket from "isomorphic-ws";
5
+ export declare const Reconnect: unique symbol;
6
+ export type Reconnect = typeof Reconnect;
7
+ export type Message = string | Buffer | ArrayBuffer | Reconnect;
8
+ export declare class WebSocketError {
9
+ readonly reason: unknown;
10
+ readonly _tag = "WebSocketError";
11
+ constructor(reason: unknown);
12
+ }
13
+ export declare class WebSocketCloseError {
14
+ readonly code: number;
15
+ readonly reason: string;
16
+ readonly _tag = "WebSocketCloseError";
17
+ constructor(code: number, reason: string);
18
+ }
19
+ export declare class WebSocketWriteError {
20
+ readonly reason: Error;
21
+ readonly _tag = "WebSocketWriteError";
22
+ constructor(reason: Error);
23
+ }
24
+ export declare const make: (url: Ref<string>, options?: WebSocket.ClientOptions) => import("../../common.js").Effect<import("../../Log/index.js").Log, never, {
25
+ source: import("callbag-effect-ts/Source").EffectSource<never, WebSocketError | WebSocketCloseError | WebSocketWriteError, WebSocket.RawData>;
26
+ sink: import("callbag-effect-ts/Sink").EffectSink<never, never, never, Message>;
27
+ }>;
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/DiscordGateway/WS/index.ts"],"names":[],"mappings":";;;AAAA,OAAO,SAAS,MAAM,eAAe,CAAA;AAErC,eAAO,MAAM,SAAS,eAAW,CAAA;AACjC,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAA;AACxC,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,SAAS,CAAA;AAa/D,qBAAa,cAAc;IAEb,QAAQ,CAAC,MAAM,EAAE,OAAO;IADpC,QAAQ,CAAC,IAAI,oBAAmB;gBACX,MAAM,EAAE,OAAO;CACrC;AAED,qBAAa,mBAAmB;IAElB,QAAQ,CAAC,IAAI,EAAE,MAAM;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM;IAD1D,QAAQ,CAAC,IAAI,yBAAwB;gBAChB,IAAI,EAAE,MAAM,EAAW,MAAM,EAAE,MAAM;CAC3D;AAmBD,qBAAa,mBAAmB;IAElB,QAAQ,CAAC,MAAM,EAAE,KAAK;IADlC,QAAQ,CAAC,IAAI,yBAAwB;gBAChB,MAAM,EAAE,KAAK;CACnC;AAkCD,eAAO,MAAM,IAAI,QAAS,IAAI,MAAM,CAAC,YAAY,UAAU,aAAa;;;EAiBpE,CAAA"}