dfx 0.61.6 → 0.61.7
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 +1 -1
- package/DiscordGateway/Shard.d.ts +2 -2
- package/DiscordGateway/Shard.d.ts.map +1 -1
- package/DiscordGateway/Shard.js +13 -11
- package/DiscordGateway/Shard.js.map +1 -1
- package/DiscordGateway/Sharder.d.ts +2 -2
- package/DiscordGateway/Sharder.d.ts.map +1 -1
- package/DiscordGateway/Sharder.js +9 -9
- package/DiscordGateway/Sharder.js.map +1 -1
- package/DiscordGateway/WS.d.ts +0 -1
- package/DiscordGateway/WS.d.ts.map +1 -1
- package/DiscordGateway/WS.js +9 -14
- package/DiscordGateway/WS.js.map +1 -1
- package/DiscordGateway.d.ts +1 -1
- package/DiscordGateway.d.ts.map +1 -1
- package/DiscordGateway.js +1 -1
- package/DiscordGateway.js.map +1 -1
- package/Interactions/gateway.d.ts +1 -1
- package/gateway.d.ts +1 -1
- package/mjs/DiscordGateway/Shard.mjs +13 -11
- package/mjs/DiscordGateway/Shard.mjs.map +1 -1
- package/mjs/DiscordGateway/Sharder.mjs +9 -9
- package/mjs/DiscordGateway/Sharder.mjs.map +1 -1
- package/mjs/DiscordGateway/WS.mjs +9 -14
- package/mjs/DiscordGateway/WS.mjs.map +1 -1
- package/mjs/DiscordGateway.mjs +1 -1
- package/mjs/DiscordGateway.mjs.map +1 -1
- package/mjs/utils/Effect.mjs +4 -4
- package/mjs/utils/Effect.mjs.map +1 -1
- package/mjs/version.mjs +1 -1
- package/package.json +2 -2
- package/src/DiscordGateway/Shard.ts +26 -27
- package/src/DiscordGateway/Sharder.ts +11 -9
- package/src/DiscordGateway/WS.ts +28 -34
- package/src/DiscordGateway.ts +4 -1
- package/src/utils/Effect.ts +22 -19
- package/src/version.ts +1 -1
- package/utils/Effect.d.ts.map +1 -1
- package/utils/Effect.js +4 -4
- package/utils/Effect.js.map +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Shard.mjs","names":["Chunk","Tag","Duration","Option","ConfigSecret","Effect","Hub","Layer","Queue","Ref","DiscordConfig","DiscordWS","LiveDiscordWS","Heartbeats","Identify","InvalidSession","Utils","Reconnect","Log","LiveRateLimiter","RateLimiter","Discord","make","gen","_","gateway","token","limiter","dws","log","connect","shard","hub","sendQueue","outboundQueue","unbounded","pendingQueue","phase","setPhase","p","zipLeft","set","debug","outbound","take","maybeWait","minutes","send","flatMap","get","offer","heartbeatSend","succeed","prioritySend","resume","
|
|
1
|
+
{"version":3,"file":"Shard.mjs","names":["Chunk","Tag","Duration","Option","ConfigSecret","Effect","Hub","Layer","Queue","Ref","DiscordConfig","DiscordWS","LiveDiscordWS","Heartbeats","Identify","InvalidSession","Utils","Reconnect","Log","LiveRateLimiter","RateLimiter","Discord","make","gen","_","gateway","token","limiter","dws","log","connect","shard","hub","sendQueue","outboundQueue","unbounded","pendingQueue","phase","setPhase","p","zipLeft","set","debug","outbound","take","maybeWait","minutes","send","flatMap","get","offer","heartbeatSend","succeed","prioritySend","resume","asUnit","tap","offerAll","zipRight","takeAll","onConnecting","msgs","filter","msg","op","GatewayOpcode","IDENTIFY","RESUME","HEARTBEAT","socket","isReady","liftPredicate","DISPATCH","t","latestReady","updateLatestReady","latest","map","d","latestSequence","updateLatestSequence","fromNullable","s","maybeUpdateUrl","match","onNone","unit","onSome","resume_gateway_url","setUrl","hellos","acks","heartbeats","identify","identifyOrResume","value","intents","presence","onPayload","HELLO","HEARTBEAT_ACK","INVALID_SESSION","fromPayload","publish","drainSendQueue","forever","run","all","discard","concurrency","id","Shard","LiveShard","provide","merge","effect"],"sources":["../../src/DiscordGateway/Shard.ts"],"sourcesContent":[null],"mappings":"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"}
|
|
@@ -24,14 +24,14 @@ const make = /*#__PURE__*/Effect.gen(function* (_) {
|
|
|
24
24
|
const currentShards = yield* _(Ref.make(HashSet.empty()));
|
|
25
25
|
const takeConfig = totalCount => Effect.gen(function* (_) {
|
|
26
26
|
const currentCount = yield* _(Ref.make(0));
|
|
27
|
-
const claimId = sharderCount => store.claimId({
|
|
27
|
+
const claimId = sharderCount => Effect.map(_ => _.value)(Effect.repeat(claimRepeatPolicy)(store.claimId({
|
|
28
28
|
totalCount,
|
|
29
29
|
sharderCount
|
|
30
|
-
})
|
|
31
|
-
return
|
|
30
|
+
})));
|
|
31
|
+
return Effect.map(id => ({
|
|
32
32
|
id,
|
|
33
33
|
totalCount
|
|
34
|
-
})));
|
|
34
|
+
}))(Effect.flatMap(claimId)(Ref.getAndUpdate(currentCount, _ => _ + 1)));
|
|
35
35
|
});
|
|
36
36
|
const gateway = yield* _(rest.getGatewayBot(), Effect.flatMap(r => r.json), Effect.catchAll(() => Effect.succeed({
|
|
37
37
|
url: "wss://gateway.discord.gg/",
|
|
@@ -46,14 +46,14 @@ const make = /*#__PURE__*/Effect.gen(function* (_) {
|
|
|
46
46
|
const run = (hub, sendQueue) => Effect.gen(function* (_) {
|
|
47
47
|
const deferred = yield* _(Deferred.make());
|
|
48
48
|
const take = yield* _(takeConfig(config.shardCount ?? gateway.shards));
|
|
49
|
-
const spawner =
|
|
49
|
+
const spawner = Effect.forever(Effect.flatMap(shard => Effect.acquireUseRelease(Ref.update(currentShards, HashSet.add(shard)), () => shard.run, () => Ref.update(currentShards, HashSet.remove(shard))).pipe(Effect.catchAllCause(_ => Deferred.failCause(deferred, _)), Effect.fork))(Effect.flatMap(c => shard.connect([c.id, c.totalCount], hub, sendQueue))(Effect.tap(({
|
|
50
|
+
concurrency,
|
|
51
|
+
id
|
|
52
|
+
}) => limiter.maybeWait(`dfx.sharder.${id % concurrency}`, Duration.millis(config.identifyRateLimit[0]), config.identifyRateLimit[1]))(Effect.map(config => ({
|
|
50
53
|
...config,
|
|
51
54
|
url: gateway.url,
|
|
52
55
|
concurrency: gateway.session_start_limit.max_concurrency
|
|
53
|
-
}))
|
|
54
|
-
concurrency,
|
|
55
|
-
id
|
|
56
|
-
}) => limiter.maybeWait(`dfx.sharder.${id % concurrency}`, Duration.millis(config.identifyRateLimit[0]), config.identifyRateLimit[1])), Effect.flatMap(c => shard.connect([c.id, c.totalCount], hub, sendQueue)), Effect.flatMap(shard => Effect.acquireUseRelease(Ref.update(currentShards, HashSet.add(shard)), () => shard.run, () => Ref.update(currentShards, HashSet.remove(shard))).pipe(Effect.catchAllCause(_ => Deferred.failCause(deferred, _)), Effect.fork)), Effect.forever);
|
|
56
|
+
}))(take)))));
|
|
57
57
|
const spawners = Chunk.map(Chunk.range(1, gateway.session_start_limit.max_concurrency), () => spawner);
|
|
58
58
|
return yield* _(Effect.all([Effect.all(spawners, {
|
|
59
59
|
concurrency: "unbounded",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sharder.mjs","names":["Chunk","Tag","Duration","HashSet","Deferred","Effect","Layer","Ref","Schedule","DiscordConfig","LiveShard","Shard","ShardStore","DiscordREST","LiveRateLimiter","RateLimiter","claimRepeatPolicy","spaced","pipe","whileInput","_","_tag","passthrough","make","gen","store","rest","gateway","config","limiter","shard","currentShards","empty","takeConfig","totalCount","currentCount","claimId","sharderCount","
|
|
1
|
+
{"version":3,"file":"Sharder.mjs","names":["Chunk","Tag","Duration","HashSet","Deferred","Effect","Layer","Ref","Schedule","DiscordConfig","LiveShard","Shard","ShardStore","DiscordREST","LiveRateLimiter","RateLimiter","claimRepeatPolicy","spaced","pipe","whileInput","_","_tag","passthrough","make","gen","store","rest","gateway","config","limiter","shard","currentShards","empty","takeConfig","totalCount","currentCount","claimId","sharderCount","map","value","repeat","id","flatMap","getAndUpdate","getGatewayBot","r","json","catchAll","succeed","url","shards","session_start_limit","total","remaining","reset_after","max_concurrency","run","hub","sendQueue","deferred","take","shardCount","spawner","forever","acquireUseRelease","update","add","remove","catchAllCause","failCause","fork","c","connect","tap","concurrency","maybeWait","millis","identifyRateLimit","spawners","range","all","discard","await","get","Sharder","LiveSharder","provide","merge","effect"],"sources":["../../src/DiscordGateway/Sharder.ts"],"sourcesContent":[null],"mappings":"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"}
|
|
@@ -4,7 +4,6 @@ import * as Effect from "@effect/io/Effect";
|
|
|
4
4
|
import * as Layer from "@effect/io/Layer";
|
|
5
5
|
import * as Queue from "@effect/io/Queue";
|
|
6
6
|
import * as Ref from "@effect/io/Ref";
|
|
7
|
-
import * as Runtime from "@effect/io/Runtime";
|
|
8
7
|
import { Log } from "dfx/Log";
|
|
9
8
|
import WebSocket from "isomorphic-ws";
|
|
10
9
|
export const Reconnect = /*#__PURE__*/Symbol();
|
|
@@ -27,19 +26,15 @@ export class WebSocketCloseError {
|
|
|
27
26
|
}
|
|
28
27
|
}
|
|
29
28
|
const isReconnect = e => e._tag === "WebSocketCloseError" && e.code === 1012;
|
|
30
|
-
const socket = urlRef =>
|
|
29
|
+
const socket = urlRef => Effect.acquireRelease(ws => Effect.sync(() => {
|
|
31
30
|
// eslint-disable-next-line no-extra-semi
|
|
32
31
|
;
|
|
33
32
|
ws.removeAllListeners?.();
|
|
34
33
|
ws.close();
|
|
35
|
-
})));
|
|
36
|
-
const offer = (ws, queue, log) => Effect.
|
|
37
|
-
const run = Runtime.runFork(runtime);
|
|
34
|
+
}))(Effect.map(_ => new WebSocket(_))(Ref.get(urlRef)));
|
|
35
|
+
const offer = (ws, queue, log) => Effect.async(resume => {
|
|
38
36
|
ws.addEventListener("message", message => {
|
|
39
|
-
|
|
40
|
-
concurrency: "unbounded",
|
|
41
|
-
discard: true
|
|
42
|
-
}));
|
|
37
|
+
Effect.runFork(Effect.zipRight(log.debug("WS", "receive", message.data), Queue.offer(queue, message.data)));
|
|
43
38
|
});
|
|
44
39
|
ws.addEventListener("error", cause => {
|
|
45
40
|
resume(Effect.fail(new WebSocketError("error", cause)));
|
|
@@ -47,7 +42,7 @@ const offer = (ws, queue, log) => Effect.runtime().pipe(Effect.flatMap(runtime =
|
|
|
47
42
|
ws.addEventListener("close", e => {
|
|
48
43
|
resume(Effect.fail(new WebSocketCloseError(e.code, e.reason)));
|
|
49
44
|
});
|
|
50
|
-
})
|
|
45
|
+
});
|
|
51
46
|
const waitForOpen = (ws, timeout) => Effect.timeoutFail(Effect.suspend(() => {
|
|
52
47
|
if (ws.readyState === WebSocket.OPEN) {
|
|
53
48
|
return Effect.unit;
|
|
@@ -61,7 +56,7 @@ const waitForOpen = (ws, timeout) => Effect.timeoutFail(Effect.suspend(() => {
|
|
|
61
56
|
onTimeout: () => new WebSocketError("open-timeout"),
|
|
62
57
|
duration: timeout
|
|
63
58
|
});
|
|
64
|
-
const send = (ws, take, log) =>
|
|
59
|
+
const send = (ws, take, log) => Effect.forever(Effect.tap(data => {
|
|
65
60
|
if (data === Reconnect) {
|
|
66
61
|
return Effect.failSync(() => {
|
|
67
62
|
ws.close(1012, "reconnecting");
|
|
@@ -71,15 +66,15 @@ const send = (ws, take, log) => take.pipe(Effect.tap(data => log.debug("WS", "se
|
|
|
71
66
|
return Effect.sync(() => {
|
|
72
67
|
ws.send(data);
|
|
73
68
|
});
|
|
74
|
-
}),
|
|
69
|
+
})(Effect.tap(data => log.debug("WS", "send", data))(take)));
|
|
75
70
|
const make = /*#__PURE__*/Effect.gen(function* (_) {
|
|
76
71
|
const log = yield* _(Log);
|
|
77
72
|
const connect = (url, takeOutbound, onConnecting = Effect.unit, openTimeout = Duration.seconds(3)) => Effect.gen(function* (_) {
|
|
78
73
|
const queue = yield* _(Queue.unbounded());
|
|
79
|
-
const run =
|
|
74
|
+
const run = Effect.retryWhile(isReconnect)(Effect.scoped(Effect.flatMap(ws => Effect.all([offer(ws, queue, log), Effect.zipRight(waitForOpen(ws, openTimeout), send(ws, takeOutbound, log))], {
|
|
80
75
|
concurrency: "unbounded",
|
|
81
76
|
discard: true
|
|
82
|
-
}))
|
|
77
|
+
}))(Effect.zipRight(socket(url))(onConnecting))));
|
|
83
78
|
return {
|
|
84
79
|
run,
|
|
85
80
|
take: Queue.take(queue)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WS.mjs","names":["Tag","Duration","Effect","Layer","Queue","Ref","
|
|
1
|
+
{"version":3,"file":"WS.mjs","names":["Tag","Duration","Effect","Layer","Queue","Ref","Log","WebSocket","Reconnect","Symbol","WebSocketError","reason","error","_tag","constructor","WebSocketCloseError","code","isReconnect","e","socket","urlRef","acquireRelease","ws","sync","removeAllListeners","close","map","_","get","offer","queue","log","async","resume","addEventListener","message","runFork","zipRight","debug","data","cause","fail","waitForOpen","timeout","timeoutFail","suspend","readyState","OPEN","unit","once","onTimeout","duration","send","take","forever","tap","failSync","make","gen","connect","url","takeOutbound","onConnecting","openTimeout","seconds","unbounded","run","retryWhile","scoped","flatMap","all","concurrency","discard","WS","LiveWS","effect"],"sources":["../../src/DiscordGateway/WS.ts"],"sourcesContent":[null],"mappings":"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"}
|
package/mjs/DiscordGateway.mjs
CHANGED
|
@@ -6,7 +6,7 @@ import * as Queue from "@effect/io/Queue";
|
|
|
6
6
|
import * as Stream from "@effect/stream/Stream";
|
|
7
7
|
import { LiveSharder, Sharder } from "dfx/DiscordGateway/Sharder";
|
|
8
8
|
import * as EffectUtils from "dfx/utils/Effect";
|
|
9
|
-
const fromDispatchFactory = source => event => Stream.filter(source, p => p.t === event)
|
|
9
|
+
const fromDispatchFactory = source => event => Stream.map(Stream.filter(source, p => p.t === event), p => p.d);
|
|
10
10
|
const handleDispatchFactory = hub => (event, handle) => EffectUtils.subscribeForEachPar(hub, _ => {
|
|
11
11
|
if (_.t === event) {
|
|
12
12
|
return handle(_.d);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DiscordGateway.mjs","names":["Tag","Effect","Hub","Layer","Queue","Stream","LiveSharder","Sharder","EffectUtils","fromDispatchFactory","source","event","filter","p","t","
|
|
1
|
+
{"version":3,"file":"DiscordGateway.mjs","names":["Tag","Effect","Hub","Layer","Queue","Stream","LiveSharder","Sharder","EffectUtils","fromDispatchFactory","source","event","map","filter","p","t","d","handleDispatchFactory","hub","handle","subscribeForEachPar","_","unit","DiscordGateway","make","gen","sharder","unbounded","sendQueue","send","payload","offer","dispatch","fromHub","fromDispatch","handleDispatch","run","of","shards","LiveDiscordGateway","provide","effect"],"sources":["../src/DiscordGateway.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,GAAG,QAAQ,sBAAsB;AAE1C,OAAO,KAAKC,MAAM,MAAM,mBAAmB;AAC3C,OAAO,KAAKC,GAAG,MAAM,gBAAgB;AACrC,OAAO,KAAKC,KAAK,MAAM,kBAAkB;AACzC,OAAO,KAAKC,KAAK,MAAM,kBAAkB;AACzC,OAAO,KAAKC,MAAM,MAAM,uBAAuB;AAE/C,SAASC,WAAW,EAAEC,OAAO,QAAQ,4BAA4B;AAGjE,OAAO,KAAKC,WAAW,MAAM,kBAAkB;AAE/C,MAAMC,mBAAmB,GAErBC,MAAyE,IAGzEC,KAAQ,IAERN,MAAM,CAACO,GAAG,CACRP,MAAM,CAACQ,MAAM,CAACH,MAAM,EAAEI,CAAC,IAAIA,CAAC,CAACC,CAAC,KAAKJ,KAAK,CAAC,EACzCG,CAAC,IAAIA,CAAC,CAACE,CAAS,CACjB;AAEL,MAAMC,qBAAqB,GACxBC,GAA0D,IAC3D,CACEP,KAAQ,EACRQ,MAAmE,KAEnEX,WAAW,CAACY,mBAAmB,CAACF,GAAG,EAAEG,CAAC,IAAG;EACvC,IAAIA,CAAC,CAACN,CAAC,KAAKJ,KAAK,EAAE;IACjB,OAAOQ,MAAM,CAACE,CAAC,CAACL,CAAQ,CAAC;;EAE3B,OAAOf,MAAM,CAACqB,IAAI;AACpB,CAAC,CAAC;AAyBN,OAAO,MAAMC,cAAc,gBAAGvB,GAAG,EAAkB;AAEnD,OAAO,MAAMwB,IAAI,gBAAGvB,MAAM,CAACwB,GAAG,CAAC,WAAWJ,CAAC;EACzC,MAAMK,OAAO,GAAG,OAAOL,CAAC,CAACd,OAAO,CAAC;EACjC,MAAMW,GAAG,GAAG,OAAOG,CAAC,CAClBnB,GAAG,CAACyB,SAAS,EAAgD,CAC9D;EAED,MAAMC,SAAS,GAAG,OAAOP,CAAC,CACxBjB,KAAK,CAACuB,SAAS,EAA6C,CAC7D;EACD,MAAME,IAAI,GAAIC,OAAkD,IAC9DF,SAAS,CAACG,KAAK,CAACD,OAAO,CAAC;EAE1B,MAAME,QAAQ,GAAG3B,MAAM,CAAC4B,OAAO,CAACf,GAAG,CAAC;EACpC,MAAMgB,YAAY,GAAGzB,mBAAmB,CAACuB,QAAQ,CAAC;EAClD,MAAMG,cAAc,GAAGlB,qBAAqB,CAACC,GAAG,CAAC;EAEjD,MAAMkB,GAAG,GAAGV,OAAO,CAACU,GAAG,CAAClB,GAAG,EAAEU,SAAS,CAAC;EAEvC,OAAOL,cAAc,CAACc,EAAE,CAAC;IACvBD,GAAG;IACHJ,QAAQ;IACRE,YAAY;IACZC,cAAc;IACdN,IAAI;IACJS,MAAM,EAAEZ,OAAO,CAACY;GACjB,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,MAAMC,kBAAkB,gBAAGpC,KAAK,CAACqC,OAAO,CAC7ClC,WAAW,eACXH,KAAK,CAACsC,MAAM,CAAClB,cAAc,EAAEC,IAAI,CAAC,CACnC"}
|
package/mjs/utils/Effect.mjs
CHANGED
|
@@ -4,17 +4,17 @@ import * as Hub from "@effect/io/Hub";
|
|
|
4
4
|
import * as Queue from "@effect/io/Queue";
|
|
5
5
|
import * as ScopedRef from "@effect/io/ScopedRef";
|
|
6
6
|
export const subscribeForEachPar = (self, effect) => Effect.flatMap(Deferred.make(), deferred => {
|
|
7
|
-
const run =
|
|
7
|
+
const run = Effect.scoped(Effect.flatMap(queue => Effect.forever(Effect.flatMap(Queue.take(queue), _ => Effect.forkScoped(Effect.catchAllCause(effect(_), _ => Deferred.failCause(deferred, _))))))(Hub.subscribe(self)));
|
|
8
8
|
return Effect.all([run, Deferred.await(deferred)], {
|
|
9
9
|
concurrency: "unbounded",
|
|
10
10
|
discard: true
|
|
11
11
|
});
|
|
12
12
|
});
|
|
13
|
-
export const foreverSwitch = (self, f) => Effect.
|
|
14
|
-
const run =
|
|
13
|
+
export const foreverSwitch = (self, f) => Effect.scoped(Effect.flatMap(([causeDeferred, fiberRef]) => {
|
|
14
|
+
const run = Effect.forever(Effect.flatMap(self, _ => ScopedRef.set(fiberRef, Effect.forkScoped(Effect.tapErrorCause(f(_), _ => Deferred.failCause(causeDeferred, _))))));
|
|
15
15
|
return Effect.all([run, Deferred.await(causeDeferred)], {
|
|
16
16
|
concurrency: "unbounded",
|
|
17
17
|
discard: true
|
|
18
18
|
});
|
|
19
|
-
}), Effect.
|
|
19
|
+
})(Effect.all([Deferred.make(), ScopedRef.fromAcquire(Effect.fork(Effect.unit))])));
|
|
20
20
|
//# sourceMappingURL=Effect.mjs.map
|
package/mjs/utils/Effect.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Effect.mjs","names":["Deferred","Effect","Hub","Queue","ScopedRef","subscribeForEachPar","self","effect","flatMap","make","deferred","run","
|
|
1
|
+
{"version":3,"file":"Effect.mjs","names":["Deferred","Effect","Hub","Queue","ScopedRef","subscribeForEachPar","self","effect","flatMap","make","deferred","run","scoped","queue","forever","take","_","forkScoped","catchAllCause","failCause","subscribe","all","await","concurrency","discard","foreverSwitch","f","causeDeferred","fiberRef","set","tapErrorCause","fromAcquire","fork","unit"],"sources":["../../src/utils/Effect.ts"],"sourcesContent":[null],"mappings":"AACA,OAAO,KAAKA,QAAQ,MAAM,qBAAqB;AAC/C,OAAO,KAAKC,MAAM,MAAM,mBAAmB;AAE3C,OAAO,KAAKC,GAAG,MAAM,gBAAgB;AACrC,OAAO,KAAKC,KAAK,MAAM,kBAAkB;AACzC,OAAO,KAAKC,SAAS,MAAM,sBAAsB;AAEjD,OAAO,MAAMC,mBAAmB,GAAGA,CACjCC,IAAgB,EAChBC,MAAwC,KAExCN,MAAM,CAACO,OAAO,CAACR,QAAQ,CAACS,IAAI,EAAY,EAAEC,QAAQ,IAAG;EACnD,MAAMC,GAAG,GAaPV,MAAM,CAACW,MAAM,CAXbX,MAAM,CAACO,OAAO,CAACK,KAAK,IAClBZ,MAAM,CAACa,OAAO,CACZb,MAAM,CAACO,OAAO,CAACL,KAAK,CAACY,IAAI,CAACF,KAAK,CAAC,EAAEG,CAAC,IACjCf,MAAM,CAACgB,UAAU,CACfhB,MAAM,CAACiB,aAAa,CAACX,MAAM,CAACS,CAAC,CAAC,EAAEA,CAAC,IAC/BhB,QAAQ,CAACmB,SAAS,CAACT,QAAQ,EAAEM,CAAC,CAAC,CAChC,CACF,CACF,CACF,CACF,CAXDd,GAAG,CAACkB,SAAS,CAACd,IAAI,CAAC,EAapB;EAED,OAAOL,MAAM,CAACoB,GAAG,CAAC,CAACV,GAAG,EAAEX,QAAQ,CAACsB,KAAK,CAACZ,QAAQ,CAAC,CAAC,EAAE;IACjDa,WAAW,EAAE,WAAW;IACxBC,OAAO,EAAE;GACV,CAA+B;AAClC,CAAC,CAAC;AAEJ,OAAO,MAAMC,aAAa,GAAGA,CAC3BnB,IAA4B,EAC5BoB,CAAqC,KA4BnCzB,MAAM,CAACW,MAAM,CAnBbX,MAAM,CAACO,OAAO,CAAC,CAAC,CAACmB,aAAa,EAAEC,QAAQ,CAAC,KAAI;EAC3C,MAAMjB,GAAG,GAAGV,MAAM,CAACa,OAAO,CACxBb,MAAM,CAACO,OAAO,CAACF,IAAI,EAAEU,CAAC,IACpBZ,SAAS,CAACyB,GAAG,CACXD,QAAQ,EACR3B,MAAM,CAACgB,UAAU,CACfhB,MAAM,CAAC6B,aAAa,CAACJ,CAAC,CAACV,CAAC,CAAC,EAAEA,CAAC,IAC1BhB,QAAQ,CAACmB,SAAS,CAACQ,aAAa,EAAEX,CAAC,CAAC,CACrC,CACF,CACF,CACF,CACF;EAED,OAAOf,MAAM,CAACoB,GAAG,CAAC,CAACV,GAAG,EAAEX,QAAQ,CAACsB,KAAK,CAACK,aAAa,CAAC,CAAC,EAAE;IACtDJ,WAAW,EAAE,WAAW;IACxBC,OAAO,EAAE;GACV,CAAyC;AAC5C,CAAC,CAAC,CAxBFvB,MAAM,CAACoB,GAAG,CAAC,CACTrB,QAAQ,CAACS,IAAI,EAAa,EAC1BL,SAAS,CAAC2B,WAAW,CACnB9B,MAAM,CAAC+B,IAAI,CAAC/B,MAAM,CAACgC,IAAI,CAAC,CACzB,CACF,CAAC,EAqBH"}
|
package/mjs/version.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const LIB_VERSION = "0.61.
|
|
1
|
+
export const LIB_VERSION = "0.61.7";
|
|
2
2
|
//# sourceMappingURL=version.mjs.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dfx",
|
|
3
|
-
"version": "0.61.
|
|
3
|
+
"version": "0.61.7",
|
|
4
4
|
"description": "Effect-TS discord library",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -49,6 +49,6 @@
|
|
|
49
49
|
"discord-verify": "^1.2.0",
|
|
50
50
|
"utf-8-validate": "^6.0.3"
|
|
51
51
|
},
|
|
52
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "80549a60863ae73cdbd10c72d316f70335f9ef5f",
|
|
53
53
|
"main": "./index.js"
|
|
54
54
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as Chunk from "@effect/data/Chunk"
|
|
2
2
|
import { Tag } from "@effect/data/Context"
|
|
3
3
|
import * as Duration from "@effect/data/Duration"
|
|
4
|
+
import { pipe } from "@effect/data/Function"
|
|
4
5
|
import * as Option from "@effect/data/Option"
|
|
5
6
|
import * as ConfigSecret from "@effect/io/Config/Secret"
|
|
6
7
|
import * as Effect from "@effect/io/Effect"
|
|
@@ -64,13 +65,15 @@ export const make = Effect.gen(function* (_) {
|
|
|
64
65
|
|
|
65
66
|
const prioritySend = (p: Message) => Queue.offer(outboundQueue, p)
|
|
66
67
|
|
|
67
|
-
const resume =
|
|
68
|
+
const resume = pipe(
|
|
69
|
+
setPhase(Phase.Connected),
|
|
68
70
|
Effect.zipRight(Queue.takeAll(pendingQueue)),
|
|
69
71
|
Effect.tap(_ => Queue.offerAll(outboundQueue, _)),
|
|
70
72
|
Effect.asUnit,
|
|
71
73
|
)
|
|
72
74
|
|
|
73
|
-
const onConnecting =
|
|
75
|
+
const onConnecting = pipe(
|
|
76
|
+
Queue.takeAll(outboundQueue),
|
|
74
77
|
Effect.tap(msgs =>
|
|
75
78
|
Queue.offerAll(
|
|
76
79
|
pendingQueue,
|
|
@@ -89,32 +92,27 @@ export const make = Effect.gen(function* (_) {
|
|
|
89
92
|
|
|
90
93
|
const socket = yield* _(dws.connect({ outbound, onConnecting }))
|
|
91
94
|
|
|
95
|
+
const isReady = Option.liftPredicate(
|
|
96
|
+
(
|
|
97
|
+
p: Discord.GatewayPayload,
|
|
98
|
+
): p is Discord.GatewayPayload<Discord.ReadyEvent> =>
|
|
99
|
+
p.op === Discord.GatewayOpcode.DISPATCH && p.t === "READY",
|
|
100
|
+
)
|
|
101
|
+
|
|
92
102
|
const [latestReady, updateLatestReady] = yield* _(
|
|
93
|
-
Utils.latest(p =>
|
|
94
|
-
Option.some(p).pipe(
|
|
95
|
-
Option.filter(
|
|
96
|
-
(p): p is Discord.GatewayPayload<Discord.ReadyEvent> =>
|
|
97
|
-
p.op === Discord.GatewayOpcode.DISPATCH && p.t === "READY",
|
|
98
|
-
),
|
|
99
|
-
Option.map(p => p.d!),
|
|
100
|
-
),
|
|
101
|
-
),
|
|
103
|
+
Utils.latest(p => Option.map(isReady(p), p => p.d!)),
|
|
102
104
|
)
|
|
103
105
|
const [latestSequence, updateLatestSequence] = yield* _(
|
|
104
106
|
Utils.latest(p => Option.fromNullable(p.s)),
|
|
105
107
|
)
|
|
106
108
|
const maybeUpdateUrl = (p: Discord.GatewayPayload) =>
|
|
107
|
-
Option.
|
|
108
|
-
Option.
|
|
109
|
-
|
|
110
|
-
p.op === Discord.GatewayOpcode.DISPATCH && p.t === "READY",
|
|
111
|
-
),
|
|
112
|
-
Option.map(p => p.d!),
|
|
113
|
-
Option.match({
|
|
109
|
+
Option.match(
|
|
110
|
+
Option.map(isReady(p), p => p.d!),
|
|
111
|
+
{
|
|
114
112
|
onNone: () => Effect.unit,
|
|
115
113
|
onSome: ({ resume_gateway_url }) =>
|
|
116
114
|
socket.setUrl(resume_gateway_url),
|
|
117
|
-
}
|
|
115
|
+
},
|
|
118
116
|
)
|
|
119
117
|
|
|
120
118
|
const hellos = yield* _(Queue.unbounded<Discord.GatewayPayload>())
|
|
@@ -141,13 +139,15 @@ export const make = Effect.gen(function* (_) {
|
|
|
141
139
|
)
|
|
142
140
|
|
|
143
141
|
const onPayload = (p: Discord.GatewayPayload) =>
|
|
144
|
-
|
|
142
|
+
pipe(
|
|
143
|
+
updateLatestReady(p),
|
|
145
144
|
Effect.zipRight(updateLatestSequence(p)),
|
|
146
145
|
Effect.zipRight(maybeUpdateUrl(p)),
|
|
147
146
|
Effect.tap(() => {
|
|
148
147
|
switch (p.op) {
|
|
149
148
|
case Discord.GatewayOpcode.HELLO:
|
|
150
|
-
return
|
|
149
|
+
return pipe(
|
|
150
|
+
Effect.tap(identify, prioritySend),
|
|
151
151
|
Effect.zipRight(setPhase(Phase.Handshake)),
|
|
152
152
|
Effect.zipRight(Queue.offer(hellos, p)),
|
|
153
153
|
)
|
|
@@ -163,20 +163,19 @@ export const make = Effect.gen(function* (_) {
|
|
|
163
163
|
return Effect.zipRight(resume, Hub.publish(hub, p))
|
|
164
164
|
}
|
|
165
165
|
return Hub.publish(hub, p)
|
|
166
|
+
default:
|
|
167
|
+
return Effect.unit
|
|
166
168
|
}
|
|
167
|
-
|
|
168
|
-
return Effect.unit
|
|
169
169
|
}),
|
|
170
170
|
)
|
|
171
171
|
|
|
172
|
-
const drainSendQueue =
|
|
173
|
-
Effect.tap(send),
|
|
174
|
-
Effect.forever,
|
|
172
|
+
const drainSendQueue = Effect.forever(
|
|
173
|
+
Effect.tap(Queue.take(sendQueue), send),
|
|
175
174
|
)
|
|
176
175
|
|
|
177
176
|
const run = Effect.all(
|
|
178
177
|
[
|
|
179
|
-
|
|
178
|
+
Effect.forever(Effect.flatMap(socket.take, onPayload)),
|
|
180
179
|
heartbeats,
|
|
181
180
|
drainSendQueue,
|
|
182
181
|
socket.run,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as Chunk from "@effect/data/Chunk"
|
|
2
2
|
import { Tag } from "@effect/data/Context"
|
|
3
3
|
import * as Duration from "@effect/data/Duration"
|
|
4
|
+
import { pipe } from "@effect/data/Function"
|
|
4
5
|
import * as HashSet from "@effect/data/HashSet"
|
|
5
6
|
import type * as Option from "@effect/data/Option"
|
|
6
7
|
import * as Deferred from "@effect/io/Deferred"
|
|
@@ -39,17 +40,17 @@ const make = Effect.gen(function* (_) {
|
|
|
39
40
|
const claimId = (
|
|
40
41
|
sharderCount: number,
|
|
41
42
|
): Effect.Effect<never, never, number> =>
|
|
42
|
-
|
|
43
|
-
.claimId({
|
|
43
|
+
pipe(
|
|
44
|
+
store.claimId({
|
|
44
45
|
totalCount,
|
|
45
46
|
sharderCount,
|
|
46
|
-
})
|
|
47
|
-
.
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
)
|
|
47
|
+
}),
|
|
48
|
+
Effect.repeat(claimRepeatPolicy),
|
|
49
|
+
Effect.map(_ => _.value),
|
|
50
|
+
)
|
|
51
51
|
|
|
52
|
-
return
|
|
52
|
+
return pipe(
|
|
53
|
+
Ref.getAndUpdate(currentCount, _ => _ + 1),
|
|
53
54
|
Effect.flatMap(claimId),
|
|
54
55
|
Effect.map(id => ({ id, totalCount }) as const),
|
|
55
56
|
)
|
|
@@ -82,7 +83,8 @@ const make = Effect.gen(function* (_) {
|
|
|
82
83
|
)
|
|
83
84
|
const take = yield* _(takeConfig(config.shardCount ?? gateway.shards))
|
|
84
85
|
|
|
85
|
-
const spawner =
|
|
86
|
+
const spawner = pipe(
|
|
87
|
+
take,
|
|
86
88
|
Effect.map(config => ({
|
|
87
89
|
...config,
|
|
88
90
|
url: gateway.url,
|
package/src/DiscordGateway/WS.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Tag } from "@effect/data/Context"
|
|
2
2
|
import * as Duration from "@effect/data/Duration"
|
|
3
|
+
import { pipe } from "@effect/data/Function"
|
|
3
4
|
import * as Effect from "@effect/io/Effect"
|
|
4
5
|
import * as Layer from "@effect/io/Layer"
|
|
5
6
|
import * as Queue from "@effect/io/Queue"
|
|
6
7
|
import * as Ref from "@effect/io/Ref"
|
|
7
|
-
import * as Runtime from "@effect/io/Runtime"
|
|
8
8
|
import { Log } from "dfx/Log"
|
|
9
9
|
import WebSocket from "isomorphic-ws"
|
|
10
10
|
|
|
@@ -34,7 +34,8 @@ const isReconnect = (
|
|
|
34
34
|
e._tag === "WebSocketCloseError" && e.code === 1012
|
|
35
35
|
|
|
36
36
|
const socket = (urlRef: Ref.Ref<string>) =>
|
|
37
|
-
|
|
37
|
+
pipe(
|
|
38
|
+
Ref.get(urlRef),
|
|
38
39
|
Effect.map(_ => new WebSocket(_) as any as globalThis.WebSocket),
|
|
39
40
|
Effect.acquireRelease(ws =>
|
|
40
41
|
Effect.sync(() => {
|
|
@@ -50,34 +51,24 @@ const offer = (
|
|
|
50
51
|
queue: Queue.Enqueue<WebSocket.Data>,
|
|
51
52
|
log: Log,
|
|
52
53
|
) =>
|
|
53
|
-
Effect.
|
|
54
|
-
|
|
55
|
-
Effect.
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
resume(Effect.fail(new WebSocketError("error", cause)))
|
|
72
|
-
})
|
|
73
|
-
|
|
74
|
-
ws.addEventListener("close", e => {
|
|
75
|
-
resume(Effect.fail(new WebSocketCloseError(e.code, e.reason)))
|
|
76
|
-
})
|
|
77
|
-
},
|
|
78
|
-
),
|
|
79
|
-
),
|
|
80
|
-
)
|
|
54
|
+
Effect.async<never, WebSocketError | WebSocketCloseError, never>(resume => {
|
|
55
|
+
ws.addEventListener("message", message => {
|
|
56
|
+
Effect.runFork(
|
|
57
|
+
Effect.zipRight(
|
|
58
|
+
log.debug("WS", "receive", message.data),
|
|
59
|
+
Queue.offer(queue, message.data),
|
|
60
|
+
),
|
|
61
|
+
)
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
ws.addEventListener("error", cause => {
|
|
65
|
+
resume(Effect.fail(new WebSocketError("error", cause)))
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
ws.addEventListener("close", e => {
|
|
69
|
+
resume(Effect.fail(new WebSocketCloseError(e.code, e.reason)))
|
|
70
|
+
})
|
|
71
|
+
})
|
|
81
72
|
|
|
82
73
|
const waitForOpen = (ws: globalThis.WebSocket, timeout: Duration.Duration) =>
|
|
83
74
|
Effect.timeoutFail(
|
|
@@ -103,7 +94,8 @@ const send = (
|
|
|
103
94
|
take: Effect.Effect<never, never, Message>,
|
|
104
95
|
log: Log,
|
|
105
96
|
) =>
|
|
106
|
-
|
|
97
|
+
pipe(
|
|
98
|
+
take,
|
|
107
99
|
Effect.tap(data => log.debug("WS", "send", data)),
|
|
108
100
|
Effect.tap(data => {
|
|
109
101
|
if (data === Reconnect) {
|
|
@@ -132,14 +124,16 @@ const make = Effect.gen(function* (_) {
|
|
|
132
124
|
Effect.gen(function* (_) {
|
|
133
125
|
const queue = yield* _(Queue.unbounded<WebSocket.Data>())
|
|
134
126
|
|
|
135
|
-
const run =
|
|
127
|
+
const run = pipe(
|
|
128
|
+
onConnecting,
|
|
136
129
|
Effect.zipRight(socket(url)),
|
|
137
130
|
Effect.flatMap(ws =>
|
|
138
131
|
Effect.all(
|
|
139
132
|
[
|
|
140
133
|
offer(ws, queue, log),
|
|
141
|
-
|
|
142
|
-
|
|
134
|
+
Effect.zipRight(
|
|
135
|
+
waitForOpen(ws, openTimeout),
|
|
136
|
+
send(ws, takeOutbound, log),
|
|
143
137
|
),
|
|
144
138
|
],
|
|
145
139
|
{ concurrency: "unbounded", discard: true },
|
package/src/DiscordGateway.ts
CHANGED
|
@@ -18,7 +18,10 @@ const fromDispatchFactory =
|
|
|
18
18
|
<K extends keyof Discord.ReceiveEvents>(
|
|
19
19
|
event: K,
|
|
20
20
|
): Stream.Stream<R, E, Discord.ReceiveEvents[K]> =>
|
|
21
|
-
Stream.
|
|
21
|
+
Stream.map(
|
|
22
|
+
Stream.filter(source, p => p.t === event),
|
|
23
|
+
p => p.d! as any,
|
|
24
|
+
)
|
|
22
25
|
|
|
23
26
|
const handleDispatchFactory =
|
|
24
27
|
(hub: Hub.Hub<Discord.GatewayPayload<Discord.ReceiveEvent>>) =>
|