dfx 0.3.1 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/DiscordConfig/index.d.ts +40 -0
- package/dist/DiscordConfig/index.d.ts.map +1 -0
- package/dist/DiscordConfig/index.js +29 -0
- package/dist/DiscordConfig/index.js.map +1 -0
- package/dist/DiscordGateway/DiscordWS/index.d.ts +23 -0
- package/dist/DiscordGateway/DiscordWS/index.d.ts.map +1 -0
- package/dist/DiscordGateway/DiscordWS/index.js +25 -0
- package/dist/DiscordGateway/DiscordWS/index.js.map +1 -0
- package/dist/DiscordGateway/Shard/heartbeats.d.ts +3 -0
- package/dist/DiscordGateway/Shard/heartbeats.d.ts.map +1 -0
- package/dist/DiscordGateway/Shard/heartbeats.js +23 -0
- package/dist/DiscordGateway/Shard/heartbeats.js.map +1 -0
- package/dist/DiscordGateway/Shard/identify.d.ts +13 -0
- package/dist/DiscordGateway/Shard/identify.d.ts.map +1 -0
- package/dist/DiscordGateway/Shard/identify.js +30 -0
- package/dist/DiscordGateway/Shard/identify.js.map +1 -0
- package/dist/DiscordGateway/Shard/index.d.ts +9 -0
- package/dist/DiscordGateway/Shard/index.d.ts.map +1 -0
- package/dist/DiscordGateway/Shard/index.js +51 -0
- package/dist/DiscordGateway/Shard/index.js.map +1 -0
- package/dist/DiscordGateway/Shard/invalidSession.d.ts +3 -0
- package/dist/DiscordGateway/Shard/invalidSession.d.ts.map +1 -0
- package/dist/DiscordGateway/Shard/invalidSession.js +9 -0
- package/dist/DiscordGateway/Shard/invalidSession.js.map +1 -0
- package/dist/DiscordGateway/Shard/sendEvents.d.ts +8 -0
- package/dist/DiscordGateway/Shard/sendEvents.d.ts.map +1 -0
- package/dist/DiscordGateway/Shard/sendEvents.js +26 -0
- package/dist/DiscordGateway/Shard/sendEvents.js.map +1 -0
- package/dist/DiscordGateway/Shard/utils.d.ts +4 -0
- package/dist/DiscordGateway/Shard/utils.d.ts.map +1 -0
- package/dist/DiscordGateway/Shard/utils.js +9 -0
- package/dist/DiscordGateway/Shard/utils.js.map +1 -0
- package/dist/DiscordGateway/ShardStore/index.d.ts +13 -0
- package/dist/DiscordGateway/ShardStore/index.d.ts.map +1 -0
- package/dist/DiscordGateway/ShardStore/index.js +22 -0
- package/dist/DiscordGateway/ShardStore/index.js.map +1 -0
- package/dist/DiscordGateway/Sharder/index.d.ts +10 -0
- package/dist/DiscordGateway/Sharder/index.d.ts.map +1 -0
- package/dist/DiscordGateway/Sharder/index.js +60 -0
- package/dist/DiscordGateway/Sharder/index.js.map +1 -0
- package/dist/DiscordGateway/WS/index.d.ts +28 -0
- package/dist/DiscordGateway/WS/index.d.ts.map +1 -0
- package/dist/DiscordGateway/WS/index.js +82 -0
- package/dist/DiscordGateway/WS/index.js.map +1 -0
- package/dist/DiscordGateway/index.d.ts +21 -0
- package/dist/DiscordGateway/index.d.ts.map +1 -0
- package/dist/DiscordGateway/index.js +27 -0
- package/dist/DiscordGateway/index.js.map +1 -0
- package/dist/DiscordREST/index.d.ts +13 -0
- package/dist/DiscordREST/index.d.ts.map +1 -0
- package/dist/DiscordREST/index.js +85 -0
- package/dist/DiscordREST/index.js.map +1 -0
- package/dist/DiscordREST/types.d.ts +10 -0
- package/dist/DiscordREST/types.d.ts.map +1 -0
- package/dist/DiscordREST/types.js +2 -0
- package/{esm → dist}/DiscordREST/types.js.map +1 -1
- package/dist/DiscordREST/utils.d.ts +11 -0
- package/dist/DiscordREST/utils.d.ts.map +1 -0
- package/dist/DiscordREST/utils.js +22 -0
- package/dist/DiscordREST/utils.js.map +1 -0
- package/dist/Helpers/flags.d.ts +28 -0
- package/dist/Helpers/flags.d.ts.map +1 -0
- package/dist/Helpers/flags.js +36 -0
- package/dist/Helpers/flags.js.map +1 -0
- package/dist/Helpers/intents.d.ts +25 -0
- package/dist/Helpers/intents.d.ts.map +1 -0
- package/dist/Helpers/intents.js +28 -0
- package/dist/Helpers/intents.js.map +1 -0
- package/dist/Helpers/interactions.d.ts +74 -0
- package/dist/Helpers/interactions.d.ts.map +1 -0
- package/dist/Helpers/interactions.js +93 -0
- package/dist/Helpers/interactions.js.map +1 -0
- package/dist/Helpers/members.d.ts +10 -0
- package/dist/Helpers/members.d.ts.map +1 -0
- package/dist/Helpers/members.js +10 -0
- package/dist/Helpers/members.js.map +1 -0
- package/dist/Helpers/permissions.d.ts +35 -0
- package/dist/Helpers/permissions.d.ts.map +1 -0
- package/dist/Helpers/permissions.js +69 -0
- package/dist/Helpers/permissions.js.map +1 -0
- package/dist/Helpers/ui.d.ts +48 -0
- package/dist/Helpers/ui.d.ts.map +1 -0
- package/dist/Helpers/ui.js +67 -0
- package/dist/Helpers/ui.js.map +1 -0
- package/dist/Http/index.d.ts +31 -0
- package/dist/Http/index.d.ts.map +1 -0
- package/dist/Http/index.js +54 -0
- package/dist/Http/index.js.map +1 -0
- package/dist/Interactions/context.d.ts +29 -0
- package/dist/Interactions/context.d.ts.map +1 -0
- package/dist/Interactions/context.js +23 -0
- package/dist/Interactions/context.js.map +1 -0
- package/dist/Interactions/definitions.d.ts +55 -0
- package/dist/Interactions/definitions.d.ts.map +1 -0
- package/dist/Interactions/definitions.js +52 -0
- package/dist/Interactions/definitions.js.map +1 -0
- package/dist/Interactions/gateway.d.ts +6 -0
- package/dist/Interactions/gateway.d.ts.map +1 -0
- package/dist/Interactions/gateway.js +17 -0
- package/dist/Interactions/gateway.js.map +1 -0
- package/dist/Interactions/handlers.d.ts +9 -0
- package/dist/Interactions/handlers.d.ts.map +1 -0
- package/dist/Interactions/handlers.js +49 -0
- package/dist/Interactions/handlers.js.map +1 -0
- package/dist/Interactions/index.d.ts +20 -0
- package/dist/Interactions/index.d.ts.map +1 -0
- package/dist/Interactions/index.js +31 -0
- package/dist/Interactions/index.js.map +1 -0
- package/dist/Interactions/utils.d.ts +10 -0
- package/dist/Interactions/utils.d.ts.map +1 -0
- package/dist/Interactions/utils.js +20 -0
- package/dist/Interactions/utils.js.map +1 -0
- package/dist/Interactions/webhook.d.ts +18 -0
- package/dist/Interactions/webhook.d.ts.map +1 -0
- package/dist/Interactions/webhook.js +26 -0
- package/dist/Interactions/webhook.js.map +1 -0
- package/dist/Log/index.d.ts +13 -0
- package/dist/Log/index.d.ts.map +1 -0
- package/dist/Log/index.js +19 -0
- package/dist/Log/index.js.map +1 -0
- package/dist/RateLimitStore/index.d.ts +25 -0
- package/dist/RateLimitStore/index.d.ts.map +1 -0
- package/dist/RateLimitStore/index.js +24 -0
- package/dist/RateLimitStore/index.js.map +1 -0
- package/dist/RateLimitStore/memory.d.ts +3 -0
- package/dist/RateLimitStore/memory.d.ts.map +1 -0
- package/dist/RateLimitStore/memory.js +31 -0
- package/dist/RateLimitStore/memory.js.map +1 -0
- package/dist/RateLimitStore/utils.d.ts +3 -0
- package/dist/RateLimitStore/utils.d.ts.map +1 -0
- package/dist/RateLimitStore/utils.js +18 -0
- package/dist/RateLimitStore/utils.js.map +1 -0
- package/dist/common.d.ts +34 -0
- package/dist/common.d.ts.map +1 -0
- package/dist/common.js +21 -0
- package/dist/common.js.map +1 -0
- package/dist/global.d.ts +14 -0
- package/dist/global.d.ts.map +1 -0
- package/dist/global.js +2 -0
- package/dist/global.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/{types.d.ts → dist/types.d.ts} +1455 -824
- package/dist/types.d.ts.map +1 -0
- package/{esm → dist}/types.js +283 -46
- package/dist/types.js.map +1 -0
- package/dist/utils/effect.d.ts +3 -0
- package/dist/utils/effect.d.ts.map +1 -0
- package/dist/utils/effect.js +2 -0
- package/dist/utils/effect.js.map +1 -0
- package/dist/utils/tsplus.d.ts +14 -0
- package/dist/utils/tsplus.d.ts.map +1 -0
- package/dist/utils/tsplus.js +2 -0
- package/dist/utils/tsplus.js.map +1 -0
- package/package.json +34 -51
- package/src/DiscordConfig/index.ts +52 -0
- package/src/DiscordGateway/DiscordWS/index.ts +50 -0
- package/src/DiscordGateway/Shard/heartbeats.ts +39 -0
- package/src/DiscordGateway/Shard/identify.ts +61 -0
- package/src/DiscordGateway/Shard/index.ts +90 -0
- package/src/DiscordGateway/Shard/invalidSession.ts +11 -0
- package/src/DiscordGateway/Shard/sendEvents.ts +35 -0
- package/src/DiscordGateway/Shard/utils.ts +14 -0
- package/src/DiscordGateway/ShardStore/index.ts +33 -0
- package/src/DiscordGateway/Sharder/index.ts +95 -0
- package/src/DiscordGateway/WS/index.ts +99 -0
- package/src/DiscordGateway/index.ts +55 -0
- package/src/DiscordREST/index.ts +132 -0
- package/src/DiscordREST/types.ts +14 -0
- package/src/DiscordREST/utils.ts +35 -0
- package/src/Helpers/flags.ts +68 -0
- package/src/Helpers/intents.ts +32 -0
- package/src/Helpers/interactions.ts +180 -0
- package/src/Helpers/members.ts +14 -0
- package/src/Helpers/permissions.ts +102 -0
- package/src/Helpers/ui.ts +103 -0
- package/src/Http/index.ts +65 -0
- package/src/Interactions/context.ts +76 -0
- package/src/Interactions/definitions.ts +124 -0
- package/src/Interactions/gateway.ts +44 -0
- package/src/Interactions/handlers.ts +139 -0
- package/src/Interactions/index.ts +57 -0
- package/src/Interactions/utils.ts +47 -0
- package/src/Interactions/webhook.ts +59 -0
- package/src/Log/index.ts +23 -0
- package/src/RateLimitStore/index.ts +65 -0
- package/src/RateLimitStore/memory.ts +48 -0
- package/src/RateLimitStore/utils.ts +27 -0
- package/src/common.ts +35 -0
- package/src/global.ts +50 -0
- package/src/index.ts +45 -0
- package/src/json.d.ts +1 -0
- package/{types.ts → src/types.ts} +1615 -875
- package/src/utils/effect.ts +7 -0
- package/src/utils/tsplus.ts +11 -0
- package/DiscordConfig/index.d.ts +0 -29
- package/DiscordConfig/index.js +0 -31
- package/DiscordConfig/index.js.map +0 -1
- package/DiscordConfig/index.ts +0 -45
- package/DiscordGateway/index.d.ts +0 -23
- package/DiscordGateway/index.js +0 -25
- package/DiscordGateway/index.js.map +0 -1
- package/DiscordGateway/index.ts +0 -34
- package/DiscordGateway/utils.d.ts +0 -3
- package/DiscordGateway/utils.js +0 -12
- package/DiscordGateway/utils.js.map +0 -1
- package/DiscordGateway/utils.ts +0 -17
- package/DiscordREST/http.d.ts +0 -3
- package/DiscordREST/http.js +0 -20
- package/DiscordREST/http.js.map +0 -1
- package/DiscordREST/http.ts +0 -21
- package/DiscordREST/index.d.ts +0 -15
- package/DiscordREST/index.js +0 -63
- package/DiscordREST/index.js.map +0 -1
- package/DiscordREST/index.ts +0 -79
- package/DiscordREST/types.d.ts +0 -14
- package/DiscordREST/types.js +0 -6
- package/DiscordREST/types.js.map +0 -1
- package/DiscordREST/types.ts +0 -15
- package/DiscordShard/commands.d.ts +0 -7
- package/DiscordShard/commands.js +0 -38
- package/DiscordShard/commands.js.map +0 -1
- package/DiscordShard/commands.ts +0 -40
- package/DiscordShard/heartbeats.d.ts +0 -6
- package/DiscordShard/heartbeats.js +0 -29
- package/DiscordShard/heartbeats.js.map +0 -1
- package/DiscordShard/heartbeats.ts +0 -65
- package/DiscordShard/identify.d.ts +0 -15
- package/DiscordShard/identify.js +0 -35
- package/DiscordShard/identify.js.map +0 -1
- package/DiscordShard/identify.ts +0 -75
- package/DiscordShard/index.d.ts +0 -32
- package/DiscordShard/index.js +0 -65
- package/DiscordShard/index.js.map +0 -1
- package/DiscordShard/index.ts +0 -124
- package/DiscordShard/invalidSession.d.ts +0 -6
- package/DiscordShard/invalidSession.js +0 -17
- package/DiscordShard/invalidSession.js.map +0 -1
- package/DiscordShard/invalidSession.ts +0 -24
- package/DiscordShard/utils.d.ts +0 -7
- package/DiscordShard/utils.js +0 -17
- package/DiscordShard/utils.js.map +0 -1
- package/DiscordShard/utils.ts +0 -32
- package/DiscordWS/index.d.ts +0 -36
- package/DiscordWS/index.js +0 -33
- package/DiscordWS/index.js.map +0 -1
- package/DiscordWS/index.ts +0 -78
- package/Log/index.d.ts +0 -15
- package/Log/index.js +0 -28
- package/Log/index.js.map +0 -1
- package/Log/index.ts +0 -30
- package/Utils/memoize.d.ts +0 -3
- package/Utils/memoize.js +0 -16
- package/Utils/memoize.js.map +0 -1
- package/Utils/memoize.ts +0 -15
- package/WS/index.d.ts +0 -30
- package/WS/index.js +0 -70
- package/WS/index.js.map +0 -1
- package/WS/index.ts +0 -106
- package/bot.d.ts +0 -1
- package/bot.js +0 -28
- package/bot.js.map +0 -1
- package/bot.ts +0 -48
- package/esm/DiscordConfig/index.js +0 -26
- package/esm/DiscordConfig/index.js.map +0 -1
- package/esm/DiscordGateway/index.js +0 -20
- package/esm/DiscordGateway/index.js.map +0 -1
- package/esm/DiscordGateway/utils.js +0 -7
- package/esm/DiscordGateway/utils.js.map +0 -1
- package/esm/DiscordREST/http.js +0 -15
- package/esm/DiscordREST/http.js.map +0 -1
- package/esm/DiscordREST/index.js +0 -59
- package/esm/DiscordREST/index.js.map +0 -1
- package/esm/DiscordREST/types.js +0 -3
- package/esm/DiscordShard/commands.js +0 -28
- package/esm/DiscordShard/commands.js.map +0 -1
- package/esm/DiscordShard/heartbeats.js +0 -24
- package/esm/DiscordShard/heartbeats.js.map +0 -1
- package/esm/DiscordShard/identify.js +0 -30
- package/esm/DiscordShard/identify.js.map +0 -1
- package/esm/DiscordShard/index.js +0 -60
- package/esm/DiscordShard/index.js.map +0 -1
- package/esm/DiscordShard/invalidSession.js +0 -12
- package/esm/DiscordShard/invalidSession.js.map +0 -1
- package/esm/DiscordShard/utils.js +0 -11
- package/esm/DiscordShard/utils.js.map +0 -1
- package/esm/DiscordWS/index.js +0 -28
- package/esm/DiscordWS/index.js.map +0 -1
- package/esm/Log/index.js +0 -22
- package/esm/Log/index.js.map +0 -1
- package/esm/Utils/memoize.js +0 -12
- package/esm/Utils/memoize.js.map +0 -1
- package/esm/WS/index.js +0 -65
- package/esm/WS/index.js.map +0 -1
- package/esm/bot.js +0 -25
- package/esm/bot.js.map +0 -1
- package/esm/mod.js +0 -16
- package/esm/mod.js.map +0 -1
- package/esm/types.js.map +0 -1
- package/mod.d.ts +0 -7
- package/mod.js +0 -25
- package/mod.js.map +0 -1
- package/mod.ts +0 -19
- package/types.js +0 -1564
- package/types.js.map +0 -1
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Duration, Discord } from "dfx/common";
|
|
2
|
+
export interface DiscordConfig {
|
|
3
|
+
token: string;
|
|
4
|
+
rest: {
|
|
5
|
+
baseUrl: string;
|
|
6
|
+
globalRateLimit: {
|
|
7
|
+
limit: number;
|
|
8
|
+
window: Duration;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
gateway: {
|
|
12
|
+
intents: number;
|
|
13
|
+
presence?: Discord.UpdatePresence;
|
|
14
|
+
shardCount?: number;
|
|
15
|
+
identifyRateLimit: readonly [window: number, limit: number];
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export declare const DiscordConfig: import("../common.js").Tag<DiscordConfig>;
|
|
19
|
+
export interface MakeOpts {
|
|
20
|
+
token: string;
|
|
21
|
+
rest?: Partial<DiscordConfig["rest"]>;
|
|
22
|
+
gateway?: Partial<DiscordConfig["gateway"]>;
|
|
23
|
+
}
|
|
24
|
+
export declare const make: ({ token, rest, gateway }: MakeOpts) => DiscordConfig;
|
|
25
|
+
export declare const makeLayer: (a_0: MakeOpts) => import("../common.js").Layer<never, never, DiscordConfig>;
|
|
26
|
+
export declare const token: import("../common.js").Effect<DiscordConfig, never, string>;
|
|
27
|
+
export declare const rest: import("../common.js").Effect<DiscordConfig, never, {
|
|
28
|
+
baseUrl: string;
|
|
29
|
+
globalRateLimit: {
|
|
30
|
+
limit: number;
|
|
31
|
+
window: Duration;
|
|
32
|
+
};
|
|
33
|
+
}>;
|
|
34
|
+
export declare const gateway: import("../common.js").Effect<DiscordConfig, never, {
|
|
35
|
+
intents: number;
|
|
36
|
+
presence?: import("../types.js").UpdatePresence | undefined;
|
|
37
|
+
shardCount?: number | undefined;
|
|
38
|
+
identifyRateLimit: readonly [window: number, limit: number];
|
|
39
|
+
}>;
|
|
40
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/DiscordConfig/index.ts"],"names":[],"mappings":";AAEA,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAA;QACf,eAAe,EAAE;YACf,KAAK,EAAE,MAAM,CAAA;YACb,MAAM,EAAE,QAAQ,CAAA;SACjB,CAAA;KACF,CAAA;IACD,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAA;QACf,QAAQ,CAAC,EAAE,OAAO,CAAC,cAAc,CAAA;QACjC,UAAU,CAAC,EAAE,MAAM,CAAA;QAEnB,iBAAiB,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;KAC5D,CAAA;CACF;AACD,eAAO,MAAM,aAAa,2CAAuB,CAAA;AAEjD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAA;CAC5C;AAED,eAAO,MAAM,IAAI,6BAA8B,QAAQ,KAAG,aAgBxD,CAAA;AAEF,eAAO,MAAM,SAAS,8EAA2C,CAAA;AAEjE,eAAO,MAAM,KAAK,6DAA0D,CAAA;AAC5E,eAAO,MAAM,IAAI;aA3CJ,MAAM;qBACE;QACf,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,QAAQ,CAAA;KACjB;EAuCoE,CAAA;AACzE,eAAO,MAAM,OAAO;aArCP,MAAM;;;uBAII,SAAS,CAAC,QAAQ,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;EAmC9D,CAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as tsplus_module_1 from "dfx/common";
|
|
2
|
+
import * as tsplus_module_2 from "@fp-ts/data/Duration";
|
|
3
|
+
import * as tsplus_module_3 from "@effect/io/Layer";
|
|
4
|
+
import * as tsplus_module_4 from "@fp-ts/data/Function";
|
|
5
|
+
import * as tsplus_module_5 from "@effect/io/Effect";
|
|
6
|
+
const VERSION = 9;
|
|
7
|
+
export const DiscordConfig = tsplus_module_1.Tag();
|
|
8
|
+
export const make = ({ token, rest, gateway }) => ({
|
|
9
|
+
token,
|
|
10
|
+
rest: {
|
|
11
|
+
baseUrl: `https://discord.com/api/v${VERSION}`,
|
|
12
|
+
...(rest ?? {}),
|
|
13
|
+
globalRateLimit: {
|
|
14
|
+
limit: 50,
|
|
15
|
+
window: tsplus_module_2.seconds(1),
|
|
16
|
+
...(rest?.globalRateLimit ?? {}),
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
gateway: {
|
|
20
|
+
intents: tsplus_module_1.Discord.GatewayIntents.GUILDS,
|
|
21
|
+
identifyRateLimit: [5000, 1],
|
|
22
|
+
...(gateway ?? {}),
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
export const makeLayer = tsplus_module_4.flow(make, tsplus_module_3.succeed(DiscordConfig));
|
|
26
|
+
export const token = tsplus_module_5.serviceWith(DiscordConfig)(({ token }) => token);
|
|
27
|
+
export const rest = tsplus_module_5.serviceWith(DiscordConfig)(({ rest }) => rest);
|
|
28
|
+
export const gateway = tsplus_module_5.serviceWith(DiscordConfig)(({ gateway }) => gateway);
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/DiscordConfig/index.ts"],"names":[],"mappings":";;;;;AAAA,MAAM,OAAO,GAAG,CAAC,CAAA;AAmBjB,MAAM,CAAC,MAAM,aAAa,GAAG,gBAAA,GAAG,EAAiB,CAAA;AAQjD,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAY,EAAiB,EAAE,CAAC,CAAC;IAC1E,KAAK;IACL,IAAI,EAAE;QACJ,OAAO,EAAE,4BAA4B,OAAO,EAAE;QAC9C,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QACf,eAAe,EAAE;YACf,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,wBAAiB,CAAC,CAAC;YAC3B,GAAG,CAAC,IAAI,EAAE,eAAe,IAAI,EAAE,CAAC;SACjC;KACF;IACD,OAAO,EAAE;QACP,OAAO,EAAE,gBAAA,OAAO,CAAC,cAAc,CAAC,MAAM;QACtC,iBAAiB,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5B,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;KACnB;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,gBAAA,IAAI,CAAC,IAAI,EAAE,wBAAc,aAAa,CAAC,CAAC,CAAA;AAEjE,MAAM,CAAC,MAAM,KAAK,GAAG,4BAAmB,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAA;AAC5E,MAAM,CAAC,MAAM,IAAI,GAAG,4BAAmB,aAAa,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAA;AACzE,MAAM,CAAC,MAAM,OAAO,GAAG,4BAAmB,aAAa,CAAC,CACtD,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CACzB,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
/// <reference types="ws" />
|
|
3
|
+
import { Discord, WS, EffectSource } from "dfx/common";
|
|
4
|
+
import WebSocket from "isomorphic-ws";
|
|
5
|
+
export type Message = Discord.GatewayPayload | WS.Reconnect;
|
|
6
|
+
export interface OpenOpts {
|
|
7
|
+
url?: string;
|
|
8
|
+
version?: number;
|
|
9
|
+
encoding?: DiscordWSCodec;
|
|
10
|
+
}
|
|
11
|
+
export interface DiscordWSCodec {
|
|
12
|
+
type: "json" | "etf";
|
|
13
|
+
encode: (p: Discord.GatewayPayload) => string | Buffer | ArrayBuffer;
|
|
14
|
+
decode: (p: WebSocket.RawData) => Discord.GatewayPayload;
|
|
15
|
+
}
|
|
16
|
+
export declare const DiscordWSCodec: import("../../common.js").Tag<DiscordWSCodec>;
|
|
17
|
+
export declare const LiveJsonDiscordWSCodec: import("../../common.js").Layer<never, never, DiscordWSCodec>;
|
|
18
|
+
export declare const make: ({ url, version, }?: OpenOpts) => import("../../common.js").Effect<import("../../Log/index.js").Log | DiscordWSCodec, never, {
|
|
19
|
+
source: import("callbag-effect-ts/Source").EffectSource<never, never, import("../../types.js").GatewayPayload<any>>;
|
|
20
|
+
sink: import("callbag-effect-ts/Sink").EffectSink<never, never, never, Message>;
|
|
21
|
+
setUrl: (url: string) => import("../../common.js").Effect<never, never, void>;
|
|
22
|
+
}>;
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/DiscordGateway/DiscordWS/index.ts"],"names":[],"mappings":";;;AAAA,OAAO,SAAS,MAAM,eAAe,CAAA;AAErC,MAAM,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,GAAG,EAAE,CAAC,SAAS,CAAA;AAE3D,MAAM,WAAW,QAAQ;IACvB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,cAAc,CAAA;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,GAAG,KAAK,CAAA;IACpB,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,cAAc,KAAK,MAAM,GAAG,MAAM,GAAG,WAAW,CAAA;IACpE,MAAM,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,OAAO,KAAK,OAAO,CAAC,cAAc,CAAA;CACzD;AACD,eAAO,MAAM,cAAc,+CAAwB,CAAA;AACnD,eAAO,MAAM,sBAAsB,+DAIjC,CAAA;AAEF,eAAO,MAAM,IAAI,uBAGd,QAAQ;;;kBAIc,MAAM;EAoB3B,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as tsplus_module_1 from "dfx/common";
|
|
2
|
+
import * as tsplus_module_2 from "@effect/io/Layer";
|
|
3
|
+
import * as tsplus_module_3 from "callbag-effect-ts/Sink/map";
|
|
4
|
+
import * as tsplus_module_4 from "@fp-ts/data/Duration";
|
|
5
|
+
import * as tsplus_module_5 from "@effect/io/Schedule";
|
|
6
|
+
import * as tsplus_module_6 from "callbag-effect-ts/Source/tapError";
|
|
7
|
+
import * as tsplus_module_7 from "callbag-effect-ts/Source/retry";
|
|
8
|
+
import * as tsplus_module_8 from "callbag-effect-ts/Source/map";
|
|
9
|
+
import * as tsplus_module_9 from "@effect/io/Effect";
|
|
10
|
+
import * as tsplus_module_10 from "@effect/io/Ref";
|
|
11
|
+
export const DiscordWSCodec = tsplus_module_1.Tag();
|
|
12
|
+
export const LiveJsonDiscordWSCodec = tsplus_module_2.succeed(DiscordWSCodec)({
|
|
13
|
+
type: "json",
|
|
14
|
+
encode: (p) => JSON.stringify(p),
|
|
15
|
+
decode: (p) => JSON.parse(p.toString("utf8")),
|
|
16
|
+
});
|
|
17
|
+
export const make = ({ url = "wss://gateway.discord.gg/", version = 10, } = {}) => tsplus_module_9.flatMap(encoding => tsplus_module_9.flatMap(urlRef => {
|
|
18
|
+
const setUrl = (url) => tsplus_module_10.set(`${url}?v=${version}&encoding=${encoding.type}`)(urlRef);
|
|
19
|
+
return tsplus_module_9.flatMap(ws => tsplus_module_9.map(log => {
|
|
20
|
+
const source = tsplus_module_8.map(encoding.decode)(tsplus_module_7.retry(tsplus_module_5.exponential(tsplus_module_4.seconds(0.5)))(tsplus_module_6.tapError((e) => log.info("DiscordWS", "ERROR", e))(ws.source)));
|
|
21
|
+
const sink = tsplus_module_3.map((msg) => msg === tsplus_module_1.WS.Reconnect ? msg : encoding.encode(msg))(ws.sink);
|
|
22
|
+
return { source, sink, setUrl };
|
|
23
|
+
})(tsplus_module_9.service(tsplus_module_1.Log.Log)))(tsplus_module_1.WS.make(urlRef, { perMessageDeflate: false }));
|
|
24
|
+
})(tsplus_module_10.make(`${url}?v=${version}&encoding=${encoding.type}`)))(tsplus_module_9.service(DiscordWSCodec));
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/DiscordGateway/DiscordWS/index.ts"],"names":[],"mappings":";;;;;;;;;;AAeA,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAA,GAAG,EAAkB,CAAA;AACnD,MAAM,CAAC,MAAM,sBAAsB,GAAG,wBAAc,cAAc,CAAC,CAAC;IAClE,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAChC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;CAC9C,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,EACnB,GAAG,GAAG,2BAA2B,EACjC,OAAO,GAAG,EAAE,MACA,EAAE,EAAE,EAAE,yBAEV,QAAQ,4BACR,MAAM;IACZ,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE,CAC7B,qBAAW,GAAG,GAAG,MAAM,OAAO,aAAa,QAAQ,CAAC,IAAI,EAAE,EAA1D,MAAM,CAAqD,CAAA;mCAEvD,EAAE,wBAEF,GAAG;QACT,MAAM,MAAM,GAAG,oBAGR,QAAQ,CAAC,MAAM,EAHP,sBAEN,4BAAqB,wBAAiB,GAAG,CAAC,CAAC,EAFrC,yBACH,CAAC,CAAM,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,EAD1C,EAAE,CAAC,MAAM,CACkC,CACL,CAKpD,CAAA;QAED,MAAM,IAAI,GAAG,oBAAY,CAAC,GAAY,EAAE,EAAE,CACxC,GAAG,KAAK,gBAAA,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EADtC,EAAE,CAAC,IAAI,CAEnB,CAAA;QAED,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;OAdjB,wBAAe,gBAAA,GAAG,CAAC,GAAG,CAAC,GAFxB,gBAAA,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC;GAJzC,sBAAS,GAAG,GAAG,MAAM,OAAO,aAAa,QAAQ,CAAC,IAAI,EAAE,CAAC,GADvD,wBAAe,cAAc,CAAC,CAsBjD,CAAA"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { Ref, Maybe, Effect, DWS, EffectSource, Discord } from "dfx/common";
|
|
2
|
+
export declare const fromRaw: <R, E>(source: import("callbag-effect-ts/Source").EffectSource<R, E, import("../../types.js").GatewayPayload<any>>, seqRef: Ref<Maybe<number>>) => import("callbag-effect-ts/Source").EffectSource<R, E, import("../DiscordWS/index.js").Message>;
|
|
3
|
+
//# sourceMappingURL=heartbeats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heartbeats.d.ts","sourceRoot":"","sources":["../../../src/DiscordGateway/Shard/heartbeats.ts"],"names":[],"mappings":";AAeA,eAAO,MAAM,OAAO,8HAEV,IAAI,MAAM,MAAM,CAAC,CAAC,mGAqBjB,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import * as tsplus_module_1 from "@effect/io/Ref";
|
|
2
|
+
import * as tsplus_module_2 from "@fp-ts/data/Option";
|
|
3
|
+
import * as tsplus_module_3 from "@effect/io/Effect";
|
|
4
|
+
import * as tsplus_module_4 from "dfx/common";
|
|
5
|
+
import * as tsplus_module_5 from "@effect/io/Schedule";
|
|
6
|
+
import * as tsplus_module_6 from "callbag-effect-ts/Source/fromSchedule";
|
|
7
|
+
import * as tsplus_module_7 from "callbag-effect-ts/Source/tap";
|
|
8
|
+
import * as tsplus_module_8 from "callbag-effect-ts/Source/switchMap";
|
|
9
|
+
import * as tsplus_module_9 from "callbag-effect-ts/Source/mapEffect";
|
|
10
|
+
import * as tsplus_module_10 from "callbag-effect-ts/Source/drain";
|
|
11
|
+
import * as tsplus_module_11 from "callbag-effect-ts/Source/merge";
|
|
12
|
+
import * as tsplus_module_12 from "callbag-effect-ts/Source/unwrap";
|
|
13
|
+
import { millis } from "@fp-ts/data/Duration";
|
|
14
|
+
import * as SendEvents from "./sendEvents.js";
|
|
15
|
+
import * as Utils from "./utils.js";
|
|
16
|
+
const send = (ref, seqRef) => tsplus_module_3.tap(() => tsplus_module_1.set(false)(ref))(tsplus_module_3.map((a) => SendEvents.heartbeat(tsplus_module_2.getOrNull(a)))(tsplus_module_1.get(seqRef)));
|
|
17
|
+
const maybeSend = (ref, seqRef) => tsplus_module_3.flatMap((acked) => acked ? send(ref, seqRef) : tsplus_module_3.succeed(tsplus_module_4.WS.Reconnect))(tsplus_module_1.get(ref));
|
|
18
|
+
export const fromRaw = (source, seqRef) => tsplus_module_12.unwrap(tsplus_module_3.map((ackedRef) => {
|
|
19
|
+
const heartbeats = tsplus_module_9.mapEffect(() => maybeSend(ackedRef, seqRef))(tsplus_module_8.switchMap((p) => tsplus_module_6.fromSchedule(tsplus_module_5.andThen(tsplus_module_5.spaced(millis(p.d.heartbeat_interval)))(tsplus_module_5.duration(millis(p.d.heartbeat_interval * Math.random())))))(tsplus_module_7.tap(() => tsplus_module_1.set(true)(ackedRef))(Utils.opCode(source)(tsplus_module_4.Discord.GatewayOpcode.HELLO))));
|
|
20
|
+
const acks = tsplus_module_10.drain(tsplus_module_7.tap(() => tsplus_module_1.set(true)(ackedRef))(Utils.opCode(source)(tsplus_module_4.Discord.GatewayOpcode.HEARTBEAT_ACK)));
|
|
21
|
+
return tsplus_module_11.merge(acks)(heartbeats);
|
|
22
|
+
})(tsplus_module_1.make(true)));
|
|
23
|
+
//# sourceMappingURL=heartbeats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heartbeats.js","sourceRoot":"","sources":["../../../src/DiscordGateway/Shard/heartbeats.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC,MAAM,IAAI,GAAG,CAAC,GAAiB,EAAE,MAA0B,EAAE,EAAE,CAC7D,oBAEO,GAAG,EAAE,CAAC,oBAAQ,KAAK,EAAb,GAAG,CAAW,EAF3B,oBACO,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,2BAAC,CAAC,EAAW,sBAD/C,MAAM,EAC0C,CACpB,CAAA;AAE9B,MAAM,SAAS,GAAG,CAAC,GAAiB,EAAE,MAA0B,EAAE,EAAE,CAClE,wBACE,CAAC,KAAK,EAAqC,EAAE,CAC3C,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,wBAAe,gBAAA,EAAE,CAAC,SAAS,CAAC,sBAF5D,GAAG,EAGF,CAAA;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,MAAkD,EAClD,MAA0B,EAC1B,EAAE,yBACF,oBAAmB,CAAC,QAAQ,EAAE,EAAE;IAC9B,MAAM,UAAU,GAAG,0BAWN,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,EAX3B,0BAIN,CAAC,CAAC,EAAE,EAAE,CACf,6BACE,wBAEU,uBAAgB,MAAM,CAAC,CAAC,CAAC,CAAE,CAAC,kBAAkB,CAAC,CAAC,EAF1D,yBACE,MAAM,CAAC,CAAC,CAAC,CAAE,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAChD,CAA0D,CAC5D,EATc,oBAGZ,GAAG,EAAE,CAAC,oBAAa,IAAI,EAAjB,QAAQ,CAAU,EAHZ,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CACrC,gBAAA,OAAO,CAAC,aAAa,CAAC,KAAK,CAC5B,CAC+B,CAO7B,CAC4C,CAAA;IAE/C,MAAM,IAAI,0BAAG,oBACX,GAAG,EAAE,CAAC,oBAAa,IAAI,EAAjB,QAAQ,CAAU,EADb,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,gBAAA,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,CAErE,CAAM,CAAA;IAEP,OAAO,uBAAiB,IAAI,EAArB,UAAU,CAAY,CAAA;AAC/B,CAAC,EAnBD,qBAAS,IAAI,CAAC,CAmBZ,CAAO,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Discord, Ref, Maybe, EffectSource } from "dfx/common";
|
|
2
|
+
export interface Options {
|
|
3
|
+
token: string;
|
|
4
|
+
intents: number;
|
|
5
|
+
shard: [number, number];
|
|
6
|
+
presence?: Discord.UpdatePresence;
|
|
7
|
+
}
|
|
8
|
+
export interface Requirements {
|
|
9
|
+
latestReady: Ref<Maybe<Discord.ReadyEvent>>;
|
|
10
|
+
latestSequence: Ref<Maybe<number>>;
|
|
11
|
+
}
|
|
12
|
+
export declare const fromRaw: <R, E>(source: import("callbag-effect-ts/Source").EffectSource<R, E, import("../../types.js").GatewayPayload<any>>, { latestReady, latestSequence, ...opts }: Options & Requirements) => import("callbag-effect-ts/Source").EffectSource<R, E, import("../../types.js").GatewayPayload<any>>;
|
|
13
|
+
//# sourceMappingURL=identify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identify.d.ts","sourceRoot":"","sources":["../../../src/DiscordGateway/Shard/identify.ts"],"names":[],"mappings":";AAIA,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC,cAAc,CAAA;CAClC;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAA;IAC3C,cAAc,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;CACnC;AAwCD,eAAO,MAAM,OAAO,gKAEwB,OAAO,GAAG,YAAY,wGAI/D,CAAA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as tsplus_module_1 from "@fp-ts/data/Option";
|
|
2
|
+
import * as tsplus_module_2 from "@effect/io/Ref";
|
|
3
|
+
import * as tsplus_module_3 from "@effect/io/Effect";
|
|
4
|
+
import * as tsplus_module_4 from "dfx/common";
|
|
5
|
+
import * as tsplus_module_5 from "callbag-effect-ts/Source/mapEffect";
|
|
6
|
+
import * as SendEvents from "./sendEvents.js";
|
|
7
|
+
import * as OS from "os";
|
|
8
|
+
import { opCode } from "./utils.js";
|
|
9
|
+
const identify = ({ token, intents, shard, presence }) => SendEvents.identify({
|
|
10
|
+
token,
|
|
11
|
+
intents,
|
|
12
|
+
properties: {
|
|
13
|
+
os: OS.platform(),
|
|
14
|
+
browser: "dfx",
|
|
15
|
+
device: "dfx",
|
|
16
|
+
},
|
|
17
|
+
shard,
|
|
18
|
+
presence,
|
|
19
|
+
});
|
|
20
|
+
const resume = (token, ready, seq) => SendEvents.resume({
|
|
21
|
+
token,
|
|
22
|
+
session_id: ready.session_id,
|
|
23
|
+
seq,
|
|
24
|
+
});
|
|
25
|
+
const identifyOrResume = (opts, ready, seq) => tsplus_module_3.flatMap(readyEvent => tsplus_module_3.map(seqNumber => tsplus_module_1.match(() => identify(opts), ({ readyEvent, seqNumber }) => resume(opts.token, readyEvent, seqNumber))(tsplus_module_1.struct({
|
|
26
|
+
readyEvent,
|
|
27
|
+
seqNumber,
|
|
28
|
+
})))(tsplus_module_2.get(seq)))(tsplus_module_2.get(ready));
|
|
29
|
+
export const fromRaw = (source, { latestReady, latestSequence, ...opts }) => tsplus_module_5.mapEffect(() => identifyOrResume(opts, latestReady, latestSequence))(opCode(source)(tsplus_module_4.Discord.GatewayOpcode.HELLO));
|
|
30
|
+
//# sourceMappingURL=identify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identify.js","sourceRoot":"","sources":["../../../src/DiscordGateway/Shard/identify.ts"],"names":[],"mappings":";;;;;AAAA,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAcnC,MAAM,QAAQ,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAW,EAAE,EAAE,CAChE,UAAU,CAAC,QAAQ,CAAC;IAClB,KAAK;IACL,OAAO;IACP,UAAU,EAAE;QACV,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE;QACjB,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,KAAK;KACd;IACD,KAAK;IACL,QAAQ;CACT,CAAC,CAAA;AAEJ,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,KAAyB,EAAE,GAAW,EAAE,EAAE,CACvE,UAAU,CAAC,MAAM,CAAC;IAChB,KAAK;IACL,UAAU,EAAE,KAAK,CAAC,UAAU;IAC5B,GAAG;CACJ,CAAC,CAAA;AAEJ,MAAM,gBAAgB,GAAG,CACvB,IAAa,EACb,KAAqC,EACrC,GAAuB,EACvB,EAAE,yBAEM,UAAU,wBACV,SAAS,IAER,sBAIL,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EACpB,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,EALnE,uBAAa;IAClB,UAAU;IACV,SAAS;CACV,CAAC,CAGD,sBARmB,GAAG,wBADF,KAAK,EAU1B,CAAA;AAEJ,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,MAAkD,EAClD,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,IAAI,EAA0B,EAChE,EAAE,CACF,0BACE,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,cAAc,CAAC,EAD3D,MAAM,CAAC,MAAM,CAAC,CAAqB,gBAAA,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAE9D,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { DWS, Discord } from "dfx/common";
|
|
2
|
+
export declare const make: (shard: [id: number, count: number]) => import("../../common.js").Effect<import("../../DiscordConfig/index.js").DiscordConfig | import("../../Log/index.js").Log | import("../../RateLimitStore/index.js").RateLimiter | import("../DiscordWS/index.js").DiscordWSCodec, never, {
|
|
3
|
+
run: import("../../common.js").Effect<never, never, readonly [readonly [readonly [readonly [void, void], void], void], void]>;
|
|
4
|
+
raw: import("callbag-effect-ts/Source").EffectSource<never, never, import("../../types.js").GatewayPayload<any>>;
|
|
5
|
+
dispatch: import("callbag-effect-ts/Source").EffectSource<never, never, import("../../types.js").GatewayPayload<import("../../types.js").ReceiveEvent>>;
|
|
6
|
+
send: (p: Discord.GatewayPayload) => void;
|
|
7
|
+
reconnect: () => void;
|
|
8
|
+
}>;
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/DiscordGateway/Shard/index.ts"],"names":[],"mappings":";AAKA,eAAO,MAAM,IAAI,UAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;;;;cAiFvC,QAAQ,cAAc;;EAGlC,CAAA"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import * as tsplus_module_1 from "@effect/io/Effect";
|
|
2
|
+
import * as tsplus_module_2 from "dfx/common";
|
|
3
|
+
import * as tsplus_module_3 from "callbag-effect-ts/Source/forEach";
|
|
4
|
+
import * as tsplus_module_4 from "callbag-effect-ts/Source/filter";
|
|
5
|
+
import * as tsplus_module_5 from "callbag-effect-ts/Source/tap";
|
|
6
|
+
import * as tsplus_module_6 from "callbag-effect-ts/Source/run";
|
|
7
|
+
import * as tsplus_module_7 from "@fp-ts/data/Option";
|
|
8
|
+
import * as tsplus_module_8 from "callbag-effect-ts/Source/share";
|
|
9
|
+
import * as tsplus_module_9 from "@fp-ts/data/Duration";
|
|
10
|
+
import * as tsplus_module_10 from "callbag-effect-ts/Source/async";
|
|
11
|
+
import * as Heartbeats from "./heartbeats.js";
|
|
12
|
+
import * as Identify from "./identify.js";
|
|
13
|
+
import * as InvalidSession from "./invalidSession.js";
|
|
14
|
+
import * as Utils from "./utils.js";
|
|
15
|
+
export const make = (shard) => tsplus_module_1.flatMap(({ token, gateway }) => tsplus_module_1.flatMap(socket => {
|
|
16
|
+
const [emit, outgoing] = tsplus_module_10.asyncEmitter();
|
|
17
|
+
return tsplus_module_1.flatMap(limiter => {
|
|
18
|
+
const sendEffect = tsplus_module_6.run(tsplus_module_5.tap(() => limiter.maybeWait("shard.send", tsplus_module_9.minutes(1), 120))(outgoing), socket.sink);
|
|
19
|
+
return tsplus_module_1.flatMap(raw => {
|
|
20
|
+
const sendMessage = (a) => tsplus_module_1.sync(() => {
|
|
21
|
+
emit.data(a);
|
|
22
|
+
});
|
|
23
|
+
return tsplus_module_1.flatMap(([latestReady, updateLatestReady]) => tsplus_module_1.map(([latestSequence, updateLatestSequence]) => {
|
|
24
|
+
const maybeUpdateUrl = (p) => tsplus_module_7.match(() => tsplus_module_1.unit(), (a) => socket.setUrl(a.resume_gateway_url))(tsplus_module_7.map((p) => p.d)(tsplus_module_7.filter((p) => p.op === tsplus_module_2.Discord.GatewayOpcode.DISPATCH && p.t === "READY")(tsplus_module_7.some(p))));
|
|
25
|
+
const updateRefs = tsplus_module_6.runDrain(tsplus_module_5.tap(maybeUpdateUrl)(tsplus_module_5.tap(updateLatestSequence)(tsplus_module_5.tap(updateLatestReady)(raw))));
|
|
26
|
+
// heartbeats
|
|
27
|
+
const heartbeatEffects = tsplus_module_3.forEach(sendMessage)(Heartbeats.fromRaw(raw, latestSequence));
|
|
28
|
+
const dispatch = tsplus_module_4.filter((p) => p.op === tsplus_module_2.Discord.GatewayOpcode.DISPATCH)(raw);
|
|
29
|
+
// identify
|
|
30
|
+
const identifyEffects = tsplus_module_3.forEach(sendMessage)(Identify.fromRaw(raw, {
|
|
31
|
+
token,
|
|
32
|
+
shard,
|
|
33
|
+
intents: gateway.intents,
|
|
34
|
+
presence: gateway.presence,
|
|
35
|
+
latestSequence,
|
|
36
|
+
latestReady,
|
|
37
|
+
}));
|
|
38
|
+
// invalid session
|
|
39
|
+
const invalidEffects = tsplus_module_3.forEach(sendMessage)(InvalidSession.fromRaw(raw, latestReady));
|
|
40
|
+
return {
|
|
41
|
+
run: tsplus_module_1.zipPar(sendEffect)(tsplus_module_1.zipPar(invalidEffects)(tsplus_module_1.zipPar(identifyEffects)(tsplus_module_1.zipPar(heartbeatEffects)(updateRefs)))),
|
|
42
|
+
raw,
|
|
43
|
+
dispatch,
|
|
44
|
+
send: (p) => emit.data(p),
|
|
45
|
+
reconnect: () => emit.data(tsplus_module_2.WS.Reconnect),
|
|
46
|
+
};
|
|
47
|
+
})(Utils.latest((p) => tsplus_module_7.fromNullable(p.s))))(Utils.latest((p) => tsplus_module_7.map((p) => p.d)(tsplus_module_7.filter((p) => p.op === tsplus_module_2.Discord.GatewayOpcode.DISPATCH && p.t === "READY")(tsplus_module_7.some(p)))));
|
|
48
|
+
})(tsplus_module_8.share(socket.source));
|
|
49
|
+
})(tsplus_module_1.service(tsplus_module_2.RateLimitStore.RateLimiter));
|
|
50
|
+
})(tsplus_module_2.DWS.make()))(tsplus_module_1.service(tsplus_module_2.Config.DiscordConfig));
|
|
51
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/DiscordGateway/Shard/index.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,KAAkC,EAAE,EAAE,0BAEjD,EAAE,KAAK,EAAE,OAAO,EAAE,6BAElB,MAAM;IAEZ,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,+BAA+C,CAAA;mCAClE,OAAO;QACb,MAAM,UAAU,GAAG,oBAAA,oBACZ,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,YAAY,EAAE,wBAAiB,CAAC,CAAC,EAAE,GAAG,CAAC,EADnD,QAAQ,CAC4C,EAChE,MAAM,CAAC,IAAI,CAAC,CAAA;uCAEb,GAAG;YACT,MAAM,WAAW,GAAG,CAAC,CAAc,EAAE,EAAE,CACrC,qBAAY,GAAG,EAAE;gBACf,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACd,CAAC,CAAC,CAAA;4CAEE,CAAC,WAAW,EAAE,iBAAiB,CAAC,0BAUhC,CAAC,cAAc,EAAE,oBAAoB,CAAC;gBAG5C,MAAM,cAAc,GAAG,CAAC,CAAyB,EAAE,EAAE,CACnD,sBAOI,GAAG,EAAE,CAAC,sBAAa,EACnB,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,EAR9C,oBAKO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAE,EALlB,uBAEI,CAAC,CAAC,EAAmD,EAAE,CACrD,CAAC,CAAC,EAAE,KAAK,gBAAA,OAAO,CAAC,aAAa,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAHhE,qBAAW,CAAC,CAAC,CAIV,CACgB,CAIhB,CAAA;gBAEL,MAAM,UAAU,4BAAG,oBAGZ,cAAc,EAHF,oBAEZ,oBAAoB,EAFR,oBACZ,iBAAiB,EADL,GAAG,CACG,CACG,CACN,CAAS,CAAA;gBAE/B,aAAa;gBACb,MAAM,gBAAgB,GAAG,wBACvB,WAAW,EADY,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,CAE/D,CAAA;gBAED,MAAM,QAAQ,GAAG,uBACf,CAAC,CAAC,EAAqD,EAAE,CACvD,CAAC,CAAC,EAAE,KAAK,gBAAA,OAAO,CAAC,aAAa,CAAC,QAAQ,EAF1B,GAAG,CAGnB,CAAA;gBAED,WAAW;gBACX,MAAM,eAAe,GAAG,wBAOb,WAAW,EAPE,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE;oBAC5C,KAAK;oBACL,KAAK;oBACL,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,cAAc;oBACd,WAAW;iBACZ,CAAC,CAAqB,CAAA;gBAEvB,kBAAkB;gBAClB,MAAM,cAAc,GAAG,wBACrB,WAAW,EADU,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,CAE9D,CAAA;gBAED,OAAO;oBACL,GAAG,EAAE,uBAIK,UAAU,EAJf,uBAGK,cAAc,EAHnB,uBAEK,eAAe,EAFpB,uBACK,gBAAgB,EADrB,UAAU,CACY,CACD,CACD,CACJ;oBACrB,GAAG;oBACH,QAAQ;oBACR,IAAI,EAAE,CAAC,CAAyB,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;oBACjD,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAA,EAAE,CAAC,SAAS,CAAC;iBACzC,CAAA;eAtDC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,6BAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,GAV5C,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACjB,oBAKO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAE,EALlB,uBAEI,CAAC,CAAC,EAAmD,EAAE,CACrD,CAAC,CAAC,EAAE,KAAK,gBAAA,OAAO,CAAC,aAAa,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAHhE,qBAAW,CAAC,CAAC,CAIV,CACgB,CACpB;iCAdW,MAAM,CAAC,MAAM;OALT,wBAAe,gBAAA,cAAc,CAAC,WAAW,CAAC;GAH3C,gBAAA,GAAG,CAAC,IAAI,EAAE,GAFE,wBAAe,gBAAA,MAAM,CAAC,aAAa,CAAC,CAkFjE,CAAA"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { EffectSource, Discord, Ref, Maybe, DWS } from "dfx/common";
|
|
2
|
+
export declare const fromRaw: <R, E>(raw: import("callbag-effect-ts/Source").EffectSource<R, E, import("../../types.js").GatewayPayload<any>>, latestReady: Ref<Maybe<Discord.ReadyEvent>>) => import("callbag-effect-ts/Source").EffectSource<R, E, import("../DiscordWS/index.js").Message>;
|
|
3
|
+
//# sourceMappingURL=invalidSession.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invalidSession.d.ts","sourceRoot":"","sources":["../../../src/DiscordGateway/Shard/invalidSession.ts"],"names":[],"mappings":";AAEA,eAAO,MAAM,OAAO,gIAEL,IAAI,MAAM,QAAQ,UAAU,CAAC,CAAC,mGAMJ,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as tsplus_module_1 from "dfx/common";
|
|
2
|
+
import * as tsplus_module_2 from "@effect/io/Effect";
|
|
3
|
+
import * as tsplus_module_3 from "@fp-ts/data/Option";
|
|
4
|
+
import * as tsplus_module_4 from "@effect/io/Ref";
|
|
5
|
+
import * as tsplus_module_5 from "callbag-effect-ts/Source/tap";
|
|
6
|
+
import * as tsplus_module_6 from "callbag-effect-ts/Source/map";
|
|
7
|
+
import { opCode } from "./utils.js";
|
|
8
|
+
export const fromRaw = (raw, latestReady) => tsplus_module_6.map(() => tsplus_module_1.WS.Reconnect)(tsplus_module_5.tap((p) => (p.d ? tsplus_module_2.unit() : tsplus_module_4.set(tsplus_module_3.none)(latestReady)))(opCode(raw)(tsplus_module_1.Discord.GatewayOpcode.INVALID_SESSION)));
|
|
9
|
+
//# sourceMappingURL=invalidSession.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invalidSession.js","sourceRoot":"","sources":["../../../src/DiscordGateway/Shard/invalidSession.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAEnC,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,GAA+C,EAC/C,WAA2C,EAC3C,EAAE,CACF,oBAIO,GAAgB,EAAE,CAAC,gBAAA,EAAE,CAAC,SAAS,EAJtC,oBAGO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAa,CAAC,CAAC,CAAC,0CAAA,WAAW,CAAgB,CAAC,EAHjE,MAAM,CAAC,GAAG,CAAC,CACT,gBAAA,OAAO,CAAC,aAAa,CAAC,eAAe,CACtC,CACiE,CAC3B,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Discord } from "dfx/common";
|
|
2
|
+
export declare const heartbeat: (d: Discord.Heartbeat) => Discord.GatewayPayload;
|
|
3
|
+
export declare const identify: (d: Discord.Identify) => Discord.GatewayPayload;
|
|
4
|
+
export declare const resume: (d: Discord.Resume) => Discord.GatewayPayload;
|
|
5
|
+
export declare const requestGuildMembers: (d: Discord.RequestGuildMember) => Discord.GatewayPayload;
|
|
6
|
+
export declare const voiceStateUpdate: (d: Discord.UpdateVoiceState) => Discord.GatewayPayload;
|
|
7
|
+
export declare const presenceUpdate: (d: Discord.UpdatePresence) => Discord.GatewayPayload;
|
|
8
|
+
//# sourceMappingURL=sendEvents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sendEvents.d.ts","sourceRoot":"","sources":["../../../src/DiscordGateway/Shard/sendEvents.ts"],"names":[],"mappings":";AAAA,eAAO,MAAM,SAAS,MAAO,QAAQ,SAAS,KAAG,QAAQ,cAGvD,CAAA;AAEF,eAAO,MAAM,QAAQ,MAAO,QAAQ,QAAQ,KAAG,QAAQ,cAGrD,CAAA;AAEF,eAAO,MAAM,MAAM,MAAO,QAAQ,MAAM,KAAG,QAAQ,cAGjD,CAAA;AAEF,eAAO,MAAM,mBAAmB,MAC3B,QAAQ,kBAAkB,KAC5B,QAAQ,cAGT,CAAA;AAEF,eAAO,MAAM,gBAAgB,MACxB,QAAQ,gBAAgB,KAC1B,QAAQ,cAGT,CAAA;AAEF,eAAO,MAAM,cAAc,MACtB,QAAQ,cAAc,KACxB,QAAQ,cAGT,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as tsplus_module_1 from "dfx/common";
|
|
2
|
+
export const heartbeat = (d) => ({
|
|
3
|
+
op: tsplus_module_1.Discord.GatewayOpcode.HEARTBEAT,
|
|
4
|
+
d,
|
|
5
|
+
});
|
|
6
|
+
export const identify = (d) => ({
|
|
7
|
+
op: tsplus_module_1.Discord.GatewayOpcode.IDENTIFY,
|
|
8
|
+
d,
|
|
9
|
+
});
|
|
10
|
+
export const resume = (d) => ({
|
|
11
|
+
op: tsplus_module_1.Discord.GatewayOpcode.RESUME,
|
|
12
|
+
d,
|
|
13
|
+
});
|
|
14
|
+
export const requestGuildMembers = (d) => ({
|
|
15
|
+
op: tsplus_module_1.Discord.GatewayOpcode.REQUEST_GUILD_MEMBERS,
|
|
16
|
+
d,
|
|
17
|
+
});
|
|
18
|
+
export const voiceStateUpdate = (d) => ({
|
|
19
|
+
op: tsplus_module_1.Discord.GatewayOpcode.VOICE_STATE_UPDATE,
|
|
20
|
+
d,
|
|
21
|
+
});
|
|
22
|
+
export const presenceUpdate = (d) => ({
|
|
23
|
+
op: tsplus_module_1.Discord.GatewayOpcode.PRESENCE_UPDATE,
|
|
24
|
+
d,
|
|
25
|
+
});
|
|
26
|
+
//# sourceMappingURL=sendEvents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sendEvents.js","sourceRoot":"","sources":["../../../src/DiscordGateway/Shard/sendEvents.ts"],"names":[],"mappings":";AAAA,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAoB,EAA0B,EAAE,CAAC,CAAC;IAC1E,EAAE,EAAE,gBAAA,OAAO,CAAC,aAAa,CAAC,SAAS;IACnC,CAAC;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAmB,EAA0B,EAAE,CAAC,CAAC;IACxE,EAAE,EAAE,gBAAA,OAAO,CAAC,aAAa,CAAC,QAAQ;IAClC,CAAC;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAiB,EAA0B,EAAE,CAAC,CAAC;IACpE,EAAE,EAAE,gBAAA,OAAO,CAAC,aAAa,CAAC,MAAM;IAChC,CAAC;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,CAA6B,EACL,EAAE,CAAC,CAAC;IAC5B,EAAE,EAAE,gBAAA,OAAO,CAAC,aAAa,CAAC,qBAAqB;IAC/C,CAAC;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,CAA2B,EACH,EAAE,CAAC,CAAC;IAC5B,EAAE,EAAE,gBAAA,OAAO,CAAC,aAAa,CAAC,kBAAkB;IAC5C,CAAC;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,CAAyB,EACD,EAAE,CAAC,CAAC;IAC5B,EAAE,EAAE,gBAAA,OAAO,CAAC,aAAa,CAAC,eAAe;IACzC,CAAC;CACF,CAAC,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { EffectSource, Discord, Maybe, Ref } from "dfx/common";
|
|
2
|
+
export declare const opCode: <R, E>(source: import("callbag-effect-ts/Source").EffectSource<R, E, import("../../types.js").GatewayPayload<any>>) => <T = any>(code: Discord.GatewayOpcode) => import("callbag-effect-ts/Source").EffectSource<R, E, import("../../types.js").GatewayPayload<T>>;
|
|
3
|
+
export declare const latest: <T>(f: (p: Discord.GatewayPayload) => import("../../common.js").Maybe<T>) => import("../../common.js").Effect<never, never, readonly [import("../../common.js").Ref<import("../../common.js").Maybe<T>>, (p: import("../../types.js").GatewayPayload<any>) => import("../../common.js").Effect<never, never, void>]>;
|
|
4
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/DiscordGateway/Shard/utils.ts"],"names":[],"mappings":";AAAA,eAAO,MAAM,MAAM,yIAED,QAAQ,aAAa,sGACgC,CAAA;AAOvE,eAAO,MAAM,MAAM,aAAc,QAAQ,cAAc,mRAGpD,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as tsplus_module_1 from "callbag-effect-ts/Source/filter";
|
|
2
|
+
import * as tsplus_module_2 from "@effect/io/Effect";
|
|
3
|
+
import * as tsplus_module_3 from "@fp-ts/data/Option";
|
|
4
|
+
import * as tsplus_module_4 from "@effect/io/Ref";
|
|
5
|
+
import * as tsplus_module_5 from "@fp-ts/data/Function";
|
|
6
|
+
export const opCode = (source) => (code) => tsplus_module_1.filter((p) => p.op === code)(source);
|
|
7
|
+
const maybeUpdateRef = (f, ref) => tsplus_module_5.flow(f, (o) => tsplus_module_3.match(tsplus_module_2.unit, (a) => tsplus_module_4.set(tsplus_module_3.some(a))(ref))(o));
|
|
8
|
+
export const latest = (f) => tsplus_module_2.map((ref) => [ref, maybeUpdateRef(f, ref)])(tsplus_module_4.make(tsplus_module_3.none));
|
|
9
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/DiscordGateway/Shard/utils.ts"],"names":[],"mappings":";;;;;AAAA,MAAM,CAAC,MAAM,MAAM,GACjB,CAAO,MAAkD,EAAE,EAAE,CAC7D,CAAU,IAA2B,EAAE,EAAE,CACvC,uBAAc,CAAC,CAAC,EAAkC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAlE,MAAM,CAA6D,CAAA;AAEvE,MAAM,cAAc,GAAG,CACrB,CAA0C,EAC1C,GAAkB,EAClB,EAAE,CAAC,gBAAA,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,4CAAqB,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAQ,qBAAW,CAAC,CAAC,EAArB,GAAG,CAAmB,EAAlD,CAAC,CAAkD,CAAC,CAAA;AAExE,MAAM,CAAC,MAAM,MAAM,GAAG,CAAI,CAA0C,EAAE,EAAE,CACtE,oBACE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,EAAE,GAAG,CAAC,CAAU,EADjD,0CAA8B,CAE7B,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Effect, Maybe } from "dfx/common";
|
|
2
|
+
export interface ClaimIdContext {
|
|
3
|
+
sharderCount: number;
|
|
4
|
+
totalCount: number;
|
|
5
|
+
}
|
|
6
|
+
export interface ShardStore {
|
|
7
|
+
claimId: (ctx: ClaimIdContext) => Effect<never, never, Maybe<number>>;
|
|
8
|
+
allClaimed: (totalCount: number) => Effect<never, never, boolean>;
|
|
9
|
+
heartbeat?: (shardId: number) => Effect<never, never, void>;
|
|
10
|
+
}
|
|
11
|
+
export declare const ShardStore: import("../../common.js").Tag<ShardStore>;
|
|
12
|
+
export declare const LiveMemoryShardStore: import("../../common.js").Layer<never, never, ShardStore>;
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/DiscordGateway/ShardStore/index.ts"],"names":[],"mappings":";AAAA,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;IACrE,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;IACjE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;CAC5D;AACD,eAAO,MAAM,UAAU,2CAAoB,CAAA;AAsB3C,eAAO,MAAM,oBAAoB,2DAAsC,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as tsplus_module_1 from "dfx/common";
|
|
2
|
+
import * as tsplus_module_2 from "@fp-ts/data/Option";
|
|
3
|
+
import * as tsplus_module_3 from "@effect/io/Effect";
|
|
4
|
+
import * as tsplus_module_4 from "@effect/io/Layer";
|
|
5
|
+
export const ShardStore = tsplus_module_1.Tag();
|
|
6
|
+
// Very basic shard id store, that does no health checks
|
|
7
|
+
const memoryStore = () => {
|
|
8
|
+
let currentId = 0;
|
|
9
|
+
return {
|
|
10
|
+
claimId: ({ totalCount }) => tsplus_module_3.sync(() => {
|
|
11
|
+
if (currentId >= totalCount) {
|
|
12
|
+
return tsplus_module_2.none;
|
|
13
|
+
}
|
|
14
|
+
const id = currentId;
|
|
15
|
+
currentId++;
|
|
16
|
+
return tsplus_module_2.some(id);
|
|
17
|
+
}),
|
|
18
|
+
allClaimed: (totalCount) => tsplus_module_3.sync(() => currentId >= totalCount),
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
export const LiveMemoryShardStore = tsplus_module_4.sync(ShardStore)(memoryStore);
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/DiscordGateway/ShardStore/index.ts"],"names":[],"mappings":";;;;AAUA,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAA,GAAG,EAAc,CAAA;AAE3C,wDAAwD;AACxD,MAAM,WAAW,GAAG,GAAe,EAAE;IACnC,IAAI,SAAS,GAAG,CAAC,CAAA;IAEjB,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAC1B,qBAAY,GAAG,EAAE;YACf,IAAI,SAAS,IAAI,UAAU,EAAE;gBAC3B,4BAAiB;aAClB;YAED,MAAM,EAAE,GAAG,SAAS,CAAA;YACpB,SAAS,EAAE,CAAA;YACX,OAAO,qBAAW,EAAE,CAAC,CAAA;QACvB,CAAC,CAAC;QAEJ,UAAU,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,qBAAY,GAAG,EAAE,CAAC,SAAS,IAAI,UAAU,CAAC;KACvE,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,qBAAW,UAAU,CAAC,CAAC,WAAW,CAAC,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Effect, Maybe, EffectSource, Discord } from "dfx/common";
|
|
2
|
+
import { ShardStore } from "../ShardStore/index.js";
|
|
3
|
+
export declare const spawn: import("callbag-effect-ts/Source").EffectSource<import("../../DiscordConfig/index.js").DiscordConfig | import("../../Log/index.js").Log | import("../../RateLimitStore/index.js").RateLimiter | import("../../index.js").DiscordREST | ShardStore | import("../DiscordWS/index.js").DiscordWSCodec, never, {
|
|
4
|
+
run: import("../../common.js").Effect<never, never, readonly [readonly [readonly [readonly [void, void], void], void], void]>;
|
|
5
|
+
raw: import("callbag-effect-ts/Source").EffectSource<never, never, import("../../types.js").GatewayPayload<any>>;
|
|
6
|
+
dispatch: import("callbag-effect-ts/Source").EffectSource<never, never, import("../../types.js").GatewayPayload<import("../../types.js").ReceiveEvent>>;
|
|
7
|
+
send: (p: import("../../types.js").GatewayPayload<any>) => void;
|
|
8
|
+
reconnect: () => void;
|
|
9
|
+
}>;
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/DiscordGateway/Sharder/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AA0FnD,eAAO,MAAM,KAAK;;;;;;EAEjB,CAAA"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import * as tsplus_module_1 from "callbag-effect-ts/Source/fromEffect";
|
|
2
|
+
import * as tsplus_module_2 from "callbag-effect-ts/Source/resource";
|
|
3
|
+
import * as tsplus_module_3 from "callbag-effect-ts/Source/map";
|
|
4
|
+
import * as tsplus_module_4 from "@fp-ts/data/Duration";
|
|
5
|
+
import * as tsplus_module_5 from "@fp-ts/data/Option";
|
|
6
|
+
import * as tsplus_module_6 from "callbag-effect-ts/Source/empty";
|
|
7
|
+
import * as tsplus_module_7 from "@effect/io/Effect";
|
|
8
|
+
import * as tsplus_module_8 from "callbag-effect-ts/Source/of";
|
|
9
|
+
import * as tsplus_module_9 from "dfx/common";
|
|
10
|
+
import * as tsplus_module_10 from "callbag-effect-ts/Source/tap";
|
|
11
|
+
import * as tsplus_module_11 from "callbag-effect-ts/Source/mapEffect";
|
|
12
|
+
import * as tsplus_module_12 from "callbag-effect-ts/Source/groupBy";
|
|
13
|
+
import * as tsplus_module_13 from "callbag-effect-ts/Source/chainPar";
|
|
14
|
+
import * as tsplus_module_14 from "callbag-effect-ts/Source/drain";
|
|
15
|
+
import * as tsplus_module_15 from "callbag-effect-ts/Source/merge";
|
|
16
|
+
import * as tsplus_module_16 from "callbag-effect-ts/Source/unwrap";
|
|
17
|
+
import { millis } from "@fp-ts/data/Duration";
|
|
18
|
+
import { overridePull } from "callbag-effect-ts/Source";
|
|
19
|
+
import { ShardStore } from "../ShardStore/index.js";
|
|
20
|
+
const configs = (totalCount) => tsplus_module_7.map(store => {
|
|
21
|
+
const claimId = (sharderCount) => tsplus_module_7.flatMap((a) => tsplus_module_5.match(() => tsplus_module_7.delay(tsplus_module_4.minutes(3))(tsplus_module_7.succeed([
|
|
22
|
+
tsplus_module_5.some(sharderCount),
|
|
23
|
+
tsplus_module_6.empty,
|
|
24
|
+
])), (id) => tsplus_module_7.succeed([
|
|
25
|
+
tsplus_module_5.some(sharderCount + 1),
|
|
26
|
+
tsplus_module_8.of(id),
|
|
27
|
+
]))(a))(store
|
|
28
|
+
.claimId({
|
|
29
|
+
totalCount,
|
|
30
|
+
sharderCount,
|
|
31
|
+
}));
|
|
32
|
+
return tsplus_module_3.map((id) => ({
|
|
33
|
+
id,
|
|
34
|
+
totalCount,
|
|
35
|
+
}))(tsplus_module_2.resource(0, (sharderCount) => tsplus_module_1.fromEffect(claimId(sharderCount))));
|
|
36
|
+
})(tsplus_module_7.service(ShardStore));
|
|
37
|
+
const spawnEffect = tsplus_module_7.map(({ gateway, config, configs, limiter }) => {
|
|
38
|
+
const [source, pull] = overridePull(configs, gateway.session_start_limit.max_concurrency);
|
|
39
|
+
return tsplus_module_10.tap(() => tsplus_module_7.sync(pull))(tsplus_module_13.chainPar(([shardConfig, key]) => tsplus_module_11.mapEffect((c) => tsplus_module_9.Shard.make([c.id, c.totalCount]))(tsplus_module_10.tap(() => limiter.maybeWait(`gateway.sharder.${key}`, millis(config.identifyRateLimit[0]), config.identifyRateLimit[1]))(shardConfig)))(tsplus_module_12.groupBy((c) => c.id % c.concurrency)(tsplus_module_3.map((config) => ({
|
|
40
|
+
...config,
|
|
41
|
+
url: gateway.url,
|
|
42
|
+
concurrency: gateway.session_start_limit.max_concurrency,
|
|
43
|
+
}))(source))));
|
|
44
|
+
})(tsplus_module_7.bind("configs", ({ gateway, config }) => configs(config.shardCount ?? gateway.shards))(tsplus_module_7.structPar({
|
|
45
|
+
gateway: tsplus_module_7.catchAll(() => tsplus_module_7.succeed({
|
|
46
|
+
url: "wss://gateway.discord.gg/",
|
|
47
|
+
shards: 1,
|
|
48
|
+
session_start_limit: {
|
|
49
|
+
total: 0,
|
|
50
|
+
remaining: 0,
|
|
51
|
+
reset_after: 0,
|
|
52
|
+
max_concurrency: 1,
|
|
53
|
+
},
|
|
54
|
+
}))(tsplus_module_7.flatMap((r) => r.json)(tsplus_module_9.Rest.rest
|
|
55
|
+
.getGatewayBot())),
|
|
56
|
+
config: tsplus_module_9.Config.gateway,
|
|
57
|
+
limiter: tsplus_module_7.service(tsplus_module_9.RateLimitStore.RateLimiter),
|
|
58
|
+
})));
|
|
59
|
+
export const spawn = tsplus_module_13.chainPar((shard) => tsplus_module_15.merge(tsplus_module_14.drain(tsplus_module_1.fromEffect(shard.run)))(tsplus_module_8.of(shard)))(tsplus_module_16.unwrap(spawnEffect));
|
|
60
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/DiscordGateway/Sharder/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
/// <reference types="ws" />
|
|
3
|
+
import { Ref, EffectSource } from "dfx/common";
|
|
4
|
+
import WebSocket from "isomorphic-ws";
|
|
5
|
+
export declare const Reconnect: unique symbol;
|
|
6
|
+
export type Reconnect = typeof Reconnect;
|
|
7
|
+
export type Message = string | Buffer | ArrayBuffer | Reconnect;
|
|
8
|
+
export declare class WebSocketError {
|
|
9
|
+
readonly reason: unknown;
|
|
10
|
+
readonly _tag = "WebSocketError";
|
|
11
|
+
constructor(reason: unknown);
|
|
12
|
+
}
|
|
13
|
+
export declare class WebSocketCloseError {
|
|
14
|
+
readonly code: number;
|
|
15
|
+
readonly reason: string;
|
|
16
|
+
readonly _tag = "WebSocketCloseError";
|
|
17
|
+
constructor(code: number, reason: string);
|
|
18
|
+
}
|
|
19
|
+
export declare class WebSocketWriteError {
|
|
20
|
+
readonly reason: Error;
|
|
21
|
+
readonly _tag = "WebSocketWriteError";
|
|
22
|
+
constructor(reason: Error);
|
|
23
|
+
}
|
|
24
|
+
export declare const make: (url: Ref<string>, options?: WebSocket.ClientOptions) => import("../../common.js").Effect<import("../../Log/index.js").Log, never, {
|
|
25
|
+
source: import("callbag-effect-ts/Source").EffectSource<never, WebSocketError | WebSocketCloseError | WebSocketWriteError, WebSocket.RawData>;
|
|
26
|
+
sink: import("callbag-effect-ts/Sink").EffectSink<never, never, never, Message>;
|
|
27
|
+
}>;
|
|
28
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/DiscordGateway/WS/index.ts"],"names":[],"mappings":";;;AAAA,OAAO,SAAS,MAAM,eAAe,CAAA;AAErC,eAAO,MAAM,SAAS,eAAW,CAAA;AACjC,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAA;AACxC,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,SAAS,CAAA;AAa/D,qBAAa,cAAc;IAEb,QAAQ,CAAC,MAAM,EAAE,OAAO;IADpC,QAAQ,CAAC,IAAI,oBAAmB;gBACX,MAAM,EAAE,OAAO;CACrC;AAED,qBAAa,mBAAmB;IAElB,QAAQ,CAAC,IAAI,EAAE,MAAM;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM;IAD1D,QAAQ,CAAC,IAAI,yBAAwB;gBAChB,IAAI,EAAE,MAAM,EAAW,MAAM,EAAE,MAAM;CAC3D;AAmBD,qBAAa,mBAAmB;IAElB,QAAQ,CAAC,MAAM,EAAE,KAAK;IADlC,QAAQ,CAAC,IAAI,yBAAwB;gBAChB,MAAM,EAAE,KAAK;CACnC;AAkCD,eAAO,MAAM,IAAI,QAAS,IAAI,MAAM,CAAC,YAAY,UAAU,aAAa;;;EAiBpE,CAAA"}
|