dfx 0.107.2 → 0.107.3
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.map +1 -1
- package/DiscordGateway/Shard/heartbeats.js +2 -1
- package/DiscordGateway/Shard/heartbeats.js.map +1 -1
- package/DiscordGateway/Shard.d.ts +0 -8
- package/DiscordGateway/Shard.d.ts.map +1 -1
- package/DiscordGateway/Shard.js +10 -29
- package/DiscordGateway/Shard.js.map +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 +10 -29
- 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 +11 -9
- package/src/DiscordGateway/Shard.ts +15 -53
- 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":[]}
|
|
@@ -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,OAAO,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,OAAO,CAAC,8EA+BpD,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":"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","ignoreList":[]}
|
|
@@ -1,19 +1,12 @@
|
|
|
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
11
|
}, never, DiscordConfig | RateLimiter | DiscordWS | ShardStateStore | import("dfx/DiscordGateway/Messaging").Messsaging>;
|
|
19
12
|
type ShardService = Effect.Effect.Success<typeof make>;
|
|
@@ -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;AAerC,eAAO,MAAM,IAAI;8BAOS,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;;;wHAkJnD,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;8BAzJQ,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;;;EAyJ2B,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"));
|
|
@@ -38,8 +37,6 @@ const make = exports.make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
38
37
|
} = yield* _Messaging.Messaging;
|
|
39
38
|
const shardState = yield* _StateStore.ShardStateStore;
|
|
40
39
|
const connect = shard => Effect.gen(function* (_) {
|
|
41
|
-
const outboundQueue = yield* Mailbox.make();
|
|
42
|
-
const pendingQueue = yield* Mailbox.make();
|
|
43
40
|
const reconnectHandle = yield* FiberHandle.make();
|
|
44
41
|
const phase = yield* Ref.make(0 /* Phase.Connecting */);
|
|
45
42
|
const stateStore = shardState.forShard(shard);
|
|
@@ -49,37 +46,22 @@ const make = exports.make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
49
46
|
sequence: 0
|
|
50
47
|
}));
|
|
51
48
|
const setPhase = p => Effect.zipLeft(Ref.set(phase, p), Effect.annotateLogs(Effect.logTrace("phase transition"), "phase", p));
|
|
52
|
-
const outbound = Effect.orDie(Effect.zipLeft(outboundQueue.take, limiter.maybeWait("dfx.shard.send", Duration.minutes(1), 120)));
|
|
53
|
-
function* send(p) {
|
|
54
|
-
if ((yield* Ref.get(phase)) === 2 /* Phase.Connected */) {
|
|
55
|
-
outboundQueue.unsafeOffer(p);
|
|
56
|
-
} else {
|
|
57
|
-
pendingQueue.unsafeOffer(p);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
49
|
const heartbeatSend = (0, _Effect2.genFn)(function* (p) {
|
|
61
|
-
if ((yield* Ref.get(phase))
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
65
|
-
return false;
|
|
50
|
+
if ((yield* Ref.get(phase)) === 0 /* Phase.Connecting */) return false;
|
|
51
|
+
yield* write(p);
|
|
52
|
+
return true;
|
|
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
57
|
});
|
|
74
58
|
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
59
|
yield* setPhase(0 /* Phase.Connecting */);
|
|
78
60
|
});
|
|
79
61
|
const socket = yield* dws.connect({
|
|
80
|
-
outbound,
|
|
81
62
|
onConnecting
|
|
82
63
|
});
|
|
64
|
+
const write = p => Effect.zipRight(limiter.maybeWait("dfx.shard.send", Duration.minutes(1), 120), socket.write(p));
|
|
83
65
|
const hellos = yield* Effect.acquireRelease(Mailbox.make(), _ => _.shutdown);
|
|
84
66
|
const acks = yield* Effect.acquireRelease(Mailbox.make(), _ => _.shutdown);
|
|
85
67
|
// heartbeats
|
|
@@ -94,7 +76,7 @@ const make = exports.make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
94
76
|
// delayed reconnect
|
|
95
77
|
const delayedReconnect = Effect.gen(function* () {
|
|
96
78
|
yield* Effect.sleep(30_000);
|
|
97
|
-
yield*
|
|
79
|
+
yield* socket.write(_DiscordWS.Reconnect);
|
|
98
80
|
});
|
|
99
81
|
function* onPayload(p) {
|
|
100
82
|
if (typeof p.s === "number") {
|
|
@@ -112,7 +94,7 @@ const make = exports.make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
112
94
|
switch (p.op) {
|
|
113
95
|
case Discord.GatewayOpcode.HELLO:
|
|
114
96
|
{
|
|
115
|
-
yield*
|
|
97
|
+
yield* write(yield* identify);
|
|
116
98
|
yield* setPhase(1 /* Phase.Handshake */);
|
|
117
99
|
hellos.unsafeOffer(p);
|
|
118
100
|
yield* FiberHandle.run(reconnectHandle, delayedReconnect);
|
|
@@ -129,7 +111,7 @@ const make = exports.make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
129
111
|
resumeState.sessionId = "";
|
|
130
112
|
yield* stateStore.clear;
|
|
131
113
|
}
|
|
132
|
-
yield*
|
|
114
|
+
yield* socket.write(_DiscordWS.Reconnect);
|
|
133
115
|
break;
|
|
134
116
|
}
|
|
135
117
|
case Discord.GatewayOpcode.DISPATCH:
|
|
@@ -142,14 +124,14 @@ const make = exports.make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
142
124
|
}
|
|
143
125
|
case Discord.GatewayOpcode.RECONNECT:
|
|
144
126
|
{
|
|
145
|
-
yield*
|
|
127
|
+
yield* socket.write(_DiscordWS.Reconnect);
|
|
146
128
|
break;
|
|
147
129
|
}
|
|
148
130
|
}
|
|
149
131
|
}
|
|
150
132
|
yield* Effect.gen(function* () {
|
|
151
133
|
while (true) {
|
|
152
|
-
yield*
|
|
134
|
+
yield* write(yield* sendMailbox.take);
|
|
153
135
|
}
|
|
154
136
|
}).pipe(Effect.forkScoped, Effect.interruptible);
|
|
155
137
|
yield* Effect.gen(function* () {
|
|
@@ -158,8 +140,7 @@ const make = exports.make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
158
140
|
}
|
|
159
141
|
}).pipe(Effect.forkScoped, Effect.interruptible);
|
|
160
142
|
return {
|
|
161
|
-
id: shard
|
|
162
|
-
send
|
|
143
|
+
id: shard
|
|
163
144
|
};
|
|
164
145
|
}).pipe(Effect.annotateLogs({
|
|
165
146
|
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","Ref","_Effect2","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","zipLeft","annotateLogs","logTrace","heartbeatSend","genFn","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":[]}
|
|
@@ -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":"AAAA,SAASA,UAAU,QAAQ,gBAAgB;AAC3C,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,GAAG,MAAM,YAAY;AAEjC,OAAO,KAAKC,MAAM,MAAM,yBAAyB;AACjD,OAAO,KAAKC,OAAO,MAAM,gBAAgB;AACzC,OAAO,KAAKC,QAAQ,MAAM,iBAAiB;AAC3C,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,QAAQ,MAAM,iBAAiB;AAI3C,OAAO,MAAMC,SAAS,gBAAGC,MAAM,CAACC,GAAG,CAAC,iCAAiC,CAAC;AAmBtE,MAAMC,OAAO,gBAAG,IAAIC,WAAW,EAAE;AACjC,MAAMC,aAAa,gBAAGP,MAAM,CAACQ,IAAI,CAACP,QAAQ,CAACQ,KAAK,CAAC;AAEjD,OAAO,MAAMC,cAAc,gBAAGlB,UAAU,CACtC,oCAAoC,CACrC;AACD,OAAO,MAAMmB,sBAAsB,gBAAGjB,KAAK,CAACkB,OAAO,CAACF,cAAc,EAAE;EAClEG,IAAI,EAAE,MAAM;EACZC,MAAM,EAAEC,CAAC,IAAIC,IAAI,CAACC,SAAS,CAACF,CAAC,CAAC;EAC9BG,MAAM,EAAEH,CAAC,IAAIC,IAAI,CAACG,KAAK,CAAC,OAAOJ,CAAC,KAAK,QAAQ,GAAGA,CAAC,GAAGV,OAAO,CAACa,MAAM,CAACH,CAAC,CAAC;CACtE,CAAC;AAEF,MAAMK,IAAI,gBAAG3B,MAAM,CAAC4B,GAAG,CAAC,aAAS;EAC/B,MAAMC,QAAQ,GAAG,OAAOZ,cAAc;EAEtC,MAAMa,OAAO,GAAGA,CAAC;IACfC,YAAY;IACZC,GAAG,GAAG,2BAA2B;IACjCC,OAAO,GAAG;EAAE,CACH,KACTjC,MAAM,CAAC4B,GAAG,CAAC,aAAS;IAClB,MAAMM,MAAM,GAAG,OAAOhC,GAAG,CAACyB,IAAI,CAC5B,GAAGK,GAAG,MAAMC,OAAO,aAAaJ,QAAQ,CAACT,IAAI,EAAE,CAChD;IACD,MAAMe,MAAM,GAAIH,GAAW,IACzB9B,GAAG,CAACkC,GAAG,CAACF,MAAM,EAAE,GAAGF,GAAG,MAAMC,OAAO,aAAaJ,QAAQ,CAACT,IAAI,EAAE,CAAC;IAClE,MAAMiB,QAAQ,GAAG,OAAOjC,OAAO,CAACuB,IAAI,EAA0B;IAC9D,MAAMW,MAAM,GAAG,OAAOnC,MAAM,CAACoC,aAAa,CAACrC,GAAG,CAACsC,GAAG,CAACN,MAAM,CAAC,EAAE;MAC1DO,gBAAgB,EAAEC,CAAC,IAAI,IAAI;MAC3BC,WAAW,EAAE;KACd,CAAC;IACF,MAAMC,QAAQ,GAAG,OAAON,MAAM,CAACO,MAAM;IACrC,MAAMC,aAAa,GAAIC,KAAsC,IAC3D/C,MAAM,CAACgD,YAAY,CAAChD,MAAM,CAACiD,QAAQ,CAACF,KAAK,CAAC,EAAE;MAC1CG,MAAM,EAAE,0BAA0B;MAClCC,OAAO,EAAE;KACV,CAAC;IACJ,MAAMC,KAAK,GACTC,OAA2C,IACpB;MACvB,IAAIA,OAAO,KAAK5C,SAAS,EAAE;QACzB,OAAOT,MAAM,CAACsD,aAAa,CACzBV,QAAQ,CAAC,IAAIzC,MAAM,CAACoD,UAAU,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,EACrDT,aAAa,CACd;MACH;MACA,OAAO9C,MAAM,CAACsD,aAAa,CACzBV,QAAQ,CAACf,QAAQ,CAACR,MAAM,CAACgC,OAAO,CAAC,CAAC,EAClCP,aAAa,CACd;IACH,CAAC;IACD,OAAOf,YAAY,CAACyB,IAAI,CACtBxD,MAAM,CAACyD,QAAQ,CACbzD,MAAM,CAAC0D,gBAAgB,CAA2BC,KAAK,IACrDrB,MAAM,CAACsB,MAAM,CAAClB,CAAC,IAAG;MAChB,MAAMW,OAAO,GAAGxB,QAAQ,CAACJ,MAAM,CAACiB,CAAC,CAAC;MAClCL,QAAQ,CAACwB,WAAW,CAACR,OAAO,CAAC;MAC3BM,KAAa,CAACG,GAAG,CAAC,CAACT,OAAO,CAAC,EAAE/C,KAAK,CAACyD,KAAK,EAAEjD,aAAa,CAAC;IAC5D,CAAC,CAAC,CACH,CACF,EACDd,MAAM,CAACgE,KAAK,CAAC;MACXC,KAAK,EAAEC,CAAC,IAAIA,CAAC,CAACC,MAAM,KAAK,OAAO,IAAID,CAAC,CAACE,IAAI,KAAK;KAChD,CAAC,EACFpE,MAAM,CAACsD,aAAa,CAACP,KAAK,IACxB/C,MAAM,CAACiD,QAAQ,CAAC,gCAAgC,EAAEF,KAAK,CAAC,CACzD,EACD/C,MAAM,CAACqE,MAAM,CACXhE,QAAQ,CAACiE,WAAW,CAAC,GAAG,CAAC,CAACd,IAAI,CAC5BnD,QAAQ,CAACkE,KAAK,CAAClE,QAAQ,CAACmE,MAAM,CAAC,KAAK,CAAC,CAAC,CACvC,CACF,EACDxE,MAAM,CAACgD,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,EACzChD,MAAM,CAACyE,UAAU,EACjBzE,MAAM,CAAC0E,aAAa,CACrB;IAED,OAAO;MACLC,IAAI,EAAEtC,QAAQ,CAACsC,IAAI;MACnBxC,MAAM;MACNiB;KACQ;EACZ,CAAC,CAAC,CAACI,IAAI,CACLxD,MAAM,CAACgD,YAAY,CAAC;IAClBE,MAAM,EAAE;GACT,CAAC,CACH;EAEH,OAAO;IAAEpB;EAAO,CAAW;AAC7B,CAAC,CAAC;AAKF,OAAO,MAAM8C,SAAS,gBAAG7E,UAAU,CAGjC,8BAA8B,CAAC;AACjC,OAAO,MAAM8E,aAAa,gBAAG5E,KAAK,CAAC6E,MAAM,CAACF,SAAS,EAAEjD,IAAI,CAAC","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,IAAsD,KAEtDpB,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";
|
|
@@ -30,8 +29,6 @@ export const make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
30
29
|
} = yield* Messaging;
|
|
31
30
|
const shardState = yield* ShardStateStore;
|
|
32
31
|
const connect = shard => Effect.gen(function* (_) {
|
|
33
|
-
const outboundQueue = yield* Mailbox.make();
|
|
34
|
-
const pendingQueue = yield* Mailbox.make();
|
|
35
32
|
const reconnectHandle = yield* FiberHandle.make();
|
|
36
33
|
const phase = yield* Ref.make(0 /* Phase.Connecting */);
|
|
37
34
|
const stateStore = shardState.forShard(shard);
|
|
@@ -41,37 +38,22 @@ export const make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
41
38
|
sequence: 0
|
|
42
39
|
}));
|
|
43
40
|
const setPhase = p => Effect.zipLeft(Ref.set(phase, p), Effect.annotateLogs(Effect.logTrace("phase transition"), "phase", p));
|
|
44
|
-
const outbound = Effect.orDie(Effect.zipLeft(outboundQueue.take, limiter.maybeWait("dfx.shard.send", Duration.minutes(1), 120)));
|
|
45
|
-
function* send(p) {
|
|
46
|
-
if ((yield* Ref.get(phase)) === 2 /* Phase.Connected */) {
|
|
47
|
-
outboundQueue.unsafeOffer(p);
|
|
48
|
-
} else {
|
|
49
|
-
pendingQueue.unsafeOffer(p);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
41
|
const heartbeatSend = genFn(function* (p) {
|
|
53
|
-
if ((yield* Ref.get(phase))
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
return false;
|
|
42
|
+
if ((yield* Ref.get(phase)) === 0 /* Phase.Connecting */) return false;
|
|
43
|
+
yield* write(p);
|
|
44
|
+
return true;
|
|
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
49
|
});
|
|
66
50
|
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
51
|
yield* setPhase(0 /* Phase.Connecting */);
|
|
70
52
|
});
|
|
71
53
|
const socket = yield* dws.connect({
|
|
72
|
-
outbound,
|
|
73
54
|
onConnecting
|
|
74
55
|
});
|
|
56
|
+
const write = p => Effect.zipRight(limiter.maybeWait("dfx.shard.send", Duration.minutes(1), 120), socket.write(p));
|
|
75
57
|
const hellos = yield* Effect.acquireRelease(Mailbox.make(), _ => _.shutdown);
|
|
76
58
|
const acks = yield* Effect.acquireRelease(Mailbox.make(), _ => _.shutdown);
|
|
77
59
|
// heartbeats
|
|
@@ -86,7 +68,7 @@ export const make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
86
68
|
// delayed reconnect
|
|
87
69
|
const delayedReconnect = Effect.gen(function* () {
|
|
88
70
|
yield* Effect.sleep(30_000);
|
|
89
|
-
yield*
|
|
71
|
+
yield* socket.write(Reconnect);
|
|
90
72
|
});
|
|
91
73
|
function* onPayload(p) {
|
|
92
74
|
if (typeof p.s === "number") {
|
|
@@ -104,7 +86,7 @@ export const make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
104
86
|
switch (p.op) {
|
|
105
87
|
case Discord.GatewayOpcode.HELLO:
|
|
106
88
|
{
|
|
107
|
-
yield*
|
|
89
|
+
yield* write(yield* identify);
|
|
108
90
|
yield* setPhase(1 /* Phase.Handshake */);
|
|
109
91
|
hellos.unsafeOffer(p);
|
|
110
92
|
yield* FiberHandle.run(reconnectHandle, delayedReconnect);
|
|
@@ -121,7 +103,7 @@ export const make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
121
103
|
resumeState.sessionId = "";
|
|
122
104
|
yield* stateStore.clear;
|
|
123
105
|
}
|
|
124
|
-
yield*
|
|
106
|
+
yield* socket.write(Reconnect);
|
|
125
107
|
break;
|
|
126
108
|
}
|
|
127
109
|
case Discord.GatewayOpcode.DISPATCH:
|
|
@@ -134,14 +116,14 @@ export const make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
134
116
|
}
|
|
135
117
|
case Discord.GatewayOpcode.RECONNECT:
|
|
136
118
|
{
|
|
137
|
-
yield*
|
|
119
|
+
yield* socket.write(Reconnect);
|
|
138
120
|
break;
|
|
139
121
|
}
|
|
140
122
|
}
|
|
141
123
|
}
|
|
142
124
|
yield* Effect.gen(function* () {
|
|
143
125
|
while (true) {
|
|
144
|
-
yield*
|
|
126
|
+
yield* write(yield* sendMailbox.take);
|
|
145
127
|
}
|
|
146
128
|
}).pipe(Effect.forkScoped, Effect.interruptible);
|
|
147
129
|
yield* Effect.gen(function* () {
|
|
@@ -150,8 +132,7 @@ export const make = /*#__PURE__*/Effect.gen(function* () {
|
|
|
150
132
|
}
|
|
151
133
|
}).pipe(Effect.forkScoped, Effect.interruptible);
|
|
152
134
|
return {
|
|
153
|
-
id: shard
|
|
154
|
-
send
|
|
135
|
+
id: shard
|
|
155
136
|
};
|
|
156
137
|
}).pipe(Effect.annotateLogs({
|
|
157
138
|
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","Ref","genFn","FiberHandle","make","gen","gateway","token","limiter","dws","hub","sendMailbox","shardState","connect","shard","_","reconnectHandle","phase","stateStore","forShard","resumeState","getOrElse","get","resumeUrl","sessionId","sequence","setPhase","p","zipLeft","set","annotateLogs","logTrace","heartbeatSend","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","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.3";
|
|
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.3",
|
|
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": "c73dfab1ce202f32392ce8e655b9ebd1d62bb6bd",
|
|
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({
|
|
@@ -32,19 +32,21 @@ export const send = (
|
|
|
32
32
|
send: (p: DiscordWS.Message) => Effect.Effect<boolean>,
|
|
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"
|
|
@@ -40,8 +39,6 @@ export const make = Effect.gen(function* () {
|
|
|
40
39
|
|
|
41
40
|
const connect = (shard: [id: number, count: number]) =>
|
|
42
41
|
Effect.gen(function* (_) {
|
|
43
|
-
const outboundQueue = yield* Mailbox.make<Message>()
|
|
44
|
-
const pendingQueue = yield* Mailbox.make<Message>()
|
|
45
42
|
const reconnectHandle = yield* FiberHandle.make()
|
|
46
43
|
const phase = yield* Ref.make(Phase.Connecting)
|
|
47
44
|
const stateStore = shardState.forShard(shard)
|
|
@@ -58,63 +55,28 @@ export const make = Effect.gen(function* () {
|
|
|
58
55
|
Ref.set(phase, p),
|
|
59
56
|
Effect.annotateLogs(Effect.logTrace("phase transition"), "phase", p),
|
|
60
57
|
)
|
|
61
|
-
const outbound = Effect.orDie(
|
|
62
|
-
Effect.zipLeft(
|
|
63
|
-
outboundQueue.take,
|
|
64
|
-
limiter.maybeWait("dfx.shard.send", Duration.minutes(1), 120),
|
|
65
|
-
),
|
|
66
|
-
)
|
|
67
|
-
|
|
68
|
-
function* send(p: Message) {
|
|
69
|
-
if ((yield* Ref.get(phase)) === Phase.Connected) {
|
|
70
|
-
outboundQueue.unsafeOffer(p)
|
|
71
|
-
} else {
|
|
72
|
-
pendingQueue.unsafeOffer(p)
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
58
|
|
|
76
59
|
const heartbeatSend = genFn(function* (p: Message) {
|
|
77
|
-
if ((yield* Ref.get(phase))
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}
|
|
81
|
-
return false
|
|
60
|
+
if ((yield* Ref.get(phase)) === Phase.Connecting) return false
|
|
61
|
+
yield* write(p)
|
|
62
|
+
return true
|
|
82
63
|
})
|
|
83
64
|
|
|
84
|
-
const prioritySend = (p: Message) => outboundQueue.offer(p)
|
|
85
|
-
|
|
86
65
|
const resume = Effect.gen(function* () {
|
|
87
66
|
yield* FiberHandle.clear(reconnectHandle)
|
|
88
67
|
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
68
|
})
|
|
101
69
|
|
|
102
70
|
const onConnecting = Effect.gen(function* () {
|
|
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
71
|
yield* setPhase(Phase.Connecting)
|
|
115
72
|
})
|
|
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,7 +129,7 @@ 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)
|
|
@@ -182,7 +144,7 @@ export const make = Effect.gen(function* () {
|
|
|
182
144
|
resumeState.sessionId = ""
|
|
183
145
|
yield* stateStore.clear
|
|
184
146
|
}
|
|
185
|
-
yield*
|
|
147
|
+
yield* socket.write(Reconnect)
|
|
186
148
|
break
|
|
187
149
|
}
|
|
188
150
|
case Discord.GatewayOpcode.DISPATCH: {
|
|
@@ -193,7 +155,7 @@ export const make = Effect.gen(function* () {
|
|
|
193
155
|
break
|
|
194
156
|
}
|
|
195
157
|
case Discord.GatewayOpcode.RECONNECT: {
|
|
196
|
-
yield*
|
|
158
|
+
yield* socket.write(Reconnect)
|
|
197
159
|
break
|
|
198
160
|
}
|
|
199
161
|
}
|
|
@@ -201,7 +163,7 @@ export const make = Effect.gen(function* () {
|
|
|
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.3";
|
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.3";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/version.js
CHANGED