dfx 0.95.1 → 0.95.2

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.
Files changed (52) hide show
  1. package/DiscordGateway/Shard/StateStore.d.ts +25 -0
  2. package/DiscordGateway/Shard/StateStore.d.ts.map +1 -0
  3. package/DiscordGateway/Shard/StateStore.js +33 -0
  4. package/DiscordGateway/Shard/StateStore.js.map +1 -0
  5. package/DiscordGateway/Shard/heartbeats.d.ts +2 -2
  6. package/DiscordGateway/Shard/heartbeats.d.ts.map +1 -1
  7. package/DiscordGateway/Shard/heartbeats.js +4 -4
  8. package/DiscordGateway/Shard/heartbeats.js.map +1 -1
  9. package/DiscordGateway/Shard/identify.d.ts +2 -6
  10. package/DiscordGateway/Shard/identify.d.ts.map +1 -1
  11. package/DiscordGateway/Shard/identify.js +5 -12
  12. package/DiscordGateway/Shard/identify.js.map +1 -1
  13. package/DiscordGateway/Shard/utils.d.ts +1 -8
  14. package/DiscordGateway/Shard/utils.d.ts.map +1 -1
  15. package/DiscordGateway/Shard/utils.js +1 -10
  16. package/DiscordGateway/Shard/utils.js.map +1 -1
  17. package/DiscordGateway/Shard.d.ts +5 -4
  18. package/DiscordGateway/Shard.d.ts.map +1 -1
  19. package/DiscordGateway/Shard.js +41 -26
  20. package/DiscordGateway/Shard.js.map +1 -1
  21. package/DiscordGateway/Sharder.d.ts +1 -1
  22. package/DiscordGateway/Sharder.d.ts.map +1 -1
  23. package/DiscordGateway.d.ts +1 -1
  24. package/DiscordGateway.d.ts.map +1 -1
  25. package/gateway.d.ts +2 -2
  26. package/gateway.d.ts.map +1 -1
  27. package/gateway.js +2 -1
  28. package/gateway.js.map +1 -1
  29. package/mjs/DiscordGateway/Shard/StateStore.mjs +25 -0
  30. package/mjs/DiscordGateway/Shard/StateStore.mjs.map +1 -0
  31. package/mjs/DiscordGateway/Shard/heartbeats.mjs +4 -4
  32. package/mjs/DiscordGateway/Shard/heartbeats.mjs.map +1 -1
  33. package/mjs/DiscordGateway/Shard/identify.mjs +5 -12
  34. package/mjs/DiscordGateway/Shard/identify.mjs.map +1 -1
  35. package/mjs/DiscordGateway/Shard/utils.mjs +0 -8
  36. package/mjs/DiscordGateway/Shard/utils.mjs.map +1 -1
  37. package/mjs/DiscordGateway/Shard.mjs +41 -26
  38. package/mjs/DiscordGateway/Shard.mjs.map +1 -1
  39. package/mjs/gateway.mjs +2 -1
  40. package/mjs/gateway.mjs.map +1 -1
  41. package/mjs/version.mjs +1 -1
  42. package/package.json +2 -2
  43. package/src/DiscordGateway/Shard/StateStore.ts +46 -0
  44. package/src/DiscordGateway/Shard/heartbeats.ts +8 -7
  45. package/src/DiscordGateway/Shard/identify.ts +10 -18
  46. package/src/DiscordGateway/Shard/utils.ts +1 -28
  47. package/src/DiscordGateway/Shard.ts +53 -50
  48. package/src/gateway.ts +2 -0
  49. package/src/version.ts +1 -1
  50. package/version.d.ts +1 -1
  51. package/version.js +1 -1
  52. package/src/DiscordGateway/Shard/invalidSession.ts +0 -11
