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.
- package/Cache/driver.d.ts +23 -0
- package/Cache/driver.d.ts.map +1 -0
- package/Cache/driver.js +3 -0
- package/Cache/driver.js.map +1 -0
- package/Cache/memory.d.ts +4 -0
- package/Cache/memory.d.ts.map +1 -0
- package/Cache/memory.js +48 -0
- package/Cache/memory.js.map +1 -0
- package/Cache/memoryTTL.d.ts +21 -0
- package/Cache/memoryTTL.d.ts.map +1 -0
- package/Cache/memoryTTL.js +121 -0
- package/Cache/memoryTTL.js.map +1 -0
- package/Cache/prelude.d.ts +57 -0
- package/Cache/prelude.d.ts.map +1 -0
- package/Cache/prelude.js +108 -0
- package/Cache/prelude.js.map +1 -0
- package/Cache.d.ts +76 -0
- package/Cache.d.ts.map +1 -0
- package/Cache.js +62 -0
- package/Cache.js.map +1 -0
- package/DiscordConfig.d.ts +29 -0
- package/DiscordConfig.d.ts.map +1 -0
- package/DiscordConfig.js +29 -0
- package/DiscordConfig.js.map +1 -0
- package/DiscordGateway/DiscordWS.d.ts +32 -0
- package/DiscordGateway/DiscordWS.d.ts.map +1 -0
- package/DiscordGateway/DiscordWS.js +31 -0
- package/DiscordGateway/DiscordWS.js.map +1 -0
- package/DiscordGateway/Shard/heartbeats.d.ts +4 -0
- package/DiscordGateway/Shard/heartbeats.d.ts.map +1 -0
- package/DiscordGateway/Shard/heartbeats.js +17 -0
- package/DiscordGateway/Shard/heartbeats.js.map +1 -0
- package/DiscordGateway/Shard/identify.d.ts +13 -0
- package/DiscordGateway/Shard/identify.d.ts.map +1 -0
- package/DiscordGateway/Shard/identify.js +26 -0
- package/DiscordGateway/Shard/identify.js.map +1 -0
- package/DiscordGateway/Shard/invalidSession.d.ts +4 -0
- package/DiscordGateway/Shard/invalidSession.d.ts.map +1 -0
- package/DiscordGateway/Shard/invalidSession.js +6 -0
- package/DiscordGateway/Shard/invalidSession.js.map +1 -0
- package/DiscordGateway/Shard/sendEvents.d.ts +8 -0
- package/DiscordGateway/Shard/sendEvents.d.ts.map +1 -0
- package/DiscordGateway/Shard/sendEvents.js +25 -0
- package/DiscordGateway/Shard/sendEvents.js.map +1 -0
- package/DiscordGateway/Shard/utils.d.ts +4 -0
- package/DiscordGateway/Shard/utils.d.ts.map +1 -0
- package/DiscordGateway/Shard/utils.js +9 -0
- package/DiscordGateway/Shard/utils.js.map +1 -0
- package/DiscordGateway/Shard.d.ts +17 -0
- package/DiscordGateway/Shard.d.ts.map +1 -0
- package/DiscordGateway/Shard.js +85 -0
- package/DiscordGateway/Shard.js.map +1 -0
- package/DiscordGateway/ShardStore.d.ts +13 -0
- package/DiscordGateway/ShardStore.d.ts.map +1 -0
- package/DiscordGateway/ShardStore.js +22 -0
- package/DiscordGateway/ShardStore.js.map +1 -0
- package/DiscordGateway/Sharder.d.ts +16 -0
- package/DiscordGateway/Sharder.d.ts.map +1 -0
- package/DiscordGateway/Sharder.js +51 -0
- package/DiscordGateway/Sharder.js.map +1 -0
- package/DiscordGateway/WS.d.ts +32 -0
- package/DiscordGateway/WS.d.ts.map +1 -0
- package/DiscordGateway/WS.js +77 -0
- package/DiscordGateway/WS.js.map +1 -0
- package/DiscordGateway.d.ts +13 -0
- package/DiscordGateway.d.ts.map +1 -0
- package/DiscordGateway.js +29 -0
- package/DiscordGateway.js.map +1 -0
- package/DiscordREST/types.d.ts +8 -0
- package/DiscordREST/types.d.ts.map +1 -0
- package/DiscordREST/types.js +2 -0
- package/DiscordREST/types.js.map +1 -0
- package/DiscordREST/utils.d.ts +11 -0
- package/DiscordREST/utils.d.ts.map +1 -0
- package/DiscordREST/utils.js +21 -0
- package/DiscordREST/utils.js.map +1 -0
- package/DiscordREST.d.ts +18 -0
- package/DiscordREST.d.ts.map +1 -0
- package/DiscordREST.js +124 -0
- package/DiscordREST.js.map +1 -0
- package/Helpers/flags.d.ts +28 -0
- package/Helpers/flags.d.ts.map +1 -0
- package/Helpers/flags.js +36 -0
- package/Helpers/flags.js.map +1 -0
- package/Helpers/intents.d.ts +25 -0
- package/Helpers/intents.d.ts.map +1 -0
- package/Helpers/intents.js +29 -0
- package/Helpers/intents.js.map +1 -0
- package/Helpers/interactions.d.ts +97 -0
- package/Helpers/interactions.d.ts.map +1 -0
- package/Helpers/interactions.js +97 -0
- package/Helpers/interactions.js.map +1 -0
- package/Helpers/members.d.ts +10 -0
- package/Helpers/members.d.ts.map +1 -0
- package/Helpers/members.js +10 -0
- package/Helpers/members.js.map +1 -0
- package/Helpers/permissions.d.ts +41 -0
- package/Helpers/permissions.d.ts.map +1 -0
- package/Helpers/permissions.js +83 -0
- package/Helpers/permissions.js.map +1 -0
- package/Helpers/ui.d.ts +48 -0
- package/Helpers/ui.d.ts.map +1 -0
- package/Helpers/ui.js +66 -0
- package/Helpers/ui.js.map +1 -0
- package/Interactions/builder.d.ts +49 -0
- package/Interactions/builder.d.ts.map +1 -0
- package/Interactions/builder.js +68 -0
- package/Interactions/builder.js.map +1 -0
- package/Interactions/context.d.ts +59 -0
- package/Interactions/context.d.ts.map +1 -0
- package/Interactions/context.js +61 -0
- package/Interactions/context.js.map +1 -0
- package/Interactions/definitions.d.ts +127 -0
- package/Interactions/definitions.d.ts.map +1 -0
- package/Interactions/definitions.js +53 -0
- package/Interactions/definitions.js.map +1 -0
- package/Interactions/gateway.d.ts +21 -0
- package/Interactions/gateway.d.ts.map +1 -0
- package/Interactions/gateway.js +39 -0
- package/Interactions/gateway.js.map +1 -0
- package/Interactions/handlers.d.ts +11 -0
- package/Interactions/handlers.d.ts.map +1 -0
- package/Interactions/handlers.js +45 -0
- package/Interactions/handlers.js.map +1 -0
- package/Interactions/index.d.ts +11 -0
- package/Interactions/index.d.ts.map +1 -0
- package/Interactions/index.js +12 -0
- package/Interactions/index.js.map +1 -0
- package/Interactions/utils.d.ts +79 -0
- package/Interactions/utils.d.ts.map +1 -0
- package/Interactions/utils.js +74 -0
- package/Interactions/utils.js.map +1 -0
- package/Interactions/webhook.d.ts +46 -0
- package/Interactions/webhook.d.ts.map +1 -0
- package/Interactions/webhook.js +56 -0
- package/Interactions/webhook.js.map +1 -0
- package/Log.d.ts +11 -0
- package/Log.d.ts.map +1 -0
- package/Log.js +17 -0
- package/Log.js.map +1 -0
- package/RateLimit/memory.d.ts +3 -0
- package/RateLimit/memory.d.ts.map +1 -0
- package/RateLimit/memory.js +35 -0
- package/RateLimit/memory.js.map +1 -0
- package/RateLimit/utils.d.ts +3 -0
- package/RateLimit/utils.d.ts.map +1 -0
- package/RateLimit/utils.js +18 -0
- package/RateLimit/utils.js.map +1 -0
- package/RateLimit.d.ts +26 -0
- package/RateLimit.d.ts.map +1 -0
- package/RateLimit.js +25 -0
- package/RateLimit.js.map +1 -0
- package/_common.d.ts +37 -0
- package/_common.d.ts.map +1 -0
- package/_common.js +8 -0
- package/_common.js.map +1 -0
- package/gateway.d.ts +14 -0
- package/gateway.d.ts.map +1 -0
- package/gateway.js +25 -0
- package/gateway.js.map +1 -0
- package/global.d.ts +18 -0
- package/global.d.ts.map +1 -0
- package/global.js +2 -0
- package/global.js.map +1 -0
- package/index.d.ts +14 -0
- package/index.d.ts.map +1 -0
- package/index.js +14 -0
- package/index.js.map +1 -0
- package/package.json +4 -4
- package/src/DiscordREST.ts +2 -0
- package/src/package.json +4 -4
- package/types.d.ts +4450 -0
- package/types.d.ts.map +1 -0
- package/types.js +1204 -0
- package/types.js.map +1 -0
- package/utils/effect.d.ts +2 -0
- package/utils/effect.d.ts.map +1 -0
- package/utils/effect.js +2 -0
- package/utils/effect.js.map +1 -0
- package/utils/hub.d.ts +12 -0
- package/utils/hub.d.ts.map +1 -0
- package/utils/hub.js +23 -0
- package/utils/hub.js.map +1 -0
- package/utils/tsplus.d.ts +13 -0
- package/utils/tsplus.d.ts.map +1 -0
- package/utils/tsplus.js +2 -0
- package/utils/tsplus.js.map +1 -0
- package/webhooks.d.ts +10 -0
- package/webhooks.d.ts.map +1 -0
- package/webhooks.js +22 -0
- 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"}
|
package/DiscordConfig.js
ADDED
|
@@ -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"}
|