dfx 0.45.6 → 0.45.8

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 (191) hide show
  1. package/Cache/driver.d.ts +23 -0
  2. package/Cache/driver.d.ts.map +1 -0
  3. package/Cache/driver.js +3 -0
  4. package/Cache/driver.js.map +1 -0
  5. package/Cache/memory.d.ts +4 -0
  6. package/Cache/memory.d.ts.map +1 -0
  7. package/Cache/memory.js +48 -0
  8. package/Cache/memory.js.map +1 -0
  9. package/Cache/memoryTTL.d.ts +21 -0
  10. package/Cache/memoryTTL.d.ts.map +1 -0
  11. package/Cache/memoryTTL.js +121 -0
  12. package/Cache/memoryTTL.js.map +1 -0
  13. package/Cache/prelude.d.ts +57 -0
  14. package/Cache/prelude.d.ts.map +1 -0
  15. package/Cache/prelude.js +108 -0
  16. package/Cache/prelude.js.map +1 -0
  17. package/Cache.d.ts +76 -0
  18. package/Cache.d.ts.map +1 -0
  19. package/Cache.js +62 -0
  20. package/Cache.js.map +1 -0
  21. package/DiscordConfig.d.ts +29 -0
  22. package/DiscordConfig.d.ts.map +1 -0
  23. package/DiscordConfig.js +29 -0
  24. package/DiscordConfig.js.map +1 -0
  25. package/DiscordGateway/DiscordWS.d.ts +32 -0
  26. package/DiscordGateway/DiscordWS.d.ts.map +1 -0
  27. package/DiscordGateway/DiscordWS.js +31 -0
  28. package/DiscordGateway/DiscordWS.js.map +1 -0
  29. package/DiscordGateway/Shard/heartbeats.d.ts +4 -0
  30. package/DiscordGateway/Shard/heartbeats.d.ts.map +1 -0
  31. package/DiscordGateway/Shard/heartbeats.js +17 -0
  32. package/DiscordGateway/Shard/heartbeats.js.map +1 -0
  33. package/DiscordGateway/Shard/identify.d.ts +13 -0
  34. package/DiscordGateway/Shard/identify.d.ts.map +1 -0
  35. package/DiscordGateway/Shard/identify.js +26 -0
  36. package/DiscordGateway/Shard/identify.js.map +1 -0
  37. package/DiscordGateway/Shard/invalidSession.d.ts +4 -0
  38. package/DiscordGateway/Shard/invalidSession.d.ts.map +1 -0
  39. package/DiscordGateway/Shard/invalidSession.js +6 -0
  40. package/DiscordGateway/Shard/invalidSession.js.map +1 -0
  41. package/DiscordGateway/Shard/sendEvents.d.ts +8 -0
  42. package/DiscordGateway/Shard/sendEvents.d.ts.map +1 -0
  43. package/DiscordGateway/Shard/sendEvents.js +25 -0
  44. package/DiscordGateway/Shard/sendEvents.js.map +1 -0
  45. package/DiscordGateway/Shard/utils.d.ts +4 -0
  46. package/DiscordGateway/Shard/utils.d.ts.map +1 -0
  47. package/DiscordGateway/Shard/utils.js +9 -0
  48. package/DiscordGateway/Shard/utils.js.map +1 -0
  49. package/DiscordGateway/Shard.d.ts +17 -0
  50. package/DiscordGateway/Shard.d.ts.map +1 -0
  51. package/DiscordGateway/Shard.js +85 -0
  52. package/DiscordGateway/Shard.js.map +1 -0
  53. package/DiscordGateway/ShardStore.d.ts +13 -0
  54. package/DiscordGateway/ShardStore.d.ts.map +1 -0
  55. package/DiscordGateway/ShardStore.js +22 -0
  56. package/DiscordGateway/ShardStore.js.map +1 -0
  57. package/DiscordGateway/Sharder.d.ts +16 -0
  58. package/DiscordGateway/Sharder.d.ts.map +1 -0
  59. package/DiscordGateway/Sharder.js +51 -0
  60. package/DiscordGateway/Sharder.js.map +1 -0
  61. package/DiscordGateway/WS.d.ts +32 -0
  62. package/DiscordGateway/WS.d.ts.map +1 -0
  63. package/DiscordGateway/WS.js +77 -0
  64. package/DiscordGateway/WS.js.map +1 -0
  65. package/DiscordGateway.d.ts +13 -0
  66. package/DiscordGateway.d.ts.map +1 -0
  67. package/DiscordGateway.js +29 -0
  68. package/DiscordGateway.js.map +1 -0
  69. package/DiscordREST/types.d.ts +8 -0
  70. package/DiscordREST/types.d.ts.map +1 -0
  71. package/DiscordREST/types.js +2 -0
  72. package/DiscordREST/types.js.map +1 -0
  73. package/DiscordREST/utils.d.ts +11 -0
  74. package/DiscordREST/utils.d.ts.map +1 -0
  75. package/DiscordREST/utils.js +21 -0
  76. package/DiscordREST/utils.js.map +1 -0
  77. package/DiscordREST.d.ts +18 -0
  78. package/DiscordREST.d.ts.map +1 -0
  79. package/DiscordREST.js +124 -0
  80. package/DiscordREST.js.map +1 -0
  81. package/Helpers/flags.d.ts +28 -0
  82. package/Helpers/flags.d.ts.map +1 -0
  83. package/Helpers/flags.js +36 -0
  84. package/Helpers/flags.js.map +1 -0
  85. package/Helpers/intents.d.ts +25 -0
  86. package/Helpers/intents.d.ts.map +1 -0
  87. package/Helpers/intents.js +29 -0
  88. package/Helpers/intents.js.map +1 -0
  89. package/Helpers/interactions.d.ts +97 -0
  90. package/Helpers/interactions.d.ts.map +1 -0
  91. package/Helpers/interactions.js +97 -0
  92. package/Helpers/interactions.js.map +1 -0
  93. package/Helpers/members.d.ts +10 -0
  94. package/Helpers/members.d.ts.map +1 -0
  95. package/Helpers/members.js +10 -0
  96. package/Helpers/members.js.map +1 -0
  97. package/Helpers/permissions.d.ts +41 -0
  98. package/Helpers/permissions.d.ts.map +1 -0
  99. package/Helpers/permissions.js +83 -0
  100. package/Helpers/permissions.js.map +1 -0
  101. package/Helpers/ui.d.ts +48 -0
  102. package/Helpers/ui.d.ts.map +1 -0
  103. package/Helpers/ui.js +66 -0
  104. package/Helpers/ui.js.map +1 -0
  105. package/Interactions/builder.d.ts +49 -0
  106. package/Interactions/builder.d.ts.map +1 -0
  107. package/Interactions/builder.js +68 -0
  108. package/Interactions/builder.js.map +1 -0
  109. package/Interactions/context.d.ts +59 -0
  110. package/Interactions/context.d.ts.map +1 -0
  111. package/Interactions/context.js +61 -0
  112. package/Interactions/context.js.map +1 -0
  113. package/Interactions/definitions.d.ts +127 -0
  114. package/Interactions/definitions.d.ts.map +1 -0
  115. package/Interactions/definitions.js +53 -0
  116. package/Interactions/definitions.js.map +1 -0
  117. package/Interactions/gateway.d.ts +21 -0
  118. package/Interactions/gateway.d.ts.map +1 -0
  119. package/Interactions/gateway.js +39 -0
  120. package/Interactions/gateway.js.map +1 -0
  121. package/Interactions/handlers.d.ts +11 -0
  122. package/Interactions/handlers.d.ts.map +1 -0
  123. package/Interactions/handlers.js +45 -0
  124. package/Interactions/handlers.js.map +1 -0
  125. package/Interactions/index.d.ts +11 -0
  126. package/Interactions/index.d.ts.map +1 -0
  127. package/Interactions/index.js +12 -0
  128. package/Interactions/index.js.map +1 -0
  129. package/Interactions/utils.d.ts +79 -0
  130. package/Interactions/utils.d.ts.map +1 -0
  131. package/Interactions/utils.js +74 -0
  132. package/Interactions/utils.js.map +1 -0
  133. package/Interactions/webhook.d.ts +46 -0
  134. package/Interactions/webhook.d.ts.map +1 -0
  135. package/Interactions/webhook.js +56 -0
  136. package/Interactions/webhook.js.map +1 -0
  137. package/Log.d.ts +11 -0
  138. package/Log.d.ts.map +1 -0
  139. package/Log.js +17 -0
  140. package/Log.js.map +1 -0
  141. package/RateLimit/memory.d.ts +3 -0
  142. package/RateLimit/memory.d.ts.map +1 -0
  143. package/RateLimit/memory.js +35 -0
  144. package/RateLimit/memory.js.map +1 -0
  145. package/RateLimit/utils.d.ts +3 -0
  146. package/RateLimit/utils.d.ts.map +1 -0
  147. package/RateLimit/utils.js +18 -0
  148. package/RateLimit/utils.js.map +1 -0
  149. package/RateLimit.d.ts +26 -0
  150. package/RateLimit.d.ts.map +1 -0
  151. package/RateLimit.js +25 -0
  152. package/RateLimit.js.map +1 -0
  153. package/_common.d.ts +37 -0
  154. package/_common.d.ts.map +1 -0
  155. package/_common.js +8 -0
  156. package/_common.js.map +1 -0
  157. package/gateway.d.ts +14 -0
  158. package/gateway.d.ts.map +1 -0
  159. package/gateway.js +25 -0
  160. package/gateway.js.map +1 -0
  161. package/global.d.ts +18 -0
  162. package/global.d.ts.map +1 -0
  163. package/global.js +2 -0
  164. package/global.js.map +1 -0
  165. package/index.d.ts +14 -0
  166. package/index.d.ts.map +1 -0
  167. package/index.js +14 -0
  168. package/index.js.map +1 -0
  169. package/package.json +4 -4
  170. package/src/DiscordREST.ts +2 -0
  171. package/src/package.json +4 -4
  172. package/types.d.ts +4450 -0
  173. package/types.d.ts.map +1 -0
  174. package/types.js +1204 -0
  175. package/types.js.map +1 -0
  176. package/utils/effect.d.ts +2 -0
  177. package/utils/effect.d.ts.map +1 -0
  178. package/utils/effect.js +2 -0
  179. package/utils/effect.js.map +1 -0
  180. package/utils/hub.d.ts +12 -0
  181. package/utils/hub.d.ts.map +1 -0
  182. package/utils/hub.js +23 -0
  183. package/utils/hub.js.map +1 -0
  184. package/utils/tsplus.d.ts +13 -0
  185. package/utils/tsplus.d.ts.map +1 -0
  186. package/utils/tsplus.js +2 -0
  187. package/utils/tsplus.js.map +1 -0
  188. package/webhooks.d.ts +10 -0
  189. package/webhooks.d.ts.map +1 -0
  190. package/webhooks.js +22 -0
  191. package/webhooks.js.map +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DiscordConfig.d.ts","sourceRoot":"","sources":["src/DiscordConfig.ts"],"names":[],"mappings":";AAEA,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,YAAY,CAAA;IACnB,KAAK,EAAE,OAAO,CAAA;IACd,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,kEAAuB,CAAA;AAEjD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,YAAY,CAAA;IACnB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,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,qCAKd,QAAQ,KAAG,aAiBZ,CAAA;AAEF,eAAO,MAAM,SAAS,6FAAmD,CAAA;AACzE,eAAO,MAAM,cAAc,MAAO,OAAO,IAAI,CAAC,QAAQ,CAAC,0GACG,CAAA"}