package/gateway.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"gateway.js","names":["CachePrelude","_interopRequireWildcard","require","exports","_DiscordGateway","_DiscordWS","DiscordWS","Shard","SendEvent","_ShardStore","ShardStore","_DiscordREST","_gateway","_RateLimit","Layer","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","DiscordLive","mergeAll","RateLimiterLive","DiscordGatewayLive","pipe","provideMerge","DiscordRESTLive","provide","JsonDiscordWSCodecLive","MemoryRateLimitStoreLive","MemoryShardStoreLive","DiscordIxLive","InteractionsRegistryLive"],"sources":["./src/gateway.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,gBAAAC,uBAAA,eAAAC,OAAA;AAAiDC,OAAA,CAAAH,YAAA,GAAAA,YAAA;AACjD,IAAAI,eAAA,gBAAAF,OAAA;AACA,IAAAG,UAAA,gBAAAJ,uBAAA,eAAAC,OAAA;AAAyD,IAAAI,SAAA,GAAAD,UAAA;AAAAF,OAAA,CAAAG,SAAA,GAAAD,UAAA;AAEzD,IAAAE,KAAA,gBAAAN,uBAAA,eAAAC,OAAA;AAAiDC,OAAA,CAAAI,KAAA,GAAAA,KAAA;AACjD,IAAAC,SAAA,gBAAAP,uBAAA,eAAAC,OAAA;AAAgEC,OAAA,CAAAK,SAAA,GAAAA,SAAA;AAChE,IAAAC,WAAA,gBAAAR,uBAAA,eAAAC,OAAA;AAA2D,IAAAQ,UAAA,GAAAD,WAAA;AAAAN,OAAA,CAAAO,UAAA,GAAAD,WAAA;AAE3D,IAAAE,YAAA,gBAAAT,OAAA;AACA,IAAAU,QAAA,gBAAAV,OAAA;AACA,IAAAW,UAAA,gBAAAX,OAAA;AACA,IAAAY,KAAA,gBAAAb,uBAAA,eAAAC,OAAA;AAAqC,SAAAa,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,SAAAf,wBAAAe,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;AAc9B,MAAMW,WAAW,GAAAhC,OAAA,CAAAgC,WAAA,gBAAGrB,KAAK,CAACsB,QAAQ,CACvCC,0BAAe,EACfC,kCAAkB,CACnB,CAACC,IAAI,eACJzB,KAAK,CAAC0B,YAAY,CAACC,4BAAe,CAAC,eACnC3B,KAAK,CAAC4B,OAAO,CAACC,iCAAsB,CAAC,eACrC7B,KAAK,CAAC4B,OAAO,CAACE,mCAAwB,CAAC,eACvC9B,KAAK,CAAC4B,OAAO,CAACG,gCAAoB,CAAC,CACpC;AAEM,MAAMC,aAAa,GAAA3C,OAAA,CAAA2C,aAAA,gBAAGC,iCAAwB,CAACR,IAAI,eACxDzB,KAAK,CAAC0B,YAAY,CAACL,WAAW,CAAC,CAChC","ignoreList":[]}
1
+ {"version":3,"file":"gateway.js","names":["CachePrelude","_interopRequireWildcard","require","exports","_DiscordGateway","_DiscordWS","DiscordWS","Shard","_StateStore","SendEvent","_ShardStore","ShardStore","_DiscordREST","_gateway","_RateLimit","Layer","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","DiscordLive","mergeAll","RateLimiterLive","DiscordGatewayLive","pipe","provideMerge","DiscordRESTLive","provide","JsonDiscordWSCodecLive","MemoryRateLimitStoreLive","MemoryShardStoreLive","MemoryShardStateStoreLive","DiscordIxLive","InteractionsRegistryLive"],"sources":["./src/gateway.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,YAAA,gBAAAC,uBAAA,eAAAC,OAAA;AAAiDC,OAAA,CAAAH,YAAA,GAAAA,YAAA;AACjD,IAAAI,eAAA,gBAAAF,OAAA;AACA,IAAAG,UAAA,gBAAAJ,uBAAA,eAAAC,OAAA;AAAyD,IAAAI,SAAA,GAAAD,UAAA;AAAAF,OAAA,CAAAG,SAAA,GAAAD,UAAA;AAEzD,IAAAE,KAAA,gBAAAN,uBAAA,eAAAC,OAAA;AAAiDC,OAAA,CAAAI,KAAA,GAAAA,KAAA;AACjD,IAAAC,WAAA,gBAAAN,OAAA;AACA,IAAAO,SAAA,gBAAAR,uBAAA,eAAAC,OAAA;AAAgEC,OAAA,CAAAM,SAAA,GAAAA,SAAA;AAChE,IAAAC,WAAA,gBAAAT,uBAAA,eAAAC,OAAA;AAA2D,IAAAS,UAAA,GAAAD,WAAA;AAAAP,OAAA,CAAAQ,UAAA,GAAAD,WAAA;AAE3D,IAAAE,YAAA,gBAAAV,OAAA;AACA,IAAAW,QAAA,gBAAAX,OAAA;AACA,IAAAY,UAAA,gBAAAZ,OAAA;AACA,IAAAa,KAAA,gBAAAd,uBAAA,eAAAC,OAAA;AAAqC,SAAAc,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,SAAAhB,wBAAAgB,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;AAc9B,MAAMW,WAAW,GAAAjC,OAAA,CAAAiC,WAAA,gBAAGrB,KAAK,CAACsB,QAAQ,CACvCC,0BAAe,EACfC,kCAAkB,CACnB,CAACC,IAAI,eACJzB,KAAK,CAAC0B,YAAY,CAACC,4BAAe,CAAC,eACnC3B,KAAK,CAAC4B,OAAO,CAACC,iCAAsB,CAAC,eACrC7B,KAAK,CAAC4B,OAAO,CAACE,mCAAwB,CAAC,eACvC9B,KAAK,CAAC4B,OAAO,CAACG,gCAAoB,CAAC,eACnC/B,KAAK,CAAC4B,OAAO,CAACI,qCAAyB,CAAC,CACzC;AAEM,MAAMC,aAAa,GAAA7C,OAAA,CAAA6C,aAAA,gBAAGC,iCAAwB,CAACT,IAAI,eACxDzB,KAAK,CAAC0B,YAAY,CAACL,WAAW,CAAC,CAChC","ignoreList":[]}
@@ -0,0 +1,25 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Option from "effect/Option";
3
+ import * as Context from "effect/Context";
4
+ import * as Layer from "effect/Layer";
5
+ export const ShardStateStore = /*#__PURE__*/Context.GenericTag("dfx/Shard/StateStore");
6
+ export const MemoryShardStateStoreLive = /*#__PURE__*/Layer.sync(ShardStateStore, () => {
7
+ const store = new Map();
8
+ return ShardStateStore.of({
9
+ forShard: ([id, count]) => {
10
+ const key = `${id}-${count}`;
11
+ return {
12
+ get: Effect.sync(() => Option.fromNullable(store.get(key))),
13
+ set(state) {
14
+ return Effect.sync(() => {
15
+ store.set(key, state);
16
+ });
17
+ },
18
+ clear: Effect.sync(() => {
19
+ store.delete(key);
20
+ })
21
+ };
22
+ }
23
+ });
24
+ });
25
+ //# sourceMappingURL=StateStore.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StateStore.mjs","names":["Effect","Option","Context","Layer","ShardStateStore","GenericTag","MemoryShardStateStoreLive","sync","store","Map","of","forShard","id","count","key","get","fromNullable","set","state","clear","delete"],"sources":["../../../src/DiscordGateway/Shard/StateStore.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAO,KAAKA,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,OAAO,MAAM,gBAAgB;AACzC,OAAO,KAAKC,KAAK,MAAM,cAAc;AAkBrC,OAAO,MAAMC,eAAe,gBAAGF,OAAO,CAACG,UAAU,CAG/C,sBAAsB,CAAC;AAEzB,OAAO,MAAMC,yBAAyB,gBAAGH,KAAK,CAACI,IAAI,CAACH,eAAe,EAAE,MAAK;EACxE,MAAMI,KAAK,GAAG,IAAIC,GAAG,EAAsB;EAE3C,OAAOL,eAAe,CAACM,EAAE,CAAC;IACxBC,QAAQ,EAAEA,CAAC,CAACC,EAAE,EAAEC,KAAK,CAAC,KAAI;MACxB,MAAMC,GAAG,GAAG,GAAGF,EAAE,IAAIC,KAAK,EAAE;MAC5B,OAAO;QACLE,GAAG,EAAEf,MAAM,CAACO,IAAI,CAAC,MAAMN,MAAM,CAACe,YAAY,CAACR,KAAK,CAACO,GAAG,CAACD,GAAG,CAAC,CAAC,CAAC;QAC3DG,GAAGA,CAACC,KAAK;UACP,OAAOlB,MAAM,CAACO,IAAI,CAAC,MAAK;YACtBC,KAAK,CAACS,GAAG,CAACH,GAAG,EAAEI,KAAK,CAAC;UACvB,CAAC,CAAC;QACJ,CAAC;QACDC,KAAK,EAAEnB,MAAM,CAACO,IAAI,CAAC,MAAK;UACtBC,KAAK,CAACY,MAAM,CAACN,GAAG,CAAC;QACnB,CAAC;OACF;IACH;GACD,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -7,10 +7,10 @@ import * as Schedule from "effect/Schedule";
7
7
  import * as DiscordWS from "dfx/DiscordGateway/DiscordWS";
8
8
  import * as SendEvents from "dfx/DiscordGateway/Shard/sendEvents";
9
9
  import * as EffectU from "dfx/utils/Effect";
10
- const payload = seqRef => Effect.map(Ref.get(seqRef), seq => SendEvents.heartbeat(Option.getOrNull(seq)));
11
- const payloadOrReconnect = (ref, seqRef) => Effect.flatMap(Ref.get(ref), acked => acked ? payload(seqRef) : Effect.succeed(DiscordWS.Reconnect));
12
- export const send = (hellos, acks, seqRef, send) => Effect.flatMap(Ref.make(true), ackedRef => {
13
- const heartbeats = EffectU.foreverSwitch(Effect.zipLeft(Queue.take(hellos), Ref.set(ackedRef, true)), p => payloadOrReconnect(ackedRef, seqRef).pipe(Effect.zipLeft(Ref.set(ackedRef, false)), Effect.tap(send), Effect.schedule(Schedule.andThen(Schedule.duration(Duration.millis(p.d.heartbeat_interval * Math.random())), Schedule.spaced(Duration.millis(p.d.heartbeat_interval))))));
10
+ const payload = state => Effect.map(state, state => SendEvents.heartbeat(Option.getOrNull(Option.map(state, s => s.sequence))));
11
+ const payloadOrReconnect = (ref, state) => Effect.flatMap(Ref.get(ref), acked => acked ? payload(state) : Effect.succeed(DiscordWS.Reconnect));
12
+ export const send = (hellos, acks, state, send) => Effect.flatMap(Ref.make(true), ackedRef => {
13
+ const heartbeats = EffectU.foreverSwitch(Effect.zipLeft(Queue.take(hellos), Ref.set(ackedRef, true)), p => payloadOrReconnect(ackedRef, state).pipe(Effect.zipLeft(Ref.set(ackedRef, false)), Effect.tap(send), Effect.schedule(Schedule.andThen(Schedule.duration(Duration.millis(p.d.heartbeat_interval * Math.random())), Schedule.spaced(Duration.millis(p.d.heartbeat_interval))))));
14
14
  const run = Queue.take(acks).pipe(Effect.zipLeft(Ref.set(ackedRef, true)), Effect.forever);
15
15
  return Effect.all([run, heartbeats], {
16
16
  concurrency: "unbounded",
@@ -1 +1 @@
1
- {"version":3,"file":"heartbeats.mjs","names":["Duration","Option","Effect","Queue","Ref","Schedule","DiscordWS","SendEvents","EffectU","payload","seqRef","map","get","seq","heartbeat","getOrNull","payloadOrReconnect","ref","flatMap","acked","succeed","Reconnect","send","hellos","acks","make","ackedRef","heartbeats","foreverSwitch","zipLeft","take","set","p","pipe","tap","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,KAAK,MAAM,cAAc;AACrC,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;AAE3C,MAAMC,OAAO,GAAIC,MAAsC,IACrDR,MAAM,CAACS,GAAG,CAACP,GAAG,CAACQ,GAAG,CAACF,MAAM,CAAC,EAAEG,GAAG,IAC7BN,UAAU,CAACO,SAAS,CAACb,MAAM,CAACc,SAAS,CAACF,GAAG,CAAC,CAAC,CAC5C;AAEH,MAAMG,kBAAkB,GAAGA,CACzBC,GAAqB,EACrBP,MAAsC,KAEtCR,MAAM,CAACgB,OAAO,CACZd,GAAG,CAACQ,GAAG,CAACK,GAAG,CAAC,EACXE,KAAK,IACJA,KAAK,GAAGV,OAAO,CAACC,MAAM,CAAC,GAAGR,MAAM,CAACkB,OAAO,CAACd,SAAS,CAACe,SAAS,CAAC,CAChE;AAEH,OAAO,MAAMC,IAAI,GAAGA,CAClBC,MAA6C,EAC7CC,IAA2C,EAC3Cd,MAAsC,EACtCY,IAAsD,KAEtDpB,MAAM,CAACgB,OAAO,CAACd,GAAG,CAACqB,IAAI,CAAC,IAAI,CAAC,EAAEC,QAAQ,IAAG;EACxC,MAAMC,UAAU,GAAGnB,OAAO,CAACoB,aAAa,CACtC1B,MAAM,CAAC2B,OAAO,CAAC1B,KAAK,CAAC2B,IAAI,CAACP,MAAM,CAAC,EAAEnB,GAAG,CAAC2B,GAAG,CAACL,QAAQ,EAAE,IAAI,CAAC,CAAC,EAC3DM,CAAC,IACChB,kBAAkB,CAACU,QAAQ,EAAEhB,MAAM,CAAC,CAACuB,IAAI,CACvC/B,MAAM,CAAC2B,OAAO,CAACzB,GAAG,CAAC2B,GAAG,CAACL,QAAQ,EAAE,KAAK,CAAC,CAAC,EACxCxB,MAAM,CAACgC,GAAG,CAACZ,IAAI,CAAC,EAChBpB,MAAM,CAACiC,QAAQ,CACb9B,QAAQ,CAAC+B,OAAO,CACd/B,QAAQ,CAACgC,QAAQ,CACfrC,QAAQ,CAACsC,MAAM,CAACN,CAAC,CAACO,CAAE,CAACC,kBAAkB,GAAGC,IAAI,CAACC,MAAM,EAAE,CAAC,CACzD,EACDrC,QAAQ,CAACsC,MAAM,CAAC3C,QAAQ,CAACsC,MAAM,CAACN,CAAC,CAACO,CAAE,CAACC,kBAAkB,CAAC,CAAC,CAC1D,CACF,CACF,CACJ;EAED,MAAMI,GAAG,GAAGzC,KAAK,CAAC2B,IAAI,CAACN,IAAI,CAAC,CAACS,IAAI,CAC/B/B,MAAM,CAAC2B,OAAO,CAACzB,GAAG,CAAC2B,GAAG,CAACL,QAAQ,EAAE,IAAI,CAAC,CAAC,EACvCxB,MAAM,CAAC2C,OAAO,CACf;EAED,OAAO3C,MAAM,CAAC4C,GAAG,CAAC,CAACF,GAAG,EAAEjB,UAAU,CAAC,EAAE;IACnCoB,WAAW,EAAE,WAAW;IACxBC,OAAO,EAAE;GACV,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"heartbeats.mjs","names":["Duration","Option","Effect","Queue","Ref","Schedule","DiscordWS","SendEvents","EffectU","payload","state","map","heartbeat","getOrNull","s","sequence","payloadOrReconnect","ref","flatMap","get","acked","succeed","Reconnect","send","hellos","acks","make","ackedRef","heartbeats","foreverSwitch","zipLeft","take","set","p","pipe","tap","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,KAAK,MAAM,cAAc;AACrC,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;AAG3C,MAAMC,OAAO,GAAIC,KAA+C,IAC9DR,MAAM,CAACS,GAAG,CAACD,KAAK,EAAEA,KAAK,IACrBH,UAAU,CAACK,SAAS,CAACX,MAAM,CAACY,SAAS,CAACZ,MAAM,CAACU,GAAG,CAACD,KAAK,EAAEI,CAAC,IAAIA,CAAC,CAACC,QAAQ,CAAC,CAAC,CAAC,CAC3E;AAEH,MAAMC,kBAAkB,GAAGA,CACzBC,GAAqB,EACrBP,KAA+C,KAE/CR,MAAM,CAACgB,OAAO,CACZd,GAAG,CAACe,GAAG,CAACF,GAAG,CAAC,EACXG,KAAK,IACJA,KAAK,GAAGX,OAAO,CAACC,KAAK,CAAC,GAAGR,MAAM,CAACmB,OAAO,CAACf,SAAS,CAACgB,SAAS,CAAC,CAC/D;AAEH,OAAO,MAAMC,IAAI,GAAGA,CAClBC,MAA6C,EAC7CC,IAA2C,EAC3Cf,KAA+C,EAC/Ca,IAAsD,KAEtDrB,MAAM,CAACgB,OAAO,CAACd,GAAG,CAACsB,IAAI,CAAC,IAAI,CAAC,EAAEC,QAAQ,IAAG;EACxC,MAAMC,UAAU,GAAGpB,OAAO,CAACqB,aAAa,CACtC3B,MAAM,CAAC4B,OAAO,CAAC3B,KAAK,CAAC4B,IAAI,CAACP,MAAM,CAAC,EAAEpB,GAAG,CAAC4B,GAAG,CAACL,QAAQ,EAAE,IAAI,CAAC,CAAC,EAC3DM,CAAC,IACCjB,kBAAkB,CAACW,QAAQ,EAAEjB,KAAK,CAAC,CAACwB,IAAI,CACtChC,MAAM,CAAC4B,OAAO,CAAC1B,GAAG,CAAC4B,GAAG,CAACL,QAAQ,EAAE,KAAK,CAAC,CAAC,EACxCzB,MAAM,CAACiC,GAAG,CAACZ,IAAI,CAAC,EAChBrB,MAAM,CAACkC,QAAQ,CACb/B,QAAQ,CAACgC,OAAO,CACdhC,QAAQ,CAACiC,QAAQ,CACftC,QAAQ,CAACuC,MAAM,CAACN,CAAC,CAACO,CAAE,CAACC,kBAAkB,GAAGC,IAAI,CAACC,MAAM,EAAE,CAAC,CACzD,EACDtC,QAAQ,CAACuC,MAAM,CAAC5C,QAAQ,CAACuC,MAAM,CAACN,CAAC,CAACO,CAAE,CAACC,kBAAkB,CAAC,CAAC,CAC1D,CACF,CACF,CACJ;EAED,MAAMI,GAAG,GAAG1C,KAAK,CAAC4B,IAAI,CAACN,IAAI,CAAC,CAACS,IAAI,CAC/BhC,MAAM,CAAC4B,OAAO,CAAC1B,GAAG,CAAC4B,GAAG,CAACL,QAAQ,EAAE,IAAI,CAAC,CAAC,EACvCzB,MAAM,CAAC4C,OAAO,CACf;EAED,OAAO5C,MAAM,CAAC6C,GAAG,CAAC,CAACF,GAAG,EAAEjB,UAAU,CAAC,EAAE;IACnCoB,WAAW,EAAE,WAAW;IACxBC,OAAO,EAAE;GACV,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -1,6 +1,5 @@
1
1
  import * as Option from "effect/Option";
2
2
  import * as Effect from "effect/Effect";
3
- import * as Ref from "effect/Ref";
4
3
  import * as SendEvents from "dfx/DiscordGateway/Shard/sendEvents";
5
4
  import * as OS from "os";
6
5
  const identify = ({
@@ -19,19 +18,13 @@ const identify = ({
19
18
  shard,
20
19
  presence
21
20
  });
22
- const resume = (token, ready, seq) => SendEvents.resume({
21
+ const resume = (token, session_id, seq) => SendEvents.resume({
23
22
  token,
24
- session_id: ready.session_id,
25
- seq
23
+ session_id,
24
+ seq: seq
26
25
  });
27
- export const identifyOrResume = (opts, ready, seq) => Effect.map(Effect.all([Ref.get(ready), Ref.get(seq)]), ([readyEvent, seqNumber]) => Option.match(Option.all({
28
- readyEvent,
29
- seqNumber
30
- }), {
26
+ export const identifyOrResume = (opts, state) => Effect.map(state, Option.match({
31
27
  onNone: () => identify(opts),
32
- onSome: ({
33
- readyEvent,
34
- seqNumber
35
- }) => resume(opts.token, readyEvent, seqNumber)
28
+ onSome: state => resume(opts.token, state.sessionId, state.sequence)
36
29
  }));
37
30
  //# sourceMappingURL=identify.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"identify.mjs","names":["Option","Effect","Ref","SendEvents","OS","identify","intents","presence","shard","token","properties","os","platform","browser","device","resume","ready","seq","session_id","identifyOrResume","opts","map","all","get","readyEvent","seqNumber","match","onNone","onSome"],"sources":["../../../src/DiscordGateway/Shard/identify.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAO,KAAKA,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,GAAG,MAAM,YAAY;AACjC,OAAO,KAAKC,UAAU,MAAM,qCAAqC;AAEjE,OAAO,KAAKC,EAAE,MAAM,IAAI;AAcxB,MAAMC,QAAQ,GAAGA,CAAC;EAAEC,OAAO;EAAEC,QAAQ;EAAEC,KAAK;EAAEC;AAAK,CAAW,KAC5DN,UAAU,CAACE,QAAQ,CAAC;EAClBI,KAAK;EACLH,OAAO;EACPI,UAAU,EAAE;IACVC,EAAE,EAAEP,EAAE,CAACQ,QAAQ,EAAE;IACjBC,OAAO,EAAE,KAAK;IACdC,MAAM,EAAE;GACT;EACDN,KAAK;EACLD;CACD,CAAC;AAEJ,MAAMQ,MAAM,GAAGA,CAACN,KAAa,EAAEO,KAAyB,EAAEC,GAAW,KACnEd,UAAU,CAACY,MAAM,CAAC;EAChBN,KAAK;EACLS,UAAU,EAAEF,KAAK,CAACE,UAAU;EAC5BD;CACD,CAAC;AAEJ,OAAO,MAAME,gBAAgB,GAAGA,CAC9BC,IAAa,EACbJ,KAAiD,EACjDC,GAAmC,KAKnChB,MAAM,CAACoB,GAAG,CACRpB,MAAM,CAACqB,GAAG,CAAC,CAACpB,GAAG,CAACqB,GAAG,CAACP,KAAK,CAAC,EAAEd,GAAG,CAACqB,GAAG,CAACN,GAAG,CAAC,CAAC,CAAC,EAC1C,CAAC,CAACO,UAAU,EAAEC,SAAS,CAAC,KACtBzB,MAAM,CAAC0B,KAAK,CAAC1B,MAAM,CAACsB,GAAG,CAAC;EAAEE,UAAU;EAAEC;AAAS,CAAE,CAAC,EAAE;EAClDE,MAAM,EAAEA,CAAA,KAAMtB,QAAQ,CAACe,IAAI,CAAC;EAC5BQ,MAAM,EAAEA,CAAC;IAAEJ,UAAU;IAAEC;EAAS,CAAE,KAChCV,MAAM,CAACK,IAAI,CAACX,KAAK,EAAEe,UAAU,EAAEC,SAAS;CAC3C,CAAC,CACL","ignoreList":[]}
1
+ {"version":3,"file":"identify.mjs","names":["Option","Effect","SendEvents","OS","identify","intents","presence","shard","token","properties","os","platform","browser","device","resume","session_id","seq","identifyOrResume","opts","state","map","match","onNone","onSome","sessionId","sequence"],"sources":["../../../src/DiscordGateway/Shard/identify.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAO,KAAKA,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,UAAU,MAAM,qCAAqC;AAEjE,OAAO,KAAKC,EAAE,MAAM,IAAI;AAUxB,MAAMC,QAAQ,GAAGA,CAAC;EAAEC,OAAO;EAAEC,QAAQ;EAAEC,KAAK;EAAEC;AAAK,CAAW,KAC5DN,UAAU,CAACE,QAAQ,CAAC;EAClBI,KAAK;EACLH,OAAO;EACPI,UAAU,EAAE;IACVC,EAAE,EAAEP,EAAE,CAACQ,QAAQ,EAAE;IACjBC,OAAO,EAAE,KAAK;IACdC,MAAM,EAAE;GACT;EACDN,KAAK;EACLD;CACD,CAAC;AAEJ,MAAMQ,MAAM,GAAGA,CAACN,KAAa,EAAEO,UAAkB,EAAEC,GAAkB,KACnEd,UAAU,CAACY,MAAM,CAAC;EAChBN,KAAK;EACLO,UAAU;EACVC,GAAG,EAAEA;CACN,CAAC;AAEJ,OAAO,MAAMC,gBAAgB,GAAGA,CAC9BC,IAAa,EACbC,KAA+C,KAK/ClB,MAAM,CAACmB,GAAG,CACRD,KAAK,EACLnB,MAAM,CAACqB,KAAK,CAAC;EACXC,MAAM,EAAEA,CAAA,KAAMlB,QAAQ,CAACc,IAAI,CAAC;EAC5BK,MAAM,EAAEJ,KAAK,IAAIL,MAAM,CAACI,IAAI,CAACV,KAAK,EAAEW,KAAK,CAACK,SAAS,EAAEL,KAAK,CAACM,QAAQ;CACpE,CAAC,CACH","ignoreList":[]}
@@ -1,11 +1,3 @@
1
- import * as Option from "effect/Option";
2
- import * as Effect from "effect/Effect";
3
- import * as Ref from "effect/Ref";
4
1
  import * as Stream from "effect/Stream";
5
2
  export const opCode = source => code => source.pipe(Stream.filter(p => p.op === code));
6
- const maybeUpdateRef = (f, ref) => _ => Option.match(f(_), {
7
- onNone: () => Effect.void,
8
- onSome: a => Ref.set(ref, Option.some(a))
9
- });
10
- export const latest = f => Effect.map(Ref.make(Option.none()), ref => [ref, maybeUpdateRef(f, ref)]);
11
3
  //# sourceMappingURL=utils.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.mjs","names":["Option","Effect","Ref","Stream","opCode","source","code","pipe","filter","p","op","maybeUpdateRef","f","ref","_","match","onNone","void","onSome","a","set","some","latest","map","make","none"],"sources":["../../../src/DiscordGateway/Shard/utils.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAO,KAAKA,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,GAAG,MAAM,YAAY;AACjC,OAAO,KAAKC,MAAM,MAAM,eAAe;AAGvC,OAAO,MAAMC,MAAM,GACVC,MAAmD,IAExDC,IAA2B,IAE3BD,MAAM,CAACE,IAAI,CACTJ,MAAM,CAACK,MAAM,CAAEC,CAAC,IAAqCA,CAAC,CAACC,EAAE,KAAKJ,IAAI,CAAC,CACpE;AAEL,MAAMK,cAAc,GAClBA,CACEC,CAAkD,EAClDC,GAA8B,KAE/BC,CAAyB,IACxBd,MAAM,CAACe,KAAK,CAACH,CAAC,CAACE,CAAC,CAAC,EAAE;EACjBE,MAAM,EAAEA,CAAA,KAAMf,MAAM,CAACgB,IAAI;EACzBC,MAAM,EAAEC,CAAC,IAAIjB,GAAG,CAACkB,GAAG,CAACP,GAAG,EAAEb,MAAM,CAACqB,IAAI,CAACF,CAAC,CAAC;CACzC,CAAC;AAEN,OAAO,MAAMG,MAAM,GACjBV,CAAkD,IAOlDX,MAAM,CAACsB,GAAG,CACRrB,GAAG,CAACsB,IAAI,CAAmBxB,MAAM,CAACyB,IAAI,EAAE,CAAC,EACzCZ,GAAG,IAAI,CAACA,GAAG,EAAEF,cAAc,CAACC,CAAC,EAAEC,GAAG,CAAC,CAAU,CAC9C","ignoreList":[]}
1
+ {"version":3,"file":"utils.mjs","names":["Stream","opCode","source","code","pipe","filter","p","op"],"sources":["../../../src/DiscordGateway/Shard/utils.ts"],"sourcesContent":[null],"mappings":"AACA,OAAO,KAAKA,MAAM,MAAM,eAAe;AAEvC,OAAO,MAAMC,MAAM,GACVC,MAAmD,IAExDC,IAA2B,IAE3BD,MAAM,CAACE,IAAI,CACTJ,MAAM,CAACK,MAAM,CAAEC,CAAC,IAAqCA,CAAC,CAACC,EAAE,KAAKJ,IAAI,CAAC,CACpE","ignoreList":[]}
@@ -1,23 +1,22 @@
1
+ import { DiscordConfig } from "dfx/DiscordConfig";
2
+ import { DiscordWS, DiscordWSLive, Reconnect } from "dfx/DiscordGateway/DiscordWS";
3
+ import { Messaging, MesssagingLive } from "dfx/DiscordGateway/Messaging";
4
+ import { ShardStateStore } from "dfx/DiscordGateway/Shard/StateStore";
5
+ import * as Heartbeats from "dfx/DiscordGateway/Shard/heartbeats";
6
+ import * as Identify from "dfx/DiscordGateway/Shard/identify";
7
+ import { RateLimiter, RateLimiterLive } from "dfx/RateLimit";
8
+ import * as Discord from "dfx/types";
1
9
  import * as Chunk from "effect/Chunk";
2
10
  import { GenericTag } from "effect/Context";
3
11
  import * as Duration from "effect/Duration";
12
+ import * as Effect from "effect/Effect";
4
13
  import { pipe } from "effect/Function";
14
+ import * as Layer from "effect/Layer";
5
15
  import * as Option from "effect/Option";
6
- import * as Secret from "effect/Secret";
7
- import * as Effect from "effect/Effect";
8
16
  import * as PubSub from "effect/PubSub";
9
- import * as Layer from "effect/Layer";
10
17
  import * as Queue from "effect/Queue";
11
18
  import * as Ref from "effect/Ref";
12
- import { DiscordConfig } from "dfx/DiscordConfig";
13
- import { DiscordWS, DiscordWSLive, Reconnect } from "dfx/DiscordGateway/DiscordWS";
14
- import * as Heartbeats from "dfx/DiscordGateway/Shard/heartbeats";
15
- import * as Identify from "dfx/DiscordGateway/Shard/identify";
16
- import * as InvalidSession from "dfx/DiscordGateway/Shard/invalidSession";
17
- import * as Utils from "dfx/DiscordGateway/Shard/utils";
18
- import { RateLimiterLive, RateLimiter } from "dfx/RateLimit";
19
- import * as Discord from "dfx/types";
20
- import { Messaging, MesssagingLive } from "dfx/DiscordGateway/Messaging";
19
+ import * as Secret from "effect/Secret";
21
20
  export const make = /*#__PURE__*/Effect.gen(function* () {
22
21
  const {
23
22
  gateway,
@@ -29,10 +28,17 @@ export const make = /*#__PURE__*/Effect.gen(function* () {
29
28
  hub,
30
29
  sendQueue
31
30
  } = yield* Messaging;
32
- const connect = shard => Effect.gen(function* () {
31
+ const shardState = yield* ShardStateStore;
32
+ const connect = shard => Effect.gen(function* (_) {
33
33
  const outboundQueue = yield* Queue.unbounded();
34
34
  const pendingQueue = yield* Queue.unbounded();
35
35
  const phase = yield* Ref.make(0 /* Phase.Connecting */);
36
+ const stateStore = shardState.forShard(shard);
37
+ const resumeState = Option.getOrElse(yield* stateStore.get, () => ({
38
+ resumeUrl: "",
39
+ sessionId: "",
40
+ sequence: 0
41
+ }));
36
42
  const setPhase = p => Effect.zipLeft(Ref.set(phase, p), Effect.annotateLogs(Effect.logTrace("phase transition"), "phase", p));
37
43
  const outbound = Effect.zipLeft(Queue.take(outboundQueue), limiter.maybeWait("dfx.shard.send", Duration.minutes(1), 120));
38
44
  const send = p => Effect.flatMap(Ref.get(phase), phase => phase === 2 /* Phase.Connected */ ? Queue.offer(outboundQueue, p) : Queue.offer(pendingQueue, p));
@@ -44,27 +50,32 @@ export const make = /*#__PURE__*/Effect.gen(function* () {
44
50
  outbound,
45
51
  onConnecting
46
52
  });
47
- const isReady = Option.liftPredicate(p => p.op === Discord.GatewayOpcode.DISPATCH && p.t === "READY");
48
- const [latestReady, updateLatestReady] = yield* Utils.latest(p => Option.map(isReady(p), p => p.d));
49
- const [latestSequence, updateLatestSequence] = yield* Utils.latest(p => Option.fromNullable(p.s));
50
- const maybeUpdateUrl = p => Option.match(Option.map(isReady(p), p => p.d), {
51
- onNone: () => Effect.void,
52
- onSome: ({
53
- resume_gateway_url
54
- }) => socket.setUrl(resume_gateway_url)
55
- });
56
53
  const hellos = yield* Effect.acquireRelease(Queue.unbounded(), Queue.shutdown);
57
54
  const acks = yield* Effect.acquireRelease(Queue.unbounded(), Queue.shutdown);
58
55
  // heartbeats
59
- yield* Heartbeats.send(hellos, acks, latestSequence, heartbeatSend).pipe(Effect.forkScoped, Effect.interruptible);
56
+ yield* Heartbeats.send(hellos, acks, stateStore.get, heartbeatSend).pipe(Effect.forkScoped, Effect.interruptible);
60
57
  // identify
61
58
  const identify = Identify.identifyOrResume({
62
59
  token: Secret.value(token),
63
60
  shard,
64
61
  intents: gateway.intents,
65
62
  presence: gateway.presence
66
- }, latestReady, latestSequence);
67
- const onPayload = p => pipe(updateLatestReady(p), Effect.zipRight(updateLatestSequence(p)), Effect.zipRight(maybeUpdateUrl(p)), Effect.tap(() => {
63
+ }, stateStore.get);
64
+ const onPayload = p => pipe(Effect.suspend(() => {
65
+ if (typeof p.s === "number") {
66
+ resumeState.sequence = p.s;
67
+ }
68
+ if (p.op === Discord.GatewayOpcode.DISPATCH && p.t === "READY") {
69
+ const payload = p.d;
70
+ resumeState.sessionId = payload.session_id;
71
+ resumeState.resumeUrl = payload.resume_gateway_url;
72
+ return Effect.zipRight(stateStore.set(resumeState), socket.setUrl(payload.resume_gateway_url));
73
+ }
74
+ if (resumeState.resumeUrl !== "" && resumeState.sessionId !== "") {
75
+ return stateStore.set(resumeState);
76
+ }
77
+ return Effect.void;
78
+ }), Effect.tap(() => {
68
79
  switch (p.op) {
69
80
  case Discord.GatewayOpcode.HELLO:
70
81
  {
@@ -76,7 +87,11 @@ export const make = /*#__PURE__*/Effect.gen(function* () {
76
87
  }
77
88
  case Discord.GatewayOpcode.INVALID_SESSION:
78
89
  {
79
- return Effect.tap(InvalidSession.fromPayload(p, latestReady), send);
90
+ if (p.d) {
91
+ return send(Reconnect);
92
+ }
93
+ resumeState.sessionId = "";
94
+ return Effect.zipRight(stateStore.clear, send(Reconnect));
80
95
  }
81
96
  case Discord.GatewayOpcode.DISPATCH:
82
97
  {
@@ -1 +1 @@
1
- {"version":3,"file":"Shard.mjs","names":["Chunk","GenericTag","Duration","pipe","Option","Secret","Effect","PubSub","Layer","Queue","Ref","DiscordConfig","DiscordWS","DiscordWSLive","Reconnect","Heartbeats","Identify","InvalidSession","Utils","RateLimiterLive","RateLimiter","Discord","Messaging","MesssagingLive","make","gen","gateway","token","limiter","dws","hub","sendQueue","connect","shard","outboundQueue","unbounded","pendingQueue","phase","setPhase","p","zipLeft","set","annotateLogs","logTrace","outbound","take","maybeWait","minutes","send","flatMap","get","offer","heartbeatSend","succeed","prioritySend","resume","zipRight","takeAll","tap","_","offerAll","asVoid","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","void","onSome","resume_gateway_url","setUrl","hellos","acquireRelease","shutdown","acks","forkScoped","interruptible","identify","identifyOrResume","value","intents","presence","onPayload","HELLO","HEARTBEAT_ACK","INVALID_SESSION","fromPayload","publish","RECONNECT","forever","id","package","module","Shard","ShardLive","effect","provide"],"sources":["../../src/DiscordGateway/Shard.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Shard.mjs","names":["DiscordConfig","DiscordWS","DiscordWSLive","Reconnect","Messaging","MesssagingLive","ShardStateStore","Heartbeats","Identify","RateLimiter","RateLimiterLive","Discord","Chunk","GenericTag","Duration","Effect","pipe","Layer","Option","PubSub","Queue","Ref","Secret","make","gen","gateway","token","limiter","dws","hub","sendQueue","shardState","connect","shard","_","outboundQueue","unbounded","pendingQueue","phase","stateStore","forShard","resumeState","getOrElse","get","resumeUrl","sessionId","sequence","setPhase","p","zipLeft","set","annotateLogs","logTrace","outbound","take","maybeWait","minutes","send","flatMap","offer","heartbeatSend","succeed","prioritySend","resume","zipRight","takeAll","tap","offerAll","asVoid","onConnecting","msgs","filter","msg","op","GatewayOpcode","IDENTIFY","RESUME","HEARTBEAT","socket","hellos","acquireRelease","shutdown","acks","forkScoped","interruptible","identify","identifyOrResume","value","intents","presence","onPayload","suspend","s","DISPATCH","t","payload","d","session_id","resume_gateway_url","setUrl","void","HELLO","HEARTBEAT_ACK","INVALID_SESSION","clear","publish","RECONNECT","forever","id","package","module","Shard","ShardLive","effect","provide"],"sources":["../../src/DiscordGateway/Shard.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/mjs/gateway.mjs CHANGED
@@ -3,6 +3,7 @@ import { DiscordGatewayLive } from "dfx/DiscordGateway";
3
3
  import * as DiscordWS from "dfx/DiscordGateway/DiscordWS";
4
4
  import { JsonDiscordWSCodecLive } from "dfx/DiscordGateway/DiscordWS";
5
5
  import * as Shard from "dfx/DiscordGateway/Shard";
6
+ import { MemoryShardStateStoreLive } from "dfx/DiscordGateway/Shard/StateStore";
6
7
  import * as SendEvent from "dfx/DiscordGateway/Shard/sendEvents";
7
8
  import * as ShardStore from "dfx/DiscordGateway/ShardStore";
8
9
  import { MemoryShardStoreLive } from "dfx/DiscordGateway/ShardStore";
@@ -13,6 +14,6 @@ import * as Layer from "effect/Layer";
13
14
  export { DiscordGateway, DiscordGatewayLive } from "dfx/DiscordGateway";
14
15
  export { InteractionsRegistry, InteractionsRegistryLive, interactionsSync, run as runIx, setInteractionsSync } from "dfx/Interactions/gateway";
15
16
  export { CachePrelude, DiscordWS, SendEvent, Shard, ShardStore };
16
- export const DiscordLive = /*#__PURE__*/Layer.mergeAll(RateLimiterLive, DiscordGatewayLive).pipe( /*#__PURE__*/Layer.provideMerge(DiscordRESTLive), /*#__PURE__*/Layer.provide(JsonDiscordWSCodecLive), /*#__PURE__*/Layer.provide(MemoryRateLimitStoreLive), /*#__PURE__*/Layer.provide(MemoryShardStoreLive));
17
+ export const DiscordLive = /*#__PURE__*/Layer.mergeAll(RateLimiterLive, DiscordGatewayLive).pipe( /*#__PURE__*/Layer.provideMerge(DiscordRESTLive), /*#__PURE__*/Layer.provide(JsonDiscordWSCodecLive), /*#__PURE__*/Layer.provide(MemoryRateLimitStoreLive), /*#__PURE__*/Layer.provide(MemoryShardStoreLive), /*#__PURE__*/Layer.provide(MemoryShardStateStoreLive));
17
18
  export const DiscordIxLive = /*#__PURE__*/InteractionsRegistryLive.pipe( /*#__PURE__*/Layer.provideMerge(DiscordLive));
18
19
  //# sourceMappingURL=gateway.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"gateway.mjs","names":["CachePrelude","DiscordGatewayLive","DiscordWS","JsonDiscordWSCodecLive","Shard","SendEvent","ShardStore","MemoryShardStoreLive","DiscordRESTLive","InteractionsRegistryLive","MemoryRateLimitStoreLive","RateLimiterLive","Layer","DiscordGateway","InteractionsRegistry","interactionsSync","run","runIx","setInteractionsSync","DiscordLive","mergeAll","pipe","provideMerge","provide","DiscordIxLive"],"sources":["../src/gateway.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAO,KAAKA,YAAY,MAAM,mBAAmB;AACjD,SAASC,kBAAkB,QAAQ,oBAAoB;AACvD,OAAO,KAAKC,SAAS,MAAM,8BAA8B;AACzD,SAASC,sBAAsB,QAAQ,8BAA8B;AACrE,OAAO,KAAKC,KAAK,MAAM,0BAA0B;AACjD,OAAO,KAAKC,SAAS,MAAM,qCAAqC;AAChE,OAAO,KAAKC,UAAU,MAAM,+BAA+B;AAC3D,SAASC,oBAAoB,QAAQ,+BAA+B;AACpE,SAASC,eAAe,QAAQ,iBAAiB;AACjD,SAASC,wBAAwB,QAAQ,0BAA0B;AACnE,SAASC,wBAAwB,EAAEC,eAAe,QAAQ,eAAe;AACzE,OAAO,KAAKC,KAAK,MAAM,cAAc;AAErC,SAASC,cAAc,EAAEZ,kBAAkB,QAAQ,oBAAoB;AAEvE,SACEa,oBAAoB,EACpBL,wBAAwB,EACxBM,gBAAgB,EAChBC,GAAG,IAAIC,KAAK,EACZC,mBAAmB,QACd,0BAA0B;AAEjC,SAASlB,YAAY,EAAEE,SAAS,EAAEG,SAAS,EAAED,KAAK,EAAEE,UAAU;AAE9D,OAAO,MAAMa,WAAW,gBAAGP,KAAK,CAACQ,QAAQ,CACvCT,eAAe,EACfV,kBAAkB,CACnB,CAACoB,IAAI,eACJT,KAAK,CAACU,YAAY,CAACd,eAAe,CAAC,eACnCI,KAAK,CAACW,OAAO,CAACpB,sBAAsB,CAAC,eACrCS,KAAK,CAACW,OAAO,CAACb,wBAAwB,CAAC,eACvCE,KAAK,CAACW,OAAO,CAAChB,oBAAoB,CAAC,CACpC;AAED,OAAO,MAAMiB,aAAa,gBAAGf,wBAAwB,CAACY,IAAI,eACxDT,KAAK,CAACU,YAAY,CAACH,WAAW,CAAC,CAChC","ignoreList":[]}
1
+ {"version":3,"file":"gateway.mjs","names":["CachePrelude","DiscordGatewayLive","DiscordWS","JsonDiscordWSCodecLive","Shard","MemoryShardStateStoreLive","SendEvent","ShardStore","MemoryShardStoreLive","DiscordRESTLive","InteractionsRegistryLive","MemoryRateLimitStoreLive","RateLimiterLive","Layer","DiscordGateway","InteractionsRegistry","interactionsSync","run","runIx","setInteractionsSync","DiscordLive","mergeAll","pipe","provideMerge","provide","DiscordIxLive"],"sources":["../src/gateway.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAO,KAAKA,YAAY,MAAM,mBAAmB;AACjD,SAASC,kBAAkB,QAAQ,oBAAoB;AACvD,OAAO,KAAKC,SAAS,MAAM,8BAA8B;AACzD,SAASC,sBAAsB,QAAQ,8BAA8B;AACrE,OAAO,KAAKC,KAAK,MAAM,0BAA0B;AACjD,SAASC,yBAAyB,QAAQ,qCAAqC;AAC/E,OAAO,KAAKC,SAAS,MAAM,qCAAqC;AAChE,OAAO,KAAKC,UAAU,MAAM,+BAA+B;AAC3D,SAASC,oBAAoB,QAAQ,+BAA+B;AACpE,SAASC,eAAe,QAAQ,iBAAiB;AACjD,SAASC,wBAAwB,QAAQ,0BAA0B;AACnE,SAASC,wBAAwB,EAAEC,eAAe,QAAQ,eAAe;AACzE,OAAO,KAAKC,KAAK,MAAM,cAAc;AAErC,SAASC,cAAc,EAAEb,kBAAkB,QAAQ,oBAAoB;AAEvE,SACEc,oBAAoB,EACpBL,wBAAwB,EACxBM,gBAAgB,EAChBC,GAAG,IAAIC,KAAK,EACZC,mBAAmB,QACd,0BAA0B;AAEjC,SAASnB,YAAY,EAAEE,SAAS,EAAEI,SAAS,EAAEF,KAAK,EAAEG,UAAU;AAE9D,OAAO,MAAMa,WAAW,gBAAGP,KAAK,CAACQ,QAAQ,CACvCT,eAAe,EACfX,kBAAkB,CACnB,CAACqB,IAAI,eACJT,KAAK,CAACU,YAAY,CAACd,eAAe,CAAC,eACnCI,KAAK,CAACW,OAAO,CAACrB,sBAAsB,CAAC,eACrCU,KAAK,CAACW,OAAO,CAACb,wBAAwB,CAAC,eACvCE,KAAK,CAACW,OAAO,CAAChB,oBAAoB,CAAC,eACnCK,KAAK,CAACW,OAAO,CAACnB,yBAAyB,CAAC,CACzC;AAED,OAAO,MAAMoB,aAAa,gBAAGf,wBAAwB,CAACY,IAAI,eACxDT,KAAK,CAACU,YAAY,CAACH,WAAW,CAAC,CAChC","ignoreList":[]}
package/mjs/version.mjs CHANGED
@@ -1,2 +1,2 @@
1
- export const LIB_VERSION = "0.95.1";
1
+ export const LIB_VERSION = "0.95.2";
2
2
  //# sourceMappingURL=version.mjs.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dfx",
3
- "version": "0.95.1",
3
+ "version": "0.95.2",
4
4
  "description": "Effect-TS discord library",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -44,6 +44,6 @@
44
44
  "utf-8-validate": "^6.0.3",
45
45
  "zlib-sync": "^0.1.9"
46
46
  },
47
- "gitHead": "984305a77e12b746a073042084c31a405630d512",
47
+ "gitHead": "b1c54e933611fbd187e370dc61d5f057b0d3361a",
48
48
  "main": "./index.js"
49
49
  }
@@ -0,0 +1,46 @@
1
+ import * as Effect from "effect/Effect"
2
+ import * as Option from "effect/Option"
3
+ import * as Context from "effect/Context"
4
+ import * as Layer from "effect/Layer"
5
+
6
+ export interface ShardState {
7
+ readonly resumeUrl: string
8
+ readonly sequence: number | null
9
+ readonly sessionId: string
10
+ }
11
+
12
+ export interface ShardStateStore {
13
+ readonly _: unique symbol
14
+ }
15
+
16
+ export interface StateStore {
17
+ readonly get: Effect.Effect<Option.Option<ShardState>>
18
+ readonly set: (state: ShardState) => Effect.Effect<void>
19
+ readonly clear: Effect.Effect<void>
20
+ }
21
+
22
+ export const ShardStateStore = Context.GenericTag<
23
+ ShardStateStore,
24
+ { readonly forShard: (id: [id: number, count: number]) => StateStore }
25
+ >("dfx/Shard/StateStore")
26
+
27
+ export const MemoryShardStateStoreLive = Layer.sync(ShardStateStore, () => {
28
+ const store = new Map<string, ShardState>()
29
+
30
+ return ShardStateStore.of({
31
+ forShard: ([id, count]) => {
32
+ const key = `${id}-${count}`
33
+ return {
34
+ get: Effect.sync(() => Option.fromNullable(store.get(key))),
35
+ set(state) {
36
+ return Effect.sync(() => {
37
+ store.set(key, state)
38
+ })
39
+ },
40
+ clear: Effect.sync(() => {
41
+ store.delete(key)
42
+ }),
43
+ }
44
+ },
45
+ })
46
+ })
@@ -8,33 +8,34 @@ import * as DiscordWS from "dfx/DiscordGateway/DiscordWS"
8
8
  import * as SendEvents from "dfx/DiscordGateway/Shard/sendEvents"
9
9
  import type * as Discord from "dfx/types"
10
10
  import * as EffectU from "dfx/utils/Effect"
11
+ import type { ShardState } from "dfx/DiscordGateway/Shard/StateStore"
11
12
 
12
- const payload = (seqRef: Ref.Ref<Option.Option<number>>) =>
13
- Effect.map(Ref.get(seqRef), seq =>
14
- SendEvents.heartbeat(Option.getOrNull(seq)),
13
+ const payload = (state: Effect.Effect<Option.Option<ShardState>>) =>
14
+ Effect.map(state, state =>
15
+ SendEvents.heartbeat(Option.getOrNull(Option.map(state, s => s.sequence))),
15
16
  )
16
17
 
17
18
  const payloadOrReconnect = (
18
19
  ref: Ref.Ref<boolean>,
19
- seqRef: Ref.Ref<Option.Option<number>>,
20
+ state: Effect.Effect<Option.Option<ShardState>>,
20
21
  ) =>
21
22
  Effect.flatMap(
22
23
  Ref.get(ref),
23
24
  (acked): Effect.Effect<DiscordWS.Message> =>
24
- acked ? payload(seqRef) : Effect.succeed(DiscordWS.Reconnect),
25
+ acked ? payload(state) : Effect.succeed(DiscordWS.Reconnect),
25
26
  )
26
27
 
27
28
  export const send = (
28
29
  hellos: Queue.Dequeue<Discord.GatewayPayload>,
29
30
  acks: Queue.Dequeue<Discord.GatewayPayload>,
30
- seqRef: Ref.Ref<Option.Option<number>>,
31
+ state: Effect.Effect<Option.Option<ShardState>>,
31
32
  send: (p: DiscordWS.Message) => Effect.Effect<boolean>,
32
33
  ) =>
33
34
  Effect.flatMap(Ref.make(true), ackedRef => {
34
35
  const heartbeats = EffectU.foreverSwitch(
35
36
  Effect.zipLeft(Queue.take(hellos), Ref.set(ackedRef, true)),
36
37
  p =>
37
- payloadOrReconnect(ackedRef, seqRef).pipe(
38
+ payloadOrReconnect(ackedRef, state).pipe(
38
39
  Effect.zipLeft(Ref.set(ackedRef, false)),
39
40
  Effect.tap(send),
40
41
  Effect.schedule(
@@ -1,9 +1,9 @@
1
1
  import * as Option from "effect/Option"
2
2
  import * as Effect from "effect/Effect"
3
- import * as Ref from "effect/Ref"
4
3
  import * as SendEvents from "dfx/DiscordGateway/Shard/sendEvents"
5
4
  import type * as Discord from "dfx/types"
6
5
  import * as OS from "os"
6
+ import type { ShardState } from "dfx/DiscordGateway/Shard/StateStore"
7
7
 
8
8
  export interface Options {
9
9
  readonly token: string
@@ -12,11 +12,6 @@ export interface Options {
12
12
  readonly presence?: Discord.UpdatePresence
13
13
  }
14
14
 
15
- export interface Requirements {
16
- readonly latestReady: Ref.Ref<Option.Option<Discord.ReadyEvent>>
17
- readonly latestSequence: Ref.Ref<Option.Option<number>>
18
- }
19
-
20
15
  const identify = ({ intents, presence, shard, token }: Options) =>
21
16
  SendEvents.identify({
22
17
  token,
@@ -30,27 +25,24 @@ const identify = ({ intents, presence, shard, token }: Options) =>
30
25
  presence,
31
26
  })
32
27
 
33
- const resume = (token: string, ready: Discord.ReadyEvent, seq: number) =>
28
+ const resume = (token: string, session_id: string, seq: number | null) =>
34
29
  SendEvents.resume({
35
30
  token,
36
- session_id: ready.session_id,
37
- seq,
31
+ session_id,
32
+ seq: seq!,
38
33
  })
39
34
 
40
35
  export const identifyOrResume = (
41
36
  opts: Options,
42
- ready: Ref.Ref<Option.Option<Discord.ReadyEvent>>,
43
- seq: Ref.Ref<Option.Option<number>>,
37
+ state: Effect.Effect<Option.Option<ShardState>>,
44
38
  ): Effect.Effect<
45
39
  | Discord.GatewayPayload<Discord.Identify>
46
40
  | Discord.GatewayPayload<Discord.Resume>
47
41
  > =>
48
42
  Effect.map(
49
- Effect.all([Ref.get(ready), Ref.get(seq)]),
50
- ([readyEvent, seqNumber]) =>
51
- Option.match(Option.all({ readyEvent, seqNumber }), {
52
- onNone: () => identify(opts),
53
- onSome: ({ readyEvent, seqNumber }) =>
54
- resume(opts.token, readyEvent, seqNumber),
55
- }),
43
+ state,
44
+ Option.match({
45
+ onNone: () => identify(opts),
46
+ onSome: state => resume(opts.token, state.sessionId, state.sequence),
47
+ }),
56
48
  )
@@ -1,8 +1,5 @@
1
- import * as Option from "effect/Option"
2
- import * as Effect from "effect/Effect"
3
- import * as Ref from "effect/Ref"
4
- import * as Stream from "effect/Stream"
5
1
  import type * as Discord from "dfx/types"
2
+ import * as Stream from "effect/Stream"
6
3
 
7
4
  export const opCode =
8
5
  <R, E>(source: Stream.Stream<Discord.GatewayPayload, E, R>) =>
@@ -12,27 +9,3 @@ export const opCode =
12
9
  source.pipe(
13
10
  Stream.filter((p): p is Discord.GatewayPayload<T> => p.op === code),
14
11
  )
15
-
16
- const maybeUpdateRef =
17
- <T>(
18
- f: (p: Discord.GatewayPayload) => Option.Option<T>,
19
- ref: Ref.Ref<Option.Option<T>>,
20
- ) =>
21
- (_: Discord.GatewayPayload): Effect.Effect<void> =>
22
- Option.match(f(_), {
23
- onNone: () => Effect.void,
24
- onSome: a => Ref.set(ref, Option.some(a)),
25
- })
26
-
27
- export const latest = <T>(
28
- f: (p: Discord.GatewayPayload) => Option.Option<T>,
29
- ): Effect.Effect<
30
- readonly [
31
- Ref.Ref<Option.Option<T>>,
32
- (_: Discord.GatewayPayload<any>) => Effect.Effect<void>,
33
- ]
34
- > =>
35
- Effect.map(
36
- Ref.make<Option.Option<T>>(Option.none()),
37
- ref => [ref, maybeUpdateRef(f, ref)] as const,
38
- )