dfx 0.107.2 → 0.107.4
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/DiscordGateway/DiscordWS.d.ts +2 -2
- package/DiscordGateway/DiscordWS.d.ts.map +1 -1
- package/DiscordGateway/DiscordWS.js +13 -20
- package/DiscordGateway/DiscordWS.js.map +1 -1
- package/DiscordGateway/Shard/heartbeats.d.ts +1 -1
- package/DiscordGateway/Shard/heartbeats.d.ts.map +1 -1
- package/DiscordGateway/Shard/heartbeats.js +2 -1
- package/DiscordGateway/Shard/heartbeats.js.map +1 -1
- package/DiscordGateway/Shard.d.ts +1 -9
- package/DiscordGateway/Shard.d.ts.map +1 -1
- package/DiscordGateway/Shard.js +21 -42
- package/DiscordGateway/Shard.js.map +1 -1
- package/DiscordGateway/Sharder.d.ts +1 -1
- package/mjs/DiscordGateway/DiscordWS.mjs +13 -20
- package/mjs/DiscordGateway/DiscordWS.mjs.map +1 -1
- package/mjs/DiscordGateway/Shard/heartbeats.mjs +2 -1
- package/mjs/DiscordGateway/Shard/heartbeats.mjs.map +1 -1
- package/mjs/DiscordGateway/Shard.mjs +21 -42
- package/mjs/DiscordGateway/Shard.mjs.map +1 -1
- package/mjs/version.mjs +1 -1
- package/package.json +2 -2
- package/src/DiscordGateway/DiscordWS.ts +21 -22
- package/src/DiscordGateway/Shard/heartbeats.ts +12 -10
- package/src/DiscordGateway/Shard.ts +33 -71
- package/src/version.ts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
|
@@ -10,7 +10,6 @@ export interface OpenOpts {
|
|
|
10
10
|
url?: string;
|
|
11
11
|
version?: number;
|
|
12
12
|
encoding?: DiscordWSCodec;
|
|
13
|
-
outbound: Effect.Effect<Message>;
|
|
14
13
|
onConnecting: Effect.Effect<void>;
|
|
15
14
|
}
|
|
16
15
|
export interface DiscordWSCodecService {
|
|
@@ -27,9 +26,10 @@ export interface DiscordWS {
|
|
|
27
26
|
readonly _: unique symbol;
|
|
28
27
|
}
|
|
29
28
|
export declare const DiscordWS: import("effect/Context").Tag<DiscordWS, {
|
|
30
|
-
readonly connect: ({ onConnecting,
|
|
29
|
+
readonly connect: ({ onConnecting, url, version, }: OpenOpts) => Effect.Effect<{
|
|
31
30
|
readonly take: Effect.Effect<Discord.GatewayPayload<any>, Cause.NoSuchElementException, never>;
|
|
32
31
|
readonly setUrl: (url: string) => Effect.Effect<void, never, never>;
|
|
32
|
+
readonly write: (message: Discord.GatewayPayload | Reconnect) => Effect.Effect<void>;
|
|
33
33
|
}, never, import("effect/Scope").Scope | Socket.WebSocketConstructor>;
|
|
34
34
|
}>;
|
|
35
35
|
export declare const DiscordWSLive: Layer.Layer<DiscordWS, never, DiscordWSCodec>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DiscordWS.d.ts","sourceRoot":"","sources":["../src/DiscordGateway/DiscordWS.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,OAAO,KAAK,KAAK,OAAO,MAAM,WAAW,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,yBAAyB,CAAA;AAGjD,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"DiscordWS.d.ts","sourceRoot":"","sources":["../src/DiscordGateway/DiscordWS.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,OAAO,KAAK,KAAK,OAAO,MAAM,WAAW,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,yBAAyB,CAAA;AAGjD,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAIrC,MAAM,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAA;AAExD,eAAO,MAAM,SAAS,eAAgD,CAAA;AACtE,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAA;AAExC,MAAM,WAAW,QAAQ;IACvB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;CAClC;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAA;IACpB,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,cAAc,KAAK,UAAU,GAAG,MAAM,CAAA;IAC1D,MAAM,EAAE,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,KAAK,OAAO,CAAC,cAAc,CAAA;CAC3D;AACD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,CAAC,EAAE,OAAO,MAAM,CAAA;CAC1B;AAKD,eAAO,MAAM,cAAc,qEAE1B,CAAA;AACD,eAAO,MAAM,sBAAsB,2CAIjC,CAAA;AAiFF,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,CAAC,EAAE,OAAO,MAAM,CAAA;CAC1B;AACD,eAAO,MAAM,SAAS;wDA3EjB,QAAQ;;+BAKc,MAAM;kCAchB,OAAO,CAAC,cAAc,GAAG,SAAS,KAC1C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;;EA0DK,CAAA;AACjC,eAAO,MAAM,aAAa,+CAAgC,CAAA"}
|
|
@@ -14,12 +14,10 @@ var Schedule = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect
|
|
|
14
14
|
var Cause = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Cause"));
|
|
15
15
|
var Option = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Option"));
|
|
16
16
|
var LogLevel = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/LogLevel"));
|
|
17
|
-
var Fiber = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Fiber"));
|
|
18
17
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
19
18
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
20
19
|
const Reconnect = exports.Reconnect = /*#__PURE__*/Symbol.for("dfx/DiscordGateway/WS/Reconnect");
|
|
21
20
|
const decoder = /*#__PURE__*/new TextDecoder();
|
|
22
|
-
const logLevelDebug = /*#__PURE__*/Option.some(LogLevel.Debug);
|
|
23
21
|
const logLevelTrace = /*#__PURE__*/Option.some(LogLevel.Trace);
|
|
24
22
|
const DiscordWSCodec = exports.DiscordWSCodec = /*#__PURE__*/(0, _Context.GenericTag)("dfx/DiscordGateway/DiscordWS/Codec");
|
|
25
23
|
const JsonDiscordWSCodecLive = exports.JsonDiscordWSCodecLive = /*#__PURE__*/Layer.succeed(DiscordWSCodec, {
|
|
@@ -31,7 +29,6 @@ const make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
31
29
|
const encoding = yield* DiscordWSCodec;
|
|
32
30
|
const connect = ({
|
|
33
31
|
onConnecting,
|
|
34
|
-
outbound,
|
|
35
32
|
url = "wss://gateway.discord.gg/",
|
|
36
33
|
version = 10
|
|
37
34
|
}) => Effect.gen(function* () {
|
|
@@ -42,32 +39,28 @@ const make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
42
39
|
closeCodeIsError: _ => true,
|
|
43
40
|
openTimeout: 5000
|
|
44
41
|
});
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
yield* write(new Socket.CloseEvent(1012, "reconnecting"));
|
|
54
|
-
} else {
|
|
55
|
-
;
|
|
56
|
-
fiber.log([message], Cause.empty, logLevelTrace);
|
|
57
|
-
yield* write(encoding.encode(message));
|
|
58
|
-
}
|
|
42
|
+
const writeRaw = yield* socket.writer;
|
|
43
|
+
const logWriteError = cause => Effect.annotateLogs(Effect.logDebug(cause), {
|
|
44
|
+
module: "DiscordGateway/DiscordWS",
|
|
45
|
+
channel: "outbound"
|
|
46
|
+
});
|
|
47
|
+
const write = message => {
|
|
48
|
+
if (message === Reconnect) {
|
|
49
|
+
return Effect.catchAllCause(writeRaw(new Socket.CloseEvent(1012, "reconnecting")), logWriteError);
|
|
59
50
|
}
|
|
60
|
-
|
|
51
|
+
return Effect.catchAllCause(writeRaw(encoding.encode(message)), logWriteError);
|
|
52
|
+
};
|
|
61
53
|
yield* onConnecting.pipe(Effect.zipRight(Effect.withFiberRuntime(fiber => socket.runRaw(_ => {
|
|
62
54
|
const message = encoding.decode(_);
|
|
63
55
|
messages.unsafeOffer(message);
|
|
64
|
-
fiber.log([message], Cause.empty,
|
|
56
|
+
fiber.log([message], Cause.empty, logLevelTrace);
|
|
65
57
|
}))), Effect.retry({
|
|
66
58
|
while: e => e.reason === "Close" && e.code === 1012
|
|
67
59
|
}), Effect.catchAllCause(cause => Effect.logDebug("Got socket error, reconnecting", cause)), Effect.repeat(Schedule.exponential(500).pipe(Schedule.union(Schedule.spaced(10000)))), Effect.annotateLogs("channel", "inbound"), Effect.forkScoped, Effect.interruptible);
|
|
68
60
|
return {
|
|
69
61
|
take: messages.take,
|
|
70
|
-
setUrl
|
|
62
|
+
setUrl,
|
|
63
|
+
write
|
|
71
64
|
};
|
|
72
65
|
}).pipe(Effect.annotateLogs({
|
|
73
66
|
module: "DiscordGateway/DiscordWS"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DiscordWS.js","names":["_Context","require","Effect","_interopRequireWildcard","Layer","Ref","Socket","Mailbox","Schedule","Cause","Option","LogLevel","
|
|
1
|
+
{"version":3,"file":"DiscordWS.js","names":["_Context","require","Effect","_interopRequireWildcard","Layer","Ref","Socket","Mailbox","Schedule","Cause","Option","LogLevel","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","Reconnect","exports","Symbol","for","decoder","TextDecoder","logLevelTrace","some","Trace","DiscordWSCodec","GenericTag","JsonDiscordWSCodecLive","succeed","type","encode","p","JSON","stringify","decode","parse","make","gen","encoding","connect","onConnecting","url","version","urlRef","setUrl","messages","socket","makeWebSocket","closeCodeIsError","_","openTimeout","writeRaw","writer","logWriteError","cause","annotateLogs","logDebug","module","channel","write","message","catchAllCause","CloseEvent","pipe","zipRight","withFiberRuntime","fiber","runRaw","unsafeOffer","log","empty","retry","while","reason","code","repeat","exponential","union","spaced","forkScoped","interruptible","take","DiscordWS","DiscordWSLive","effect"],"sources":["../src/DiscordGateway/DiscordWS.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -4,5 +4,5 @@ import * as DiscordWS from "dfx/DiscordGateway/DiscordWS";
|
|
|
4
4
|
import type * as Discord from "dfx/types";
|
|
5
5
|
import type { ShardState } from "dfx/DiscordGateway/Shard/StateStore";
|
|
6
6
|
import type * as Mailbox from "effect/Mailbox";
|
|
7
|
-
export declare const send: (hellos: Mailbox.ReadonlyMailbox<Discord.GatewayPayload>, acks: Mailbox.ReadonlyMailbox<Discord.GatewayPayload>, state: Effect.Effect<Option.Option<ShardState>>, send: (p: DiscordWS.Message) => Effect.Effect<
|
|
7
|
+
export declare const send: (hellos: Mailbox.ReadonlyMailbox<Discord.GatewayPayload>, acks: Mailbox.ReadonlyMailbox<Discord.GatewayPayload>, state: Effect.Effect<Option.Option<ShardState>>, send: (p: DiscordWS.Message) => Effect.Effect<void>) => Effect.Effect<void, import("effect/Cause").NoSuchElementException, never>;
|
|
8
8
|
//# sourceMappingURL=heartbeats.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heartbeats.d.ts","sourceRoot":"","sources":["../../src/DiscordGateway/Shard/heartbeats.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,SAAS,MAAM,8BAA8B,CAAA;AAEzD,OAAO,KAAK,KAAK,OAAO,MAAM,WAAW,CAAA;AAEzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAA;AACrE,OAAO,KAAK,KAAK,OAAO,MAAM,gBAAgB,CAAA;AAiB9C,eAAO,MAAM,IAAI,WACP,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,cAAc,CAAC,QACjD,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,cAAc,CAAC,SAC9C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,QACzC,CAAC,CAAC,EAAE,SAAS,CAAC,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"heartbeats.d.ts","sourceRoot":"","sources":["../../src/DiscordGateway/Shard/heartbeats.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,SAAS,MAAM,8BAA8B,CAAA;AAEzD,OAAO,KAAK,KAAK,OAAO,MAAM,WAAW,CAAA;AAEzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAA;AACrE,OAAO,KAAK,KAAK,OAAO,MAAM,gBAAgB,CAAA;AAiB9C,eAAO,MAAM,IAAI,WACP,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,cAAc,CAAC,QACjD,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,cAAc,CAAC,SAC9C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,QACzC,CAAC,CAAC,EAAE,SAAS,CAAC,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,8EA+BjD,CAAA"}
|
|
@@ -17,7 +17,8 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
|
|
|
17
17
|
const payload = state => Effect.map(state, state => SendEvents.heartbeat(Option.getOrNull(Option.map(state, s => s.sequence))));
|
|
18
18
|
const payloadOrReconnect = (ref, state) => Effect.flatMap(Ref.get(ref), acked => acked ? payload(state) : Effect.succeed(DiscordWS.Reconnect));
|
|
19
19
|
const send = (hellos, acks, state, send) => Effect.flatMap(Ref.make(true), ackedRef => {
|
|
20
|
-
const
|
|
20
|
+
const sendPayload = payloadOrReconnect(ackedRef, state).pipe(Effect.zipLeft(Ref.set(ackedRef, false)), Effect.flatMap(send));
|
|
21
|
+
const heartbeats = EffectU.foreverSwitch(Effect.zipLeft(hellos.take, Ref.set(ackedRef, true)), p => Effect.schedule(sendPayload, Schedule.andThen(Schedule.duration(Duration.millis(p.d.heartbeat_interval * Math.random())), Schedule.spaced(Duration.millis(p.d.heartbeat_interval)))));
|
|
21
22
|
const run = acks.take.pipe(Effect.zipLeft(Ref.set(ackedRef, true)), Effect.forever);
|
|
22
23
|
return Effect.all([run, heartbeats], {
|
|
23
24
|
concurrency: "unbounded",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heartbeats.js","names":["Duration","_interopRequireWildcard","require","Option","Effect","Ref","Schedule","DiscordWS","SendEvents","EffectU","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","payload","state","map","heartbeat","getOrNull","s","sequence","payloadOrReconnect","ref","flatMap","acked","succeed","Reconnect","send","hellos","acks","make","ackedRef","
|
|
1
|
+
{"version":3,"file":"heartbeats.js","names":["Duration","_interopRequireWildcard","require","Option","Effect","Ref","Schedule","DiscordWS","SendEvents","EffectU","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","payload","state","map","heartbeat","getOrNull","s","sequence","payloadOrReconnect","ref","flatMap","acked","succeed","Reconnect","send","hellos","acks","make","ackedRef","sendPayload","pipe","zipLeft","heartbeats","foreverSwitch","take","p","schedule","andThen","duration","millis","d","heartbeat_interval","Math","random","spaced","run","forever","all","concurrency","discard","exports"],"sources":["../../src/DiscordGateway/Shard/heartbeats.ts"],"sourcesContent":[null],"mappings":";;;;;;AAAA,IAAAA,QAAA,gBAAAC,uBAAA,cAAAC,OAAA;AACA,IAAAC,MAAA,gBAAAF,uBAAA,cAAAC,OAAA;AACA,IAAAE,MAAA,gBAAAH,uBAAA,cAAAC,OAAA;AACA,IAAAG,GAAA,gBAAAJ,uBAAA,cAAAC,OAAA;AACA,IAAAI,QAAA,gBAAAL,uBAAA,cAAAC,OAAA;AACA,IAAAK,SAAA,gBAAAN,uBAAA,cAAAC,OAAA;AACA,IAAAM,UAAA,gBAAAP,uBAAA,cAAAC,OAAA;AAEA,IAAAO,OAAA,gBAAAR,uBAAA,cAAAC,OAAA;AAA2C,SAAAQ,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAV,wBAAAU,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAe,GAAA,CAAAlB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAI3C,MAAMW,OAAO,GAAIC,KAA+C,IAC9D3B,MAAM,CAAC4B,GAAG,CAACD,KAAK,EAAEA,KAAK,IACrBvB,UAAU,CAACyB,SAAS,CAAC9B,MAAM,CAAC+B,SAAS,CAAC/B,MAAM,CAAC6B,GAAG,CAACD,KAAK,EAAEI,CAAC,IAAIA,CAAC,CAACC,QAAQ,CAAC,CAAC,CAAC,CAC3E;AAEH,MAAMC,kBAAkB,GAAGA,CACzBC,GAAqB,EACrBP,KAA+C,KAE/C3B,MAAM,CAACmC,OAAO,CACZlC,GAAG,CAACa,GAAG,CAACoB,GAAG,CAAC,EACXE,KAAK,IACJA,KAAK,GAAGV,OAAO,CAACC,KAAK,CAAC,GAAG3B,MAAM,CAACqC,OAAO,CAAClC,SAAS,CAACmC,SAAS,CAAC,CAC/D;AAEI,MAAMC,IAAI,GAAGA,CAClBC,MAAuD,EACvDC,IAAqD,EACrDd,KAA+C,EAC/CY,IAAmD,KAEnDvC,MAAM,CAACmC,OAAO,CAAClC,GAAG,CAACyC,IAAI,CAAC,IAAI,CAAC,EAAEC,QAAQ,IAAG;EACxC,MAAMC,WAAW,GAAGX,kBAAkB,CAACU,QAAQ,EAAEhB,KAAK,CAAC,CAACkB,IAAI,CAC1D7C,MAAM,CAAC8C,OAAO,CAAC7C,GAAG,CAACwB,GAAG,CAACkB,QAAQ,EAAE,KAAK,CAAC,CAAC,EACxC3C,MAAM,CAACmC,OAAO,CAACI,IAAI,CAAC,CACrB;EAED,MAAMQ,UAAU,GAAG1C,OAAO,CAAC2C,aAAa,CACtChD,MAAM,CAAC8C,OAAO,CAACN,MAAM,CAACS,IAAI,EAAEhD,GAAG,CAACwB,GAAG,CAACkB,QAAQ,EAAE,IAAI,CAAC,CAAC,EACpDO,CAAC,IACClD,MAAM,CAACmD,QAAQ,CACbP,WAAW,EACX1C,QAAQ,CAACkD,OAAO,CACdlD,QAAQ,CAACmD,QAAQ,CACfzD,QAAQ,CAAC0D,MAAM,CAACJ,CAAC,CAACK,CAAE,CAACC,kBAAkB,GAAGC,IAAI,CAACC,MAAM,EAAE,CAAC,CACzD,EACDxD,QAAQ,CAACyD,MAAM,CAAC/D,QAAQ,CAAC0D,MAAM,CAACJ,CAAC,CAACK,CAAE,CAACC,kBAAkB,CAAC,CAAC,CAC1D,CACF,CACJ;EAED,MAAMI,GAAG,GAAGnB,IAAI,CAACQ,IAAI,CAACJ,IAAI,CACxB7C,MAAM,CAAC8C,OAAO,CAAC7C,GAAG,CAACwB,GAAG,CAACkB,QAAQ,EAAE,IAAI,CAAC,CAAC,EACvC3C,MAAM,CAAC6D,OAAO,CACf;EAED,OAAO7D,MAAM,CAAC8D,GAAG,CAAC,CAACF,GAAG,EAAEb,UAAU,CAAC,EAAE;IACnCgB,WAAW,EAAE,WAAW;IACxBC,OAAO,EAAE;GACV,CAAC;AACJ,CAAC,CAAC;AAAAC,OAAA,CAAA1B,IAAA,GAAAA,IAAA","ignoreList":[]}
|
|
@@ -1,21 +1,14 @@
|
|
|
1
1
|
import { DiscordConfig } from "dfx/DiscordConfig";
|
|
2
|
-
import type { Message } from "dfx/DiscordGateway/DiscordWS";
|
|
3
2
|
import { DiscordWS } from "dfx/DiscordGateway/DiscordWS";
|
|
4
3
|
import { ShardStateStore } from "dfx/DiscordGateway/Shard/StateStore";
|
|
5
4
|
import { RateLimiter } from "dfx/RateLimit";
|
|
6
5
|
import * as Effect from "effect/Effect";
|
|
7
6
|
import * as Layer from "effect/Layer";
|
|
8
|
-
declare const enum Phase {
|
|
9
|
-
Connecting = 0,
|
|
10
|
-
Handshake = 1,
|
|
11
|
-
Connected = 2
|
|
12
|
-
}
|
|
13
7
|
export declare const make: Effect.Effect<{
|
|
14
8
|
readonly connect: (shard: [id: number, count: number]) => Effect.Effect<{
|
|
15
9
|
readonly id: [id: number, count: number];
|
|
16
|
-
readonly send: (p: Message) => Generator<import("effect/Utils").YieldWrap<Effect.Effect<Phase, never, never>>, void, any>;
|
|
17
10
|
}, never, import("effect/Scope").Scope | import("@effect/platform/Socket").WebSocketConstructor>;
|
|
18
|
-
}, never, DiscordConfig | RateLimiter | DiscordWS |
|
|
11
|
+
}, never, DiscordConfig | RateLimiter | DiscordWS | import("dfx/DiscordGateway/Messaging").Messsaging | ShardStateStore>;
|
|
19
12
|
type ShardService = Effect.Effect.Success<typeof make>;
|
|
20
13
|
export interface Shard {
|
|
21
14
|
readonly _: unique symbol;
|
|
@@ -23,7 +16,6 @@ export interface Shard {
|
|
|
23
16
|
export declare const Shard: import("effect/Context").Tag<Shard, {
|
|
24
17
|
readonly connect: (shard: [id: number, count: number]) => Effect.Effect<{
|
|
25
18
|
readonly id: [id: number, count: number];
|
|
26
|
-
readonly send: (p: Message) => Generator<import("effect/Utils").YieldWrap<Effect.Effect<Phase, never, never>>, void, any>;
|
|
27
19
|
}, never, import("effect/Scope").Scope | import("@effect/platform/Socket").WebSocketConstructor>;
|
|
28
20
|
}>;
|
|
29
21
|
export declare const ShardLive: Layer.Layer<Shard, never, DiscordConfig | import("dfx/RateLimit").RateLimitStore | import("dfx/DiscordGateway/DiscordWS").DiscordWSCodec | ShardStateStore>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Shard.d.ts","sourceRoot":"","sources":["../src/DiscordGateway/Shard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"Shard.d.ts","sourceRoot":"","sources":["../src/DiscordGateway/Shard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EACL,SAAS,EAGV,MAAM,8BAA8B,CAAA;AAGrC,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAGrE,OAAO,EAAE,WAAW,EAAmB,MAAM,eAAe,CAAA;AAI5D,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAarC,eAAO,MAAM,IAAI;8BAOS,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;;;wHAoJnD,CAAA;AAEF,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,CAAA;AAEtD,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,CAAC,EAAE,OAAO,MAAM,CAAA;CAC1B;AACD,eAAO,MAAM,KAAK;8BA3JQ,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;;;EA2J2B,CAAA;AAChF,eAAO,MAAM,SAAS,6JAIrB,CAAA;AAGD,MAAM,WAAW,YACf,SAAQ,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;CAAG"}
|
package/DiscordGateway/Shard.js
CHANGED
|
@@ -12,7 +12,6 @@ var Heartbeats = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("dfx/
|
|
|
12
12
|
var Identify = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("dfx/DiscordGateway/Shard/identify"));
|
|
13
13
|
var _RateLimit = /*#__PURE__*/require("dfx/RateLimit");
|
|
14
14
|
var Discord = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("dfx/types"));
|
|
15
|
-
var Chunk = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Chunk"));
|
|
16
15
|
var _Context = /*#__PURE__*/require("effect/Context");
|
|
17
16
|
var Duration = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Duration"));
|
|
18
17
|
var Effect = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Effect"));
|
|
@@ -20,8 +19,6 @@ var Layer = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/La
|
|
|
20
19
|
var Option = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Option"));
|
|
21
20
|
var Mailbox = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Mailbox"));
|
|
22
21
|
var Redacted = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Redacted"));
|
|
23
|
-
var Ref = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Ref"));
|
|
24
|
-
var _Effect2 = /*#__PURE__*/require("dfx/utils/Effect");
|
|
25
22
|
var FiberHandle = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/FiberHandle"));
|
|
26
23
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
27
24
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
@@ -38,48 +35,31 @@ const make = exports.make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
38
35
|
} = yield* _Messaging.Messaging;
|
|
39
36
|
const shardState = yield* _StateStore.ShardStateStore;
|
|
40
37
|
const connect = shard => Effect.gen(function* (_) {
|
|
41
|
-
const outboundQueue = yield* Mailbox.make();
|
|
42
|
-
const pendingQueue = yield* Mailbox.make();
|
|
43
38
|
const reconnectHandle = yield* FiberHandle.make();
|
|
44
|
-
|
|
39
|
+
let phase = 0 /* Phase.Connecting */;
|
|
45
40
|
const stateStore = shardState.forShard(shard);
|
|
46
41
|
const resumeState = Option.getOrElse(yield* stateStore.get, () => ({
|
|
47
42
|
resumeUrl: "",
|
|
48
43
|
sessionId: "",
|
|
49
44
|
sequence: 0
|
|
50
45
|
}));
|
|
51
|
-
const setPhase = p => Effect.
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
const heartbeatSend = (0, _Effect2.genFn)(function* (p) {
|
|
61
|
-
if ((yield* Ref.get(phase)) !== 0 /* Phase.Connecting */) {
|
|
62
|
-
outboundQueue.unsafeOffer(p);
|
|
63
|
-
return true;
|
|
64
|
-
}
|
|
65
|
-
return false;
|
|
46
|
+
const setPhase = p => Effect.suspend(() => {
|
|
47
|
+
phase = p;
|
|
48
|
+
return Effect.annotateLogs(Effect.logTrace("phase transition"), "phase", p);
|
|
49
|
+
});
|
|
50
|
+
const heartbeatSend = p => Effect.suspend(() => {
|
|
51
|
+
if (phase === 0 /* Phase.Connecting */) return Effect.void;
|
|
52
|
+
return write(p);
|
|
66
53
|
});
|
|
67
|
-
const prioritySend = p => outboundQueue.offer(p);
|
|
68
54
|
const resume = Effect.gen(function* () {
|
|
69
55
|
yield* FiberHandle.clear(reconnectHandle);
|
|
70
56
|
yield* setPhase(2 /* Phase.Connected */);
|
|
71
|
-
const msgs = yield* pendingQueue.clear;
|
|
72
|
-
outboundQueue.unsafeOfferAll(Chunk.filter(msgs, msg => msg !== _DiscordWS.Reconnect && msg.op !== Discord.GatewayOpcode.IDENTIFY && msg.op !== Discord.GatewayOpcode.RESUME && msg.op !== Discord.GatewayOpcode.HEARTBEAT));
|
|
73
|
-
});
|
|
74
|
-
const onConnecting = Effect.gen(function* () {
|
|
75
|
-
const msgs = yield* outboundQueue.clear;
|
|
76
|
-
pendingQueue.unsafeOfferAll(Chunk.filter(msgs, msg => msg !== _DiscordWS.Reconnect && msg.op !== Discord.GatewayOpcode.IDENTIFY && msg.op !== Discord.GatewayOpcode.RESUME && msg.op !== Discord.GatewayOpcode.HEARTBEAT));
|
|
77
|
-
yield* setPhase(0 /* Phase.Connecting */);
|
|
78
57
|
});
|
|
58
|
+
const onConnecting = setPhase(0 /* Phase.Connecting */);
|
|
79
59
|
const socket = yield* dws.connect({
|
|
80
|
-
outbound,
|
|
81
60
|
onConnecting
|
|
82
61
|
});
|
|
62
|
+
const write = p => Effect.zipRight(limiter.maybeWait("dfx.shard.send", Duration.minutes(1), 120), socket.write(p));
|
|
83
63
|
const hellos = yield* Effect.acquireRelease(Mailbox.make(), _ => _.shutdown);
|
|
84
64
|
const acks = yield* Effect.acquireRelease(Mailbox.make(), _ => _.shutdown);
|
|
85
65
|
// heartbeats
|
|
@@ -94,7 +74,7 @@ const make = exports.make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
94
74
|
// delayed reconnect
|
|
95
75
|
const delayedReconnect = Effect.gen(function* () {
|
|
96
76
|
yield* Effect.sleep(30_000);
|
|
97
|
-
yield*
|
|
77
|
+
yield* socket.write(_DiscordWS.Reconnect);
|
|
98
78
|
});
|
|
99
79
|
function* onPayload(p) {
|
|
100
80
|
if (typeof p.s === "number") {
|
|
@@ -112,16 +92,16 @@ const make = exports.make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
112
92
|
switch (p.op) {
|
|
113
93
|
case Discord.GatewayOpcode.HELLO:
|
|
114
94
|
{
|
|
115
|
-
yield*
|
|
95
|
+
yield* write(yield* identify);
|
|
116
96
|
yield* setPhase(1 /* Phase.Handshake */);
|
|
117
97
|
hellos.unsafeOffer(p);
|
|
118
98
|
yield* FiberHandle.run(reconnectHandle, delayedReconnect);
|
|
119
|
-
|
|
99
|
+
return;
|
|
120
100
|
}
|
|
121
101
|
case Discord.GatewayOpcode.HEARTBEAT_ACK:
|
|
122
102
|
{
|
|
123
103
|
acks.unsafeOffer(p);
|
|
124
|
-
|
|
104
|
+
return;
|
|
125
105
|
}
|
|
126
106
|
case Discord.GatewayOpcode.INVALID_SESSION:
|
|
127
107
|
{
|
|
@@ -129,8 +109,8 @@ const make = exports.make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
129
109
|
resumeState.sessionId = "";
|
|
130
110
|
yield* stateStore.clear;
|
|
131
111
|
}
|
|
132
|
-
yield*
|
|
133
|
-
|
|
112
|
+
yield* socket.write(_DiscordWS.Reconnect);
|
|
113
|
+
return;
|
|
134
114
|
}
|
|
135
115
|
case Discord.GatewayOpcode.DISPATCH:
|
|
136
116
|
{
|
|
@@ -138,18 +118,18 @@ const make = exports.make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
138
118
|
yield* resume;
|
|
139
119
|
}
|
|
140
120
|
hub.unsafeOffer(p);
|
|
141
|
-
|
|
121
|
+
return;
|
|
142
122
|
}
|
|
143
123
|
case Discord.GatewayOpcode.RECONNECT:
|
|
144
124
|
{
|
|
145
|
-
yield*
|
|
146
|
-
|
|
125
|
+
yield* socket.write(_DiscordWS.Reconnect);
|
|
126
|
+
return;
|
|
147
127
|
}
|
|
148
128
|
}
|
|
149
129
|
}
|
|
150
130
|
yield* Effect.gen(function* () {
|
|
151
131
|
while (true) {
|
|
152
|
-
yield*
|
|
132
|
+
yield* write(yield* sendMailbox.take);
|
|
153
133
|
}
|
|
154
134
|
}).pipe(Effect.forkScoped, Effect.interruptible);
|
|
155
135
|
yield* Effect.gen(function* () {
|
|
@@ -158,8 +138,7 @@ const make = exports.make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
158
138
|
}
|
|
159
139
|
}).pipe(Effect.forkScoped, Effect.interruptible);
|
|
160
140
|
return {
|
|
161
|
-
id: shard
|
|
162
|
-
send
|
|
141
|
+
id: shard
|
|
163
142
|
};
|
|
164
143
|
}).pipe(Effect.annotateLogs({
|
|
165
144
|
package: "dfx",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Shard.js","names":["_DiscordConfig","require","_DiscordWS","_Messaging","_StateStore","Heartbeats","_interopRequireWildcard","Identify","_RateLimit","Discord","
|
|
1
|
+
{"version":3,"file":"Shard.js","names":["_DiscordConfig","require","_DiscordWS","_Messaging","_StateStore","Heartbeats","_interopRequireWildcard","Identify","_RateLimit","Discord","_Context","Duration","Effect","Layer","Option","Mailbox","Redacted","FiberHandle","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","make","exports","gen","gateway","token","DiscordConfig","limiter","RateLimiter","dws","DiscordWS","hub","sendMailbox","Messaging","shardState","ShardStateStore","connect","shard","_","reconnectHandle","phase","stateStore","forShard","resumeState","getOrElse","resumeUrl","sessionId","sequence","setPhase","p","suspend","annotateLogs","logTrace","heartbeatSend","void","write","resume","clear","onConnecting","socket","zipRight","maybeWait","minutes","hellos","acquireRelease","shutdown","acks","send","pipe","forkScoped","interruptible","identify","identifyOrResume","value","intents","presence","delayedReconnect","sleep","Reconnect","onPayload","s","op","GatewayOpcode","DISPATCH","payload","d","session_id","resume_gateway_url","setUrl","HELLO","unsafeOffer","run","HEARTBEAT_ACK","INVALID_SESSION","RECONNECT","take","id","package","module","Shard","GenericTag","ShardLive","effect","provide","DiscordWSLive","MesssagingLive","RateLimiterLive"],"sources":["../src/DiscordGateway/Shard.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -10,5 +10,5 @@ export interface Sharder {
|
|
|
10
10
|
export declare const Sharder: import("effect/Context").Tag<Sharder, {
|
|
11
11
|
readonly shards: Effect.Effect<HashSet.HashSet<RunningShard>, never, never>;
|
|
12
12
|
}>;
|
|
13
|
-
export declare const SharderLive: Layer.Layer<Sharder, never, DiscordConfig | import("@effect/platform/HttpClient").HttpClient<import("@effect/platform/HttpClientError").HttpClientError, import("effect/Scope").Scope> | import("dfx/RateLimit").RateLimitStore | import("./DiscordWS").DiscordWSCodec | import("@effect/platform/Socket").WebSocketConstructor | ShardStore
|
|
13
|
+
export declare const SharderLive: Layer.Layer<Sharder, never, DiscordConfig | import("@effect/platform/HttpClient").HttpClient<import("@effect/platform/HttpClientError").HttpClientError, import("effect/Scope").Scope> | import("dfx/RateLimit").RateLimitStore | import("./DiscordWS").DiscordWSCodec | import("./Shard/StateStore").ShardStateStore | import("@effect/platform/Socket").WebSocketConstructor | ShardStore>;
|
|
14
14
|
//# sourceMappingURL=Sharder.d.ts.map
|
|
@@ -8,10 +8,8 @@ import * as Schedule from "effect/Schedule";
|
|
|
8
8
|
import * as Cause from "effect/Cause";
|
|
9
9
|
import * as Option from "effect/Option";
|
|
10
10
|
import * as LogLevel from "effect/LogLevel";
|
|
11
|
-
import * as Fiber from "effect/Fiber";
|
|
12
11
|
export const Reconnect = /*#__PURE__*/Symbol.for("dfx/DiscordGateway/WS/Reconnect");
|
|
13
12
|
const decoder = /*#__PURE__*/new TextDecoder();
|
|
14
|
-
const logLevelDebug = /*#__PURE__*/Option.some(LogLevel.Debug);
|
|
15
13
|
const logLevelTrace = /*#__PURE__*/Option.some(LogLevel.Trace);
|
|
16
14
|
export const DiscordWSCodec = /*#__PURE__*/GenericTag("dfx/DiscordGateway/DiscordWS/Codec");
|
|
17
15
|
export const JsonDiscordWSCodecLive = /*#__PURE__*/Layer.succeed(DiscordWSCodec, {
|
|
@@ -23,7 +21,6 @@ const make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
23
21
|
const encoding = yield* DiscordWSCodec;
|
|
24
22
|
const connect = ({
|
|
25
23
|
onConnecting,
|
|
26
|
-
outbound,
|
|
27
24
|
url = "wss://gateway.discord.gg/",
|
|
28
25
|
version = 10
|
|
29
26
|
}) => Effect.gen(function* () {
|
|
@@ -34,32 +31,28 @@ const make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
34
31
|
closeCodeIsError: _ => true,
|
|
35
32
|
openTimeout: 5000
|
|
36
33
|
});
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
yield* write(new Socket.CloseEvent(1012, "reconnecting"));
|
|
46
|
-
} else {
|
|
47
|
-
;
|
|
48
|
-
fiber.log([message], Cause.empty, logLevelTrace);
|
|
49
|
-
yield* write(encoding.encode(message));
|
|
50
|
-
}
|
|
34
|
+
const writeRaw = yield* socket.writer;
|
|
35
|
+
const logWriteError = cause => Effect.annotateLogs(Effect.logDebug(cause), {
|
|
36
|
+
module: "DiscordGateway/DiscordWS",
|
|
37
|
+
channel: "outbound"
|
|
38
|
+
});
|
|
39
|
+
const write = message => {
|
|
40
|
+
if (message === Reconnect) {
|
|
41
|
+
return Effect.catchAllCause(writeRaw(new Socket.CloseEvent(1012, "reconnecting")), logWriteError);
|
|
51
42
|
}
|
|
52
|
-
|
|
43
|
+
return Effect.catchAllCause(writeRaw(encoding.encode(message)), logWriteError);
|
|
44
|
+
};
|
|
53
45
|
yield* onConnecting.pipe(Effect.zipRight(Effect.withFiberRuntime(fiber => socket.runRaw(_ => {
|
|
54
46
|
const message = encoding.decode(_);
|
|
55
47
|
messages.unsafeOffer(message);
|
|
56
|
-
fiber.log([message], Cause.empty,
|
|
48
|
+
fiber.log([message], Cause.empty, logLevelTrace);
|
|
57
49
|
}))), Effect.retry({
|
|
58
50
|
while: e => e.reason === "Close" && e.code === 1012
|
|
59
51
|
}), Effect.catchAllCause(cause => Effect.logDebug("Got socket error, reconnecting", cause)), Effect.repeat(Schedule.exponential(500).pipe(Schedule.union(Schedule.spaced(10000)))), Effect.annotateLogs("channel", "inbound"), Effect.forkScoped, Effect.interruptible);
|
|
60
52
|
return {
|
|
61
53
|
take: messages.take,
|
|
62
|
-
setUrl
|
|
54
|
+
setUrl,
|
|
55
|
+
write
|
|
63
56
|
};
|
|
64
57
|
}).pipe(Effect.annotateLogs({
|
|
65
58
|
module: "DiscordGateway/DiscordWS"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DiscordWS.mjs","names":["GenericTag","Effect","Layer","Ref","Socket","Mailbox","Schedule","Cause","Option","LogLevel","
|
|
1
|
+
{"version":3,"file":"DiscordWS.mjs","names":["GenericTag","Effect","Layer","Ref","Socket","Mailbox","Schedule","Cause","Option","LogLevel","Reconnect","Symbol","for","decoder","TextDecoder","logLevelTrace","some","Trace","DiscordWSCodec","JsonDiscordWSCodecLive","succeed","type","encode","p","JSON","stringify","decode","parse","make","gen","encoding","connect","onConnecting","url","version","urlRef","setUrl","set","messages","socket","makeWebSocket","get","closeCodeIsError","_","openTimeout","writeRaw","writer","logWriteError","cause","annotateLogs","logDebug","module","channel","write","message","catchAllCause","CloseEvent","pipe","zipRight","withFiberRuntime","fiber","runRaw","unsafeOffer","log","empty","retry","while","e","reason","code","repeat","exponential","union","spaced","forkScoped","interruptible","take","DiscordWS","DiscordWSLive","effect"],"sources":["../../src/DiscordGateway/DiscordWS.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -9,7 +9,8 @@ import * as EffectU from "dfx/utils/Effect";
|
|
|
9
9
|
const payload = state => Effect.map(state, state => SendEvents.heartbeat(Option.getOrNull(Option.map(state, s => s.sequence))));
|
|
10
10
|
const payloadOrReconnect = (ref, state) => Effect.flatMap(Ref.get(ref), acked => acked ? payload(state) : Effect.succeed(DiscordWS.Reconnect));
|
|
11
11
|
export const send = (hellos, acks, state, send) => Effect.flatMap(Ref.make(true), ackedRef => {
|
|
12
|
-
const
|
|
12
|
+
const sendPayload = payloadOrReconnect(ackedRef, state).pipe(Effect.zipLeft(Ref.set(ackedRef, false)), Effect.flatMap(send));
|
|
13
|
+
const heartbeats = EffectU.foreverSwitch(Effect.zipLeft(hellos.take, Ref.set(ackedRef, true)), p => Effect.schedule(sendPayload, Schedule.andThen(Schedule.duration(Duration.millis(p.d.heartbeat_interval * Math.random())), Schedule.spaced(Duration.millis(p.d.heartbeat_interval)))));
|
|
13
14
|
const run = acks.take.pipe(Effect.zipLeft(Ref.set(ackedRef, true)), Effect.forever);
|
|
14
15
|
return Effect.all([run, heartbeats], {
|
|
15
16
|
concurrency: "unbounded",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heartbeats.mjs","names":["Duration","Option","Effect","Ref","Schedule","DiscordWS","SendEvents","EffectU","payload","state","map","heartbeat","getOrNull","s","sequence","payloadOrReconnect","ref","flatMap","get","acked","succeed","Reconnect","send","hellos","acks","make","ackedRef","
|
|
1
|
+
{"version":3,"file":"heartbeats.mjs","names":["Duration","Option","Effect","Ref","Schedule","DiscordWS","SendEvents","EffectU","payload","state","map","heartbeat","getOrNull","s","sequence","payloadOrReconnect","ref","flatMap","get","acked","succeed","Reconnect","send","hellos","acks","make","ackedRef","sendPayload","pipe","zipLeft","set","heartbeats","foreverSwitch","take","p","schedule","andThen","duration","millis","d","heartbeat_interval","Math","random","spaced","run","forever","all","concurrency","discard"],"sources":["../../../src/DiscordGateway/Shard/heartbeats.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAO,KAAKA,QAAQ,MAAM,iBAAiB;AAC3C,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,GAAG,MAAM,YAAY;AACjC,OAAO,KAAKC,QAAQ,MAAM,iBAAiB;AAC3C,OAAO,KAAKC,SAAS,MAAM,8BAA8B;AACzD,OAAO,KAAKC,UAAU,MAAM,qCAAqC;AAEjE,OAAO,KAAKC,OAAO,MAAM,kBAAkB;AAI3C,MAAMC,OAAO,GAAIC,KAA+C,IAC9DP,MAAM,CAACQ,GAAG,CAACD,KAAK,EAAEA,KAAK,IACrBH,UAAU,CAACK,SAAS,CAACV,MAAM,CAACW,SAAS,CAACX,MAAM,CAACS,GAAG,CAACD,KAAK,EAAEI,CAAC,IAAIA,CAAC,CAACC,QAAQ,CAAC,CAAC,CAAC,CAC3E;AAEH,MAAMC,kBAAkB,GAAGA,CACzBC,GAAqB,EACrBP,KAA+C,KAE/CP,MAAM,CAACe,OAAO,CACZd,GAAG,CAACe,GAAG,CAACF,GAAG,CAAC,EACXG,KAAK,IACJA,KAAK,GAAGX,OAAO,CAACC,KAAK,CAAC,GAAGP,MAAM,CAACkB,OAAO,CAACf,SAAS,CAACgB,SAAS,CAAC,CAC/D;AAEH,OAAO,MAAMC,IAAI,GAAGA,CAClBC,MAAuD,EACvDC,IAAqD,EACrDf,KAA+C,EAC/Ca,IAAmD,KAEnDpB,MAAM,CAACe,OAAO,CAACd,GAAG,CAACsB,IAAI,CAAC,IAAI,CAAC,EAAEC,QAAQ,IAAG;EACxC,MAAMC,WAAW,GAAGZ,kBAAkB,CAACW,QAAQ,EAAEjB,KAAK,CAAC,CAACmB,IAAI,CAC1D1B,MAAM,CAAC2B,OAAO,CAAC1B,GAAG,CAAC2B,GAAG,CAACJ,QAAQ,EAAE,KAAK,CAAC,CAAC,EACxCxB,MAAM,CAACe,OAAO,CAACK,IAAI,CAAC,CACrB;EAED,MAAMS,UAAU,GAAGxB,OAAO,CAACyB,aAAa,CACtC9B,MAAM,CAAC2B,OAAO,CAACN,MAAM,CAACU,IAAI,EAAE9B,GAAG,CAAC2B,GAAG,CAACJ,QAAQ,EAAE,IAAI,CAAC,CAAC,EACpDQ,CAAC,IACChC,MAAM,CAACiC,QAAQ,CACbR,WAAW,EACXvB,QAAQ,CAACgC,OAAO,CACdhC,QAAQ,CAACiC,QAAQ,CACfrC,QAAQ,CAACsC,MAAM,CAACJ,CAAC,CAACK,CAAE,CAACC,kBAAkB,GAAGC,IAAI,CAACC,MAAM,EAAE,CAAC,CACzD,EACDtC,QAAQ,CAACuC,MAAM,CAAC3C,QAAQ,CAACsC,MAAM,CAACJ,CAAC,CAACK,CAAE,CAACC,kBAAkB,CAAC,CAAC,CAC1D,CACF,CACJ;EAED,MAAMI,GAAG,GAAGpB,IAAI,CAACS,IAAI,CAACL,IAAI,CACxB1B,MAAM,CAAC2B,OAAO,CAAC1B,GAAG,CAAC2B,GAAG,CAACJ,QAAQ,EAAE,IAAI,CAAC,CAAC,EACvCxB,MAAM,CAAC2C,OAAO,CACf;EAED,OAAO3C,MAAM,CAAC4C,GAAG,CAAC,CAACF,GAAG,EAAEb,UAAU,CAAC,EAAE;IACnCgB,WAAW,EAAE,WAAW;IACxBC,OAAO,EAAE;GACV,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -6,7 +6,6 @@ import * as Heartbeats from "dfx/DiscordGateway/Shard/heartbeats";
|
|
|
6
6
|
import * as Identify from "dfx/DiscordGateway/Shard/identify";
|
|
7
7
|
import { RateLimiter, RateLimiterLive } from "dfx/RateLimit";
|
|
8
8
|
import * as Discord from "dfx/types";
|
|
9
|
-
import * as Chunk from "effect/Chunk";
|
|
10
9
|
import { GenericTag } from "effect/Context";
|
|
11
10
|
import * as Duration from "effect/Duration";
|
|
12
11
|
import * as Effect from "effect/Effect";
|
|
@@ -14,8 +13,6 @@ import * as Layer from "effect/Layer";
|
|
|
14
13
|
import * as Option from "effect/Option";
|
|
15
14
|
import * as Mailbox from "effect/Mailbox";
|
|
16
15
|
import * as Redacted from "effect/Redacted";
|
|
17
|
-
import * as Ref from "effect/Ref";
|
|
18
|
-
import { genFn } from "dfx/utils/Effect";
|
|
19
16
|
import * as FiberHandle from "effect/FiberHandle";
|
|
20
17
|
export const make = /*#__PURE__*/Effect.gen(function* () {
|
|
21
18
|
const {
|
|
@@ -30,48 +27,31 @@ export const make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
30
27
|
} = yield* Messaging;
|
|
31
28
|
const shardState = yield* ShardStateStore;
|
|
32
29
|
const connect = shard => Effect.gen(function* (_) {
|
|
33
|
-
const outboundQueue = yield* Mailbox.make();
|
|
34
|
-
const pendingQueue = yield* Mailbox.make();
|
|
35
30
|
const reconnectHandle = yield* FiberHandle.make();
|
|
36
|
-
|
|
31
|
+
let phase = 0 /* Phase.Connecting */;
|
|
37
32
|
const stateStore = shardState.forShard(shard);
|
|
38
33
|
const resumeState = Option.getOrElse(yield* stateStore.get, () => ({
|
|
39
34
|
resumeUrl: "",
|
|
40
35
|
sessionId: "",
|
|
41
36
|
sequence: 0
|
|
42
37
|
}));
|
|
43
|
-
const setPhase = p => Effect.
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
const heartbeatSend = genFn(function* (p) {
|
|
53
|
-
if ((yield* Ref.get(phase)) !== 0 /* Phase.Connecting */) {
|
|
54
|
-
outboundQueue.unsafeOffer(p);
|
|
55
|
-
return true;
|
|
56
|
-
}
|
|
57
|
-
return false;
|
|
38
|
+
const setPhase = p => Effect.suspend(() => {
|
|
39
|
+
phase = p;
|
|
40
|
+
return Effect.annotateLogs(Effect.logTrace("phase transition"), "phase", p);
|
|
41
|
+
});
|
|
42
|
+
const heartbeatSend = p => Effect.suspend(() => {
|
|
43
|
+
if (phase === 0 /* Phase.Connecting */) return Effect.void;
|
|
44
|
+
return write(p);
|
|
58
45
|
});
|
|
59
|
-
const prioritySend = p => outboundQueue.offer(p);
|
|
60
46
|
const resume = Effect.gen(function* () {
|
|
61
47
|
yield* FiberHandle.clear(reconnectHandle);
|
|
62
48
|
yield* setPhase(2 /* Phase.Connected */);
|
|
63
|
-
const msgs = yield* pendingQueue.clear;
|
|
64
|
-
outboundQueue.unsafeOfferAll(Chunk.filter(msgs, msg => msg !== Reconnect && msg.op !== Discord.GatewayOpcode.IDENTIFY && msg.op !== Discord.GatewayOpcode.RESUME && msg.op !== Discord.GatewayOpcode.HEARTBEAT));
|
|
65
|
-
});
|
|
66
|
-
const onConnecting = Effect.gen(function* () {
|
|
67
|
-
const msgs = yield* outboundQueue.clear;
|
|
68
|
-
pendingQueue.unsafeOfferAll(Chunk.filter(msgs, msg => msg !== Reconnect && msg.op !== Discord.GatewayOpcode.IDENTIFY && msg.op !== Discord.GatewayOpcode.RESUME && msg.op !== Discord.GatewayOpcode.HEARTBEAT));
|
|
69
|
-
yield* setPhase(0 /* Phase.Connecting */);
|
|
70
49
|
});
|
|
50
|
+
const onConnecting = setPhase(0 /* Phase.Connecting */);
|
|
71
51
|
const socket = yield* dws.connect({
|
|
72
|
-
outbound,
|
|
73
52
|
onConnecting
|
|
74
53
|
});
|
|
54
|
+
const write = p => Effect.zipRight(limiter.maybeWait("dfx.shard.send", Duration.minutes(1), 120), socket.write(p));
|
|
75
55
|
const hellos = yield* Effect.acquireRelease(Mailbox.make(), _ => _.shutdown);
|
|
76
56
|
const acks = yield* Effect.acquireRelease(Mailbox.make(), _ => _.shutdown);
|
|
77
57
|
// heartbeats
|
|
@@ -86,7 +66,7 @@ export const make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
86
66
|
// delayed reconnect
|
|
87
67
|
const delayedReconnect = Effect.gen(function* () {
|
|
88
68
|
yield* Effect.sleep(30_000);
|
|
89
|
-
yield*
|
|
69
|
+
yield* socket.write(Reconnect);
|
|
90
70
|
});
|
|
91
71
|
function* onPayload(p) {
|
|
92
72
|
if (typeof p.s === "number") {
|
|
@@ -104,16 +84,16 @@ export const make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
104
84
|
switch (p.op) {
|
|
105
85
|
case Discord.GatewayOpcode.HELLO:
|
|
106
86
|
{
|
|
107
|
-
yield*
|
|
87
|
+
yield* write(yield* identify);
|
|
108
88
|
yield* setPhase(1 /* Phase.Handshake */);
|
|
109
89
|
hellos.unsafeOffer(p);
|
|
110
90
|
yield* FiberHandle.run(reconnectHandle, delayedReconnect);
|
|
111
|
-
|
|
91
|
+
return;
|
|
112
92
|
}
|
|
113
93
|
case Discord.GatewayOpcode.HEARTBEAT_ACK:
|
|
114
94
|
{
|
|
115
95
|
acks.unsafeOffer(p);
|
|
116
|
-
|
|
96
|
+
return;
|
|
117
97
|
}
|
|
118
98
|
case Discord.GatewayOpcode.INVALID_SESSION:
|
|
119
99
|
{
|
|
@@ -121,8 +101,8 @@ export const make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
121
101
|
resumeState.sessionId = "";
|
|
122
102
|
yield* stateStore.clear;
|
|
123
103
|
}
|
|
124
|
-
yield*
|
|
125
|
-
|
|
104
|
+
yield* socket.write(Reconnect);
|
|
105
|
+
return;
|
|
126
106
|
}
|
|
127
107
|
case Discord.GatewayOpcode.DISPATCH:
|
|
128
108
|
{
|
|
@@ -130,18 +110,18 @@ export const make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
130
110
|
yield* resume;
|
|
131
111
|
}
|
|
132
112
|
hub.unsafeOffer(p);
|
|
133
|
-
|
|
113
|
+
return;
|
|
134
114
|
}
|
|
135
115
|
case Discord.GatewayOpcode.RECONNECT:
|
|
136
116
|
{
|
|
137
|
-
yield*
|
|
138
|
-
|
|
117
|
+
yield* socket.write(Reconnect);
|
|
118
|
+
return;
|
|
139
119
|
}
|
|
140
120
|
}
|
|
141
121
|
}
|
|
142
122
|
yield* Effect.gen(function* () {
|
|
143
123
|
while (true) {
|
|
144
|
-
yield*
|
|
124
|
+
yield* write(yield* sendMailbox.take);
|
|
145
125
|
}
|
|
146
126
|
}).pipe(Effect.forkScoped, Effect.interruptible);
|
|
147
127
|
yield* Effect.gen(function* () {
|
|
@@ -150,8 +130,7 @@ export const make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
150
130
|
}
|
|
151
131
|
}).pipe(Effect.forkScoped, Effect.interruptible);
|
|
152
132
|
return {
|
|
153
|
-
id: shard
|
|
154
|
-
send
|
|
133
|
+
id: shard
|
|
155
134
|
};
|
|
156
135
|
}).pipe(Effect.annotateLogs({
|
|
157
136
|
package: "dfx",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Shard.mjs","names":["DiscordConfig","DiscordWS","DiscordWSLive","Reconnect","Messaging","MesssagingLive","ShardStateStore","Heartbeats","Identify","RateLimiter","RateLimiterLive","Discord","
|
|
1
|
+
{"version":3,"file":"Shard.mjs","names":["DiscordConfig","DiscordWS","DiscordWSLive","Reconnect","Messaging","MesssagingLive","ShardStateStore","Heartbeats","Identify","RateLimiter","RateLimiterLive","Discord","GenericTag","Duration","Effect","Layer","Option","Mailbox","Redacted","FiberHandle","make","gen","gateway","token","limiter","dws","hub","sendMailbox","shardState","connect","shard","_","reconnectHandle","phase","stateStore","forShard","resumeState","getOrElse","get","resumeUrl","sessionId","sequence","setPhase","p","suspend","annotateLogs","logTrace","heartbeatSend","void","write","resume","clear","onConnecting","socket","zipRight","maybeWait","minutes","hellos","acquireRelease","shutdown","acks","send","pipe","forkScoped","interruptible","identify","identifyOrResume","value","intents","presence","delayedReconnect","sleep","onPayload","s","op","GatewayOpcode","DISPATCH","t","payload","d","session_id","resume_gateway_url","set","setUrl","HELLO","unsafeOffer","run","HEARTBEAT_ACK","INVALID_SESSION","RECONNECT","take","id","package","module","Shard","ShardLive","effect","provide"],"sources":["../../src/DiscordGateway/Shard.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/mjs/version.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const LIB_VERSION = "0.107.
|
|
1
|
+
export const LIB_VERSION = "0.107.4";
|
|
2
2
|
//# sourceMappingURL=version.mjs.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dfx",
|
|
3
|
-
"version": "0.107.
|
|
3
|
+
"version": "0.107.4",
|
|
4
4
|
"description": "Effect-TS discord library",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -41,6 +41,6 @@
|
|
|
41
41
|
"optionalDependencies": {
|
|
42
42
|
"discord-verify": "^1.2.0"
|
|
43
43
|
},
|
|
44
|
-
"gitHead": "
|
|
44
|
+
"gitHead": "09af8a1f2974a82efa58006e1cdc4ca53947b753",
|
|
45
45
|
"main": "./index.js"
|
|
46
46
|
}
|
|
@@ -9,7 +9,6 @@ import * as Schedule from "effect/Schedule"
|
|
|
9
9
|
import * as Cause from "effect/Cause"
|
|
10
10
|
import * as Option from "effect/Option"
|
|
11
11
|
import * as LogLevel from "effect/LogLevel"
|
|
12
|
-
import * as Fiber from "effect/Fiber"
|
|
13
12
|
|
|
14
13
|
export type Message = Discord.GatewayPayload | Reconnect
|
|
15
14
|
|
|
@@ -20,7 +19,6 @@ export interface OpenOpts {
|
|
|
20
19
|
url?: string
|
|
21
20
|
version?: number
|
|
22
21
|
encoding?: DiscordWSCodec
|
|
23
|
-
outbound: Effect.Effect<Message>
|
|
24
22
|
onConnecting: Effect.Effect<void>
|
|
25
23
|
}
|
|
26
24
|
|
|
@@ -34,7 +32,6 @@ export interface DiscordWSCodec {
|
|
|
34
32
|
}
|
|
35
33
|
|
|
36
34
|
const decoder = new TextDecoder()
|
|
37
|
-
const logLevelDebug = Option.some(LogLevel.Debug)
|
|
38
35
|
const logLevelTrace = Option.some(LogLevel.Trace)
|
|
39
36
|
|
|
40
37
|
export const DiscordWSCodec = GenericTag<DiscordWSCodec, DiscordWSCodecService>(
|
|
@@ -51,7 +48,6 @@ const make = Effect.gen(function* () {
|
|
|
51
48
|
|
|
52
49
|
const connect = ({
|
|
53
50
|
onConnecting,
|
|
54
|
-
outbound,
|
|
55
51
|
url = "wss://gateway.discord.gg/",
|
|
56
52
|
version = 10,
|
|
57
53
|
}: OpenOpts) =>
|
|
@@ -66,31 +62,33 @@ const make = Effect.gen(function* () {
|
|
|
66
62
|
closeCodeIsError: _ => true,
|
|
67
63
|
openTimeout: 5000,
|
|
68
64
|
})
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
65
|
+
const writeRaw = yield* socket.writer
|
|
66
|
+
const logWriteError = (cause: Cause.Cause<Socket.SocketError>) =>
|
|
67
|
+
Effect.annotateLogs(Effect.logDebug(cause), {
|
|
68
|
+
module: "DiscordGateway/DiscordWS",
|
|
69
|
+
channel: "outbound",
|
|
70
|
+
})
|
|
71
|
+
const write = (
|
|
72
|
+
message: Discord.GatewayPayload | Reconnect,
|
|
73
|
+
): Effect.Effect<void> => {
|
|
74
|
+
if (message === Reconnect) {
|
|
75
|
+
return Effect.catchAllCause(
|
|
76
|
+
writeRaw(new Socket.CloseEvent(1012, "reconnecting")),
|
|
77
|
+
logWriteError,
|
|
78
|
+
)
|
|
81
79
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
80
|
+
return Effect.catchAllCause(
|
|
81
|
+
writeRaw(encoding.encode(message)),
|
|
82
|
+
logWriteError,
|
|
83
|
+
)
|
|
84
|
+
}
|
|
87
85
|
yield* onConnecting.pipe(
|
|
88
86
|
Effect.zipRight(
|
|
89
87
|
Effect.withFiberRuntime<void, Socket.SocketError>(fiber =>
|
|
90
88
|
socket.runRaw(_ => {
|
|
91
89
|
const message = encoding.decode(_)
|
|
92
90
|
messages.unsafeOffer(message)
|
|
93
|
-
;(fiber as any).log([message], Cause.empty,
|
|
91
|
+
;(fiber as any).log([message], Cause.empty, logLevelTrace)
|
|
94
92
|
}),
|
|
95
93
|
),
|
|
96
94
|
),
|
|
@@ -113,6 +111,7 @@ const make = Effect.gen(function* () {
|
|
|
113
111
|
return {
|
|
114
112
|
take: messages.take,
|
|
115
113
|
setUrl,
|
|
114
|
+
write,
|
|
116
115
|
} as const
|
|
117
116
|
}).pipe(
|
|
118
117
|
Effect.annotateLogs({
|
|
@@ -29,22 +29,24 @@ export const send = (
|
|
|
29
29
|
hellos: Mailbox.ReadonlyMailbox<Discord.GatewayPayload>,
|
|
30
30
|
acks: Mailbox.ReadonlyMailbox<Discord.GatewayPayload>,
|
|
31
31
|
state: Effect.Effect<Option.Option<ShardState>>,
|
|
32
|
-
send: (p: DiscordWS.Message) => Effect.Effect<
|
|
32
|
+
send: (p: DiscordWS.Message) => Effect.Effect<void>,
|
|
33
33
|
) =>
|
|
34
34
|
Effect.flatMap(Ref.make(true), ackedRef => {
|
|
35
|
+
const sendPayload = payloadOrReconnect(ackedRef, state).pipe(
|
|
36
|
+
Effect.zipLeft(Ref.set(ackedRef, false)),
|
|
37
|
+
Effect.flatMap(send),
|
|
38
|
+
)
|
|
39
|
+
|
|
35
40
|
const heartbeats = EffectU.foreverSwitch(
|
|
36
41
|
Effect.zipLeft(hellos.take, Ref.set(ackedRef, true)),
|
|
37
42
|
p =>
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
Schedule.duration(
|
|
44
|
-
Duration.millis(p.d!.heartbeat_interval * Math.random()),
|
|
45
|
-
),
|
|
46
|
-
Schedule.spaced(Duration.millis(p.d!.heartbeat_interval)),
|
|
43
|
+
Effect.schedule(
|
|
44
|
+
sendPayload,
|
|
45
|
+
Schedule.andThen(
|
|
46
|
+
Schedule.duration(
|
|
47
|
+
Duration.millis(p.d!.heartbeat_interval * Math.random()),
|
|
47
48
|
),
|
|
49
|
+
Schedule.spaced(Duration.millis(p.d!.heartbeat_interval)),
|
|
48
50
|
),
|
|
49
51
|
),
|
|
50
52
|
)
|
|
@@ -12,7 +12,6 @@ import * as Heartbeats from "dfx/DiscordGateway/Shard/heartbeats"
|
|
|
12
12
|
import * as Identify from "dfx/DiscordGateway/Shard/identify"
|
|
13
13
|
import { RateLimiter, RateLimiterLive } from "dfx/RateLimit"
|
|
14
14
|
import * as Discord from "dfx/types"
|
|
15
|
-
import * as Chunk from "effect/Chunk"
|
|
16
15
|
import { GenericTag } from "effect/Context"
|
|
17
16
|
import * as Duration from "effect/Duration"
|
|
18
17
|
import * as Effect from "effect/Effect"
|
|
@@ -20,9 +19,7 @@ import * as Layer from "effect/Layer"
|
|
|
20
19
|
import * as Option from "effect/Option"
|
|
21
20
|
import * as Mailbox from "effect/Mailbox"
|
|
22
21
|
import * as Redacted from "effect/Redacted"
|
|
23
|
-
import * as Ref from "effect/Ref"
|
|
24
22
|
import type * as Types from "effect/Types"
|
|
25
|
-
import { genFn } from "dfx/utils/Effect"
|
|
26
23
|
import * as FiberHandle from "effect/FiberHandle"
|
|
27
24
|
|
|
28
25
|
const enum Phase {
|
|
@@ -40,10 +37,8 @@ export const make = Effect.gen(function* () {
|
|
|
40
37
|
|
|
41
38
|
const connect = (shard: [id: number, count: number]) =>
|
|
42
39
|
Effect.gen(function* (_) {
|
|
43
|
-
const outboundQueue = yield* Mailbox.make<Message>()
|
|
44
|
-
const pendingQueue = yield* Mailbox.make<Message>()
|
|
45
40
|
const reconnectHandle = yield* FiberHandle.make()
|
|
46
|
-
|
|
41
|
+
let phase = Phase.Connecting
|
|
47
42
|
const stateStore = shardState.forShard(shard)
|
|
48
43
|
const resumeState: Types.Mutable<ShardState> = Option.getOrElse(
|
|
49
44
|
yield* stateStore.get,
|
|
@@ -54,67 +49,34 @@ export const make = Effect.gen(function* () {
|
|
|
54
49
|
}),
|
|
55
50
|
)
|
|
56
51
|
const setPhase = (p: Phase): Effect.Effect<void> =>
|
|
57
|
-
Effect.
|
|
58
|
-
|
|
59
|
-
Effect.annotateLogs(
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
)
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
} else {
|
|
72
|
-
pendingQueue.unsafeOffer(p)
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
const heartbeatSend = genFn(function* (p: Message) {
|
|
77
|
-
if ((yield* Ref.get(phase)) !== Phase.Connecting) {
|
|
78
|
-
outboundQueue.unsafeOffer(p)
|
|
79
|
-
return true
|
|
80
|
-
}
|
|
81
|
-
return false
|
|
82
|
-
})
|
|
83
|
-
|
|
84
|
-
const prioritySend = (p: Message) => outboundQueue.offer(p)
|
|
52
|
+
Effect.suspend(() => {
|
|
53
|
+
phase = p
|
|
54
|
+
return Effect.annotateLogs(
|
|
55
|
+
Effect.logTrace("phase transition"),
|
|
56
|
+
"phase",
|
|
57
|
+
p,
|
|
58
|
+
)
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
const heartbeatSend = (p: Message) =>
|
|
62
|
+
Effect.suspend(() => {
|
|
63
|
+
if (phase === Phase.Connecting) return Effect.void
|
|
64
|
+
return write(p)
|
|
65
|
+
})
|
|
85
66
|
|
|
86
67
|
const resume = Effect.gen(function* () {
|
|
87
68
|
yield* FiberHandle.clear(reconnectHandle)
|
|
88
69
|
yield* setPhase(Phase.Connected)
|
|
89
|
-
const msgs = yield* pendingQueue.clear
|
|
90
|
-
outboundQueue.unsafeOfferAll(
|
|
91
|
-
Chunk.filter(
|
|
92
|
-
msgs,
|
|
93
|
-
msg =>
|
|
94
|
-
msg !== Reconnect &&
|
|
95
|
-
msg.op !== Discord.GatewayOpcode.IDENTIFY &&
|
|
96
|
-
msg.op !== Discord.GatewayOpcode.RESUME &&
|
|
97
|
-
msg.op !== Discord.GatewayOpcode.HEARTBEAT,
|
|
98
|
-
),
|
|
99
|
-
)
|
|
100
70
|
})
|
|
101
71
|
|
|
102
|
-
const onConnecting =
|
|
103
|
-
const msgs = yield* outboundQueue.clear
|
|
104
|
-
pendingQueue.unsafeOfferAll(
|
|
105
|
-
Chunk.filter(
|
|
106
|
-
msgs,
|
|
107
|
-
msg =>
|
|
108
|
-
msg !== Reconnect &&
|
|
109
|
-
msg.op !== Discord.GatewayOpcode.IDENTIFY &&
|
|
110
|
-
msg.op !== Discord.GatewayOpcode.RESUME &&
|
|
111
|
-
msg.op !== Discord.GatewayOpcode.HEARTBEAT,
|
|
112
|
-
),
|
|
113
|
-
)
|
|
114
|
-
yield* setPhase(Phase.Connecting)
|
|
115
|
-
})
|
|
72
|
+
const onConnecting = setPhase(Phase.Connecting)
|
|
116
73
|
|
|
117
|
-
const socket = yield* dws.connect({
|
|
74
|
+
const socket = yield* dws.connect({ onConnecting })
|
|
75
|
+
const write = (p: Message) =>
|
|
76
|
+
Effect.zipRight(
|
|
77
|
+
limiter.maybeWait("dfx.shard.send", Duration.minutes(1), 120),
|
|
78
|
+
socket.write(p),
|
|
79
|
+
)
|
|
118
80
|
|
|
119
81
|
const hellos = yield* Effect.acquireRelease(
|
|
120
82
|
Mailbox.make<Discord.GatewayPayload>(),
|
|
@@ -145,7 +107,7 @@ export const make = Effect.gen(function* () {
|
|
|
145
107
|
// delayed reconnect
|
|
146
108
|
const delayedReconnect = Effect.gen(function* () {
|
|
147
109
|
yield* Effect.sleep(30_000)
|
|
148
|
-
yield*
|
|
110
|
+
yield* socket.write(Reconnect)
|
|
149
111
|
})
|
|
150
112
|
|
|
151
113
|
function* onPayload(p: Discord.GatewayPayload) {
|
|
@@ -167,41 +129,41 @@ export const make = Effect.gen(function* () {
|
|
|
167
129
|
|
|
168
130
|
switch (p.op) {
|
|
169
131
|
case Discord.GatewayOpcode.HELLO: {
|
|
170
|
-
yield*
|
|
132
|
+
yield* write(yield* identify)
|
|
171
133
|
yield* setPhase(Phase.Handshake)
|
|
172
134
|
hellos.unsafeOffer(p)
|
|
173
135
|
yield* FiberHandle.run(reconnectHandle, delayedReconnect)
|
|
174
|
-
|
|
136
|
+
return
|
|
175
137
|
}
|
|
176
138
|
case Discord.GatewayOpcode.HEARTBEAT_ACK: {
|
|
177
139
|
acks.unsafeOffer(p)
|
|
178
|
-
|
|
140
|
+
return
|
|
179
141
|
}
|
|
180
142
|
case Discord.GatewayOpcode.INVALID_SESSION: {
|
|
181
143
|
if (!p.d) {
|
|
182
144
|
resumeState.sessionId = ""
|
|
183
145
|
yield* stateStore.clear
|
|
184
146
|
}
|
|
185
|
-
yield*
|
|
186
|
-
|
|
147
|
+
yield* socket.write(Reconnect)
|
|
148
|
+
return
|
|
187
149
|
}
|
|
188
150
|
case Discord.GatewayOpcode.DISPATCH: {
|
|
189
151
|
if (p.t === "READY" || p.t === "RESUMED") {
|
|
190
152
|
yield* resume
|
|
191
153
|
}
|
|
192
154
|
hub.unsafeOffer(p)
|
|
193
|
-
|
|
155
|
+
return
|
|
194
156
|
}
|
|
195
157
|
case Discord.GatewayOpcode.RECONNECT: {
|
|
196
|
-
yield*
|
|
197
|
-
|
|
158
|
+
yield* socket.write(Reconnect)
|
|
159
|
+
return
|
|
198
160
|
}
|
|
199
161
|
}
|
|
200
162
|
}
|
|
201
163
|
|
|
202
164
|
yield* Effect.gen(function* () {
|
|
203
165
|
while (true) {
|
|
204
|
-
yield*
|
|
166
|
+
yield* write(yield* sendMailbox.take)
|
|
205
167
|
}
|
|
206
168
|
}).pipe(Effect.forkScoped, Effect.interruptible)
|
|
207
169
|
|
|
@@ -211,7 +173,7 @@ export const make = Effect.gen(function* () {
|
|
|
211
173
|
}
|
|
212
174
|
}).pipe(Effect.forkScoped, Effect.interruptible)
|
|
213
175
|
|
|
214
|
-
return { id: shard
|
|
176
|
+
return { id: shard } as const
|
|
215
177
|
}).pipe(
|
|
216
178
|
Effect.annotateLogs({
|
|
217
179
|
package: "dfx",
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const LIB_VERSION = "0.107.
|
|
1
|
+
export const LIB_VERSION = "0.107.4";
|
package/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const LIB_VERSION = "0.107.
|
|
1
|
+
export declare const LIB_VERSION = "0.107.4";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/version.js
CHANGED