@@ -0,0 +1,29 @@
1
+ import * as tsplus_module_1 from "dfx/_common";
2
+ import * as tsplus_module_2 from "@effect/data/Duration";
3
+ import * as tsplus_module_3 from "@effect/io/Layer";
4
+ import * as tsplus_module_4 from "@effect/data/Function";
5
+ import * as tsplus_module_5 from "@effect/io/Config";
6
+ import * as tsplus_module_6 from "@effect/io/Effect";
7
+ const VERSION = 10;
8
+ export const DiscordConfig = tsplus_module_1.Tag();
9
+ export const make = ({ token, debug = false, rest, gateway, }) => ({
10
+ token,
11
+ debug,
12
+ rest: {
13
+ baseUrl: `https://discord.com/api/v${VERSION}`,
14
+ ...(rest ?? {}),
15
+ globalRateLimit: {
16
+ limit: 50,
17
+ window: tsplus_module_2.seconds(1),
18
+ ...(rest?.globalRateLimit ?? {}),
19
+ },
20
+ },
21
+ gateway: {
22
+ intents: tsplus_module_1.Discord.GatewayIntents.GUILDS,
23
+ identifyRateLimit: [5000, 1],
24
+ ...(gateway ?? {}),
25
+ },
26
+ });
27
+ export const makeLayer = tsplus_module_4.flow(make, _ => tsplus_module_3.succeed(DiscordConfig, _));
28
+ export const makeFromConfig = (_) => tsplus_module_6.toLayer(tsplus_module_6.map(tsplus_module_6.config(tsplus_module_5.unwrap(_)), make), DiscordConfig);
29
+ //# sourceMappingURL=DiscordConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DiscordConfig.js","sourceRoot":"","sources":["src/DiscordConfig.ts"],"names":[],"mappings":";;;;;;AAAA,MAAM,OAAO,GAAG,EAAE,CAAA;AAoBlB,MAAM,CAAC,MAAM,aAAa,GAAG,gBAAA,GAAG,EAAiB,CAAA;AASjD,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,EACnB,KAAK,EACL,KAAK,GAAG,KAAK,EACb,IAAI,EACJ,OAAO,GACE,EAAiB,EAAE,CAAC,CAAC;IAC9B,KAAK;IACL,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,CAAC,CAAC,EAAE,CAAC,wBAAc,aAAa,EAAE,CAAC,CAAC,CAAC,CAAA;AACzE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAwB,EAAE,EAAE,CACzD,wBAAA,2CAAA,uBAAc,CAAC,CAAC,GAAY,IAAI,CAAC,EAAS,aAAa,CAAC,CAAA"}
@@ -0,0 +1,32 @@
1
+ /// <reference types="ws" />
2
+ import { Discord, Effect } from "dfx/_common";
3
+ import { Reconnect, WS, WebSocketCloseError, WebSocketError } from "dfx/DiscordGateway/WS";
4
+ import WebSocket from "isomorphic-ws";
5
+ export type Message = Discord.GatewayPayload | Reconnect;
6
+ export interface OpenOpts {
7
+ url?: string;
8
+ version?: number;
9
+ encoding?: DiscordWSCodec;
10
+ outbound: Effect<never, never, Message>;
11
+ onConnecting?: Effect<never, never, void>;
12
+ }
13
+ export interface DiscordWSCodec {
14
+ type: "json" | "etf";
15
+ encode: (p: Discord.GatewayPayload) => string;
16
+ decode: (p: WebSocket.Data) => Discord.GatewayPayload;
17
+ }
18
+ export declare const DiscordWSCodec: import("@effect/data/Context").Tag<DiscordWSCodec, DiscordWSCodec>;
19
+ export declare const LiveJsonDiscordWSCodec: import("@effect-http/client/_common").Layer<never, never, DiscordWSCodec>;
20
+ declare const make: import("@effect/io/Effect").Effect<WS | DiscordWSCodec, never, {
21
+ readonly connect: ({ url, version, outbound, onConnecting, }: OpenOpts) => import("@effect/io/Effect").Effect<never, never, {
22
+ readonly run: import("@effect/io/Effect").Effect<never, WebSocketError | WebSocketCloseError, never>;
23
+ readonly take: import("@effect/io/Effect").Effect<never, never, import("../types.js").GatewayPayload<any>>;
24
+ readonly setUrl: (url: string) => import("@effect/io/Effect").Effect<never, never, void>;
25
+ }>;
26
+ }>;
27
+ export interface DiscordWS extends Effect.Success<typeof make> {
28
+ }
29
+ export declare const DiscordWS: import("@effect/data/Context").Tag<DiscordWS, DiscordWS>;
30
+ export declare const LiveDiscordWS: import("@effect-http/client/_common").Layer<import("../Log.js").Log | DiscordWSCodec, never, DiscordWS>;
31
+ export {};
32
+ //# sourceMappingURL=DiscordWS.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DiscordWS.d.ts","sourceRoot":"","sources":["../src/DiscordGateway/DiscordWS.ts"],"names":[],"mappings":";;AAAA,OAAO,EAEL,SAAS,EACT,EAAE,EACF,mBAAmB,EACnB,cAAc,EACf,MAAM,uBAAuB,CAAA;AAC9B,OAAO,SAAS,MAAM,eAAe,CAAA;AAErC,MAAM,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAA;AAExD,MAAM,WAAW,QAAQ;IACvB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;CAC1C;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,GAAG,KAAK,CAAA;IACpB,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,cAAc,KAAK,MAAM,CAAA;IAC7C,MAAM,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,KAAK,OAAO,CAAC,cAAc,CAAA;CACtD;AACD,eAAO,MAAM,cAAc,oEAAwB,CAAA;AACnD,eAAO,MAAM,sBAAsB,2EAIjC,CAAA;AAEF,QAAA,MAAM,IAAI;kEASL,QAAQ;;;+BAKc,MAAM;;EAsB/B,CAAA;AAEF,MAAM,WAAW,SAAU,SAAQ,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC;CAAG;AACjE,eAAO,MAAM,SAAS,0DAAmB,CAAA;AACzC,eAAO,MAAM,aAAa,yGAAoC,CAAA"}
@@ -0,0 +1,31 @@
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 "@effect/io/Effect";
4
+ import * as tsplus_module_4 from "@effect/io/Ref";
5
+ import { LiveWS, Reconnect, WS, } from "dfx/DiscordGateway/WS";
6
+ export const DiscordWSCodec = tsplus_module_1.Tag();
7
+ export const LiveJsonDiscordWSCodec = tsplus_module_2.succeed(DiscordWSCodec, {
8
+ type: "json",
9
+ encode: p => JSON.stringify(p),
10
+ decode: p => JSON.parse(p.toString("utf8")),
11
+ });
12
+ const make = tsplus_module_3.flatMap(WS, ws => tsplus_module_3.map(DiscordWSCodec, encoding => {
13
+ const connect = ({ url = "wss://gateway.discord.gg/", version = 10, outbound, onConnecting, }) => tsplus_module_3.flatMap(tsplus_module_4.make(`${url}?v=${version}&encoding=${encoding.type}`), urlRef => {
14
+ const setUrl = (url) => tsplus_module_4.set(urlRef, `${url}?v=${version}&encoding=${encoding.type}`);
15
+ const takeOutbound = tsplus_module_3.map(outbound, a => a === Reconnect ? a : encoding.encode(a));
16
+ return tsplus_module_3.map(ws.connect(urlRef, takeOutbound, onConnecting), socket => {
17
+ const take = tsplus_module_3.map(socket.take, encoding.decode);
18
+ const run = tsplus_module_3.retryWhile(socket.run, _ => (_._tag === "WebSocketCloseError" && _.code < 2000) ||
19
+ (_._tag === "WebSocketError" && _.reason === "open-timeout"));
20
+ return {
21
+ run,
22
+ take,
23
+ setUrl,
24
+ };
25
+ });
26
+ });
27
+ return { connect };
28
+ }));
29
+ export const DiscordWS = tsplus_module_1.Tag();
30
+ export const LiveDiscordWS = tsplus_module_2.provide(tsplus_module_3.toLayer(make, DiscordWS))(LiveWS);
31
+ //# sourceMappingURL=DiscordWS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DiscordWS.js","sourceRoot":"","sources":["../src/DiscordGateway/DiscordWS.ts"],"names":[],"mappings":";;;;AAAA,OAAO,EACL,MAAM,EACN,SAAS,EACT,EAAE,GAGH,MAAM,uBAAuB,CAAA;AAkB9B,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAA,GAAG,EAAkB,CAAA;AACnD,MAAM,CAAC,MAAM,sBAAsB,GAAG,wBAAc,cAAc,EAAE;IAClE,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAC9B,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;CAC5C,CAAC,CAAA;AAEF,MAAM,IAAI,2BACK,EAAE,EAAT,EAAE,wBACW,cAAc,EAA3B,QAAQ;IAEd,MAAM,OAAO,GAAG,CAAC,EACf,GAAG,GAAG,2BAA2B,EACjC,OAAO,GAAG,EAAE,EACZ,QAAQ,EACR,YAAY,GACH,EAAE,EAAE,yBAGT,qBAAS,GAAG,GAAG,MAAM,OAAO,aAAa,QAAQ,CAAC,IAAI,EAAE,CAAC,EADrD,MAAM;QAGZ,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE,CAC7B,oBAAA,MAAM,EAAK,GAAG,GAAG,MAAM,OAAO,aAAa,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;QAC7D,MAAM,YAAY,GAAG,oBAAA,QAAQ,EAAK,CAAC,CAAC,EAAE,CACpC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CACzC,CAAA;mCACgB,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC,EAAzD,MAAM;YACZ,MAAM,IAAI,GAAG,oBAAA,MAAM,CAAC,IAAI,EAAK,QAAQ,CAAC,MAAM,CAAC,CAAA;YAE7C,MAAM,GAAG,GAAG,2BAAA,MAAM,CAAC,GAAG,EACpB,CAAC,CAAC,EAAE,CACF,CAAC,CAAC,CAAC,IAAI,KAAK,qBAAqB,IAAI,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;gBACnD,CAAC,CAAC,CAAC,IAAI,KAAK,gBAAgB,IAAI,CAAC,CAAC,MAAM,KAAK,cAAc,CAAC,CAC/D,CAAA;YAED,OAAO;gBACL,GAAG;gBACH,IAAI;gBACJ,MAAM;aACE,CAAA;;MACV,CAAA;IAEJ,OAAO,EAAE,OAAO,EAAW,CAAA;GAC3B,CAAA;AAGF,MAAM,CAAC,MAAM,SAAS,GAAG,gBAAA,GAAG,EAAa,CAAA;AACzC,MAAM,CAAC,MAAM,aAAa,2BAAa,wBAAA,IAAI,EAAS,SAAS,CAAC,EAAjC,MAAM,CAA2B,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { Ref, Maybe, Effect, Dequeue, Discord } from "dfx/_common";
2
+ import * as DiscordWS from "dfx/DiscordGateway/DiscordWS";
3
+ export declare const send: (hellos: Dequeue<Discord.GatewayPayload>, acks: Dequeue<Discord.GatewayPayload>, seqRef: Ref<Maybe<number>>, send: (p: DiscordWS.Message) => Effect<never, never, boolean>) => import("@effect/io/Effect").Effect<never, never, never>;
4
+ //# 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,OAAO,KAAK,SAAS,MAAM,8BAA8B,CAAA;AAczD,eAAO,MAAM,IAAI,WACP,QAAQ,QAAQ,cAAc,CAAC,QACjC,QAAQ,QAAQ,cAAc,CAAC,UAC7B,IAAI,MAAM,MAAM,CAAC,CAAC,YAChB,UAAU,OAAO,KAAK,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,4DAqB3D,CAAA"}
@@ -0,0 +1,17 @@
1
+ import * as tsplus_module_1 from "@effect/io/Ref";
2
+ import * as tsplus_module_2 from "@effect/data/Option";
3
+ import * as tsplus_module_3 from "@effect/io/Effect";
4
+ import * as tsplus_module_4 from "@effect/io/Schedule";
5
+ import * as tsplus_module_5 from "dfx/utils/hub";
6
+ import { millis } from "@effect/data/Duration";
7
+ import * as SendEvents from "./sendEvents.js";
8
+ import { Reconnect } from "../WS.js";
9
+ const payload = (ref, seqRef) => tsplus_module_3.tap(tsplus_module_3.map(tsplus_module_1.get(seqRef), a => SendEvents.heartbeat(tsplus_module_2.getOrNull(a))), () => tsplus_module_1.set(ref, false));
10
+ const payloadOrReconnect = (ref, seqRef) => tsplus_module_3.flatMap(tsplus_module_1.get(ref), (acked) => acked ? payload(ref, seqRef) : tsplus_module_3.succeed(Reconnect));
11
+ export const send = (hellos, acks, seqRef, send) => tsplus_module_3.flatMap(tsplus_module_1.make(true), ackedRef => {
12
+ const heartbeats = tsplus_module_5.foreverSwitch(tsplus_module_3.tap(hellos
13
+ .take(), () => tsplus_module_1.set(ackedRef, true)), p => tsplus_module_3.schedule(tsplus_module_3.tap(payloadOrReconnect(ackedRef, seqRef), send), tsplus_module_4.andThen(tsplus_module_4.duration(millis(p.d.heartbeat_interval * Math.random())), tsplus_module_4.fixed(millis(p.d.heartbeat_interval)))));
14
+ const run = tsplus_module_3.forever(tsplus_module_3.tap(acks.take(), () => tsplus_module_1.set(ackedRef, true)));
15
+ return tsplus_module_3.zipParLeft(run, heartbeats);
16
+ });
17
+ //# 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,uBAAuB,CAAA;AAC9C,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAE7C,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEpC,MAAM,OAAO,GAAG,CAAC,GAAiB,EAAE,MAA0B,EAAE,EAAE,CAChE,oBAAA,wCAAA,MAAM,GACC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,2BAAC,CAAC,EAAW,CAAC,EACvC,GAAG,EAAE,CAAC,oBAAA,GAAG,EAAK,KAAK,CAAC,CAAC,CAAA;AAE9B,MAAM,kBAAkB,GAAG,CAAC,GAAiB,EAAE,MAA0B,EAAE,EAAE,CAC3E,4CAAA,GAAG,GACD,CAAC,KAAK,EAA2C,EAAE,CACjD,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,wBAAe,SAAS,CAAC,CAC3D,CAAA;AAEH,MAAM,CAAC,MAAM,IAAI,GAAG,CAClB,MAAuC,EACvC,IAAqC,EACrC,MAA0B,EAC1B,IAA6D,EAC7D,EAAE,yBAEmB,qBAAS,IAAI,CAAC,EAA3B,QAAQ;IAEd,MAAM,UAAU,GAAG,8BAAA,oBAAA,MAAM;SACtB,IAAI,EAAE,EACF,GAAG,EAAE,CAAC,oBAAA,QAAQ,EAAK,IAAI,CAAC,CAAC,EACf,CAAC,CAAC,EAAE,CACjB,yBAAA,oBAAA,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,EAC7B,IAAI,CAAC,EAER,wBAAA,yBACE,MAAM,CAAC,CAAC,CAAC,CAAE,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAChD,EAAS,sBAAe,MAAM,CAAC,CAAC,CAAC,CAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAC3D,CACJ,CAAA;IAEH,MAAM,GAAG,2BAAG,oBAAA,IAAI,CAAC,IAAI,EAAE,EAAK,GAAG,EAAE,CAAC,oBAAA,QAAQ,EAAK,IAAI,CAAC,CAAC,CAAQ,CAAA;WAEpD,2BAAA,GAAG,EAAY,UAAU,CAAC;EACnC,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { Discord, Ref, Maybe } 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 identifyOrResume: (opts: Options, ready: Ref<Maybe<Discord.ReadyEvent>>, seq: Ref<Maybe<number>>) => import("@effect/io/Effect").Effect<never, never, 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":";AAGA,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;AAsBD,eAAO,MAAM,gBAAgB,SACrB,OAAO,SACN,IAAI,MAAM,QAAQ,UAAU,CAAC,CAAC,OAChC,IAAI,MAAM,MAAM,CAAC,CAAC,mGAarB,CAAA"}
@@ -0,0 +1,26 @@
1
+ import * as tsplus_module_1 from "@effect/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 SendEvents from "./sendEvents.js";
5
+ import * as OS from "os";
6
+ const identify = ({ token, intents, shard, presence }) => SendEvents.identify({
7
+ token,
8
+ intents,
9
+ properties: {
10
+ os: OS.platform(),
11
+ browser: "dfx",
12
+ device: "dfx",
13
+ },
14
+ shard,
15
+ presence,
16
+ });
17
+ const resume = (token, ready, seq) => SendEvents.resume({
18
+ token,
19
+ session_id: ready.session_id,
20
+ seq,
21
+ });
22
+ export const identifyOrResume = (opts, ready, seq) => tsplus_module_3.flatMap(tsplus_module_2.get(ready), readyEvent => tsplus_module_3.map(tsplus_module_2.get(seq), seqNumber => tsplus_module_1.match(tsplus_module_1.struct({
23
+ readyEvent,
24
+ seqNumber,
25
+ }), () => identify(opts), ({ readyEvent, seqNumber }) => resume(opts.token, readyEvent, seqNumber))));
26
+ //# 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,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,CAAC,MAAM,gBAAgB,GAAG,CAC9B,IAAa,EACb,KAAqC,EACrC,GAAuB,EACvB,EAAE,6CAEqB,KAAK,GAApB,UAAU,4CACI,GAAG,GAAjB,SAAS,IAER,sBAAA,uBAAa;IAClB,UAAU;IACV,SAAS;CACV,CAAC,EACA,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,CACzE,EACD,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { Discord, Ref, Maybe } from "dfx/_common";
2
+ import { Message } from "../DiscordWS.js";
3
+ export declare const fromPayload: (p: Discord.GatewayPayload, latestReady: Ref<Maybe<Discord.ReadyEvent>>) => import("@effect/io/Effect").Effect<never, never, Message>;
4
+ //# sourceMappingURL=invalidSession.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invalidSession.d.ts","sourceRoot":"","sources":["../../src/DiscordGateway/Shard/invalidSession.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAGzC,eAAO,MAAM,WAAW,MACnB,QAAQ,cAAc,eACZ,IAAI,MAAM,QAAQ,UAAU,CAAC,CAAC,8DAI1C,CAAA"}
@@ -0,0 +1,6 @@
1
+ import * as tsplus_module_1 from "@effect/io/Effect";
2
+ import * as tsplus_module_2 from "@effect/data/Option";
3
+ import * as tsplus_module_3 from "@effect/io/Ref";
4
+ import { Reconnect } from "../WS.js";
5
+ export const fromPayload = (p, latestReady) => tsplus_module_1.map((p.d ? tsplus_module_1.unit() : tsplus_module_3.set(latestReady, tsplus_module_2.none())), () => Reconnect);
6
+ //# sourceMappingURL=invalidSession.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invalidSession.js","sourceRoot":"","sources":["../../src/DiscordGateway/Shard/invalidSession.ts"],"names":[],"mappings":";;;AACA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEpC,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,CAAyB,EACzB,WAA2C,EAC3C,EAAE,CACF,oBAAA,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAa,CAAC,CAAC,CAAC,oBAAA,WAAW,EAAK,sBAAY,CAAC,CAAC,EACnD,GAAY,EAAE,CAAC,SAAS,CACzB,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,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAErC,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,25 @@
1
+ export const heartbeat = (d) => ({
2
+ op: 1 /* Discord.GatewayOpcode.HEARTBEAT */,
3
+ d,
4
+ });
5
+ export const identify = (d) => ({
6
+ op: 2 /* Discord.GatewayOpcode.IDENTIFY */,
7
+ d,
8
+ });
9
+ export const resume = (d) => ({
10
+ op: 6 /* Discord.GatewayOpcode.RESUME */,
11
+ d,
12
+ });
13
+ export const requestGuildMembers = (d) => ({
14
+ op: 8 /* Discord.GatewayOpcode.REQUEST_GUILD_MEMBERS */,
15
+ d,
16
+ });
17
+ export const voiceStateUpdate = (d) => ({
18
+ op: 4 /* Discord.GatewayOpcode.VOICE_STATE_UPDATE */,
19
+ d,
20
+ });
21
+ export const presenceUpdate = (d) => ({
22
+ op: 3 /* Discord.GatewayOpcode.PRESENCE_UPDATE */,
23
+ d,
24
+ });
25
+ //# sourceMappingURL=sendEvents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sendEvents.js","sourceRoot":"","sources":["../../src/DiscordGateway/Shard/sendEvents.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAoB,EAA0B,EAAE,CAAC,CAAC;IAC1E,EAAE,yCAAiC;IACnC,CAAC;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAmB,EAA0B,EAAE,CAAC,CAAC;IACxE,EAAE,wCAAgC;IAClC,CAAC;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAiB,EAA0B,EAAE,CAAC,CAAC;IACpE,EAAE,sCAA8B;IAChC,CAAC;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,CAA6B,EACL,EAAE,CAAC,CAAC;IAC5B,EAAE,qDAA6C;IAC/C,CAAC;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,CAA2B,EACH,EAAE,CAAC,CAAC;IAC5B,EAAE,kDAA0C;IAC5C,CAAC;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,CAAyB,EACD,EAAE,CAAC,CAAC;IAC5B,EAAE,+CAAuC;IACzC,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { Stream, Discord, Maybe, Ref } from "dfx/_common";
2
+ export declare const opCode: <R, E>(source: import("@effect-http/client/_common").Stream<R, E, import("../../types.js").GatewayPayload<any>>) => <T = any>(code: Discord.GatewayOpcode) => import("@effect-http/client/_common").Stream<R, E, import("../../types.js").GatewayPayload<any>>;
3
+ export declare const latest: <T>(f: (p: Discord.GatewayPayload) => import("@effect/data/Option").Option<T>) => import("@effect/io/Effect").Effect<never, never, readonly [import("../../_common.js").Ref<import("@effect/data/Option").Option<T>>, (p: import("../../types.js").GatewayPayload<any>) => import("@effect/io/Effect").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,sIAED,QAAQ,aAAa,qGACgC,CAAA;AAOvE,eAAO,MAAM,MAAM,aAAc,QAAQ,cAAc,kSAGpD,CAAA"}
@@ -0,0 +1,9 @@
1
+ import * as tsplus_module_1 from "@effect/stream/Stream";
2
+ import * as tsplus_module_2 from "@effect/io/Effect";
3
+ import * as tsplus_module_3 from "@effect/data/Option";
4
+ import * as tsplus_module_4 from "@effect/io/Ref";
5
+ import * as tsplus_module_5 from "@effect/data/Function";
6
+ export const opCode = (source) => (code) => tsplus_module_1.filter(source, (p) => p.op === code);
7
+ const maybeUpdateRef = (f, ref) => tsplus_module_5.flow(f, o => tsplus_module_3.match(o, tsplus_module_2.unit, a => tsplus_module_4.set(ref, tsplus_module_3.some(a))));
8
+ export const latest = (f) => tsplus_module_2.map(tsplus_module_4.make(tsplus_module_3.none()), ref => [ref, maybeUpdateRef(f, ref)]);
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,MAA4C,EAAE,EAAE,CACvD,CAAU,IAA2B,EAAE,EAAE,CACvC,uBAAA,MAAM,EAAQ,CAAC,CAAC,EAAkC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAA;AAEvE,MAAM,cAAc,GAAG,CACrB,CAA0C,EAC1C,GAAkB,EAClB,EAAE,CAAC,gBAAA,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,sBAAA,CAAC,wBAAoB,CAAC,CAAC,EAAE,CAAC,oBAAA,GAAG,EAAK,qBAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAEpE,MAAM,CAAC,MAAM,MAAM,GAAG,CAAI,CAA0C,EAAE,EAAE,CACtE,oBAAA,qBAAmB,sBAAY,CAAC,EAC9B,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,EAAE,GAAG,CAAC,CAAU,CAC9C,CAAA"}
@@ -0,0 +1,17 @@
1
+ import { Hub, Discord, Effect } from "dfx/_common";
2
+ import { DiscordConfig } from "dfx/DiscordConfig";
3
+ import { RateLimiter } from "dfx/RateLimit";
4
+ import { DiscordWS } from "./DiscordWS.js";
5
+ import { Log } from "dfx/Log";
6
+ export declare const make: import("@effect/io/Effect").Effect<DiscordConfig | Log | RateLimiter | DiscordWS, never, {
7
+ readonly connect: (shard: [id: number, count: number], hub: Hub<Discord.GatewayPayload<Discord.ReceiveEvent>>) => import("@effect/io/Effect").Effect<never, never, {
8
+ readonly run: import("@effect/io/Effect").Effect<never, import("./WS.js").WebSocketError | import("./WS.js").WebSocketCloseError, never>;
9
+ readonly send: (p: Discord.GatewayPayload) => import("@effect/io/Effect").Effect<never, never, boolean>;
10
+ readonly reconnect: import("@effect/io/Effect").Effect<never, never, boolean>;
11
+ }>;
12
+ }>;
13
+ export interface Shard extends Effect.Success<typeof make> {
14
+ }
15
+ export declare const Shard: import("@effect/data/Context").Tag<Shard, Shard>;
16
+ export declare const LiveShard: import("@effect-http/client/_common").Layer<DiscordConfig | Log | import("dfx/RateLimit").RateLimitStore | import("./DiscordWS.js").DiscordWSCodec, never, Shard>;
17
+ //# sourceMappingURL=Shard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Shard.d.ts","sourceRoot":"","sources":["../src/DiscordGateway/Shard.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAmB,WAAW,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,SAAS,EAA0B,MAAM,gBAAgB,CAAA;AAMlE,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAA;AAQ7B,eAAO,MAAM,IAAI;8BAON,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,OAC7B,IAAI,QAAQ,cAAc,CAAC,QAAQ,YAAY,CAAC,CAAC;;2BA4IxC,QAAQ,cAAc;;;EAMtC,CAAA;AAEF,MAAM,WAAW,KAAM,SAAQ,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC;CAAG;AAC7D,eAAO,MAAM,KAAK,kDAAe,CAAA;AACjC,eAAO,MAAM,SAAS,mKACoC,CAAA"}
@@ -0,0 +1,85 @@
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 "@effect/io/Config/Secret";
4
+ import * as tsplus_module_4 from "@effect/io/Queue";
5
+ import * as tsplus_module_5 from "@effect/data/Option";
6
+ import * as tsplus_module_6 from "@effect/data/Chunk";
7
+ import * as tsplus_module_7 from "@effect/io/Ref";
8
+ import * as tsplus_module_8 from "@effect/data/Duration";
9
+ import * as tsplus_module_9 from "@effect/io/Layer";
10
+ import { DiscordConfig } from "dfx/DiscordConfig";
11
+ import { LiveRateLimiter, RateLimiter } from "dfx/RateLimit";
12
+ import { DiscordWS, LiveDiscordWS } from "./DiscordWS.js";
13
+ import * as Heartbeats from "./Shard/heartbeats.js";
14
+ import * as Identify from "./Shard/identify.js";
15
+ import * as InvalidSession from "./Shard/invalidSession.js";
16
+ import * as Utils from "./Shard/utils.js";
17
+ import { Reconnect } from "./WS.js";
18
+ import { Log } from "dfx/Log";
19
+ export const make = tsplus_module_1.flatMap(DiscordConfig, ({ token, gateway }) => tsplus_module_1.flatMap(RateLimiter, limiter => tsplus_module_1.flatMap(DiscordWS, dws => tsplus_module_1.map(Log, log => {
20
+ const connect = (shard, hub) => tsplus_module_1.flatMap(tsplus_module_4.unbounded(), outboundQueue => tsplus_module_1.flatMap(tsplus_module_4.unbounded(), pendingQueue => tsplus_module_1.flatMap(tsplus_module_7.make(0 /* Phase.Connecting */), phase => {
21
+ const setPhase = (p) => tsplus_module_1.zipLeft(tsplus_module_7.set(phase, p), log.debug("Shard", shard, "phase", p));
22
+ const outbound = tsplus_module_1.tap(outboundQueue
23
+ .take(), () => limiter.maybeWait("dfx.shard.send", tsplus_module_8.minutes(1), 120));
24
+ const send = (p) => tsplus_module_1.flatMap(tsplus_module_7.get(phase), _ => _ === 2 /* Phase.Connected */
25
+ ? outboundQueue.offer(p)
26
+ : pendingQueue.offer(p));
27
+ const heartbeatSend = (p) => tsplus_module_1.flatMap(tsplus_module_7.get(phase), _ => _ !== 0 /* Phase.Connecting */
28
+ ? outboundQueue.offer(p)
29
+ : tsplus_module_1.succeed(false));
30
+ const prioritySend = (p) => outboundQueue.offer(p);
31
+ const resume = tsplus_module_1.asUnit(tsplus_module_1.tap(tsplus_module_1.zipRight(setPhase(2 /* Phase.Connected */), pendingQueue.takeAll()), _ => outboundQueue.offerAll(_)));
32
+ const onConnecting = tsplus_module_1.zipRight(tsplus_module_1.tap(outboundQueue
33
+ .takeAll(), _ => pendingQueue.offerAll(tsplus_module_6.filter(_, msg => msg !== Reconnect &&
34
+ msg.op !== 2 /* Discord.GatewayOpcode.IDENTIFY */ &&
35
+ msg.op !== 6 /* Discord.GatewayOpcode.RESUME */ &&
36
+ msg.op !== 1 /* Discord.GatewayOpcode.HEARTBEAT */))), setPhase(0 /* Phase.Connecting */));
37
+ return tsplus_module_1.flatMap(dws.connect({ outbound, onConnecting }), socket => tsplus_module_1.flatMap(Utils.latest(p => tsplus_module_5.map(tsplus_module_5.filter((p) => p.op === 0 /* Discord.GatewayOpcode.DISPATCH */ && p.t === "READY")(tsplus_module_5.some(p)), p => p.d)), ([latestReady, updateLatestReady]) => tsplus_module_1.flatMap(Utils.latest(p => tsplus_module_5.fromNullable(p.s)), ([latestSequence, updateLatestSequence]) => {
38
+ const maybeUpdateUrl = (p) => tsplus_module_5.match(tsplus_module_5.map(tsplus_module_5.filter((p) => p.op === 0 /* Discord.GatewayOpcode.DISPATCH */ && p.t === "READY")(tsplus_module_5.some(p)), p => p.d), () => tsplus_module_1.unit(), a => socket.setUrl(a.resume_gateway_url));
39
+ return tsplus_module_1.flatMap(tsplus_module_4.unbounded(), hellos => tsplus_module_1.map(tsplus_module_4.unbounded(), acks => {
40
+ // heartbeats
41
+ const heartbeats = Heartbeats.send(hellos, acks, latestSequence, heartbeatSend);
42
+ // identify
43
+ const identify = Identify.identifyOrResume({
44
+ token: tsplus_module_3.value(token),
45
+ shard,
46
+ intents: gateway.intents,
47
+ presence: gateway.presence,
48
+ }, latestReady, latestSequence);
49
+ const onPayload = (p) => tsplus_module_1.flatMap(tsplus_module_1.zipPar(tsplus_module_1.zipPar(updateLatestReady(p), updateLatestSequence(p)), maybeUpdateUrl(p)), () => {
50
+ let effect = tsplus_module_1.unit();
51
+ switch (p.op) {
52
+ case 10 /* Discord.GatewayOpcode.HELLO */:
53
+ effect = tsplus_module_1.zipPar(tsplus_module_1.tap(identify, prioritySend), tsplus_module_1.zipRight(setPhase(1 /* Phase.Handshake */), hellos.offer(p)));
54
+ break;
55
+ case 11 /* Discord.GatewayOpcode.HEARTBEAT_ACK */:
56
+ effect = acks.offer(p);
57
+ break;
58
+ case 9 /* Discord.GatewayOpcode.INVALID_SESSION */:
59
+ effect = tsplus_module_1.tap(InvalidSession.fromPayload(p, latestReady), send);
60
+ break;
61
+ case 0 /* Discord.GatewayOpcode.DISPATCH */:
62
+ if (p.t === "READY" || p.t === "RESUMED") {
63
+ effect = tsplus_module_1.zipRight(resume, hub.publish(p));
64
+ }
65
+ else {
66
+ effect = hub.publish(p);
67
+ }
68
+ break;
69
+ }
70
+ return tsplus_module_1.map(effect, () => void 0);
71
+ });
72
+ const run = tsplus_module_1.zipParLeft(tsplus_module_1.zipParLeft(tsplus_module_1.forever(tsplus_module_1.flatMap(socket.take, onPayload)), heartbeats), socket.run);
73
+ return {
74
+ run,
75
+ send: (p) => send(p),
76
+ reconnect: send(Reconnect),
77
+ };
78
+ }));
79
+ })));
80
+ })));
81
+ return { connect };
82
+ }))));
83
+ export const Shard = tsplus_module_2.Tag();
84
+ export const LiveShard = tsplus_module_9.provide(tsplus_module_1.toLayer(make, Shard))((tsplus_module_9.merge(LiveRateLimiter)(LiveDiscordWS)));
85
+ //# sourceMappingURL=Shard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Shard.js","sourceRoot":"","sources":["../src/DiscordGateway/Shard.ts"],"names":[],"mappings":"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"}
@@ -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("@effect/data/Context").Tag<ShardStore, ShardStore>;
12
+ export declare const LiveMemoryShardStore: import("@effect-http/client/_common").Layer<never, never, ShardStore>;
13
+ //# sourceMappingURL=ShardStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShardStore.d.ts","sourceRoot":"","sources":["../src/DiscordGateway/ShardStore.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,4DAAoB,CAAA;AAsB3C,eAAO,MAAM,oBAAoB,uEAAsC,CAAA"}
@@ -0,0 +1,22 @@
1
+ import * as tsplus_module_1 from "dfx/_common";
2
+ import * as tsplus_module_2 from "@effect/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=ShardStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShardStore.js","sourceRoot":"","sources":["../src/DiscordGateway/ShardStore.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,OAAO,sBAAY,CAAA;aACpB;YAED,MAAM,EAAE,GAAG,SAAS,CAAA;YACpB,SAAS,EAAE,CAAA;YACX,OAAO,qBAAW,EAAE,CAAC,CAAA;QACvB,CAAC,CAAC;QAEJ,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,qBAAY,GAAG,EAAE,CAAC,SAAS,IAAI,UAAU,CAAC;KACrE,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,qBAAW,UAAU,EAAE,WAAW,CAAC,CAAA"}
@@ -0,0 +1,16 @@
1
+ import { Maybe, Schedule, Effect, Discord, Hub } from "dfx/_common";
2
+ import { DiscordConfig } from "dfx/DiscordConfig";
3
+ import { DiscordREST } from "dfx/DiscordREST";
4
+ import { RateLimiter } from "../RateLimit.js";
5
+ import { Shard } from "./Shard.js";
6
+ import { ShardStore } from "./ShardStore.js";
7
+ import { WebSocketCloseError, WebSocketError } from "./WS.js";
8
+ declare const make: import("@effect/io/Effect").Effect<DiscordREST | DiscordConfig | RateLimiter | Shard | ShardStore, never, {
9
+ readonly run: (hub: Hub<Discord.GatewayPayload<Discord.ReceiveEvent>>) => import("@effect/io/Effect").Effect<never, WebSocketError | WebSocketCloseError, never>;
10
+ }>;
11
+ export interface Sharder extends Effect.Success<typeof make> {
12
+ }
13
+ export declare const Sharder: import("@effect/data/Context").Tag<Sharder, Sharder>;
14
+ export declare const LiveSharder: import("@effect-http/client/_common").Layer<DiscordREST | DiscordConfig | import("../Log.js").Log | import("../RateLimit.js").RateLimitStore | import("./DiscordWS.js").DiscordWSCodec | ShardStore, never, Sharder>;
15
+ export {};
16
+ //# sourceMappingURL=Sharder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sharder.d.ts","sourceRoot":"","sources":["../src/DiscordGateway/Sharder.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAmB,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC9D,OAAO,EAAa,KAAK,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAO7D,QAAA,MAAM,IAAI;wBA4CU,IAAI,QAAQ,cAAc,CAAC,QAAQ,YAAY,CAAC,CAAC;EAwCnE,CAAA;AAEF,MAAM,WAAW,OAAQ,SAAQ,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC;CAAG;AAC/D,eAAO,MAAM,OAAO,sDAAiB,CAAA;AACrC,eAAO,MAAM,WAAW,sNACgC,CAAA"}
@@ -0,0 +1,51 @@
1
+ import * as tsplus_module_1 from "@effect/data/Option";
2
+ import * as tsplus_module_2 from "@effect/data/Duration";
3
+ import * as tsplus_module_3 from "@effect/io/Schedule";
4
+ import * as tsplus_module_4 from "dfx/_common";
5
+ import * as tsplus_module_5 from "@effect/io/Effect";
6
+ import * as tsplus_module_6 from "@effect/data/Chunk";
7
+ import * as tsplus_module_7 from "@effect/io/Deferred";
8
+ import * as tsplus_module_8 from "@effect/io/Ref";
9
+ import * as tsplus_module_9 from "@effect/io/Layer";
10
+ import { millis } from "@effect/data/Duration";
11
+ import { DiscordConfig } from "dfx/DiscordConfig";
12
+ import { DiscordREST } from "dfx/DiscordREST";
13
+ import { LiveRateLimiter, RateLimiter } from "../RateLimit.js";
14
+ import { LiveShard, Shard } from "./Shard.js";
15
+ import { ShardStore } from "./ShardStore.js";
16
+ const claimRepeatPolicy = tsplus_module_3.passthrough(tsplus_module_3.whileInput(tsplus_module_3.fixed(tsplus_module_2.minutes(3)), (_) => tsplus_module_1.isNone(_)));
17
+ const make = tsplus_module_5.flatMap(ShardStore, store => tsplus_module_5.flatMap(DiscordREST, rest => tsplus_module_5.flatMap(DiscordConfig, ({ gateway: config }) => tsplus_module_5.flatMap(RateLimiter, limiter => tsplus_module_5.flatMap(Shard, shard => {
18
+ const takeConfig = (totalCount) => tsplus_module_5.map(tsplus_module_8.make(0), currentCount => {
19
+ const claimId = (sharderCount) => tsplus_module_5.map(tsplus_module_5.repeat(store
20
+ .claimId({
21
+ totalCount,
22
+ sharderCount,
23
+ }), claimRepeatPolicy), _ => _.value);
24
+ return tsplus_module_5.map(tsplus_module_5.flatMap(tsplus_module_8.getAndUpdate(currentCount, _ => _ + 1), claimId), id => ({ id, totalCount }));
25
+ });
26
+ return tsplus_module_5.map(tsplus_module_5.catchAll(tsplus_module_5.flatMap(rest
27
+ .getGatewayBot(), r => r.json), () => tsplus_module_5.succeed({
28
+ url: "wss://gateway.discord.gg/",
29
+ shards: 1,
30
+ session_start_limit: {
31
+ total: 0,
32
+ remaining: 0,
33
+ reset_after: 0,
34
+ max_concurrency: 1,
35
+ },
36
+ })), gateway => {
37
+ const run = (hub) => tsplus_module_5.flatMap(tsplus_module_7.make(), deferred => tsplus_module_5.flatMap(takeConfig(config.shardCount ?? gateway.shards), take => {
38
+ const spawner = tsplus_module_5.forever(tsplus_module_5.flatMap(tsplus_module_5.flatMap(tsplus_module_5.tap(tsplus_module_5.map(take, config => ({
39
+ ...config,
40
+ url: gateway.url,
41
+ concurrency: gateway.session_start_limit.max_concurrency,
42
+ })), ({ id, concurrency }) => limiter.maybeWait(`dfx.sharder.${id % concurrency}`, millis(config.identifyRateLimit[0]), config.identifyRateLimit[1])), c => shard.connect([c.id, c.totalCount], hub)), shard => tsplus_module_5.fork(tsplus_module_5.catchAllCause(shard.run, _ => tsplus_module_7.failCause(deferred, _)))));
43
+ const spawners = tsplus_module_6.map(tsplus_module_6.range(1, gateway.session_start_limit.max_concurrency), () => spawner);
44
+ return tsplus_module_5.zipParLeft(tsplus_module_5.allParDiscard(spawners), tsplus_module_4.deferredAwait(deferred));
45
+ }));
46
+ return { run };
47
+ });
48
+ })))));
49
+ export const Sharder = tsplus_module_4.Tag();
50
+ export const LiveSharder = tsplus_module_9.provide(tsplus_module_5.toLayer(make, Sharder))((tsplus_module_9.merge(LiveShard)(LiveRateLimiter)));
51
+ //# sourceMappingURL=Sharder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sharder.js","sourceRoot":"","sources":["../src/DiscordGateway/Sharder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ /// <reference types="ws" />
3
+ import { Ref, Enqueue, Duration, Effect } from "dfx/_common";
4
+ import { Log } from "dfx/Log";
5
+ import WebSocket from "isomorphic-ws";
6
+ export declare const Reconnect: unique symbol;
7
+ export type Reconnect = typeof Reconnect;
8
+ export type Message = string | Buffer | ArrayBuffer | Reconnect;
9
+ export declare class WebSocketError {
10
+ readonly reason: "open-timeout" | "error";
11
+ readonly error?: unknown;
12
+ readonly _tag = "WebSocketError";
13
+ constructor(reason: "open-timeout" | "error", error?: unknown);
14
+ }
15
+ export declare class WebSocketCloseError {
16
+ readonly code: number;
17
+ readonly reason: string;
18
+ readonly _tag = "WebSocketCloseError";
19
+ constructor(code: number, reason: string);
20
+ }
21
+ declare const make: import("@effect/io/Effect").Effect<Log, never, {
22
+ readonly connect: (url: Ref<string>, takeOutbound: Effect<never, never, Message>, onConnecting?: import("@effect/io/Effect").Effect<never, never, void>, openTimeout?: import("../_common.js").Duration) => import("@effect/io/Effect").Effect<never, never, {
23
+ readonly run: import("@effect/io/Effect").Effect<never, WebSocketError | WebSocketCloseError, never>;
24
+ readonly take: import("@effect/io/Effect").Effect<never, never, WebSocket.Data>;
25
+ }>;
26
+ }>;
27
+ export interface WS extends Effect.Success<typeof make> {
28
+ }
29
+ export declare const WS: import("@effect/data/Context").Tag<WS, WS>;
30
+ export declare const LiveWS: import("@effect-http/client/_common").Layer<Log, never, WS>;
31
+ export {};
32
+ //# sourceMappingURL=WS.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WS.d.ts","sourceRoot":"","sources":["../src/DiscordGateway/WS.ts"],"names":[],"mappings":";;;AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAA;AAC7B,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;AAE/D,qBAAa,cAAc;IAGvB,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO;IACzC,QAAQ,CAAC,KAAK,CAAC;IAHjB,QAAQ,CAAC,IAAI,oBAAmB;gBAErB,MAAM,EAAE,cAAc,GAAG,OAAO,EAChC,KAAK,CAAC,SAAS;CAE3B;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;AA4ED,QAAA,MAAM,IAAI;4BAID,IAAI,MAAM,CAAC,gBACF,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC;;;;EAoB7C,CAAA;AAEF,MAAM,WAAW,EAAG,SAAQ,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC;CAAG;AAC1D,eAAO,MAAM,EAAE,4CAAY,CAAA;AAC3B,eAAO,MAAM,MAAM,6DAAmB,CAAA"}