dfx 0.21.19 → 0.21.21
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/index.js +11 -11
- package/Cache/index.js.map +1 -1
- package/Cache/memory.js +6 -6
- package/Cache/memory.js.map +1 -1
- package/Cache/memoryTTL.js +23 -23
- package/Cache/memoryTTL.js.map +1 -1
- package/Cache/prelude.js +52 -52
- package/Cache/prelude.js.map +1 -1
- package/DiscordConfig/index.d.ts +1 -1
- package/DiscordConfig/index.js +6 -5
- package/DiscordConfig/index.js.map +1 -1
- package/DiscordGateway/DiscordWS/index.js +12 -12
- package/DiscordGateway/DiscordWS/index.js.map +1 -1
- package/DiscordGateway/Shard/heartbeats.js +11 -12
- package/DiscordGateway/Shard/heartbeats.js.map +1 -1
- package/DiscordGateway/Shard/identify.js +4 -4
- package/DiscordGateway/Shard/identify.js.map +1 -1
- package/DiscordGateway/Shard/index.js +16 -16
- package/DiscordGateway/Shard/index.js.map +1 -1
- package/DiscordGateway/Shard/invalidSession.js +2 -2
- package/DiscordGateway/Shard/invalidSession.js.map +1 -1
- package/DiscordGateway/Shard/utils.d.ts +1 -1
- package/DiscordGateway/Shard/utils.js +5 -5
- package/DiscordGateway/Shard/utils.js.map +1 -1
- package/DiscordGateway/ShardStore/index.js +3 -3
- package/DiscordGateway/ShardStore/index.js.map +1 -1
- package/DiscordGateway/Sharder/index.js +16 -16
- package/DiscordGateway/Sharder/index.js.map +1 -1
- package/DiscordGateway/WS/index.js +14 -14
- package/DiscordGateway/WS/index.js.map +1 -1
- package/DiscordGateway/index.js +9 -10
- package/DiscordGateway/index.js.map +1 -1
- package/DiscordREST/index.js +34 -34
- package/DiscordREST/index.js.map +1 -1
- package/DiscordREST/utils.d.ts +7 -7
- package/DiscordREST/utils.js +3 -3
- package/DiscordREST/utils.js.map +1 -1
- package/Helpers/flags.js +1 -1
- package/Helpers/flags.js.map +1 -1
- package/Helpers/interactions.d.ts +14 -13
- package/Helpers/interactions.js +21 -20
- package/Helpers/interactions.js.map +1 -1
- package/Helpers/members.js +1 -1
- package/Helpers/members.js.map +1 -1
- package/Helpers/permissions.js +7 -7
- package/Helpers/permissions.js.map +1 -1
- package/Helpers/ui.js +1 -1
- package/Helpers/ui.js.map +1 -1
- package/Http/index.js +6 -6
- package/Http/index.js.map +1 -1
- package/Interactions/context.d.ts +2 -2
- package/Interactions/context.js +11 -11
- package/Interactions/context.js.map +1 -1
- package/Interactions/gateway.js +7 -7
- package/Interactions/gateway.js.map +1 -1
- package/Interactions/handlers.js +17 -17
- package/Interactions/handlers.js.map +1 -1
- package/Interactions/index.js +6 -6
- package/Interactions/index.js.map +1 -1
- package/Interactions/webhook.js +9 -9
- package/Interactions/webhook.js.map +1 -1
- package/RateLimit/index.js +5 -5
- package/RateLimit/index.js.map +1 -1
- package/RateLimit/memory.js +5 -5
- package/RateLimit/memory.js.map +1 -1
- package/RateLimit/utils.js +1 -1
- package/RateLimit/utils.js.map +1 -1
- package/_common.d.ts +9 -9
- package/_common.js +1 -1
- package/_common.js.map +1 -1
- package/global.d.ts +3 -3
- package/index.d.ts +0 -1
- package/package.json +13 -10
- package/types.d.ts +3 -1
- package/types.js +9 -9
- package/types.js.map +1 -1
|
@@ -1 +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,
|
|
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,6CAEqB,KAAK,GAApB,UAAU,4CACI,GAAG,GAAjB,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,EACD,CAAA;AAEJ,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,MAA4C,EAC5C,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,IAAI,EAA0B,EAChE,EAAE,CACF,0BAAA,MAAM,CAAC,MAAM,CAAC,sCAAiD,EAC7D,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,cAAc,CAAC,CAC1D,CAAA"}
|
|
@@ -3,42 +3,42 @@ import * as tsplus_module_2 from "dfx/gateway";
|
|
|
3
3
|
import * as tsplus_module_3 from "@effect/stream/Stream";
|
|
4
4
|
import * as tsplus_module_4 from "@effect/io/Config/Secret";
|
|
5
5
|
import * as tsplus_module_5 from "dfx/_common";
|
|
6
|
-
import * as tsplus_module_6 from "@fp-ts/
|
|
7
|
-
import * as tsplus_module_7 from "@
|
|
6
|
+
import * as tsplus_module_6 from "@fp-ts/core/Option";
|
|
7
|
+
import * as tsplus_module_7 from "@effect/data/Duration";
|
|
8
8
|
import * as tsplus_module_8 from "@effect/io/Queue";
|
|
9
9
|
import * as tsplus_module_9 from "dfx";
|
|
10
10
|
import * as Heartbeats from "./heartbeats.js";
|
|
11
11
|
import * as Identify from "./identify.js";
|
|
12
12
|
import * as InvalidSession from "./invalidSession.js";
|
|
13
13
|
import * as Utils from "./utils.js";
|
|
14
|
-
export const make = (shard) => tsplus_module_1.flatMap(({ token, gateway }) => tsplus_module_1.flatMap(limiter => tsplus_module_1.flatMap(outboundQueue => {
|
|
15
|
-
const outbound = tsplus_module_1.tap(
|
|
16
|
-
.take());
|
|
14
|
+
export const make = (shard) => tsplus_module_1.flatMap(tsplus_module_1.service(tsplus_module_9.DiscordConfig.DiscordConfig), ({ token, gateway }) => tsplus_module_1.flatMap(tsplus_module_1.service(tsplus_module_9.RateLimiter), limiter => tsplus_module_1.flatMap(tsplus_module_8.unbounded(), outboundQueue => {
|
|
15
|
+
const outbound = tsplus_module_1.tap(outboundQueue
|
|
16
|
+
.take(), () => limiter.maybeWait("dfx.shard.send", tsplus_module_7.minutes(1), 120));
|
|
17
17
|
const send = (p) => outboundQueue.offer(p);
|
|
18
|
-
return tsplus_module_1.flatMap(socket => tsplus_module_1.flatMap(raw => tsplus_module_1.flatMap(([latestReady, updateLatestReady]) => tsplus_module_1.map(([latestSequence, updateLatestSequence]) => {
|
|
19
|
-
const maybeUpdateUrl = (p) => tsplus_module_6.match(() => tsplus_module_1.unit(),
|
|
20
|
-
const updateRefs = tsplus_module_3.runDrain(tsplus_module_3.tap(
|
|
18
|
+
return tsplus_module_1.flatMap(tsplus_module_2.DiscordWS.make({ outbound }), socket => tsplus_module_1.flatMap(tsplus_module_3.broadcastDynamic(socket.source, 1), raw => tsplus_module_1.flatMap(Utils.latest(p => tsplus_module_6.map(p => p.d)(tsplus_module_6.filter((p) => p.op === 0 /* Discord.GatewayOpcode.DISPATCH */ && p.t === "READY")(tsplus_module_6.some(p)))), ([latestReady, updateLatestReady]) => tsplus_module_1.map(Utils.latest(p => tsplus_module_6.fromNullable(p.s)), ([latestSequence, updateLatestSequence]) => {
|
|
19
|
+
const maybeUpdateUrl = (p) => tsplus_module_6.match(() => tsplus_module_1.unit(), a => socket.setUrl(a.resume_gateway_url))(tsplus_module_6.map(p => p.d)(tsplus_module_6.filter((p) => p.op === 0 /* Discord.GatewayOpcode.DISPATCH */ && p.t === "READY")(tsplus_module_6.some(p))));
|
|
20
|
+
const updateRefs = tsplus_module_3.runDrain(tsplus_module_3.tap(tsplus_module_3.tap(tsplus_module_3.tap(raw, updateLatestReady), updateLatestSequence), maybeUpdateUrl));
|
|
21
21
|
// heartbeats
|
|
22
|
-
const heartbeatEffects = tsplus_module_3.runForEach(
|
|
23
|
-
const dispatch = tsplus_module_3.filter((p) => p.op === 0 /* Discord.GatewayOpcode.DISPATCH */)
|
|
22
|
+
const heartbeatEffects = tsplus_module_3.runForEach(Heartbeats.fromRaw(raw, latestSequence), send);
|
|
23
|
+
const dispatch = tsplus_module_3.filter(raw, (p) => p.op === 0 /* Discord.GatewayOpcode.DISPATCH */);
|
|
24
24
|
// identify
|
|
25
|
-
const identifyEffects = tsplus_module_3.runForEach(
|
|
25
|
+
const identifyEffects = tsplus_module_3.runForEach(Identify.fromRaw(raw, {
|
|
26
26
|
token: tsplus_module_4.value(token),
|
|
27
27
|
shard,
|
|
28
28
|
intents: gateway.intents,
|
|
29
29
|
presence: gateway.presence,
|
|
30
30
|
latestSequence,
|
|
31
31
|
latestReady,
|
|
32
|
-
}));
|
|
32
|
+
}), send);
|
|
33
33
|
// invalid session
|
|
34
|
-
const invalidEffects = tsplus_module_3.runForEach(
|
|
34
|
+
const invalidEffects = tsplus_module_3.runForEach(InvalidSession.fromRaw(raw, latestReady), send);
|
|
35
35
|
return {
|
|
36
|
-
run: tsplus_module_1.asUnit(tsplus_module_1.zipPar(
|
|
36
|
+
run: tsplus_module_1.asUnit(tsplus_module_1.zipPar(tsplus_module_1.zipPar(tsplus_module_1.zipPar(updateRefs, heartbeatEffects), identifyEffects), invalidEffects)),
|
|
37
37
|
raw,
|
|
38
38
|
dispatch,
|
|
39
39
|
send: (p) => send(p),
|
|
40
40
|
reconnect: send(tsplus_module_2.WS.Reconnect),
|
|
41
41
|
};
|
|
42
|
-
})
|
|
43
|
-
})
|
|
42
|
+
}))));
|
|
43
|
+
})));
|
|
44
44
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/DiscordGateway/Shard/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as tsplus_module_1 from "dfx/gateway";
|
|
2
2
|
import * as tsplus_module_2 from "@effect/io/Effect";
|
|
3
|
-
import * as tsplus_module_3 from "@fp-ts/
|
|
3
|
+
import * as tsplus_module_3 from "@fp-ts/core/Option";
|
|
4
4
|
import * as tsplus_module_4 from "@effect/io/Ref";
|
|
5
5
|
import * as tsplus_module_5 from "dfx/_common";
|
|
6
6
|
import * as tsplus_module_6 from "@effect/stream/Stream";
|
|
7
7
|
import { opCode } from "./utils.js";
|
|
8
|
-
export const fromRaw = (raw, latestReady) => tsplus_module_6.map(()
|
|
8
|
+
export const fromRaw = (raw, latestReady) => tsplus_module_6.map(tsplus_module_6.tap(opCode(raw)(9 /* Discord.GatewayOpcode.INVALID_SESSION */), p => (p.d ? tsplus_module_2.unit() : tsplus_module_4.set(latestReady, tsplus_module_3.none()))), () => tsplus_module_1.WS.Reconnect);
|
|
9
9
|
//# sourceMappingURL=invalidSession.js.map
|
|
@@ -1 +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,GAAyC,EACzC,WAA2C,EAC3C,EAAE,CACF,
|
|
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,GAAyC,EACzC,WAA2C,EAC3C,EAAE,CACF,oBAAA,oBAAA,MAAM,CAAC,GAAG,CAAC,+CAEV,EACM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAa,CAAC,CAAC,CAAC,oBAAA,WAAW,EAAK,sBAAY,CAAC,CAAC,CAAC,EAC3D,GAAsB,EAAE,CAAC,gBAAA,EAAE,CAAC,SAAS,CAAC,CAAA"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { Stream, Discord, Maybe, Ref } from "dfx/_common";
|
|
2
2
|
export declare const opCode: <R, E>(source: import("../../_common.js").Stream<R, E, import("../../types.js").GatewayPayload<any>>) => <T = any>(code: Discord.GatewayOpcode) => import("../../_common.js").Stream<R, E, import("../../types.js").GatewayPayload<T>>;
|
|
3
|
-
export declare const latest: <T>(f: (p: Discord.GatewayPayload) => import("../../
|
|
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>]>;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as tsplus_module_1 from "@effect/stream/Stream";
|
|
2
2
|
import * as tsplus_module_2 from "@effect/io/Effect";
|
|
3
|
-
import * as tsplus_module_3 from "@fp-ts/
|
|
3
|
+
import * as tsplus_module_3 from "@fp-ts/core/Option";
|
|
4
4
|
import * as tsplus_module_4 from "@effect/io/Ref";
|
|
5
|
-
import * as tsplus_module_5 from "@fp-ts/
|
|
6
|
-
export const opCode = (source) => (code) => tsplus_module_1.filter((p) => p.op === code)
|
|
7
|
-
const maybeUpdateRef = (f, ref) => tsplus_module_5.flow(f,
|
|
8
|
-
export const latest = (f) => tsplus_module_2.map((
|
|
5
|
+
import * as tsplus_module_5 from "@fp-ts/core/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(tsplus_module_2.unit, a => tsplus_module_4.set(ref, tsplus_module_3.some(a)))(o));
|
|
8
|
+
export const latest = (f) => tsplus_module_2.map(tsplus_module_4.make(tsplus_module_3.none()), ref => [ref, maybeUpdateRef(f, ref)]);
|
|
9
9
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +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,
|
|
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,4CAAqB,CAAC,CAAC,EAAE,CAAC,oBAAA,GAAG,EAAK,qBAAW,CAAC,CAAC,CAAC,EAAhD,CAAC,CAAgD,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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as tsplus_module_1 from "dfx/_common";
|
|
2
|
-
import * as tsplus_module_2 from "@fp-ts/
|
|
2
|
+
import * as tsplus_module_2 from "@fp-ts/core/Option";
|
|
3
3
|
import * as tsplus_module_3 from "@effect/io/Effect";
|
|
4
4
|
import * as tsplus_module_4 from "@effect/io/Layer";
|
|
5
5
|
export const ShardStore = tsplus_module_1.Tag();
|
|
@@ -9,13 +9,13 @@ const memoryStore = () => {
|
|
|
9
9
|
return {
|
|
10
10
|
claimId: ({ totalCount }) => tsplus_module_3.sync(() => {
|
|
11
11
|
if (currentId >= totalCount) {
|
|
12
|
-
return tsplus_module_2.none;
|
|
12
|
+
return tsplus_module_2.none();
|
|
13
13
|
}
|
|
14
14
|
const id = currentId;
|
|
15
15
|
currentId++;
|
|
16
16
|
return tsplus_module_2.some(id);
|
|
17
17
|
}),
|
|
18
|
-
allClaimed:
|
|
18
|
+
allClaimed: totalCount => tsplus_module_3.sync(() => currentId >= totalCount),
|
|
19
19
|
};
|
|
20
20
|
};
|
|
21
21
|
export const LiveMemoryShardStore = tsplus_module_4.sync(ShardStore, memoryStore);
|
|
@@ -1 +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,
|
|
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,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"}
|
|
@@ -2,30 +2,27 @@ import * as tsplus_module_1 from "@effect/stream/Stream";
|
|
|
2
2
|
import * as tsplus_module_2 from "dfx/gateway";
|
|
3
3
|
import * as tsplus_module_3 from "@effect/io/Effect";
|
|
4
4
|
import * as tsplus_module_4 from "@effect/stream/GroupBy";
|
|
5
|
-
import * as tsplus_module_5 from "@
|
|
6
|
-
import * as tsplus_module_6 from "@fp-ts/
|
|
5
|
+
import * as tsplus_module_5 from "@effect/data/Duration";
|
|
6
|
+
import * as tsplus_module_6 from "@fp-ts/core/Option";
|
|
7
7
|
import * as tsplus_module_7 from "dfx";
|
|
8
8
|
import * as tsplus_module_8 from "dfx/_common";
|
|
9
9
|
import * as tsplus_module_9 from "@effect/io/Layer";
|
|
10
|
-
import { millis } from "@
|
|
10
|
+
import { millis } from "@effect/data/Duration";
|
|
11
11
|
import { ShardStore } from "../ShardStore/index.js";
|
|
12
|
-
const make = tsplus_module_3.flatMap(store => tsplus_module_3.flatMap(rest => tsplus_module_3.flatMap(({ gateway: config }) => tsplus_module_3.flatMap(limiter => {
|
|
12
|
+
const make = tsplus_module_3.flatMap(tsplus_module_3.service(ShardStore), store => tsplus_module_3.flatMap(tsplus_module_3.service(tsplus_module_7.DiscordREST), rest => tsplus_module_3.flatMap(tsplus_module_3.service(tsplus_module_7.DiscordConfig.DiscordConfig), ({ gateway: config }) => tsplus_module_3.flatMap(tsplus_module_3.service(tsplus_module_7.RateLimiter), limiter => {
|
|
13
13
|
const configs = (totalCount) => {
|
|
14
|
-
const claimId = (sharderCount) => tsplus_module_3.flatMap(
|
|
14
|
+
const claimId = (sharderCount) => tsplus_module_3.flatMap(store
|
|
15
15
|
.claimId({
|
|
16
16
|
totalCount,
|
|
17
17
|
sharderCount,
|
|
18
|
-
}));
|
|
19
|
-
return tsplus_module_1.map((id) => ({
|
|
18
|
+
}), a => tsplus_module_6.match(() => tsplus_module_3.delay(claimId(sharderCount), tsplus_module_5.minutes(3)), id => tsplus_module_3.succeed(id))(a));
|
|
19
|
+
return tsplus_module_1.map(tsplus_module_1.unfoldEffect(0, sharderCount => tsplus_module_3.map(claimId(sharderCount), id => tsplus_module_6.some([id, sharderCount + 1]))), id => ({
|
|
20
20
|
id,
|
|
21
21
|
totalCount,
|
|
22
|
-
}))
|
|
22
|
+
}));
|
|
23
23
|
};
|
|
24
|
-
return tsplus_module_3.flatMap(
|
|
25
|
-
|
|
26
|
-
url: gateway.url,
|
|
27
|
-
concurrency: gateway.session_start_limit.max_concurrency,
|
|
28
|
-
}))(configs(config.shardCount ?? gateway.shards))))))))(tsplus_module_3.catchAll(() => tsplus_module_3.succeed({
|
|
24
|
+
return tsplus_module_3.flatMap(tsplus_module_3.catchAll(tsplus_module_3.flatMap(rest
|
|
25
|
+
.getGatewayBot(), r => r.json), () => tsplus_module_3.succeed({
|
|
29
26
|
url: "wss://gateway.discord.gg/",
|
|
30
27
|
shards: 1,
|
|
31
28
|
session_start_limit: {
|
|
@@ -34,9 +31,12 @@ const make = tsplus_module_3.flatMap(store => tsplus_module_3.flatMap(rest => ts
|
|
|
34
31
|
reset_after: 0,
|
|
35
32
|
max_concurrency: 1,
|
|
36
33
|
},
|
|
37
|
-
}))
|
|
38
|
-
|
|
39
|
-
|
|
34
|
+
})), gateway => tsplus_module_3.map(tsplus_module_1.broadcastDynamic(tsplus_module_1.flatMap(tsplus_module_4.evaluate(tsplus_module_1.groupBy(tsplus_module_1.map(configs(config.shardCount ?? gateway.shards), config => ({
|
|
35
|
+
...config,
|
|
36
|
+
url: gateway.url,
|
|
37
|
+
concurrency: gateway.session_start_limit.max_concurrency,
|
|
38
|
+
})), c => tsplus_module_3.succeed([c.id % c.concurrency, c])), (key, shardConfig) => tsplus_module_1.mapEffect(tsplus_module_1.tap(shardConfig, () => limiter.maybeWait(`dfx.sharder.${key}`, millis(config.identifyRateLimit[0]), config.identifyRateLimit[1])), c => tsplus_module_2.Shard.make([c.id, c.totalCount]))), shard => tsplus_module_1.merge(tsplus_module_1.succeed(shard), tsplus_module_1.drain(tsplus_module_1.fromEffect(shard.run)))), 1), shards => ({ shards })));
|
|
39
|
+
}))));
|
|
40
40
|
export const Sharder = tsplus_module_8.Tag();
|
|
41
41
|
export const LiveSharder = tsplus_module_9.scoped(Sharder, make);
|
|
42
42
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/DiscordGateway/Sharder/index.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/DiscordGateway/Sharder/index.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAEnD,MAAM,IAAI,2BACQ,wBAAe,UAAU,CAAC,EAApC,KAAK,4BACI,wCAAe,WAAW,CAAC,EAApC,IAAI,4BACoB,wBAAe,gBAAA,aAAa,CAAC,aAAa,CAAC,GAAnE,EAAE,OAAO,EAAE,MAAM,EAAE,6BACP,wCAAe,WAAW,CAAC,EAAvC,OAAO;IAEb,MAAM,OAAO,GAAG,CAAC,UAAkB,EAAE,EAAE;QACrC,MAAM,OAAO,GAAG,CAAC,YAAoB,EAAgC,EAAE,CACrE,wBAAA,KAAK;aACF,OAAO,CAAC;YACP,UAAU;YACV,YAAY;SACb,CAAC,EACO,CAAC,CAAC,EAAE,CACX,sBACE,GAAG,EAAE,CAAC,sBAAA,OAAO,CAAC,YAAY,CAAC,EAAO,wBAAiB,CAAC,CAAC,CAAC,EACtD,EAAE,CAAC,EAAE,CAAC,wBAAe,EAAE,CAAC,EAF1B,CAAC,CAGA,CACF,CAAA;QAEL,OAAO,oBAAA,6BAAoB,CAAC,EAAE,YAAY,CAAC,EAAE,CAC3C,oBAAA,OAAO,CAAC,YAAY,CAAC,EAAK,EAAE,CAAC,EAAE,CAC7B,qBAAW,CAAC,EAAE,EAAE,YAAY,GAAG,CAAC,CAAU,CAAC,CAC5C,CACF,EAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YACX,EAAE;YACF,UAAU;SACX,CAAC,CAAC,CAAA;IACL,CAAC,CAAA;mCAGC,yBAAA,wBAAA,IAAI;SACD,aAAa,EAAE,EACP,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EACX,GAAG,EAAE,CACb,wBAA8C;QAC5C,GAAG,EAAE,2BAA2B;QAChC,MAAM,EAAE,CAAC;QACT,mBAAmB,EAAE;YACnB,KAAK,EAAE,CAAC;YACR,SAAS,EAAE,CAAC;YACZ,WAAW,EAAE,CAAC;YACd,eAAe,EAAE,CAAC;SACnB;KACF,CAAC,CACH,EAfC,OAAO,wBAmBX,iCAAA,wBAAA,yBAAA,wBAAA,oBAAA,OAAO,CAAC,MAAM,CAAC,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,EACrC,MAAM,CAAC,EAAE,CAAC,CAAC;QACd,GAAG,MAAM;QACT,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,WAAW,EAAE,OAAO,CAAC,mBAAmB,CAAC,eAAe;KACzD,CAAC,CAAC,EACM,CAAC,CAAC,EAAE,CAAC,wBAAe,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,EAC9C,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE,CAC7B,0BAAA,oBAAA,WAAW,EACJ,GAAG,EAAE,CACR,OAAO,CAAC,SAAS,CACf,eAAe,GAAG,EAAE,EACpB,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EACnC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAC5B,CACF,EACU,CAAC,CAAC,EAAE,CAAC,gBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CACpD,EACQ,KAAK,CAAC,EAAE,CACf,sBAAA,wBAAe,KAAK,CAAC,wBAAO,2BAAkB,KAAK,CAAC,GAAG,CAAC,EAAO,CAChE,EACiB,CAAC,CAAC,EAtBlB,MAAM,IAyBL,CAAA,EAAE,MAAM,EAAE,CAAA;KACjB,CAAA;AAGF,MAAM,CAAC,MAAM,OAAO,GAAG,gBAAA,GAAG,EAAW,CAAA;AACrC,MAAM,CAAC,MAAM,WAAW,GAAG,uBAAa,OAAO,EAAE,IAAI,CAAC,CAAA"}
|
|
@@ -3,7 +3,7 @@ import * as tsplus_module_2 from "@effect/io/Ref";
|
|
|
3
3
|
import * as tsplus_module_3 from "@effect/stream/Stream";
|
|
4
4
|
import * as tsplus_module_4 from "@effect/io/Schedule";
|
|
5
5
|
import * as tsplus_module_5 from "dfx";
|
|
6
|
-
import * as tsplus_module_6 from "@fp-ts/
|
|
6
|
+
import * as tsplus_module_6 from "@fp-ts/core/Function";
|
|
7
7
|
import WebSocket from "isomorphic-ws";
|
|
8
8
|
export const Reconnect = Symbol();
|
|
9
9
|
export class WebSocketError {
|
|
@@ -22,30 +22,30 @@ export class WebSocketCloseError {
|
|
|
22
22
|
this.reason = reason;
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
|
-
const socket = (urlRef) => tsplus_module_1.acquireRelease(tsplus_module_1.flatMap(url => {
|
|
25
|
+
const socket = (urlRef) => tsplus_module_1.acquireRelease(tsplus_module_1.flatMap(tsplus_module_2.get(urlRef), url => {
|
|
26
26
|
const ws = new WebSocket(url);
|
|
27
|
-
return tsplus_module_1.map(
|
|
27
|
+
return tsplus_module_1.map(tsplus_module_1.async(resume => {
|
|
28
28
|
ws.addEventListener("open", () => resume(tsplus_module_1.unit()), {
|
|
29
29
|
once: true,
|
|
30
30
|
});
|
|
31
|
-
}));
|
|
32
|
-
})
|
|
31
|
+
}), () => ws);
|
|
32
|
+
}), ws => tsplus_module_1.sync(() => {
|
|
33
33
|
;
|
|
34
34
|
ws.removeAllListeners?.();
|
|
35
35
|
ws.close();
|
|
36
36
|
}));
|
|
37
|
-
const recv = (ws) => tsplus_module_3.asyncEffect(
|
|
38
|
-
ws.addEventListener("message",
|
|
37
|
+
const recv = (ws) => tsplus_module_3.asyncEffect(emit => tsplus_module_1.sync(() => {
|
|
38
|
+
ws.addEventListener("message", message => {
|
|
39
39
|
emit.single(message.data);
|
|
40
40
|
});
|
|
41
|
-
ws.addEventListener("error",
|
|
41
|
+
ws.addEventListener("error", cause => {
|
|
42
42
|
emit.fail(new WebSocketError(cause));
|
|
43
43
|
});
|
|
44
|
-
ws.addEventListener("close",
|
|
44
|
+
ws.addEventListener("close", e => {
|
|
45
45
|
emit.fail(new WebSocketCloseError(e.code, e.reason));
|
|
46
46
|
});
|
|
47
47
|
}));
|
|
48
|
-
const send = (ws, take, log) => tsplus_module_1.forever(tsplus_module_1.tap((data) => {
|
|
48
|
+
const send = (ws, take, log) => tsplus_module_1.forever(tsplus_module_1.tap(tsplus_module_1.tap(take, data => log.debug("WS", "send", data)), (data) => {
|
|
49
49
|
if (data === Reconnect) {
|
|
50
50
|
return tsplus_module_1.failSync(() => {
|
|
51
51
|
ws.close(1012, "reconnecting");
|
|
@@ -55,9 +55,9 @@ const send = (ws, take, log) => tsplus_module_1.forever(tsplus_module_1.tap((dat
|
|
|
55
55
|
return tsplus_module_1.sync(() => {
|
|
56
56
|
ws.send(data);
|
|
57
57
|
});
|
|
58
|
-
})
|
|
59
|
-
export const make = (url, takeOutbound) => tsplus_module_6.pipe(tsplus_module_1.flatMap(log => tsplus_module_1.map(ws => {
|
|
58
|
+
}));
|
|
59
|
+
export const make = (url, takeOutbound) => tsplus_module_6.pipe(tsplus_module_1.flatMap(tsplus_module_1.service(tsplus_module_5.Log.Log), log => tsplus_module_1.map(socket(url), ws => {
|
|
60
60
|
const sendEffect = send(ws, takeOutbound, log);
|
|
61
|
-
return tsplus_module_3.retry(tsplus_module_4.recurWhile(
|
|
62
|
-
})
|
|
61
|
+
return tsplus_module_3.retry(tsplus_module_3.merge(recv(ws), tsplus_module_3.fromEffect(sendEffect)), tsplus_module_4.recurWhile(e => e._tag === "WebSocketCloseError" && e.code === 1012));
|
|
62
|
+
})), tsplus_module_3.unwrapScoped);
|
|
63
63
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/DiscordGateway/WS/index.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,SAAS,MAAM,eAAe,CAAA;AAErC,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,EAAE,CAAA;AAIjC,MAAM,OAAO,cAAc;IAEJ;IADZ,IAAI,GAAG,gBAAgB,CAAA;IAChC,YAAqB,MAAe;QAAf,WAAM,GAAN,MAAM,CAAS;IAAG,CAAC;CACzC;AAED,MAAM,OAAO,mBAAmB;IAET;IAAuB;IADnC,IAAI,GAAG,qBAAqB,CAAA;IACrC,YAAqB,IAAY,EAAW,MAAc;QAArC,SAAI,GAAJ,IAAI,CAAQ;QAAW,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;CAC/D;AAED,MAAM,MAAM,GAAG,CAAC,MAAmB,EAAE,EAAE,CACrC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/DiscordGateway/WS/index.ts"],"names":[],"mappings":"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"}
|
package/DiscordGateway/index.js
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import * as tsplus_module_1 from "@effect/stream/Stream";
|
|
2
|
-
import * as tsplus_module_2 from "@
|
|
3
|
-
import * as tsplus_module_3 from "
|
|
4
|
-
import * as tsplus_module_4 from "
|
|
5
|
-
import * as tsplus_module_5 from "@effect/io/Layer";
|
|
2
|
+
import * as tsplus_module_2 from "@effect/io/Effect";
|
|
3
|
+
import * as tsplus_module_3 from "dfx/_common";
|
|
4
|
+
import * as tsplus_module_4 from "@effect/io/Layer";
|
|
6
5
|
import { Sharder } from "./Sharder/index.js";
|
|
7
|
-
const fromDispatchFactory = (source) => (event) => tsplus_module_1.map(
|
|
8
|
-
const handleDispatchFactory = (source) => (event, handle) => tsplus_module_1.runDrain(
|
|
9
|
-
export const make =
|
|
6
|
+
const fromDispatchFactory = (source) => (event) => tsplus_module_1.map(tsplus_module_1.filter(source, p => p.t === event), p => p.d);
|
|
7
|
+
const handleDispatchFactory = (source) => (event, handle) => tsplus_module_1.runDrain(tsplus_module_1.flatMapPar(tsplus_module_1.filter(source, p => p.t === event), a => tsplus_module_1.fromEffect(handle(a.d)), Number.POSITIVE_INFINITY));
|
|
8
|
+
export const make = tsplus_module_2.flatMap(tsplus_module_2.service(Sharder), sharder => tsplus_module_2.flatMap(tsplus_module_1.broadcastDynamic(tsplus_module_1.flatMapPar(sharder.shards, s => s.raw, Number.POSITIVE_INFINITY), 8), raw => tsplus_module_2.map(tsplus_module_1.broadcastDynamic(tsplus_module_1.flatMapPar(sharder.shards, s => s.dispatch, Number.POSITIVE_INFINITY), 8), dispatch => {
|
|
10
9
|
const fromDispatch = fromDispatchFactory(dispatch);
|
|
11
10
|
const handleDispatch = handleDispatchFactory(dispatch);
|
|
12
11
|
return {
|
|
@@ -15,7 +14,7 @@ export const make = tsplus_module_3.flatMap(sharder => tsplus_module_3.flatMap(r
|
|
|
15
14
|
fromDispatch,
|
|
16
15
|
handleDispatch,
|
|
17
16
|
};
|
|
18
|
-
})
|
|
19
|
-
export const DiscordGateway =
|
|
20
|
-
export const LiveDiscordGateway =
|
|
17
|
+
})));
|
|
18
|
+
export const DiscordGateway = tsplus_module_3.Tag();
|
|
19
|
+
export const LiveDiscordGateway = tsplus_module_4.scoped(DiscordGateway, make);
|
|
21
20
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/DiscordGateway/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/DiscordGateway/index.ts"],"names":[],"mappings":";;;;AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAE5C,MAAM,mBAAmB,GACvB,CAAO,MAAkE,EAAE,EAAE,CAC7E,CACE,KAAQ,EACgC,EAAE,CAC1C,oBAAA,uBAAA,MAAM,EAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,EAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAS,CAAC,CAAA;AAE3D,MAAM,qBAAqB,GACzB,CAAO,MAAkE,EAAE,EAAE,CAC7E,CACE,KAAQ,EACR,MAA8D,EAChC,EAAE,0BAChC,2BAAA,uBAAA,MAAM,EACI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,EAEzB,CAAC,CAAC,EAAE,CAAC,2BAAkB,MAAM,CAAC,CAAC,CAAC,CAAQ,CAAC,CAAC,EAC1C,MAAM,CAAC,iBAAiB,CACzB,CAAS,CAAA;AAEhB,MAAM,CAAC,MAAM,IAAI,2BACG,wBAAe,OAAO,CAAC,EAAnC,OAAO,4BAEX,iCAAA,2BAAA,OAAO,CAAC,MAAM,EACA,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,iBAAiB,CAAC,EAC/B,CAAC,CAAC,EAHlB,GAAG,wBAMP,iCAAA,2BAAA,OAAO,CAAC,MAAM,EACA,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,iBAAiB,CAAC,EACpC,CAAC,CAAC,EAHlB,QAAQ;IAKd,MAAM,YAAY,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAA;IAClD,MAAM,cAAc,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAA;IAEtD,OAAO;QACL,GAAG;QACH,QAAQ;QACR,YAAY;QACZ,cAAc;KACf,CAAA;IACD,CAAA;AAGF,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAA,GAAG,EAAkB,CAAA;AACnD,MAAM,CAAC,MAAM,kBAAkB,GAAG,uBAAa,cAAc,EAAE,IAAI,CAAC,CAAA"}
|
package/DiscordREST/index.js
CHANGED
|
@@ -1,50 +1,50 @@
|
|
|
1
1
|
import * as tsplus_module_1 from "dfx/_common";
|
|
2
2
|
import * as tsplus_module_2 from "@effect/io/Effect";
|
|
3
|
-
import * as tsplus_module_3 from "@
|
|
4
|
-
import * as tsplus_module_4 from "@fp-ts/
|
|
3
|
+
import * as tsplus_module_3 from "@effect/data/Duration";
|
|
4
|
+
import * as tsplus_module_4 from "@fp-ts/core/Option";
|
|
5
5
|
import * as tsplus_module_5 from "@effect/io/Config/Secret";
|
|
6
|
-
import * as tsplus_module_6 from "@
|
|
6
|
+
import * as tsplus_module_6 from "@effect/data/HashSet";
|
|
7
7
|
import * as tsplus_module_7 from "@effect/io/Ref";
|
|
8
8
|
import * as tsplus_module_8 from "dfx";
|
|
9
9
|
import * as tsplus_module_9 from "@effect/io/Layer";
|
|
10
|
-
import { millis } from "@
|
|
10
|
+
import { millis } from "@effect/data/Duration";
|
|
11
11
|
import Pkg from "../package.json" assert { type: "json" };
|
|
12
12
|
import { rateLimitFromHeaders, retryAfter, routeFromConfig } from "./utils.js";
|
|
13
|
-
const make = tsplus_module_2.flatMap(http => tsplus_module_2.flatMap(({ token, rest }) => tsplus_module_2.flatMap(log => tsplus_module_2.flatMap(store => tsplus_module_2.flatMap(({ maybeWait }) => {
|
|
13
|
+
const make = tsplus_module_2.flatMap(tsplus_module_2.service(tsplus_module_8.Http), http => tsplus_module_2.flatMap(tsplus_module_2.service(tsplus_module_8.DiscordConfig.DiscordConfig), ({ token, rest }) => tsplus_module_2.flatMap(tsplus_module_2.service(tsplus_module_8.Log.Log), log => tsplus_module_2.flatMap(tsplus_module_2.service(tsplus_module_8.RateLimitStore), store => tsplus_module_2.flatMap(tsplus_module_2.service(tsplus_module_8.RateLimiter), ({ maybeWait }) => {
|
|
14
14
|
const globalRateLimit = maybeWait("dfx.rest.global", rest.globalRateLimit.window, rest.globalRateLimit.limit);
|
|
15
|
-
return tsplus_module_2.map(badRoutesRef => {
|
|
15
|
+
return tsplus_module_2.map(tsplus_module_7.make(tsplus_module_6.empty()), badRoutesRef => {
|
|
16
16
|
const addBadRoute = (route) => tsplus_module_2.collectAllParDiscard([
|
|
17
17
|
log.info("DiscordREST", "addBadRoute", route),
|
|
18
|
-
tsplus_module_7.update(badRoutesRef,
|
|
18
|
+
tsplus_module_7.update(badRoutesRef, s => tsplus_module_6.add(s, route)),
|
|
19
19
|
store.incrementCounter("dfx.rest.invalid", tsplus_module_3.minutes(10).millis, 10000),
|
|
20
20
|
]);
|
|
21
|
-
const isBadRoute = (route) => tsplus_module_2.map((
|
|
22
|
-
const removeBadRoute = (route) => tsplus_module_7.update(badRoutesRef,
|
|
23
|
-
const invalidRateLimit = (route) => tsplus_module_2.asUnit(tsplus_module_2.tap((
|
|
21
|
+
const isBadRoute = (route) => tsplus_module_2.map(tsplus_module_7.get(badRoutesRef), s => tsplus_module_6.has(s, route));
|
|
22
|
+
const removeBadRoute = (route) => tsplus_module_7.update(badRoutesRef, s => tsplus_module_6.remove(s, route));
|
|
23
|
+
const invalidRateLimit = (route) => tsplus_module_2.asUnit(tsplus_module_2.tap(isBadRoute(route), invalid => invalid
|
|
24
24
|
? maybeWait("dfx.rest.invalid", tsplus_module_3.minutes(10), 10000)
|
|
25
|
-
: tsplus_module_2.unit())
|
|
25
|
+
: tsplus_module_2.unit()));
|
|
26
26
|
// Request rate limiting
|
|
27
27
|
const requestRateLimit = (path, init) => (() => {
|
|
28
28
|
const route = routeFromConfig(path, init);
|
|
29
|
-
return tsplus_module_2.flatMap(maybeBucket => {
|
|
29
|
+
return tsplus_module_2.flatMap(store.getBucketForRoute(route), maybeBucket => {
|
|
30
30
|
const bucket = tsplus_module_4.getOrElse(() => ({
|
|
31
31
|
key: `?.${route}`,
|
|
32
32
|
resetAfter: 5000,
|
|
33
33
|
limit: 1,
|
|
34
34
|
}))(maybeBucket);
|
|
35
35
|
const resetAfter = millis(bucket.resetAfter);
|
|
36
|
-
return tsplus_module_2.flatMap(() => tsplus_module_2.map(
|
|
37
|
-
})
|
|
36
|
+
return tsplus_module_2.flatMap(invalidRateLimit(route), () => tsplus_module_2.map(maybeWait(`dfx.rest.${bucket.key}`, resetAfter, bucket.limit), () => void 0));
|
|
37
|
+
});
|
|
38
38
|
})();
|
|
39
39
|
// Update rate limit buckets
|
|
40
40
|
const updateBuckets = (path, init, response) => tsplus_module_2.ignore((() => {
|
|
41
41
|
const route = routeFromConfig(path, init);
|
|
42
|
-
return tsplus_module_2.flatMap(({ bucket, retryAfter, limit, remaining }) => {
|
|
42
|
+
return tsplus_module_2.flatMap(tsplus_module_2.fromOption(rateLimitFromHeaders(response.headers)), ({ bucket, retryAfter, limit, remaining }) => {
|
|
43
43
|
const effectsToRun = [
|
|
44
44
|
removeBadRoute(route),
|
|
45
45
|
store.putBucketRoute(route, bucket),
|
|
46
46
|
];
|
|
47
|
-
return tsplus_module_2.flatMap(hasBucket => {
|
|
47
|
+
return tsplus_module_2.flatMap(store.hasBucket(bucket), hasBucket => {
|
|
48
48
|
if (!hasBucket || limit - 1 === remaining) {
|
|
49
49
|
effectsToRun.push(store.removeCounter(`dfx.rest.?.${route}`), store.putBucket({
|
|
50
50
|
key: bucket,
|
|
@@ -52,35 +52,35 @@ const make = tsplus_module_2.flatMap(http => tsplus_module_2.flatMap(({ token, r
|
|
|
52
52
|
limit: !hasBucket && remaining > 0 ? remaining : limit,
|
|
53
53
|
}));
|
|
54
54
|
}
|
|
55
|
-
return tsplus_module_2.map(() => void 0)
|
|
56
|
-
})
|
|
57
|
-
})
|
|
55
|
+
return tsplus_module_2.map(tsplus_module_2.collectAllParDiscard(effectsToRun), () => void 0);
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
58
|
})());
|
|
59
|
-
const request = (path, init = {}) => tsplus_module_2.catchTag(
|
|
59
|
+
const request = (path, init = {}) => tsplus_module_2.catchTag(tsplus_module_2.flatMap(requestRateLimit(path, init), () => tsplus_module_2.flatMap(globalRateLimit, () => tsplus_module_2.flatMap(http.requestWithJson(`${rest.baseUrl}${path}`, {
|
|
60
|
+
...init,
|
|
61
|
+
headers: {
|
|
62
|
+
...(init?.headers ?? {}),
|
|
63
|
+
Authorization: `Bot ${tsplus_module_5.value(token)}`,
|
|
64
|
+
"User-Agent": `DiscordBot (https://github.com/tim-smart/dfx, ${Pkg.version})`,
|
|
65
|
+
},
|
|
66
|
+
}), response => tsplus_module_2.map(updateBuckets(path, init, response.response), () => response)))), "StatusCodeError", e => {
|
|
60
67
|
switch (e.code) {
|
|
61
68
|
case 403:
|
|
62
|
-
return tsplus_module_2.flatMap(
|
|
69
|
+
return tsplus_module_2.flatMap(tsplus_module_2.collectAllParDiscard([
|
|
63
70
|
log.info("DiscordREST", "403", path),
|
|
64
71
|
addBadRoute(routeFromConfig(path, init)),
|
|
65
72
|
updateBuckets(path, init, e.response),
|
|
66
|
-
]));
|
|
73
|
+
]), () => tsplus_module_2.fail(e));
|
|
67
74
|
case 429:
|
|
68
|
-
return tsplus_module_2.flatMap(
|
|
75
|
+
return tsplus_module_2.flatMap(tsplus_module_2.collectAllParDiscard([
|
|
69
76
|
log.info("DiscordREST", "429", path),
|
|
70
77
|
addBadRoute(routeFromConfig(path, init)),
|
|
71
78
|
updateBuckets(path, init, e.response),
|
|
72
79
|
tsplus_module_2.sleep(tsplus_module_4.getOrElse(() => tsplus_module_3.seconds(5))(retryAfter(e.response.headers))),
|
|
73
|
-
]));
|
|
80
|
+
]), () => request(path, init));
|
|
74
81
|
}
|
|
75
82
|
return tsplus_module_2.fail(e);
|
|
76
|
-
})
|
|
77
|
-
...init,
|
|
78
|
-
headers: {
|
|
79
|
-
...(init?.headers ?? {}),
|
|
80
|
-
Authorization: `Bot ${tsplus_module_5.value(token)}`,
|
|
81
|
-
"User-Agent": `DiscordBot (https://github.com/tim-smart/dfx, ${Pkg.version})`,
|
|
82
|
-
},
|
|
83
|
-
})))(globalRateLimit))(requestRateLimit(path, init)));
|
|
83
|
+
});
|
|
84
84
|
const routes = tsplus_module_1.Discord.createRoutes(({ method, url, params, options = {}, }) => {
|
|
85
85
|
const hasBody = method !== "GET" && method !== "DELETE";
|
|
86
86
|
let hasFormData = typeof options?.body?.append === "function";
|
|
@@ -115,8 +115,8 @@ const make = tsplus_module_2.flatMap(http => tsplus_module_2.flatMap(({ token, r
|
|
|
115
115
|
});
|
|
116
116
|
});
|
|
117
117
|
return { request, ...routes };
|
|
118
|
-
})
|
|
119
|
-
})
|
|
118
|
+
});
|
|
119
|
+
})))));
|
|
120
120
|
export const DiscordREST = tsplus_module_1.Tag();
|
|
121
121
|
export const LiveDiscordREST = tsplus_module_9.effect(DiscordREST, make);
|
|
122
122
|
//# sourceMappingURL=index.js.map
|
package/DiscordREST/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/DiscordREST/index.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/DiscordREST/index.ts"],"names":[],"mappings":"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"}
|
package/DiscordREST/utils.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
export declare const routeFromConfig: (path: string, init: RequestInit) => string;
|
|
2
|
-
export declare const numberHeader: (headers: Headers) => (key: string) => import("../
|
|
3
|
-
export declare const retryAfter: (headers: Headers) => import("../
|
|
4
|
-
export declare const rateLimitFromHeaders: (headers: Headers) => import("../
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
2
|
+
export declare const numberHeader: (headers: Headers) => (key: string) => import("../_common.js").Maybe<number>;
|
|
3
|
+
export declare const retryAfter: (headers: Headers) => import("../_common.js").Maybe<import("../_common.js").Duration>;
|
|
4
|
+
export declare const rateLimitFromHeaders: (headers: Headers) => import("../_common.js").Maybe<{
|
|
5
|
+
bucket: string;
|
|
6
|
+
retryAfter: import("../_common.js").Duration;
|
|
7
|
+
limit: number;
|
|
8
|
+
remaining: number;
|
|
9
9
|
}>;
|
|
10
10
|
export type RateLimitDetails = ReturnType<typeof rateLimitFromHeaders>;
|
package/DiscordREST/utils.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as tsplus_module_1 from "@fp-ts/
|
|
2
|
-
import * as tsplus_module_2 from "@
|
|
1
|
+
import * as tsplus_module_1 from "@fp-ts/core/Option";
|
|
2
|
+
import * as tsplus_module_2 from "@effect/data/Duration";
|
|
3
3
|
const majorResources = ["channels", "guilds", "webhooks"];
|
|
4
4
|
export const routeFromConfig = (path, init) => {
|
|
5
5
|
const method = (init?.method ?? "get").toLowerCase();
|
|
@@ -11,7 +11,7 @@ export const routeFromConfig = (path, init) => {
|
|
|
11
11
|
.replace(/\/reactions\/(.*)/, "/reactions");
|
|
12
12
|
return `${method}-${routeURL}`;
|
|
13
13
|
};
|
|
14
|
-
export const numberHeader = (headers) => (key) => tsplus_module_1.filter(
|
|
14
|
+
export const numberHeader = (headers) => (key) => tsplus_module_1.filter(n => !isNaN(n))(tsplus_module_1.map(parseFloat)(tsplus_module_1.fromNullable(headers.get(key))));
|
|
15
15
|
export const retryAfter = (headers) => tsplus_module_1.map(tsplus_module_2.seconds)(tsplus_module_1.catchAll(() => numberHeader(headers)("retry-after"))(numberHeader(headers)("x-ratelimit-reset-after")));
|
|
16
16
|
export const rateLimitFromHeaders = (headers) => tsplus_module_1.struct({
|
|
17
17
|
bucket: tsplus_module_1.fromNullable(headers.get("x-ratelimit-bucket")),
|
package/DiscordREST/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/DiscordREST/utils.ts"],"names":[],"mappings":";;AAAA,MAAM,cAAc,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAU,CAAA;AAElE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,IAAiB,EAAE,EAAE;IACjE,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAA;IAEpD,uBAAuB;IACvB,MAAM,QAAQ,GAAG,IAAI;SAClB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACb,OAAO,CAAC,iCAAiC,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAC9D,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAC3D;QACD,kBAAkB;SACjB,OAAO,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAA;IAE7C,OAAO,GAAG,MAAM,IAAI,QAAQ,EAAE,CAAA;AAChC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAgB,EAAE,EAAE,CAAC,CAAC,GAAW,EAAE,EAAE,CAChE,uBAEU,CAAC,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/DiscordREST/utils.ts"],"names":[],"mappings":";;AAAA,MAAM,cAAc,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAU,CAAA;AAElE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,IAAiB,EAAE,EAAE;IACjE,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAA;IAEpD,uBAAuB;IACvB,MAAM,QAAQ,GAAG,IAAI;SAClB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACb,OAAO,CAAC,iCAAiC,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAC9D,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAC3D;QACD,kBAAkB;SACjB,OAAO,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAA;IAE7C,OAAO,GAAG,MAAM,IAAI,QAAQ,EAAE,CAAA;AAChC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAgB,EAAE,EAAE,CAAC,CAAC,GAAW,EAAE,EAAE,CAChE,uBAEU,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAFxB,oBACO,UAAU,EADjB,6BAAmB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAClB,CACO,CAAA;AAE3B,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAgB,EAAE,EAAE,CAC7C,6CAAA,yBACY,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,EADtD,YAAY,CAAC,OAAO,CAAC,CAAC,yBAAyB,CAAC,CACO,CAC/B,CAAA;AAE1B,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,OAAgB,EAAE,EAAE,CACvD,uBAAa;IACX,MAAM,EAAE,6BAAmB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAC7D,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC;IAC/B,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,mBAAmB,CAAC;IACjD,SAAS,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,uBAAuB,CAAC;CAC1D,CAAC,CAAA"}
|