dfx 0.21.22 → 0.22.0
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/memory.d.ts +2 -2
- package/Cache/memoryTTL.d.ts +2 -2
- package/Cache/memoryTTL.js +11 -11
- package/Cache/memoryTTL.js.map +1 -1
- package/Cache/prelude.d.ts +5 -5
- package/Cache/prelude.js +52 -52
- package/Cache/prelude.js.map +1 -1
- package/Cache.d.ts +69 -0
- package/{Cache/index.js → Cache.js} +15 -15
- package/Cache.js.map +1 -0
- package/{DiscordConfig/index.d.ts → DiscordConfig.d.ts} +3 -3
- package/{DiscordConfig/index.js → DiscordConfig.js} +2 -2
- package/DiscordConfig.js.map +1 -0
- package/DiscordGateway/{DiscordWS/index.d.ts → DiscordWS.d.ts} +5 -5
- package/DiscordGateway/{DiscordWS/index.js → DiscordWS.js} +9 -9
- package/DiscordGateway/DiscordWS.js.map +1 -0
- package/DiscordGateway/Shard/heartbeats.d.ts +1 -1
- package/DiscordGateway/Shard/heartbeats.js +7 -7
- package/DiscordGateway/Shard/heartbeats.js.map +1 -1
- package/DiscordGateway/Shard/identify.d.ts +1 -1
- package/DiscordGateway/Shard/identify.js +3 -3
- package/DiscordGateway/Shard/identify.js.map +1 -1
- package/DiscordGateway/Shard/invalidSession.d.ts +1 -1
- package/DiscordGateway/Shard/invalidSession.js +1 -1
- package/DiscordGateway/Shard/invalidSession.js.map +1 -1
- package/DiscordGateway/Shard/utils.d.ts +2 -2
- package/DiscordGateway/Shard/utils.js +3 -3
- package/DiscordGateway/Shard/utils.js.map +1 -1
- package/DiscordGateway/Shard.d.ts +9 -0
- package/DiscordGateway/Shard.js +44 -0
- package/DiscordGateway/Shard.js.map +1 -0
- package/DiscordGateway/{ShardStore/index.d.ts → ShardStore.d.ts} +2 -2
- package/DiscordGateway/{ShardStore/index.js → ShardStore.js} +1 -1
- package/DiscordGateway/ShardStore.js.map +1 -0
- package/DiscordGateway/Sharder.d.ts +16 -0
- package/DiscordGateway/Sharder.js +42 -0
- package/DiscordGateway/Sharder.js.map +1 -0
- package/DiscordGateway/{WS/index.d.ts → WS.d.ts} +1 -1
- package/DiscordGateway/{WS/index.js → WS.js} +10 -10
- package/DiscordGateway/WS.js.map +1 -0
- package/DiscordGateway.d.ts +12 -0
- package/DiscordGateway.js +20 -0
- package/DiscordGateway.js.map +1 -0
- package/DiscordREST/types.d.ts +5 -7
- package/DiscordREST/utils.d.ts +1 -1
- package/DiscordREST/utils.js +3 -4
- package/DiscordREST/utils.js.map +1 -1
- package/DiscordREST.d.ts +194 -0
- package/DiscordREST.js +120 -0
- package/DiscordREST.js.map +1 -0
- package/Helpers/interactions.js +10 -10
- package/Helpers/interactions.js.map +1 -1
- package/Helpers/permissions.d.ts +2 -2
- package/Helpers/permissions.js +4 -4
- package/Helpers/permissions.js.map +1 -1
- package/Interactions/context.d.ts +6 -6
- package/Interactions/context.js +6 -6
- package/Interactions/context.js.map +1 -1
- package/Interactions/gateway.d.ts +4 -2
- package/Interactions/gateway.js +6 -7
- package/Interactions/gateway.js.map +1 -1
- package/Interactions/handlers.js +6 -6
- package/Interactions/handlers.js.map +1 -1
- package/Interactions/index.d.ts +3 -2
- package/Interactions/index.js +5 -4
- package/Interactions/index.js.map +1 -1
- package/Interactions/webhook.d.ts +3 -3
- package/Interactions/webhook.js +9 -9
- package/Interactions/webhook.js.map +1 -1
- package/Log.d.ts +12 -0
- package/{Log/index.js → Log.js} +1 -1
- package/Log.js.map +1 -0
- package/RateLimit/memory.d.ts +1 -1
- package/RateLimit/memory.js +3 -3
- package/RateLimit/memory.js.map +1 -1
- package/{RateLimit/index.d.ts → RateLimit.d.ts} +6 -6
- package/{RateLimit/index.js → RateLimit.js} +8 -8
- package/RateLimit.js.map +1 -0
- package/gateway.d.ts +10 -10
- package/gateway.js +11 -12
- package/gateway.js.map +1 -1
- package/global.d.ts +1 -1
- package/index.d.ts +5 -6
- package/index.js +5 -6
- package/index.js.map +1 -1
- package/package.json +8 -6
- package/webhooks.d.ts +4 -4
- package/webhooks.js +3 -4
- package/webhooks.js.map +1 -1
- package/Cache/index.d.ts +0 -69
- package/Cache/index.js.map +0 -1
- package/DiscordConfig/index.js.map +0 -1
- package/DiscordGateway/DiscordWS/index.js.map +0 -1
- package/DiscordGateway/Shard/index.d.ts +0 -9
- package/DiscordGateway/Shard/index.js +0 -44
- package/DiscordGateway/Shard/index.js.map +0 -1
- package/DiscordGateway/ShardStore/index.js.map +0 -1
- package/DiscordGateway/Sharder/index.d.ts +0 -16
- package/DiscordGateway/Sharder/index.js +0 -42
- package/DiscordGateway/Sharder/index.js.map +0 -1
- package/DiscordGateway/WS/index.js.map +0 -1
- package/DiscordGateway/index.d.ts +0 -12
- package/DiscordGateway/index.js +0 -20
- package/DiscordGateway/index.js.map +0 -1
- package/DiscordREST/index.d.ts +0 -188
- package/DiscordREST/index.js +0 -122
- package/DiscordREST/index.js.map +0 -1
- package/Http/index.d.ts +0 -37
- package/Http/index.js +0 -51
- package/Http/index.js.map +0 -1
- package/Log/index.d.ts +0 -12
- package/Log/index.js.map +0 -1
- package/RateLimit/index.js.map +0 -1
|
@@ -22,9 +22,9 @@ const resume = (token, ready, seq) => SendEvents.resume({
|
|
|
22
22
|
session_id: ready.session_id,
|
|
23
23
|
seq,
|
|
24
24
|
});
|
|
25
|
-
const identifyOrResume = (opts, ready, seq) => tsplus_module_3.flatMap(readyEvent => tsplus_module_3.map(
|
|
25
|
+
const identifyOrResume = (opts, ready, seq) => tsplus_module_3.flatMap(tsplus_module_2.get(ready), readyEvent => tsplus_module_3.map(tsplus_module_2.get(seq), seqNumber => tsplus_module_1.match(tsplus_module_1.struct({
|
|
26
26
|
readyEvent,
|
|
27
27
|
seqNumber,
|
|
28
|
-
})))(
|
|
29
|
-
export const fromRaw = (source, { latestReady, latestSequence, ...opts }) => tsplus_module_5.mapEffect(
|
|
28
|
+
}), () => identify(opts), ({ readyEvent, seqNumber }) => resume(opts.token, readyEvent, seqNumber))));
|
|
29
|
+
export const fromRaw = (source, { latestReady, latestSequence, ...opts }) => tsplus_module_5.mapEffect(opCode(source)(10 /* Discord.GatewayOpcode.HELLO */), () => identifyOrResume(opts, latestReady, latestSequence));
|
|
30
30
|
//# sourceMappingURL=identify.js.map
|
|
@@ -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,sBAAA,uBAAa;IAClB,UAAU;IACV,SAAS;CACV,CAAC,EACA,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EACpB,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,CACzE,EACD,CAAA;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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { Stream, Discord, Ref, Maybe } from "dfx/_common";
|
|
2
2
|
import { DiscordWS } from "dfx/gateway";
|
|
3
|
-
export declare const fromRaw: <R, E>(raw: import("
|
|
3
|
+
export declare const fromRaw: <R, E>(raw: import("@effect-http/client/_common").Stream<R, E, import("../../types.js").GatewayPayload<any>>, latestReady: Ref<Maybe<Discord.ReadyEvent>>) => import("@effect-http/client/_common").Stream<R, E, import("../DiscordWS.js").Message>;
|
|
@@ -5,5 +5,5 @@ 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
|
-
export declare const opCode: <R, E>(source: import("
|
|
3
|
-
export declare const latest: <T>(f: (p: Discord.GatewayPayload) => import("../../_common.js").Maybe<T>) => import("
|
|
2
|
+
export declare const opCode: <R, E>(source: import("@effect-http/client/_common").Stream<R, E, import("../../types.js").GatewayPayload<any>>) => <T = any>(code: Discord.GatewayOpcode) => import("@effect-http/client/_common").Stream<R, E, import("../../types.js").GatewayPayload<any>>;
|
|
3
|
+
export declare const latest: <T>(f: (p: Discord.GatewayPayload) => import("../../_common.js").Maybe<T>) => import("@effect-http/client/_common").Effect<never, never, readonly [import("../../_common.js").Ref<import("../../_common.js").Maybe<T>>, (p: import("../../types.js").GatewayPayload<any>) => import("@effect-http/client/_common").Effect<never, never, void>]>;
|
|
@@ -3,7 +3,7 @@ import * as tsplus_module_2 from "@effect/io/Effect";
|
|
|
3
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 "@fp-ts/core/Function";
|
|
6
|
-
export const opCode = (source) => (code) => tsplus_module_1.filter((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(tsplus_module_3.some(a))
|
|
8
|
-
export const latest = (f) => tsplus_module_2.map(ref => [ref, maybeUpdateRef(f, ref)])
|
|
6
|
+
export const opCode = (source) => (code) => tsplus_module_1.filter(source, (p) => p.op === code);
|
|
7
|
+
const maybeUpdateRef = (f, ref) => tsplus_module_5.flow(f, o => tsplus_module_3.match(o, tsplus_module_2.unit, a => tsplus_module_4.set(ref, tsplus_module_3.some(a))));
|
|
8
|
+
export const latest = (f) => tsplus_module_2.map(tsplus_module_4.make(tsplus_module_3.none()), ref => [ref, maybeUpdateRef(f, ref)]);
|
|
9
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,sBAAA,CAAC,wBAAoB,CAAC,CAAC,EAAE,CAAC,oBAAA,GAAG,EAAK,qBAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAEpE,MAAM,CAAC,MAAM,MAAM,GAAG,CAAI,CAA0C,EAAE,EAAE,CACtE,oBAAA,qBAAmB,sBAAY,CAAC,EAC9B,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,EAAE,GAAG,CAAC,CAAU,CAC9C,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { DiscordWS } from "dfx/gateway";
|
|
2
|
+
import { Discord } from "dfx/_common";
|
|
3
|
+
export declare const make: (shard: [id: number, count: number]) => import("@effect-http/client/_common").Effect<import("../_common.js").Scope | import("../DiscordConfig.js").DiscordConfig | import("../Log.js").Log | import("../RateLimit.js").RateLimiter | import("./DiscordWS.js").DiscordWSCodec, never, {
|
|
4
|
+
run: import("@effect-http/client/_common").Effect<never, never, void>;
|
|
5
|
+
raw: import("@effect-http/client/_common").Stream<never, never, import("../types.js").GatewayPayload<any>>;
|
|
6
|
+
dispatch: import("@effect-http/client/_common").Stream<never, never, import("../types.js").GatewayPayload<any>>;
|
|
7
|
+
send: (p: Discord.GatewayPayload) => import("@effect-http/client/_common").Effect<never, never, boolean>;
|
|
8
|
+
reconnect: import("@effect-http/client/_common").Effect<never, never, boolean>;
|
|
9
|
+
}>;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import * as tsplus_module_1 from "@effect/io/Effect";
|
|
2
|
+
import * as tsplus_module_2 from "dfx/gateway";
|
|
3
|
+
import * as tsplus_module_3 from "@effect/stream/Stream";
|
|
4
|
+
import * as tsplus_module_4 from "@effect/io/Config/Secret";
|
|
5
|
+
import * as tsplus_module_5 from "dfx/_common";
|
|
6
|
+
import * as tsplus_module_6 from "@fp-ts/core/Option";
|
|
7
|
+
import * as tsplus_module_7 from "@effect/data/Duration";
|
|
8
|
+
import * as tsplus_module_8 from "@effect/io/Queue";
|
|
9
|
+
import * as tsplus_module_9 from "dfx";
|
|
10
|
+
import * as Heartbeats from "./Shard/heartbeats.js";
|
|
11
|
+
import * as Identify from "./Shard/identify.js";
|
|
12
|
+
import * as InvalidSession from "./Shard/invalidSession.js";
|
|
13
|
+
import * as Utils from "./Shard/utils.js";
|
|
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
|
+
const send = (p) => outboundQueue.offer(p);
|
|
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(tsplus_module_6.filter((p) => p.op === 0 /* Discord.GatewayOpcode.DISPATCH */ && p.t === "READY")(tsplus_module_6.some(p)), p => p.d)), ([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_6.map(tsplus_module_6.filter((p) => p.op === 0 /* Discord.GatewayOpcode.DISPATCH */ && p.t === "READY")(tsplus_module_6.some(p)), p => p.d), () => tsplus_module_1.unit(), a => socket.setUrl(a.resume_gateway_url));
|
|
20
|
+
const updateRefs = tsplus_module_3.runDrain(tsplus_module_3.tap(tsplus_module_3.tap(tsplus_module_3.tap(raw, updateLatestReady), updateLatestSequence), maybeUpdateUrl));
|
|
21
|
+
// heartbeats
|
|
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
|
+
// identify
|
|
25
|
+
const identifyEffects = tsplus_module_3.runForEach(Identify.fromRaw(raw, {
|
|
26
|
+
token: tsplus_module_4.value(token),
|
|
27
|
+
shard,
|
|
28
|
+
intents: gateway.intents,
|
|
29
|
+
presence: gateway.presence,
|
|
30
|
+
latestSequence,
|
|
31
|
+
latestReady,
|
|
32
|
+
}), send);
|
|
33
|
+
// invalid session
|
|
34
|
+
const invalidEffects = tsplus_module_3.runForEach(InvalidSession.fromRaw(raw, latestReady), send);
|
|
35
|
+
return {
|
|
36
|
+
run: tsplus_module_1.asUnit(tsplus_module_1.zipPar(tsplus_module_1.zipPar(tsplus_module_1.zipPar(updateRefs, heartbeatEffects), identifyEffects), invalidEffects)),
|
|
37
|
+
raw,
|
|
38
|
+
dispatch,
|
|
39
|
+
send: (p) => send(p),
|
|
40
|
+
reconnect: send(tsplus_module_2.WS.Reconnect),
|
|
41
|
+
};
|
|
42
|
+
}))));
|
|
43
|
+
})));
|
|
44
|
+
//# sourceMappingURL=Shard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Shard.js","sourceRoot":"","sources":["../../src/DiscordGateway/Shard.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,5 +8,5 @@ export interface ShardStore {
|
|
|
8
8
|
allClaimed: (totalCount: number) => Effect<never, never, boolean>;
|
|
9
9
|
heartbeat?: (shardId: number) => Effect<never, never, void>;
|
|
10
10
|
}
|
|
11
|
-
export declare const ShardStore: import("
|
|
12
|
-
export declare const LiveMemoryShardStore: import("
|
|
11
|
+
export declare const ShardStore: import("@effect-http/client/_common").Tag<ShardStore>;
|
|
12
|
+
export declare const LiveMemoryShardStore: import("../_common.js").Layer<never, never, ShardStore>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShardStore.js","sourceRoot":"","sources":["../../src/DiscordGateway/ShardStore.ts"],"names":[],"mappings":";;;;AAUA,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAA,GAAG,EAAc,CAAA;AAE3C,wDAAwD;AACxD,MAAM,WAAW,GAAG,GAAe,EAAE;IACnC,IAAI,SAAS,GAAG,CAAC,CAAA;IAEjB,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAC1B,qBAAY,GAAG,EAAE;YACf,IAAI,SAAS,IAAI,UAAU,EAAE;gBAC3B,OAAO,sBAAY,CAAA;aACpB;YAED,MAAM,EAAE,GAAG,SAAS,CAAA;YACpB,SAAS,EAAE,CAAA;YACX,OAAO,qBAAW,EAAE,CAAC,CAAA;QACvB,CAAC,CAAC;QAEJ,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,qBAAY,GAAG,EAAE,CAAC,SAAS,IAAI,UAAU,CAAC;KACrE,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,qBAAW,UAAU,EAAE,WAAW,CAAC,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Effect, Discord } from "dfx/_common";
|
|
2
|
+
import { ShardStore } from "./ShardStore.js";
|
|
3
|
+
declare const make: import("@effect-http/client/_common").Effect<import("../_common.js").Scope | import("../DiscordREST.js").DiscordREST | import("../DiscordConfig.js").DiscordConfig | ShardStore | import("../Log.js").Log | import("../RateLimit.js").RateLimiter | import("./DiscordWS.js").DiscordWSCodec, never, {
|
|
4
|
+
shards: import("@effect-http/client/_common").Stream<never, never, {
|
|
5
|
+
run: import("@effect-http/client/_common").Effect<never, never, void>;
|
|
6
|
+
raw: import("@effect-http/client/_common").Stream<never, never, import("../types.js").GatewayPayload<any>>;
|
|
7
|
+
dispatch: import("@effect-http/client/_common").Stream<never, never, import("../types.js").GatewayPayload<any>>;
|
|
8
|
+
send: (p: import("../types.js").GatewayPayload<any>) => import("@effect-http/client/_common").Effect<never, never, boolean>;
|
|
9
|
+
reconnect: import("@effect-http/client/_common").Effect<never, never, boolean>;
|
|
10
|
+
}>;
|
|
11
|
+
}>;
|
|
12
|
+
export interface Sharder extends Effect.Success<typeof make> {
|
|
13
|
+
}
|
|
14
|
+
export declare const Sharder: import("@effect-http/client/_common").Tag<Sharder>;
|
|
15
|
+
export declare const LiveSharder: import("../_common.js").Layer<import("../DiscordREST.js").DiscordREST | import("../DiscordConfig.js").DiscordConfig | ShardStore | import("../Log.js").Log | import("../RateLimit.js").RateLimiter | import("./DiscordWS.js").DiscordWSCodec, never, Sharder>;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import * as tsplus_module_1 from "@effect/stream/Stream";
|
|
2
|
+
import * as tsplus_module_2 from "dfx/gateway";
|
|
3
|
+
import * as tsplus_module_3 from "@effect/io/Effect";
|
|
4
|
+
import * as tsplus_module_4 from "@effect/stream/GroupBy";
|
|
5
|
+
import * as tsplus_module_5 from "@effect/data/Duration";
|
|
6
|
+
import * as tsplus_module_6 from "@fp-ts/core/Option";
|
|
7
|
+
import * as tsplus_module_7 from "dfx";
|
|
8
|
+
import * as tsplus_module_8 from "dfx/_common";
|
|
9
|
+
import * as tsplus_module_9 from "@effect/io/Layer";
|
|
10
|
+
import { millis } from "@effect/data/Duration";
|
|
11
|
+
import { ShardStore } from "./ShardStore.js";
|
|
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
|
+
const configs = (totalCount) => {
|
|
14
|
+
const claimId = (sharderCount) => tsplus_module_3.flatMap(store
|
|
15
|
+
.claimId({
|
|
16
|
+
totalCount,
|
|
17
|
+
sharderCount,
|
|
18
|
+
}), a => tsplus_module_6.match(a, () => tsplus_module_3.delay(claimId(sharderCount), tsplus_module_5.minutes(3)), id => tsplus_module_3.succeed(id)));
|
|
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
|
+
id,
|
|
21
|
+
totalCount,
|
|
22
|
+
}));
|
|
23
|
+
};
|
|
24
|
+
return tsplus_module_3.flatMap(tsplus_module_3.catchAll(tsplus_module_3.flatMap(rest
|
|
25
|
+
.getGatewayBot(), r => r.json), () => tsplus_module_3.succeed({
|
|
26
|
+
url: "wss://gateway.discord.gg/",
|
|
27
|
+
shards: 1,
|
|
28
|
+
session_start_limit: {
|
|
29
|
+
total: 0,
|
|
30
|
+
remaining: 0,
|
|
31
|
+
reset_after: 0,
|
|
32
|
+
max_concurrency: 1,
|
|
33
|
+
},
|
|
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
|
+
export const Sharder = tsplus_module_8.Tag();
|
|
41
|
+
export const LiveSharder = tsplus_module_9.scoped(Sharder, make);
|
|
42
|
+
//# sourceMappingURL=Sharder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Sharder.js","sourceRoot":"","sources":["../../src/DiscordGateway/Sharder.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,4 +17,4 @@ export declare class WebSocketCloseError {
|
|
|
17
17
|
readonly _tag = "WebSocketCloseError";
|
|
18
18
|
constructor(code: number, reason: string);
|
|
19
19
|
}
|
|
20
|
-
export declare const make: (url: Ref<string>, takeOutbound: Effect<never, never, Message>) => import("
|
|
20
|
+
export declare const make: (url: Ref<string>, takeOutbound: Effect<never, never, Message>) => import("@effect-http/client/_common").Stream<import("../Log.js").Log, WebSocketError | WebSocketCloseError, WebSocket.Data>;
|
|
@@ -22,14 +22,14 @@ 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();
|
|
@@ -45,7 +45,7 @@ const recv = (ws) => tsplus_module_3.asyncEffect(emit => tsplus_module_1.sync(()
|
|
|
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(e => e._tag === "WebSocketCloseError" && e.code === 1012))
|
|
62
|
-
})
|
|
63
|
-
//# sourceMappingURL=
|
|
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
|
+
//# sourceMappingURL=WS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WS.js","sourceRoot":"","sources":["../../src/DiscordGateway/WS.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Stream, Discord, Effect } from "dfx/_common";
|
|
2
|
+
import { Sharder } from "./DiscordGateway/Sharder.js";
|
|
3
|
+
export declare const make: import("@effect-http/client/_common").Effect<import("./_common.js").Scope | Sharder, never, {
|
|
4
|
+
raw: import("@effect-http/client/_common").Stream<never, never, import("./types.js").GatewayPayload<any>>;
|
|
5
|
+
dispatch: import("@effect-http/client/_common").Stream<never, never, import("./types.js").GatewayPayload<any>>;
|
|
6
|
+
fromDispatch: <K extends keyof import("./types.js").ReceiveEvents>(event: K) => import("@effect-http/client/_common").Stream<never, never, import("./types.js").ReceiveEvents[K]>;
|
|
7
|
+
handleDispatch: <K_1 extends keyof import("./types.js").ReceiveEvents, R1, E1, A>(event: K_1, handle: (event: import("./types.js").ReceiveEvents[K_1]) => import("@effect-http/client/_common").Effect<R1, E1, A>) => import("@effect-http/client/_common").Effect<R1, E1, void>;
|
|
8
|
+
}>;
|
|
9
|
+
export interface DiscordGateway extends Effect.Success<typeof make> {
|
|
10
|
+
}
|
|
11
|
+
export declare const DiscordGateway: import("@effect-http/client/_common").Tag<DiscordGateway>;
|
|
12
|
+
export declare const LiveDiscordGateway: import("./_common.js").Layer<Sharder, never, DiscordGateway>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as tsplus_module_1 from "@effect/stream/Stream";
|
|
2
|
+
import * as tsplus_module_2 from "@effect/io/Effect";
|
|
3
|
+
import * as tsplus_module_3 from "dfx/_common";
|
|
4
|
+
import * as tsplus_module_4 from "@effect/io/Layer";
|
|
5
|
+
import { Sharder } from "./DiscordGateway/Sharder.js";
|
|
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 => {
|
|
9
|
+
const fromDispatch = fromDispatchFactory(dispatch);
|
|
10
|
+
const handleDispatch = handleDispatchFactory(dispatch);
|
|
11
|
+
return {
|
|
12
|
+
raw,
|
|
13
|
+
dispatch,
|
|
14
|
+
fromDispatch,
|
|
15
|
+
handleDispatch,
|
|
16
|
+
};
|
|
17
|
+
})));
|
|
18
|
+
export const DiscordGateway = tsplus_module_3.Tag();
|
|
19
|
+
export const LiveDiscordGateway = tsplus_module_4.scoped(DiscordGateway, make);
|
|
20
|
+
//# sourceMappingURL=DiscordGateway.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DiscordGateway.js","sourceRoot":"","sources":["../src/DiscordGateway.ts"],"names":[],"mappings":";;;;AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AAErD,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/types.d.ts
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as Http from "@effect-http/client";
|
|
2
|
+
import { DiscordRESTError } from "dfx/DiscordREST";
|
|
2
3
|
import { Effect } from "dfx/_common";
|
|
3
|
-
export interface ResponseWithData<A> {
|
|
4
|
-
|
|
5
|
-
json: Effect<never, JsonParseError, A>;
|
|
6
|
-
text: Effect<never, never, string>;
|
|
7
|
-
blob: Effect<never, BlobError, Blob>;
|
|
4
|
+
export interface ResponseWithData<A> extends Http.response.Response {
|
|
5
|
+
readonly json: Effect<never, Http.HttpClientError, A>;
|
|
8
6
|
}
|
|
9
|
-
export type RestResponse<T> = Effect<never,
|
|
7
|
+
export type RestResponse<T> = Effect<never, DiscordRESTError, ResponseWithData<T>>;
|
package/DiscordREST/utils.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const routeFromConfig: (path: string,
|
|
1
|
+
export declare const routeFromConfig: (path: string, method: string) => string;
|
|
2
2
|
export declare const numberHeader: (headers: Headers) => (key: string) => import("../_common.js").Maybe<number>;
|
|
3
3
|
export declare const retryAfter: (headers: Headers) => import("../_common.js").Maybe<import("../_common.js").Duration>;
|
|
4
4
|
export declare const rateLimitFromHeaders: (headers: Headers) => import("../_common.js").Maybe<{
|
package/DiscordREST/utils.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import * as tsplus_module_1 from "@fp-ts/core/Option";
|
|
2
2
|
import * as tsplus_module_2 from "@effect/data/Duration";
|
|
3
3
|
const majorResources = ["channels", "guilds", "webhooks"];
|
|
4
|
-
export const routeFromConfig = (path,
|
|
5
|
-
const method = (init?.method ?? "get").toLowerCase();
|
|
4
|
+
export const routeFromConfig = (path, method) => {
|
|
6
5
|
// Only keep major ID's
|
|
7
6
|
const routeURL = path
|
|
8
7
|
.split("?")[0]
|
|
@@ -11,8 +10,8 @@ export const routeFromConfig = (path, init) => {
|
|
|
11
10
|
.replace(/\/reactions\/(.*)/, "/reactions");
|
|
12
11
|
return `${method}-${routeURL}`;
|
|
13
12
|
};
|
|
14
|
-
export const numberHeader = (headers) => (key) => tsplus_module_1.filter(tsplus_module_1.map(
|
|
15
|
-
export const retryAfter = (headers) => tsplus_module_1.map(
|
|
13
|
+
export const numberHeader = (headers) => (key) => tsplus_module_1.filter(n => !isNaN(n))(tsplus_module_1.map(tsplus_module_1.fromNullable(headers.get(key)), parseFloat));
|
|
14
|
+
export const retryAfter = (headers) => tsplus_module_1.map(tsplus_module_1.orElse(numberHeader(headers)("x-ratelimit-reset-after"), () => numberHeader(headers)("retry-after")), tsplus_module_2.seconds);
|
|
16
15
|
export const rateLimitFromHeaders = (headers) => tsplus_module_1.struct({
|
|
17
16
|
bucket: tsplus_module_1.fromNullable(headers.get("x-ratelimit-bucket")),
|
|
18
17
|
retryAfter: retryAfter(headers),
|
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,
|
|
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,MAAc,EAAE,EAAE;IAC9D,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,oBAAA,6BAAmB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAC7B,UAAU,CAAC,CACO,CAAA;AAE3B,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAgB,EAAE,EAAE,CAC7C,oBAAA,uBAAA,YAAY,CAAC,OAAO,CAAC,CAAC,yBAAyB,CAAC,EACtC,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,0BAC7B,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"}
|