dfx 0.24.0 → 0.24.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 (46) hide show
  1. package/DiscordGateway/DiscordWS.d.ts +12 -4
  2. package/DiscordGateway/DiscordWS.js +21 -12
  3. package/DiscordGateway/DiscordWS.js.map +1 -1
  4. package/DiscordGateway/Shard/heartbeats.d.ts +2 -2
  5. package/DiscordGateway/Shard/heartbeats.js +9 -10
  6. package/DiscordGateway/Shard/heartbeats.js.map +1 -1
  7. package/DiscordGateway/Shard/identify.d.ts +2 -2
  8. package/DiscordGateway/Shard/identify.js +1 -5
  9. package/DiscordGateway/Shard/identify.js.map +1 -1
  10. package/DiscordGateway/Shard/invalidSession.d.ts +2 -2
  11. package/DiscordGateway/Shard/invalidSession.js +1 -4
  12. package/DiscordGateway/Shard/invalidSession.js.map +1 -1
  13. package/DiscordGateway/Shard.d.ts +12 -8
  14. package/DiscordGateway/Shard.js +53 -35
  15. package/DiscordGateway/Shard.js.map +1 -1
  16. package/DiscordGateway/Sharder.d.ts +5 -10
  17. package/DiscordGateway/Sharder.js +33 -27
  18. package/DiscordGateway/Sharder.js.map +1 -1
  19. package/DiscordGateway/WS.d.ts +12 -2
  20. package/DiscordGateway/WS.js +17 -11
  21. package/DiscordGateway/WS.js.map +1 -1
  22. package/DiscordGateway.d.ts +6 -6
  23. package/DiscordGateway.js +19 -10
  24. package/DiscordGateway.js.map +1 -1
  25. package/DiscordREST.d.ts +2 -2
  26. package/DiscordREST.js +2 -1
  27. package/DiscordREST.js.map +1 -1
  28. package/Interactions/gateway.js +3 -1
  29. package/Interactions/gateway.js.map +1 -1
  30. package/README.md +4 -6
  31. package/RateLimit.js +1 -1
  32. package/RateLimit.js.map +1 -1
  33. package/_common.d.ts +11 -1
  34. package/_common.js +5 -0
  35. package/_common.js.map +1 -1
  36. package/gateway.d.ts +5 -8
  37. package/gateway.js +5 -9
  38. package/gateway.js.map +1 -1
  39. package/global.d.ts +1 -1
  40. package/package.json +2 -2
  41. package/utils/hub.d.ts +16 -0
  42. package/utils/hub.js +31 -0
  43. package/utils/hub.js.map +1 -0
  44. package/webhooks.d.ts +4 -4
  45. package/webhooks.js +2 -2
  46. package/webhooks.js.map +1 -1
@@ -1,5 +1,5 @@
1
1
  /// <reference types="ws" />
2
- import { Discord, Effect, Stream } from "dfx/_common";
2
+ import { Discord, Effect, Dequeue } from "dfx/_common";
3
3
  import { WS } from "dfx/gateway";
4
4
  import WebSocket from "isomorphic-ws";
5
5
  export type Message = Discord.GatewayPayload | WS.Reconnect;
@@ -16,7 +16,15 @@ export interface DiscordWSCodec {
16
16
  }
17
17
  export declare const DiscordWSCodec: import("@effect-http/client/_common").Tag<DiscordWSCodec>;
18
18
  export declare const LiveJsonDiscordWSCodec: import("@effect-http/client/_common").Layer<never, never, DiscordWSCodec>;
19
- export declare const make: ({ url, version, outbound, }: OpenOpts) => import("@effect-http/client/_common").Effect<import("../Log.js").Log | DiscordWSCodec, never, {
20
- source: import("@effect-http/client/_common").Stream<never, never, import("../types.js").GatewayPayload<any>>;
21
- setUrl: (url: string) => import("@effect-http/client/_common").Effect<never, never, void>;
19
+ declare const make: import("@effect-http/client/_common").Effect<import("../Log.js").Log | import("./WS.js").WS | DiscordWSCodec, never, {
20
+ readonly connect: ({ url, version, outbound, }: OpenOpts) => import("@effect-http/client/_common").Effect<never, never, {
21
+ readonly run: import("@effect-http/client/_common").Effect<never, never, never>;
22
+ readonly queue: import("../_common.js").Dequeue<import("../types.js").GatewayPayload<any>>;
23
+ readonly setUrl: (url: string) => import("@effect-http/client/_common").Effect<never, never, void>;
24
+ }>;
22
25
  }>;
26
+ export interface DiscordWS extends Effect.Success<typeof make> {
27
+ }
28
+ export declare const DiscordWS: import("@effect-http/client/_common").Tag<DiscordWS>;
29
+ export declare const LiveDiscordWS: import("@effect-http/client/_common").Layer<import("../Log.js").Log | DiscordWSCodec, never, DiscordWS>;
30
+ export {};
@@ -2,24 +2,33 @@ import * as tsplus_module_1 from "dfx/_common";
2
2
  import * as tsplus_module_2 from "@effect/io/Layer";
3
3
  import * as tsplus_module_3 from "@effect/data/Duration";
4
4
  import * as tsplus_module_4 from "@effect/io/Schedule";
5
- import * as tsplus_module_5 from "@effect/stream/Stream";
6
- import * as tsplus_module_6 from "dfx";
5
+ import * as tsplus_module_5 from "@effect/io/Effect";
6
+ import * as tsplus_module_6 from "dfx/utils/hub";
7
7
  import * as tsplus_module_7 from "dfx/gateway";
8
- import * as tsplus_module_8 from "@effect/io/Effect";
9
- import * as tsplus_module_9 from "@effect/io/Ref";
8
+ import * as tsplus_module_8 from "@effect/io/Ref";
9
+ import * as tsplus_module_9 from "dfx";
10
+ import { LiveWS } from "./WS.js";
10
11
  export const DiscordWSCodec = tsplus_module_1.Tag();
11
12
  export const LiveJsonDiscordWSCodec = tsplus_module_2.succeed(DiscordWSCodec, {
12
13
  type: "json",
13
14
  encode: p => JSON.stringify(p),
14
15
  decode: p => JSON.parse(p.toString("utf8")),
15
16
  });
16
- export const make = ({ url = "wss://gateway.discord.gg/", version = 10, outbound, }) => tsplus_module_8.flatMap(tsplus_module_8.service(DiscordWSCodec), encoding => tsplus_module_8.flatMap(tsplus_module_9.make(`${url}?v=${version}&encoding=${encoding.type}`), urlRef => {
17
- const setUrl = (url) => tsplus_module_9.set(urlRef, `${url}?v=${version}&encoding=${encoding.type}`);
18
- const take = tsplus_module_8.map(outbound, a => a === tsplus_module_7.WS.Reconnect ? a : encoding.encode(a));
19
- return tsplus_module_8.map(tsplus_module_8.service(tsplus_module_6.Log.Log), log => {
20
- const ws = tsplus_module_5.provideService(tsplus_module_7.WS.make(urlRef, take), tsplus_module_6.Log.Log, log);
21
- const source = tsplus_module_5.map(tsplus_module_5.retry(tsplus_module_5.tapError(ws, e => log.info("DiscordWS", "ERROR", e)), tsplus_module_4.exponential(tsplus_module_3.seconds(0.5))), encoding.decode);
22
- return { source, setUrl };
17
+ const make = tsplus_module_5.flatMap(tsplus_module_5.service(tsplus_module_7.WS.WS), ws => tsplus_module_5.flatMap(tsplus_module_5.service(DiscordWSCodec), encoding => tsplus_module_5.map(tsplus_module_5.service(tsplus_module_9.Log.Log), log => {
18
+ const connect = ({ url = "wss://gateway.discord.gg/", version = 10, outbound, }) => tsplus_module_5.flatMap(tsplus_module_8.make(`${url}?v=${version}&encoding=${encoding.type}`), urlRef => {
19
+ const setUrl = (url) => tsplus_module_8.set(urlRef, `${url}?v=${version}&encoding=${encoding.type}`);
20
+ const take = tsplus_module_5.map(outbound, a => a === tsplus_module_7.WS.Reconnect ? a : encoding.encode(a));
21
+ return tsplus_module_5.flatMap(ws.connect(urlRef, take), socket => tsplus_module_5.map(tsplus_module_6.transform(socket.queue, encoding.decode), ([queue, offer]) => {
22
+ const run = tsplus_module_5.retry(tsplus_module_5.tapError(tsplus_module_5.zipParLeft(socket.run, offer), e => log.info("DiscordWS", "ERROR", e)), tsplus_module_4.exponential(tsplus_module_3.seconds(0.5)));
23
+ return {
24
+ run,
25
+ queue: queue,
26
+ setUrl,
27
+ };
28
+ }));
23
29
  });
24
- }));
30
+ return { connect };
31
+ })));
32
+ export const DiscordWS = tsplus_module_1.Tag();
33
+ export const LiveDiscordWS = tsplus_module_2.provide(tsplus_module_5.toLayer(make, DiscordWS))(LiveWS);
25
34
  //# sourceMappingURL=DiscordWS.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DiscordWS.js","sourceRoot":"","sources":["../../src/DiscordGateway/DiscordWS.ts"],"names":[],"mappings":";;;;;;;;;AAgBA,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAA,GAAG,EAAkB,CAAA;AACnD,MAAM,CAAC,MAAM,sBAAsB,GAAG,wBAAc,cAAc,EAAE;IAClE,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAC9B,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;CAC5C,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,EACnB,GAAG,GAAG,2BAA2B,EACjC,OAAO,GAAG,EAAE,EACZ,QAAQ,GACC,EAAE,EAAE,yBAEQ,wBAAe,cAAc,CAAC,EAA3C,QAAQ,4BACG,qBAAS,GAAG,GAAG,MAAM,OAAO,aAAa,QAAQ,CAAC,IAAI,EAAE,CAAC,EAApE,MAAM;IACZ,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE,CAC7B,oBAAA,MAAM,EAAK,GAAG,GAAG,MAAM,OAAO,aAAa,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;IAC7D,MAAM,IAAI,GAAG,oBAAA,QAAQ,EAAK,CAAC,CAAC,EAAE,CAC5B,CAAC,KAAK,gBAAA,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAC5C,CAAA;+BACa,wBAAe,gBAAA,GAAG,CAAC,GAAG,CAAC,EAA/B,GAAG;QACT,MAAM,EAAE,GAAG,+BAAA,gBAAA,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAgB,gBAAA,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAC7D,MAAM,MAAM,GAAG,oBAAA,sBAAA,yBAAA,EAAE,EACL,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAC1C,4BAAqB,wBAAiB,GAAG,CAAC,CAAC,CAAC,EAC9C,QAAQ,CAAC,MAAM,CAAiD,CAAA;QAEvE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;;GACzB,CAAA"}
1
+ {"version":3,"file":"DiscordWS.js","sourceRoot":"","sources":["../../src/DiscordGateway/DiscordWS.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAgBhC,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAA,GAAG,EAAkB,CAAA;AACnD,MAAM,CAAC,MAAM,sBAAsB,GAAG,wBAAc,cAAc,EAAE;IAClE,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAC9B,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;CAC5C,CAAC,CAAA;AAEF,MAAM,IAAI,mDACK,gBAAA,EAAE,CAAC,EAAE,GAAZ,EAAE,4BACW,wBAAe,cAAc,CAAC,EAA3C,QAAQ,wBACA,wBAAe,gBAAA,GAAG,CAAC,GAAG,CAAC,EAA/B,GAAG;IAET,MAAM,OAAO,GAAG,CAAC,EACf,GAAG,GAAG,2BAA2B,EACjC,OAAO,GAAG,EAAE,EACZ,QAAQ,GACC,EAAE,EAAE,yBAGT,qBAAS,GAAG,GAAG,MAAM,OAAO,aAAa,QAAQ,CAAC,IAAI,EAAE,CAAC,EADrD,MAAM;QAGZ,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE,CAC7B,oBAAA,MAAM,EAAK,GAAG,GAAG,MAAM,OAAO,aAAa,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;QAC7D,MAAM,IAAI,GAAG,oBAAA,QAAQ,EAAK,CAAC,CAAC,EAAE,CAC5B,CAAC,KAAK,gBAAA,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAC5C,CAAA;uCACgB,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,EAAnC,MAAM,wBACa,0BAAA,MAAM,CAAC,KAAK,EAAW,QAAQ,CAAC,MAAM,CAAC,GAA1D,CAAC,KAAK,EAAE,KAAK,CAAC;YAEpB,MAAM,GAAG,GAAG,sBAAA,yBAAA,2BAAA,MAAM,CAAC,GAAG,EACR,KAAK,CAAC,EACR,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAC1C,4BAAqB,wBAAiB,GAAG,CAAC,CAAC,CAInD,CAAA;YAED,OAAO;gBACL,GAAG;gBACH,KAAK,EAAE,KAAwC;gBAC/C,MAAM;aACE,CAAA;;MACV,CAAA;IAEJ,OAAO,EAAE,OAAO,EAAW,CAAA;IAC3B,CAAA;AAGF,MAAM,CAAC,MAAM,SAAS,GAAG,gBAAA,GAAG,EAAa,CAAA;AACzC,MAAM,CAAC,MAAM,aAAa,2BAAa,wBAAA,IAAI,EAAS,SAAS,CAAC,EAAjC,MAAM,CAA2B,CAAA"}
@@ -1,3 +1,3 @@
1
- import { Ref, Maybe, Effect, Stream, Discord } from "dfx/_common";
1
+ import { Ref, Maybe, Effect, Dequeue, Discord } from "dfx/_common";
2
2
  import { DiscordWS } from "dfx/gateway";
3
- export declare const fromRaw: <R, E>(source: import("@effect-http/client/_common").Stream<R, E, import("../../types.js").GatewayPayload<any>>, seqRef: Ref<Maybe<number>>) => import("@effect-http/client/_common").Stream<R, E, import("../DiscordWS.js").Message>;
3
+ export declare const send: (hellos: Dequeue<Discord.GatewayPayload>, acks: Dequeue<Discord.GatewayPayload>, seqRef: Ref<Maybe<number>>, send: (p: DiscordWS.Message) => Effect<never, never, boolean>) => import("@effect-http/client/_common").Effect<never, never, never>;
@@ -3,16 +3,15 @@ import * as tsplus_module_2 from "@fp-ts/core/Option";
3
3
  import * as tsplus_module_3 from "@effect/io/Effect";
4
4
  import * as tsplus_module_4 from "dfx/gateway";
5
5
  import * as tsplus_module_5 from "@effect/io/Schedule";
6
- import * as tsplus_module_6 from "@effect/stream/Stream";
7
- import * as tsplus_module_7 from "dfx/_common";
6
+ import * as tsplus_module_6 from "dfx/utils/hub";
8
7
  import { millis } from "@effect/data/Duration";
9
8
  import * as SendEvents from "./sendEvents.js";
10
- import * as Utils from "./utils.js";
11
- const send = (ref, seqRef) => tsplus_module_3.tap(tsplus_module_3.map(tsplus_module_1.get(seqRef), a => SendEvents.heartbeat(tsplus_module_2.getOrNull(a))), () => tsplus_module_1.set(ref, false));
12
- const maybeSend = (ref, seqRef) => tsplus_module_3.flatMap(tsplus_module_1.get(ref), (acked) => acked ? send(ref, seqRef) : tsplus_module_3.succeed(tsplus_module_4.WS.Reconnect));
13
- export const fromRaw = (source, seqRef) => tsplus_module_6.unwrap(tsplus_module_3.map(tsplus_module_1.make(true), ackedRef => {
14
- const heartbeats = tsplus_module_6.mapEffect(tsplus_module_6.flatMapParSwitch(tsplus_module_6.tap(Utils.opCode(source)(10 /* Discord.GatewayOpcode.HELLO */), () => tsplus_module_1.set(ackedRef, true)), p => tsplus_module_6.fromSchedule(tsplus_module_5.andThen(tsplus_module_5.duration(millis(p.d.heartbeat_interval * Math.random())), tsplus_module_5.spaced(millis(p.d.heartbeat_interval)))), 1), () => maybeSend(ackedRef, seqRef));
15
- const acks = tsplus_module_6.drain(tsplus_module_6.tap(Utils.opCode(source)(11 /* Discord.GatewayOpcode.HEARTBEAT_ACK */), () => tsplus_module_1.set(ackedRef, true)));
16
- return tsplus_module_6.merge(heartbeats, acks);
17
- }));
9
+ const payload = (ref, seqRef) => tsplus_module_3.tap(tsplus_module_3.map(tsplus_module_1.get(seqRef), a => SendEvents.heartbeat(tsplus_module_2.getOrNull(a))), () => tsplus_module_1.set(ref, false));
10
+ const payloadOrReconnect = (ref, seqRef) => tsplus_module_3.flatMap(tsplus_module_1.get(ref), (acked) => acked ? payload(ref, seqRef) : tsplus_module_3.succeed(tsplus_module_4.WS.Reconnect));
11
+ export const send = (hellos, acks, seqRef, send) => tsplus_module_3.flatMap(tsplus_module_1.make(true), ackedRef => {
12
+ const heartbeats = tsplus_module_6.foreverSwitch(tsplus_module_3.tap(hellos
13
+ .take(), () => tsplus_module_1.set(ackedRef, true)), p => tsplus_module_3.schedule(tsplus_module_3.tap(payloadOrReconnect(ackedRef, seqRef), send), tsplus_module_5.andThen(tsplus_module_5.duration(millis(p.d.heartbeat_interval * Math.random())), tsplus_module_5.fixed(millis(p.d.heartbeat_interval)))));
14
+ const run = tsplus_module_3.forever(tsplus_module_3.tap(acks.take(), () => tsplus_module_1.set(ackedRef, true)));
15
+ return tsplus_module_3.zipParLeft(run, heartbeats);
16
+ });
18
17
  //# sourceMappingURL=heartbeats.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"heartbeats.js","sourceRoot":"","sources":["../../../src/DiscordGateway/Shard/heartbeats.ts"],"names":[],"mappings":";;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC,MAAM,IAAI,GAAG,CAAC,GAAiB,EAAE,MAA0B,EAAE,EAAE,CAC7D,oBAAA,wCAAA,MAAM,GACC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,2BAAC,CAAC,EAAW,CAAC,EACvC,GAAG,EAAE,CAAC,oBAAA,GAAG,EAAK,KAAK,CAAC,CAAC,CAAA;AAE9B,MAAM,SAAS,GAAG,CAAC,GAAiB,EAAE,MAA0B,EAAE,EAAE,CAClE,4CAAA,GAAG,GACD,CAAC,KAAK,EAA2C,EAAE,CACjD,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,wBAAe,gBAAA,EAAE,CAAC,SAAS,CAAC,CAC3D,CAAA;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,MAA4C,EAC5C,MAA0B,EAC1B,EAAE,wBACF,oBAAA,qBAAS,IAAI,CAAC,EAAK,QAAQ,CAAC,EAAE;IAC5B,MAAM,UAAU,GAAG,0BAAA,iCAAA,oBAAA,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,sCAEtC,EACM,GAAG,EAAE,CAAC,oBAAA,QAAQ,EAAK,IAAI,CAAC,CAAC,EAE5B,CAAC,CAAC,EAAE,CACF,6BACE,wBAAA,yBACE,MAAM,CAAC,CAAC,CAAC,CAAE,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAChD,EAAS,uBAAgB,MAAM,CAAC,CAAC,CAAC,CAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAC5D,EACH,CAAC,CACF,EACU,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;IAE/C,MAAM,IAAI,yBAAG,oBAAA,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,8CAAqC,EACpE,GAAG,EAAE,CAAC,oBAAA,QAAQ,EAAK,IAAI,CAAC,CACzB,CAAM,CAAA;IAEP,OAAO,sBAAA,UAAU,EAAO,IAAI,CAAC,CAAA;AAC/B,CAAC,CAAC,CAAa,CAAA"}
1
+ {"version":3,"file":"heartbeats.js","sourceRoot":"","sources":["../../../src/DiscordGateway/Shard/heartbeats.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAE7C,MAAM,OAAO,GAAG,CAAC,GAAiB,EAAE,MAA0B,EAAE,EAAE,CAChE,oBAAA,wCAAA,MAAM,GACC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,2BAAC,CAAC,EAAW,CAAC,EACvC,GAAG,EAAE,CAAC,oBAAA,GAAG,EAAK,KAAK,CAAC,CAAC,CAAA;AAE9B,MAAM,kBAAkB,GAAG,CAAC,GAAiB,EAAE,MAA0B,EAAE,EAAE,CAC3E,4CAAA,GAAG,GACD,CAAC,KAAK,EAA2C,EAAE,CACjD,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,wBAAe,gBAAA,EAAE,CAAC,SAAS,CAAC,CAC9D,CAAA;AAEH,MAAM,CAAC,MAAM,IAAI,GAAG,CAClB,MAAuC,EACvC,IAAqC,EACrC,MAA0B,EAC1B,IAA6D,EAC7D,EAAE,yBAEmB,qBAAS,IAAI,CAAC,EAA3B,QAAQ;IAEd,MAAM,UAAU,GAAG,8BAAA,oBAAA,MAAM;SACtB,IAAI,EAAE,EACF,GAAG,EAAE,CAAC,oBAAA,QAAQ,EAAK,IAAI,CAAC,CAAC,EACf,CAAC,CAAC,EAAE,CACjB,yBAAA,oBAAA,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,EAC7B,IAAI,CAAC,EAER,wBAAA,yBACE,MAAM,CAAC,CAAC,CAAC,CAAE,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAChD,EAAS,sBAAe,MAAM,CAAC,CAAC,CAAC,CAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAC3D,CACJ,CAAA;IAEH,MAAM,GAAG,2BAAG,oBAAA,IAAI,CAAC,IAAI,EAAE,EAAK,GAAG,EAAE,CAAC,oBAAA,QAAQ,EAAK,IAAI,CAAC,CAAC,CAAQ,CAAA;WAEpD,2BAAA,GAAG,EAAY,UAAU,CAAC;EACnC,CAAA"}
@@ -1,4 +1,4 @@
1
- import { Discord, Ref, Maybe, Stream } from "dfx/_common";
1
+ import { Discord, Ref, Maybe } from "dfx/_common";
2
2
  export interface Options {
3
3
  token: string;
4
4
  intents: number;
@@ -9,4 +9,4 @@ export interface Requirements {
9
9
  latestReady: Ref<Maybe<Discord.ReadyEvent>>;
10
10
  latestSequence: Ref<Maybe<number>>;
11
11
  }
12
- export declare const fromRaw: <R, E>(source: import("@effect-http/client/_common").Stream<R, E, import("../../types.js").GatewayPayload<any>>, { latestReady, latestSequence, ...opts }: Options & Requirements) => import("@effect-http/client/_common").Stream<R, E, import("../../types.js").GatewayPayload<any>>;
12
+ export declare const identifyOrResume: (opts: Options, ready: Ref<Maybe<Discord.ReadyEvent>>, seq: Ref<Maybe<number>>) => import("@effect-http/client/_common").Effect<never, never, import("../../types.js").GatewayPayload<any>>;
@@ -1,11 +1,8 @@
1
1
  import * as tsplus_module_1 from "@fp-ts/core/Option";
2
2
  import * as tsplus_module_2 from "@effect/io/Ref";
3
3
  import * as tsplus_module_3 from "@effect/io/Effect";
4
- import * as tsplus_module_4 from "dfx/_common";
5
- import * as tsplus_module_5 from "@effect/stream/Stream";
6
4
  import * as SendEvents from "./sendEvents.js";
7
5
  import * as OS from "os";
8
- import { opCode } from "./utils.js";
9
6
  const identify = ({ token, intents, shard, presence }) => SendEvents.identify({
10
7
  token,
11
8
  intents,
@@ -22,9 +19,8 @@ const resume = (token, ready, seq) => SendEvents.resume({
22
19
  session_id: ready.session_id,
23
20
  seq,
24
21
  });
25
- const identifyOrResume = (opts, ready, seq) => tsplus_module_3.flatMap(tsplus_module_2.get(ready), readyEvent => tsplus_module_3.map(tsplus_module_2.get(seq), seqNumber => tsplus_module_1.match(tsplus_module_1.struct({
22
+ export const identifyOrResume = (opts, ready, seq) => tsplus_module_3.flatMap(tsplus_module_2.get(ready), readyEvent => tsplus_module_3.map(tsplus_module_2.get(seq), seqNumber => tsplus_module_1.match(tsplus_module_1.struct({
26
23
  readyEvent,
27
24
  seqNumber,
28
25
  }), () => identify(opts), ({ readyEvent, seqNumber }) => resume(opts.token, readyEvent, seqNumber))));
29
- export const fromRaw = (source, { latestReady, latestSequence, ...opts }) => tsplus_module_5.mapEffect(opCode(source)(10 /* Discord.GatewayOpcode.HELLO */), () => identifyOrResume(opts, latestReady, latestSequence));
30
26
  //# sourceMappingURL=identify.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"identify.js","sourceRoot":"","sources":["../../../src/DiscordGateway/Shard/identify.ts"],"names":[],"mappings":";;;;;AAAA,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAcnC,MAAM,QAAQ,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAW,EAAE,EAAE,CAChE,UAAU,CAAC,QAAQ,CAAC;IAClB,KAAK;IACL,OAAO;IACP,UAAU,EAAE;QACV,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE;QACjB,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,KAAK;KACd;IACD,KAAK;IACL,QAAQ;CACT,CAAC,CAAA;AAEJ,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,KAAyB,EAAE,GAAW,EAAE,EAAE,CACvE,UAAU,CAAC,MAAM,CAAC;IAChB,KAAK;IACL,UAAU,EAAE,KAAK,CAAC,UAAU;IAC5B,GAAG;CACJ,CAAC,CAAA;AAEJ,MAAM,gBAAgB,GAAG,CACvB,IAAa,EACb,KAAqC,EACrC,GAAuB,EACvB,EAAE,6CAEqB,KAAK,GAApB,UAAU,4CACI,GAAG,GAAjB,SAAS,IAER,sBAAA,uBAAa;IAClB,UAAU;IACV,SAAS;CACV,CAAC,EACA,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EACpB,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,CACzE,EACD,CAAA;AAEJ,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,MAA4C,EAC5C,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,IAAI,EAA0B,EAChE,EAAE,CACF,0BAAA,MAAM,CAAC,MAAM,CAAC,sCAAiD,EAC7D,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,cAAc,CAAC,CAC1D,CAAA"}
1
+ {"version":3,"file":"identify.js","sourceRoot":"","sources":["../../../src/DiscordGateway/Shard/identify.ts"],"names":[],"mappings":";;;AAAA,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AAcxB,MAAM,QAAQ,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAW,EAAE,EAAE,CAChE,UAAU,CAAC,QAAQ,CAAC;IAClB,KAAK;IACL,OAAO;IACP,UAAU,EAAE;QACV,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE;QACjB,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,KAAK;KACd;IACD,KAAK;IACL,QAAQ;CACT,CAAC,CAAA;AAEJ,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,KAAyB,EAAE,GAAW,EAAE,EAAE,CACvE,UAAU,CAAC,MAAM,CAAC;IAChB,KAAK;IACL,UAAU,EAAE,KAAK,CAAC,UAAU;IAC5B,GAAG;CACJ,CAAC,CAAA;AAEJ,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,IAAa,EACb,KAAqC,EACrC,GAAuB,EACvB,EAAE,6CAEqB,KAAK,GAApB,UAAU,4CACI,GAAG,GAAjB,SAAS,IAER,sBAAA,uBAAa;IAClB,UAAU;IACV,SAAS;CACV,CAAC,EACA,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EACpB,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,CACzE,EACD,CAAA"}
@@ -1,3 +1,3 @@
1
- import { Stream, Discord, Ref, Maybe } from "dfx/_common";
1
+ import { Discord, Ref, Maybe } from "dfx/_common";
2
2
  import { DiscordWS } from "dfx/gateway";
3
- export declare const fromRaw: <R, E>(raw: import("@effect-http/client/_common").Stream<R, E, import("../../types.js").GatewayPayload<any>>, latestReady: Ref<Maybe<Discord.ReadyEvent>>) => import("@effect-http/client/_common").Stream<R, E, import("../DiscordWS.js").Message>;
3
+ export declare const fromPayload: (p: Discord.GatewayPayload, latestReady: Ref<Maybe<Discord.ReadyEvent>>) => import("@effect-http/client/_common").Effect<never, never, import("../DiscordWS.js").Message>;
@@ -2,8 +2,5 @@ import * as tsplus_module_1 from "dfx/gateway";
2
2
  import * as tsplus_module_2 from "@effect/io/Effect";
3
3
  import * as tsplus_module_3 from "@fp-ts/core/Option";
4
4
  import * as tsplus_module_4 from "@effect/io/Ref";
5
- import * as tsplus_module_5 from "dfx/_common";
6
- import * as tsplus_module_6 from "@effect/stream/Stream";
7
- import { opCode } from "./utils.js";
8
- export const fromRaw = (raw, latestReady) => tsplus_module_6.map(tsplus_module_6.tap(opCode(raw)(9 /* Discord.GatewayOpcode.INVALID_SESSION */), p => (p.d ? tsplus_module_2.unit() : tsplus_module_4.set(latestReady, tsplus_module_3.none()))), () => tsplus_module_1.WS.Reconnect);
5
+ export const fromPayload = (p, latestReady) => tsplus_module_2.map((p.d ? tsplus_module_2.unit() : tsplus_module_4.set(latestReady, tsplus_module_3.none())), () => tsplus_module_1.WS.Reconnect);
9
6
  //# sourceMappingURL=invalidSession.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"invalidSession.js","sourceRoot":"","sources":["../../../src/DiscordGateway/Shard/invalidSession.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAEnC,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,GAAyC,EACzC,WAA2C,EAC3C,EAAE,CACF,oBAAA,oBAAA,MAAM,CAAC,GAAG,CAAC,+CAEV,EACM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAa,CAAC,CAAC,CAAC,oBAAA,WAAW,EAAK,sBAAY,CAAC,CAAC,CAAC,EAC3D,GAAsB,EAAE,CAAC,gBAAA,EAAE,CAAC,SAAS,CAAC,CAAA"}
1
+ {"version":3,"file":"invalidSession.js","sourceRoot":"","sources":["../../../src/DiscordGateway/Shard/invalidSession.ts"],"names":[],"mappings":";;;;AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,CAAyB,EACzB,WAA2C,EAC3C,EAAE,CACF,oBAAA,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAa,CAAC,CAAC,CAAC,oBAAA,WAAW,EAAK,sBAAY,CAAC,CAAC,EACnD,GAAsB,EAAE,CAAC,gBAAA,EAAE,CAAC,SAAS,CACtC,CAAA"}
@@ -1,9 +1,13 @@
1
- import { DiscordWS } from "dfx/gateway";
2
- import { Discord } from "dfx/_common";
3
- export declare const make: (shard: [id: number, count: number]) => import("@effect-http/client/_common").Effect<import("../_common.js").Scope | import("../DiscordConfig.js").DiscordConfig | import("../Log.js").Log | import("../RateLimit.js").RateLimiter | import("./DiscordWS.js").DiscordWSCodec, never, {
4
- run: import("@effect-http/client/_common").Effect<never, never, void>;
5
- raw: import("@effect-http/client/_common").Stream<never, never, import("../types.js").GatewayPayload<any>>;
6
- dispatch: import("@effect-http/client/_common").Stream<never, never, import("../types.js").GatewayPayload<any>>;
7
- send: (p: Discord.GatewayPayload) => import("@effect-http/client/_common").Effect<never, never, boolean>;
8
- reconnect: import("@effect-http/client/_common").Effect<never, never, boolean>;
1
+ import { Hub, Discord, Effect } from "dfx/_common";
2
+ import { DiscordWS } from "./DiscordWS.js";
3
+ export declare const make: import("@effect-http/client/_common").Effect<import("../DiscordConfig.js").DiscordConfig | DiscordWS | import("../RateLimit.js").RateLimiter, never, {
4
+ readonly connect: (shard: [id: number, count: number], hub: Hub<Discord.GatewayPayload<Discord.ReceiveEvent>>) => import("@effect-http/client/_common").Effect<never, never, {
5
+ readonly run: import("@effect-http/client/_common").Effect<never, never, never>;
6
+ readonly send: (p: Discord.GatewayPayload) => import("@effect-http/client/_common").Effect<never, never, boolean>;
7
+ readonly reconnect: import("@effect-http/client/_common").Effect<never, never, boolean>;
8
+ }>;
9
9
  }>;
10
+ export interface Shard extends Effect.Success<typeof make> {
11
+ }
12
+ export declare const Shard: import("@effect-http/client/_common").Tag<Shard>;
13
+ export declare const LiveShard: import("@effect-http/client/_common").Layer<import("../DiscordConfig.js").DiscordConfig | import("../Log.js").Log | import("./DiscordWS.js").DiscordWSCodec | import("../RateLimit.js").RateLimitStore, never, Shard>;
@@ -1,44 +1,62 @@
1
- import * as tsplus_module_1 from "@effect/io/Effect";
2
- import * as tsplus_module_2 from "dfx/gateway";
3
- import * as tsplus_module_3 from "@effect/stream/Stream";
1
+ import * as tsplus_module_1 from "dfx/gateway";
2
+ import * as tsplus_module_2 from "@effect/io/Effect";
3
+ import * as tsplus_module_3 from "dfx/_common";
4
4
  import * as tsplus_module_4 from "@effect/io/Config/Secret";
5
- import * as tsplus_module_5 from "dfx/_common";
5
+ import * as tsplus_module_5 from "@effect/io/Queue";
6
6
  import * as tsplus_module_6 from "@fp-ts/core/Option";
7
7
  import * as tsplus_module_7 from "@effect/data/Duration";
8
- import * as tsplus_module_8 from "@effect/io/Queue";
9
- import * as tsplus_module_9 from "dfx";
8
+ import * as tsplus_module_8 from "dfx";
9
+ import * as tsplus_module_9 from "@effect/io/Layer";
10
+ import { DiscordWS, LiveDiscordWS } from "./DiscordWS.js";
10
11
  import * as Heartbeats from "./Shard/heartbeats.js";
11
12
  import * as Identify from "./Shard/identify.js";
12
13
  import * as InvalidSession from "./Shard/invalidSession.js";
13
14
  import * as Utils from "./Shard/utils.js";
14
- export const make = (shard) => tsplus_module_1.flatMap(tsplus_module_1.service(tsplus_module_9.DiscordConfig.DiscordConfig), ({ token, gateway }) => tsplus_module_1.flatMap(tsplus_module_1.service(tsplus_module_9.RateLimiter), limiter => tsplus_module_1.flatMap(tsplus_module_8.unbounded(), outboundQueue => {
15
- const outbound = tsplus_module_1.tap(outboundQueue
16
- .take(), () => limiter.maybeWait("dfx.shard.send", tsplus_module_7.minutes(1), 120));
17
- const send = (p) => outboundQueue.offer(p);
18
- return tsplus_module_1.flatMap(tsplus_module_2.DiscordWS.make({ outbound }), socket => tsplus_module_1.flatMap(tsplus_module_3.broadcastDynamic(socket.source, 1), raw => tsplus_module_1.flatMap(Utils.latest(p => tsplus_module_6.map(tsplus_module_6.filter((p) => p.op === 0 /* Discord.GatewayOpcode.DISPATCH */ && p.t === "READY")(tsplus_module_6.some(p)), p => p.d)), ([latestReady, updateLatestReady]) => tsplus_module_1.map(Utils.latest(p => tsplus_module_6.fromNullable(p.s)), ([latestSequence, updateLatestSequence]) => {
19
- const maybeUpdateUrl = (p) => tsplus_module_6.match(tsplus_module_6.map(tsplus_module_6.filter((p) => p.op === 0 /* Discord.GatewayOpcode.DISPATCH */ && p.t === "READY")(tsplus_module_6.some(p)), p => p.d), () => tsplus_module_1.unit(), a => socket.setUrl(a.resume_gateway_url));
20
- const updateRefs = tsplus_module_3.runDrain(tsplus_module_3.tap(tsplus_module_3.tap(tsplus_module_3.tap(raw, updateLatestReady), updateLatestSequence), maybeUpdateUrl));
21
- // heartbeats
22
- const heartbeatEffects = tsplus_module_3.runForEach(Heartbeats.fromRaw(raw, latestSequence), send);
23
- const dispatch = tsplus_module_3.filter(raw, (p) => p.op === 0 /* Discord.GatewayOpcode.DISPATCH */);
24
- // identify
25
- const identifyEffects = tsplus_module_3.runForEach(Identify.fromRaw(raw, {
26
- token: tsplus_module_4.value(token),
27
- shard,
28
- intents: gateway.intents,
29
- presence: gateway.presence,
30
- latestSequence,
31
- latestReady,
32
- }), send);
33
- // invalid session
34
- const invalidEffects = tsplus_module_3.runForEach(InvalidSession.fromRaw(raw, latestReady), send);
35
- return {
36
- run: tsplus_module_1.asUnit(tsplus_module_1.zipPar(tsplus_module_1.zipPar(tsplus_module_1.zipPar(updateRefs, heartbeatEffects), identifyEffects), invalidEffects)),
37
- raw,
38
- dispatch,
39
- send: (p) => send(p),
40
- reconnect: send(tsplus_module_2.WS.Reconnect),
41
- };
42
- }))));
15
+ export const make = tsplus_module_2.flatMap(tsplus_module_2.service(tsplus_module_8.DiscordConfig.DiscordConfig), ({ token, gateway }) => tsplus_module_2.flatMap(tsplus_module_2.service(tsplus_module_8.RateLimiter), limiter => tsplus_module_2.map(tsplus_module_2.service(DiscordWS), dws => {
16
+ const connect = (shard, hub) => tsplus_module_2.flatMap(tsplus_module_5.unbounded(), outboundQueue => {
17
+ const outbound = tsplus_module_2.tap(outboundQueue
18
+ .take(), () => limiter.maybeWait("dfx.shard.send", tsplus_module_7.minutes(1), 120));
19
+ const send = (p) => outboundQueue.offer(p);
20
+ return tsplus_module_2.flatMap(dws.connect({ outbound }), socket => tsplus_module_2.flatMap(Utils.latest(p => tsplus_module_6.map(tsplus_module_6.filter((p) => p.op === 0 /* Discord.GatewayOpcode.DISPATCH */ && p.t === "READY")(tsplus_module_6.some(p)), p => p.d)), ([latestReady, updateLatestReady]) => tsplus_module_2.flatMap(Utils.latest(p => tsplus_module_6.fromNullable(p.s)), ([latestSequence, updateLatestSequence]) => {
21
+ const maybeUpdateUrl = (p) => tsplus_module_6.match(tsplus_module_6.map(tsplus_module_6.filter((p) => p.op === 0 /* Discord.GatewayOpcode.DISPATCH */ && p.t === "READY")(tsplus_module_6.some(p)), p => p.d), () => tsplus_module_2.unit(), a => socket.setUrl(a.resume_gateway_url));
22
+ return tsplus_module_2.flatMap(tsplus_module_5.unbounded(), hellos => tsplus_module_2.map(tsplus_module_5.unbounded(), acks => {
23
+ // heartbeats
24
+ const heartbeats = Heartbeats.send(hellos, acks, latestSequence, send);
25
+ // identify
26
+ const identify = Identify.identifyOrResume({
27
+ token: tsplus_module_4.value(token),
28
+ shard,
29
+ intents: gateway.intents,
30
+ presence: gateway.presence,
31
+ }, latestReady, latestSequence);
32
+ const onPayload = (_) => tsplus_module_2.flatMap(tsplus_module_2.zipPar(tsplus_module_2.zipPar(updateLatestReady(_), updateLatestSequence(_)), maybeUpdateUrl(_)), () => {
33
+ let effect = tsplus_module_2.unit();
34
+ if (_.op === 10 /* Discord.GatewayOpcode.HELLO */) {
35
+ effect = tsplus_module_2.zipPar(tsplus_module_2.tap(identify, send), hellos.offer(_));
36
+ }
37
+ else if (_.op === 11 /* Discord.GatewayOpcode.HEARTBEAT_ACK */) {
38
+ effect = acks.offer(_);
39
+ }
40
+ else if (_.op === 9 /* Discord.GatewayOpcode.INVALID_SESSION */) {
41
+ effect = tsplus_module_2.tap(InvalidSession.fromPayload(_, latestReady), send);
42
+ }
43
+ else if (_.op === 0 /* Discord.GatewayOpcode.DISPATCH */) {
44
+ effect = hub.publish(_);
45
+ }
46
+ return tsplus_module_2.map(effect, () => void 0);
47
+ });
48
+ const run = tsplus_module_2.zipParLeft(tsplus_module_2.zipParLeft(tsplus_module_2.forever(tsplus_module_2.flatMap(socket.queue
49
+ .take(), onPayload)), heartbeats), socket.run);
50
+ return {
51
+ run,
52
+ send: (p) => send(p),
53
+ reconnect: send(tsplus_module_1.WS.Reconnect),
54
+ };
55
+ }));
56
+ })));
57
+ });
58
+ return { connect };
43
59
  })));
60
+ export const Shard = tsplus_module_3.Tag();
61
+ export const LiveShard = tsplus_module_9.provide(tsplus_module_2.toLayer(make, Shard))((tsplus_module_9.merge(tsplus_module_8.LiveRateLimiter)(LiveDiscordWS)));
44
62
  //# sourceMappingURL=Shard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Shard.js","sourceRoot":"","sources":["../../src/DiscordGateway/Shard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Shard.js","sourceRoot":"","sources":["../../src/DiscordGateway/Shard.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,11 @@
1
- import { Effect, Discord } from "dfx/_common";
1
+ import { Effect, Discord, Hub } from "dfx/_common";
2
2
  import { ShardStore } from "./ShardStore.js";
3
- declare const make: import("@effect-http/client/_common").Effect<import("../_common.js").Scope | import("../DiscordREST.js").DiscordREST | import("../DiscordConfig.js").DiscordConfig | ShardStore | import("../Log.js").Log | import("../RateLimit.js").RateLimiter | import("./DiscordWS.js").DiscordWSCodec, never, {
4
- shards: import("@effect-http/client/_common").Stream<never, never, {
5
- run: import("@effect-http/client/_common").Effect<never, never, void>;
6
- raw: import("@effect-http/client/_common").Stream<never, never, import("../types.js").GatewayPayload<any>>;
7
- dispatch: import("@effect-http/client/_common").Stream<never, never, import("../types.js").GatewayPayload<any>>;
8
- send: (p: import("../types.js").GatewayPayload<any>) => import("@effect-http/client/_common").Effect<never, never, boolean>;
9
- reconnect: import("@effect-http/client/_common").Effect<never, never, boolean>;
10
- }>;
3
+ import { Shard } from "./Shard.js";
4
+ declare const make: import("@effect-http/client/_common").Effect<import("dfx").DiscordREST | import("../DiscordConfig.js").DiscordConfig | ShardStore | import("dfx").RateLimiter | Shard, never, {
5
+ readonly run: (hub: Hub<Discord.GatewayPayload<Discord.ReceiveEvent>>) => import("@effect-http/client/_common").Effect<never, never, never>;
11
6
  }>;
12
7
  export interface Sharder extends Effect.Success<typeof make> {
13
8
  }
14
9
  export declare const Sharder: import("@effect-http/client/_common").Tag<Sharder>;
15
- export declare const LiveSharder: import("@effect-http/client/_common").Layer<import("../DiscordREST.js").DiscordREST | import("../DiscordConfig.js").DiscordConfig | ShardStore | import("../Log.js").Log | import("../RateLimit.js").RateLimiter | import("./DiscordWS.js").DiscordWSCodec, never, Sharder>;
10
+ export declare const LiveSharder: import("@effect-http/client/_common").Layer<import("dfx").DiscordREST | import("../DiscordConfig.js").DiscordConfig | ShardStore | import("../Log.js").Log | import("./DiscordWS.js").DiscordWSCodec | import("dfx").RateLimitStore, never, Sharder>;
16
11
  export {};
@@ -1,28 +1,27 @@
1
- import * as tsplus_module_1 from "@effect/stream/Stream";
2
- import * as tsplus_module_2 from "dfx/gateway";
3
- import * as tsplus_module_3 from "@effect/io/Effect";
4
- import * as tsplus_module_4 from "@effect/stream/GroupBy";
5
- import * as tsplus_module_5 from "@effect/data/Duration";
6
- import * as tsplus_module_6 from "@fp-ts/core/Option";
7
- import * as tsplus_module_7 from "dfx";
8
- import * as tsplus_module_8 from "dfx/_common";
1
+ import * as tsplus_module_1 from "dfx/_common";
2
+ import * as tsplus_module_2 from "@effect/io/Effect";
3
+ import * as tsplus_module_3 from "@effect/data/Chunk";
4
+ import * as tsplus_module_4 from "@effect/io/Deferred";
5
+ import * as tsplus_module_5 from "@effect/io/Ref";
6
+ import * as tsplus_module_6 from "@effect/data/Duration";
7
+ import * as tsplus_module_7 from "@fp-ts/core/Option";
8
+ import * as tsplus_module_8 from "dfx";
9
9
  import * as tsplus_module_9 from "@effect/io/Layer";
10
10
  import { millis } from "@effect/data/Duration";
11
11
  import { ShardStore } from "./ShardStore.js";
12
- const make = tsplus_module_3.flatMap(tsplus_module_3.service(ShardStore), store => tsplus_module_3.flatMap(tsplus_module_3.service(tsplus_module_7.DiscordREST), rest => tsplus_module_3.flatMap(tsplus_module_3.service(tsplus_module_7.DiscordConfig.DiscordConfig), ({ gateway: config }) => tsplus_module_3.flatMap(tsplus_module_3.service(tsplus_module_7.RateLimiter), limiter => {
13
- const configs = (totalCount) => {
14
- const claimId = (sharderCount) => tsplus_module_3.flatMap(store
12
+ import { LiveShard, Shard } from "./Shard.js";
13
+ import { LiveRateLimiter } from "dfx";
14
+ const make = tsplus_module_2.flatMap(tsplus_module_2.service(ShardStore), store => tsplus_module_2.flatMap(tsplus_module_2.service(tsplus_module_8.DiscordREST), rest => tsplus_module_2.flatMap(tsplus_module_2.service(tsplus_module_8.DiscordConfig.DiscordConfig), ({ gateway: config }) => tsplus_module_2.flatMap(tsplus_module_2.service(tsplus_module_8.RateLimiter), limiter => tsplus_module_2.flatMap(tsplus_module_2.service(Shard), shard => {
15
+ const takeConfig = (totalCount) => tsplus_module_2.map(tsplus_module_5.make(0), currentCount => {
16
+ const claimId = (sharderCount) => tsplus_module_2.flatMap(store
15
17
  .claimId({
16
18
  totalCount,
17
19
  sharderCount,
18
- }), a => tsplus_module_6.match(a, () => tsplus_module_3.delay(claimId(sharderCount), tsplus_module_5.minutes(3)), id => tsplus_module_3.succeed(id)));
19
- return tsplus_module_1.map(tsplus_module_1.unfoldEffect(0, sharderCount => tsplus_module_3.map(claimId(sharderCount), id => tsplus_module_6.some([id, sharderCount + 1]))), id => ({
20
- id,
21
- totalCount,
22
- }));
23
- };
24
- return tsplus_module_3.flatMap(tsplus_module_3.catchAll(tsplus_module_3.flatMap(rest
25
- .getGatewayBot(), r => r.json), () => tsplus_module_3.succeed({
20
+ }), a => tsplus_module_7.match(a, () => tsplus_module_2.delay(claimId(sharderCount), tsplus_module_6.minutes(3)), id => tsplus_module_2.succeed(id)));
21
+ return tsplus_module_2.map(tsplus_module_2.flatMap(tsplus_module_5.getAndUpdate(currentCount, _ => _ + 1), claimId), id => ({ id, totalCount }));
22
+ });
23
+ return tsplus_module_2.map(tsplus_module_2.catchAll(tsplus_module_2.flatMap(rest
24
+ .getGatewayBot(), r => r.json), () => tsplus_module_2.succeed({
26
25
  url: "wss://gateway.discord.gg/",
27
26
  shards: 1,
28
27
  session_start_limit: {
@@ -31,12 +30,19 @@ const make = tsplus_module_3.flatMap(tsplus_module_3.service(ShardStore), store
31
30
  reset_after: 0,
32
31
  max_concurrency: 1,
33
32
  },
34
- })), gateway => tsplus_module_3.map(tsplus_module_1.broadcastDynamic(tsplus_module_1.flatMap(tsplus_module_4.evaluate(tsplus_module_1.groupBy(tsplus_module_1.map(configs(config.shardCount ?? gateway.shards), config => ({
35
- ...config,
36
- url: gateway.url,
37
- concurrency: gateway.session_start_limit.max_concurrency,
38
- })), c => tsplus_module_3.succeed([c.id % c.concurrency, c])), (key, shardConfig) => tsplus_module_1.mapEffect(tsplus_module_1.tap(shardConfig, () => limiter.maybeWait(`dfx.sharder.${key}`, millis(config.identifyRateLimit[0]), config.identifyRateLimit[1])), c => tsplus_module_2.Shard.make([c.id, c.totalCount]))), shard => tsplus_module_1.merge(tsplus_module_1.succeed(shard), tsplus_module_1.drain(tsplus_module_1.fromEffect(shard.run)))), 1), shards => ({ shards })));
39
- }))));
40
- export const Sharder = tsplus_module_8.Tag();
41
- export const LiveSharder = tsplus_module_9.scoped(Sharder, make);
33
+ })), gateway => {
34
+ const run = (hub) => tsplus_module_2.scoped(tsplus_module_2.flatMap(tsplus_module_4.make(), deferred => tsplus_module_2.flatMap(takeConfig(config.shardCount ?? gateway.shards), take => {
35
+ const spawner = tsplus_module_2.forever(tsplus_module_2.flatMap(tsplus_module_2.flatMap(tsplus_module_2.tap(tsplus_module_2.map(take, config => ({
36
+ ...config,
37
+ url: gateway.url,
38
+ concurrency: gateway.session_start_limit.max_concurrency,
39
+ })), ({ id, concurrency }) => limiter.maybeWait(`dfx.sharder.${id % concurrency}`, millis(config.identifyRateLimit[0]), config.identifyRateLimit[1])), c => shard.connect([c.id, c.totalCount], hub)), shard => tsplus_module_2.forkScoped(tsplus_module_2.catchAllCause(shard.run, _ => tsplus_module_4.failCause(deferred, _)))));
40
+ const spawners = tsplus_module_3.range(1, gateway.session_start_limit.max_concurrency).map(() => spawner);
41
+ return tsplus_module_2.zipParLeft(tsplus_module_2.collectAllParDiscard(spawners), tsplus_module_1.deferredAwait(deferred));
42
+ })));
43
+ return { run };
44
+ });
45
+ })))));
46
+ export const Sharder = tsplus_module_1.Tag();
47
+ export const LiveSharder = tsplus_module_9.provide(tsplus_module_9.scoped(Sharder, make))((tsplus_module_9.merge(LiveShard)(LiveRateLimiter)));
42
48
  //# sourceMappingURL=Sharder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Sharder.js","sourceRoot":"","sources":["../../src/DiscordGateway/Sharder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Sharder.js","sourceRoot":"","sources":["../../src/DiscordGateway/Sharder.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /// <reference types="node" resolution-mode="require"/>
2
2
  /// <reference types="ws" />
3
- import { Ref, Effect } from "dfx/_common";
3
+ import { Ref, Enqueue, Effect, Dequeue } from "dfx/_common";
4
4
  import { Log } from "dfx";
5
5
  import WebSocket from "isomorphic-ws";
6
6
  export declare const Reconnect: unique symbol;
@@ -17,4 +17,14 @@ export declare class WebSocketCloseError {
17
17
  readonly _tag = "WebSocketCloseError";
18
18
  constructor(code: number, reason: string);
19
19
  }
20
- export declare const make: (url: Ref<string>, takeOutbound: Effect<never, never, Message>) => import("@effect-http/client/_common").Stream<import("../Log.js").Log, WebSocketError | WebSocketCloseError, WebSocket.Data>;
20
+ declare const make: import("@effect-http/client/_common").Effect<import("../Log.js").Log, never, {
21
+ readonly connect: (url: Ref<string>, takeOutbound: Effect<never, never, Message>) => import("@effect-http/client/_common").Effect<never, never, {
22
+ readonly run: import("@effect-http/client/_common").Effect<never, WebSocketError | WebSocketCloseError, never>;
23
+ readonly queue: import("../_common.js").Dequeue<WebSocket.Data>;
24
+ }>;
25
+ }>;
26
+ export interface WS extends Effect.Success<typeof make> {
27
+ }
28
+ export declare const WS: import("@effect-http/client/_common").Tag<WS>;
29
+ export declare const LiveWS: import("@effect-http/client/_common").Layer<import("../Log.js").Log, never, WS>;
30
+ export {};
@@ -1,8 +1,9 @@
1
1
  import * as tsplus_module_1 from "@effect/io/Effect";
2
2
  import * as tsplus_module_2 from "@effect/io/Ref";
3
- import * as tsplus_module_3 from "@effect/stream/Stream";
4
- import * as tsplus_module_4 from "@effect/io/Schedule";
3
+ import * as tsplus_module_3 from "@effect/io/Schedule";
4
+ import * as tsplus_module_4 from "@effect/io/Queue";
5
5
  import * as tsplus_module_5 from "dfx";
6
+ import * as tsplus_module_6 from "dfx/_common";
6
7
  import WebSocket from "isomorphic-ws";
7
8
  export const Reconnect = Symbol();
8
9
  export class WebSocketError {
@@ -33,17 +34,17 @@ const socket = (urlRef) => tsplus_module_1.acquireRelease(tsplus_module_1.flatMa
33
34
  ws.removeAllListeners?.();
34
35
  ws.close();
35
36
  }));
36
- const recv = (ws) => tsplus_module_3.asyncEffect(emit => tsplus_module_1.sync(() => {
37
+ const offer = (ws, queue) => tsplus_module_1.async(resume => {
37
38
  ws.addEventListener("message", message => {
38
- emit.single(message.data);
39
+ tsplus_module_1.runFork(queue.offer(message.data));
39
40
  });
40
41
  ws.addEventListener("error", cause => {
41
- emit.fail(new WebSocketError(cause));
42
+ resume(tsplus_module_1.fail(new WebSocketError(cause)));
42
43
  });
43
44
  ws.addEventListener("close", e => {
44
- emit.fail(new WebSocketCloseError(e.code, e.reason));
45
+ resume(tsplus_module_1.fail(new WebSocketCloseError(e.code, e.reason)));
45
46
  });
46
- }));
47
+ });
47
48
  const send = (ws, take, log) => tsplus_module_1.forever(tsplus_module_1.tap(tsplus_module_1.tap(take, data => log.debug("WS", "send", data)), (data) => {
48
49
  if (data === Reconnect) {
49
50
  return tsplus_module_1.failSync(() => {
@@ -55,8 +56,13 @@ const send = (ws, take, log) => tsplus_module_1.forever(tsplus_module_1.tap(tspl
55
56
  ws.send(data);
56
57
  });
57
58
  }));
58
- export const make = (url, takeOutbound) => tsplus_module_3.unwrapScoped(tsplus_module_1.flatMap(tsplus_module_1.service(tsplus_module_5.Log.Log), log => tsplus_module_1.map(socket(url), ws => {
59
- const sendEffect = send(ws, takeOutbound, log);
60
- return tsplus_module_3.retry(tsplus_module_3.merge(recv(ws), tsplus_module_3.fromEffect(sendEffect)), tsplus_module_4.recurWhile(e => e._tag === "WebSocketCloseError" && e.code === 1012));
61
- })));
59
+ const make = tsplus_module_1.map(tsplus_module_1.service(tsplus_module_5.Log.Log), log => {
60
+ const connect = (url, takeOutbound) => tsplus_module_1.map(tsplus_module_4.unbounded(), queue => {
61
+ const run = tsplus_module_1.scoped(tsplus_module_1.retry(tsplus_module_1.flatMap(socket(url), ws => tsplus_module_1.zipParLeft(offer(ws, queue), send(ws, takeOutbound, log))), tsplus_module_3.recurWhile(e => e._tag === "WebSocketCloseError" && e.code === 1012)));
62
+ return { run, queue: queue };
63
+ });
64
+ return { connect };
65
+ });
66
+ export const WS = tsplus_module_6.Tag();
67
+ export const LiveWS = tsplus_module_1.toLayer(make, WS);
62
68
  //# sourceMappingURL=WS.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WS.js","sourceRoot":"","sources":["../../src/DiscordGateway/WS.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WS.js","sourceRoot":"","sources":["../../src/DiscordGateway/WS.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,12 @@
1
- import { Stream, Discord, Effect } from "dfx/_common";
1
+ import { Stream, Discord, Hub, Effect } from "dfx/_common";
2
2
  import { Sharder } from "./DiscordGateway/Sharder.js";
3
- export declare const make: import("@effect-http/client/_common").Effect<import("./_common.js").Scope | Sharder, never, {
4
- raw: import("@effect-http/client/_common").Stream<never, never, import("./types.js").GatewayPayload<any>>;
5
- dispatch: import("@effect-http/client/_common").Stream<never, never, import("./types.js").GatewayPayload<any>>;
3
+ export declare const make: import("@effect-http/client/_common").Effect<Sharder, never, {
4
+ run: import("@effect-http/client/_common").Effect<never, never, never>;
5
+ dispatch: import("@effect-http/client/_common").Stream<never, never, import("./types.js").GatewayPayload<import("./types.js").ReceiveEvent>>;
6
6
  fromDispatch: <K extends keyof import("./types.js").ReceiveEvents>(event: K) => import("@effect-http/client/_common").Stream<never, never, import("./types.js").ReceiveEvents[K]>;
7
- handleDispatch: <K_1 extends keyof import("./types.js").ReceiveEvents, R1, E1, A>(event: K_1, handle: (event: import("./types.js").ReceiveEvents[K_1]) => import("@effect-http/client/_common").Effect<R1, E1, A>) => import("@effect-http/client/_common").Effect<R1, E1, void>;
7
+ handleDispatch: <K_1 extends keyof import("./types.js").ReceiveEvents, R, E, A>(event: K_1, handle: (event: import("./types.js").ReceiveEvents[K_1]) => import("@effect-http/client/_common").Effect<R, E, A>) => import("@effect-http/client/_common").Effect<R, E, void>;
8
8
  }>;
9
9
  export interface DiscordGateway extends Effect.Success<typeof make> {
10
10
  }
11
11
  export declare const DiscordGateway: import("@effect-http/client/_common").Tag<DiscordGateway>;
12
- export declare const LiveDiscordGateway: import("@effect-http/client/_common").Layer<Sharder, never, DiscordGateway>;
12
+ export declare const LiveDiscordGateway: import("@effect-http/client/_common").Layer<import("./DiscordREST.js").DiscordREST | import("./DiscordConfig.js").DiscordConfig | import("./DiscordGateway/ShardStore.js").ShardStore | import("./Log.js").Log | import("./DiscordGateway/DiscordWS.js").DiscordWSCodec | import("./RateLimit.js").RateLimitStore, never, DiscordGateway>;
package/DiscordGateway.js CHANGED
@@ -1,20 +1,29 @@
1
1
  import * as tsplus_module_1 from "@effect/stream/Stream";
2
2
  import * as tsplus_module_2 from "@effect/io/Effect";
3
- import * as tsplus_module_3 from "dfx/_common";
4
- import * as tsplus_module_4 from "@effect/io/Layer";
5
- import { Sharder } from "./DiscordGateway/Sharder.js";
3
+ import * as tsplus_module_3 from "dfx/utils/hub";
4
+ import * as tsplus_module_4 from "@effect/io/Hub";
5
+ import * as tsplus_module_5 from "dfx/_common";
6
+ import * as tsplus_module_6 from "@effect/io/Layer";
7
+ import { LiveSharder, Sharder } from "./DiscordGateway/Sharder.js";
6
8
  const fromDispatchFactory = (source) => (event) => tsplus_module_1.map(tsplus_module_1.filter(source, p => p.t === event), p => p.d);
7
- const handleDispatchFactory = (source) => (event, handle) => tsplus_module_1.runDrain(tsplus_module_1.flatMapPar(tsplus_module_1.filter(source, p => p.t === event), a => tsplus_module_1.fromEffect(handle(a.d)), Number.POSITIVE_INFINITY));
8
- export const make = tsplus_module_2.flatMap(tsplus_module_2.service(Sharder), sharder => tsplus_module_2.flatMap(tsplus_module_1.broadcastDynamic(tsplus_module_1.flatMapPar(sharder.shards, s => s.raw, Number.POSITIVE_INFINITY), 8), raw => tsplus_module_2.map(tsplus_module_1.broadcastDynamic(tsplus_module_1.flatMapPar(sharder.shards, s => s.dispatch, Number.POSITIVE_INFINITY), 8), dispatch => {
9
+ const handleDispatchFactory = (hub) => (event, handle) => tsplus_module_3.subscribeForEachPar(hub, _ => {
10
+ if (_.t === event) {
11
+ return handle(_.d);
12
+ }
13
+ return tsplus_module_2.unit();
14
+ });
15
+ export const make = tsplus_module_2.flatMap(tsplus_module_2.service(Sharder), sharder => tsplus_module_2.map(tsplus_module_4.unbounded(), hub => {
16
+ const dispatch = tsplus_module_1.fromHub(hub);
9
17
  const fromDispatch = fromDispatchFactory(dispatch);
10
- const handleDispatch = handleDispatchFactory(dispatch);
18
+ const handleDispatch = handleDispatchFactory(hub);
19
+ const run = sharder.run(hub);
11
20
  return {
12
- raw,
21
+ run,
13
22
  dispatch,
14
23
  fromDispatch,
15
24
  handleDispatch,
16
25
  };
17
- })));
18
- export const DiscordGateway = tsplus_module_3.Tag();
19
- export const LiveDiscordGateway = tsplus_module_4.scoped(DiscordGateway, make);
26
+ }));
27
+ export const DiscordGateway = tsplus_module_5.Tag();
28
+ export const LiveDiscordGateway = tsplus_module_6.provide(tsplus_module_6.scoped(DiscordGateway, make))(LiveSharder);
20
29
  //# sourceMappingURL=DiscordGateway.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DiscordGateway.js","sourceRoot":"","sources":["../src/DiscordGateway.ts"],"names":[],"mappings":";;;;AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AAErD,MAAM,mBAAmB,GACvB,CAAO,MAAkE,EAAE,EAAE,CAC7E,CACE,KAAQ,EACgC,EAAE,CAC1C,oBAAA,uBAAA,MAAM,EAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,EAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAS,CAAC,CAAA;AAE3D,MAAM,qBAAqB,GACzB,CAAO,MAAkE,EAAE,EAAE,CAC7E,CACE,KAAQ,EACR,MAA8D,EAChC,EAAE,0BAChC,2BAAA,uBAAA,MAAM,EACI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,EAEzB,CAAC,CAAC,EAAE,CAAC,2BAAkB,MAAM,CAAC,CAAC,CAAC,CAAQ,CAAC,CAAC,EAC1C,MAAM,CAAC,iBAAiB,CACzB,CAAS,CAAA;AAEhB,MAAM,CAAC,MAAM,IAAI,2BACG,wBAAe,OAAO,CAAC,EAAnC,OAAO,4BAEX,iCAAA,2BAAA,OAAO,CAAC,MAAM,EACA,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,iBAAiB,CAAC,EAC/B,CAAC,CAAC,EAHlB,GAAG,wBAMP,iCAAA,2BAAA,OAAO,CAAC,MAAM,EACA,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,iBAAiB,CAAC,EACpC,CAAC,CAAC,EAHlB,QAAQ;IAKd,MAAM,YAAY,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAA;IAClD,MAAM,cAAc,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAA;IAEtD,OAAO;QACL,GAAG;QACH,QAAQ;QACR,YAAY;QACZ,cAAc;KACf,CAAA;IACD,CAAA;AAGF,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAA,GAAG,EAAkB,CAAA;AACnD,MAAM,CAAC,MAAM,kBAAkB,GAAG,uBAAa,cAAc,EAAE,IAAI,CAAC,CAAA"}
1
+ {"version":3,"file":"DiscordGateway.js","sourceRoot":"","sources":["../src/DiscordGateway.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AAElE,MAAM,mBAAmB,GACvB,CAAO,MAAkE,EAAE,EAAE,CAC7E,CACE,KAAQ,EACgC,EAAE,CAC1C,oBAAA,uBAAA,MAAM,EAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,EAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAS,CAAC,CAAA;AAE3D,MAAM,qBAAqB,GACzB,CAAC,GAAsD,EAAE,EAAE,CAC3D,CACE,KAAQ,EACR,MAA4D,EACxC,EAAE,CACtB,oCAAA,GAAG,EAAqB,CAAC,CAAC,EAAE;IAC1B,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;QACjB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAQ,CAAC,CAAA;KAC1B;IACD,OAAO,sBAAa,CAAA;AACtB,CAAC,CAAC,CAAA;AAEN,MAAM,CAAC,MAAM,IAAI,2BACG,wBAAe,OAAO,CAAC,EAAnC,OAAO,wBACC,2BAA6D,EAArE,GAAG;IAET,MAAM,QAAQ,GAAG,wBAAe,GAAG,CAAC,CAAA;IACpC,MAAM,YAAY,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAA;IAClD,MAAM,cAAc,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAA;IAEjD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAE5B,OAAO;QACL,GAAG;QACH,QAAQ;QACR,YAAY;QACZ,cAAc;KACf,CAAA;GACD,CAAA;AAGF,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAA,GAAG,EAAkB,CAAA;AACnD,MAAM,CAAC,MAAM,kBAAkB,2BACd,uBAAa,cAAc,EAAE,IAAI,CAAC,EAAjD,WAAW,CAAsC,CAAA"}
package/DiscordREST.d.ts CHANGED
@@ -7,7 +7,7 @@ export declare class DiscordRESTError {
7
7
  readonly _tag = "DiscordRESTError";
8
8
  constructor(error: Http.HttpClientError);
9
9
  }
10
- declare const make: import("@effect-http/client/_common").Effect<import("./DiscordConfig.js").DiscordConfig | Http.executor.HttpRequestExecutor | import("./Log.js").Log | import("./RateLimit.js").RateLimitStore | import("./RateLimit.js").RateLimiter, never, {
10
+ declare const make: import("@effect-http/client/_common").Effect<import("./DiscordConfig.js").DiscordConfig | import("./Log.js").Log | import("./RateLimit.js").RateLimitStore | import("./RateLimit.js").RateLimiter | Http.executor.HttpRequestExecutor, never, {
11
11
  addGuildMember: (guildId: string, userId: string, params?: Partial<import("./types.js").AddGuildMemberParams> | undefined, options?: Partial<Http.MakeOptions> | undefined) => RestResponse<import("./types.js").GuildMember>;
12
12
  addGuildMemberRole: (guildId: string, userId: string, roleId: string, options?: Partial<Http.MakeOptions> | undefined) => RestResponse<any>;
13
13
  addThreadMember: (channelId: string, userId: string, options?: Partial<Http.MakeOptions> | undefined) => RestResponse<any>;
@@ -190,5 +190,5 @@ declare const make: import("@effect-http/client/_common").Effect<import("./Disco
190
190
  export interface DiscordREST extends Effect.Success<typeof make> {
191
191
  }
192
192
  export declare const DiscordREST: import("@effect-http/client/_common").Tag<DiscordREST>;
193
- export declare const LiveDiscordREST: import("@effect-http/client/_common").Layer<import("./DiscordConfig.js").DiscordConfig | Http.executor.HttpRequestExecutor | import("./Log.js").Log | import("./RateLimit.js").RateLimitStore | import("./RateLimit.js").RateLimiter, never, DiscordREST>;
193
+ export declare const LiveDiscordREST: import("@effect-http/client/_common").Layer<import("./DiscordConfig.js").DiscordConfig | import("./Log.js").Log | import("./RateLimit.js").RateLimitStore | Http.executor.HttpRequestExecutor, never, DiscordREST>;
194
194
  export {};
package/DiscordREST.js CHANGED
@@ -13,6 +13,7 @@ import * as Http from "@effect-http/client";
13
13
  import { millis } from "@effect/data/Duration";
14
14
  import { rateLimitFromHeaders, retryAfter, routeFromConfig, } from "./DiscordREST/utils.js";
15
15
  import Pkg from "./package.json" assert { type: "json" };
16
+ import { LiveRateLimiter } from "./RateLimit.js";
16
17
  export class DiscordRESTError {
17
18
  error;
18
19
  _tag = "DiscordRESTError";
@@ -113,5 +114,5 @@ const make = tsplus_module_3.flatMap(tsplus_module_3.service(tsplus_module_10.Di
113
114
  });
114
115
  })))));
115
116
  export const DiscordREST = tsplus_module_2.Tag();
116
- export const LiveDiscordREST = tsplus_module_11.effect(DiscordREST, make);
117
+ export const LiveDiscordREST = tsplus_module_11.provide(tsplus_module_11.effect(DiscordREST, make))(LiveRateLimiter);
117
118
  //# sourceMappingURL=DiscordREST.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DiscordREST.js","sourceRoot":"","sources":["../src/DiscordREST.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DiscordREST.js","sourceRoot":"","sources":["../src/DiscordREST.ts"],"names":[],"mappings":"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"}
@@ -18,7 +18,9 @@ export const run = (postHandler, { sync = true } = {}) => (ix) => (() => {
18
18
  : tsplus_module_1.unit();
19
19
  const handle = handlers(ix.definitions);
20
20
  const run = gateway.handleDispatch("INTERACTION_CREATE", i => tsplus_module_1.provideService(tsplus_module_2.pipe(tsplus_module_1.tap(handle[i.type](i), r => rest.createInteractionResponse(i.id, i.token, r)), postHandler), InteractionContext, i));
21
- return tsplus_module_1.map(sync ? tsplus_module_1.zipPar(tsplus_module_1.zipPar(run, globalSync), guildSync) : run, () => void 0);
21
+ return tsplus_module_1.map(sync
22
+ ? tsplus_module_1.zipPar(tsplus_module_1.zipPar(tsplus_module_1.zipPar(run, globalSync), guildSync), gateway.run)
23
+ : run, () => void 0);
22
24
  })));
23
25
  })();
24
26
  //# sourceMappingURL=gateway.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/Interactions/gateway.ts"],"names":[],"mappings":";;;;AAAA,OAAO,KAAK,IAAI,MAAM,qBAAqB,CAAA;AAC3C,OAAO,EAAsB,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAsB,kBAAkB,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAO7C;;GAEG;AACH,MAAM,CAAC,MAAM,GAAG,GACd,CACE,WAMyB,EACzB,EAAE,IAAI,GAAG,IAAI,KAAc,EAAE,EAC7B,EAAE,CACJ,CAAC,EAA4B,EAAE,EAAE;IAE7B,MAAM,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,GACzD,gBAAgB,CAAC,EAAE,CAAC,WAAW,CAAC,CAAA;mCAEhB,wBAAe,gBAAA,OAAO,CAAC,cAAc,CAAC,EAAlD,OAAO,4BACE,wCAAe,WAAW,CAAC,EAApC,IAAI,4BAGR,wBAAA,IAAI,CAAC,mCAAmC,EAAE,EAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAD3D,WAAW;QAIjB,MAAM,UAAU,GAAG,IAAI,CAAC,sCAAsC,CAC5D,WAAW,CAAC,EAAE,EACd,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CACvE,CAAA;QAED,MAAM,SAAS,GAAG,uBAAuB,CAAC,MAAM;YAC9C,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CACzC,IAAI,CAAC,qCAAqC,CACxC,WAAW,CAAC,EAAE,EACd,CAAC,CAAC,EAAE,EACJ,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAQ,CACnD,CACF;YACH,CAAC,CAAC,sBAAa,CAAA;QAEjB,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,WAAW,CAAC,CAAA;QAEvC,MAAM,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,oBAAoB,EAAE,CAAC,CAAC,EAAE,CAC3D,+BAAA,gBAAA,IAAI,CACF,oBAAA,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAK,CAAC,CAAC,EAAE,CACxB,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CACjD,EACD,WAAW,CACZ,EAAgB,kBAAkB,EAAE,CAAC,CAAC,CACxC,CAAA;mCAEC,IAAI,CAAC,CAAC,CAAC,uBAAA,uBAAA,GAAG,EAAQ,UAAU,CAAC,EAAQ,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG;;IACvD,CAAA"}
1
+ {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/Interactions/gateway.ts"],"names":[],"mappings":";;;;AAAA,OAAO,KAAK,IAAI,MAAM,qBAAqB,CAAA;AAC3C,OAAO,EAAsB,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAsB,kBAAkB,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAO7C;;GAEG;AACH,MAAM,CAAC,MAAM,GAAG,GACd,CACE,WAMyB,EACzB,EAAE,IAAI,GAAG,IAAI,KAAc,EAAE,EAC7B,EAAE,CACJ,CAAC,EAA4B,EAAE,EAAE;IAE7B,MAAM,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,GACzD,gBAAgB,CAAC,EAAE,CAAC,WAAW,CAAC,CAAA;mCAEhB,wBAAe,gBAAA,OAAO,CAAC,cAAc,CAAC,EAAlD,OAAO,4BACE,wCAAe,WAAW,CAAC,EAApC,IAAI,4BAGR,wBAAA,IAAI,CAAC,mCAAmC,EAAE,EAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAD3D,WAAW;QAIjB,MAAM,UAAU,GAAG,IAAI,CAAC,sCAAsC,CAC5D,WAAW,CAAC,EAAE,EACd,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CACvE,CAAA;QAED,MAAM,SAAS,GAAG,uBAAuB,CAAC,MAAM;YAC9C,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CACzC,IAAI,CAAC,qCAAqC,CACxC,WAAW,CAAC,EAAE,EACd,CAAC,CAAC,EAAE,EACJ,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAQ,CACnD,CACF;YACH,CAAC,CAAC,sBAAa,CAAA;QAEjB,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,WAAW,CAAC,CAAA;QAEvC,MAAM,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,oBAAoB,EAAE,CAAC,CAAC,EAAE,CAC3D,+BAAA,gBAAA,IAAI,CACF,oBAAA,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAK,CAAC,CAAC,EAAE,CACxB,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CACjD,EACD,WAAW,CACZ,EAAgB,kBAAkB,EAAE,CAAC,CAAC,CACxC,CAAA;mCAGC,IAAI;YACF,CAAC,CAAC,uBAAA,uBAAA,uBAAA,GAAG,EAAQ,UAAU,CAAC,EAAQ,SAAS,CAAC,EAAQ,OAAO,CAAC,GAAG,CAAC;YAC9D,CAAC,CAAC,GAAG;;IAET,CAAA"}
package/README.md CHANGED
@@ -17,11 +17,9 @@ import { Ix } from "dfx"
17
17
  import { runIx, makeFromConfig } from "dfx/gateway"
18
18
 
19
19
  // Create the dependencies layer
20
- const Dependencies = makeFromConfig(
21
- Config.struct({
22
- token: Config.secret("DISCORD_BOT_TOKEN"),
23
- }),
24
- )
20
+ const Dependencies = makeFromConfig({
21
+ token: Config.secret("DISCORD_BOT_TOKEN"),
22
+ })
25
23
 
26
24
  // Create hello command that responds with "Hello!"
27
25
  const hello = Ix.global(
@@ -41,7 +39,7 @@ const hello = Ix.global(
41
39
  pipe(
42
40
  Ix.builder.add(hello),
43
41
  runIx(
44
- Effect.catchAll((e) =>
42
+ Effect.catchAll(e =>
45
43
  Effect.sync(() => {
46
44
  console.error("CAUGHT ERROR", e)
47
45
  }),
package/RateLimit.js CHANGED
@@ -16,7 +16,7 @@ const makeLimiter = tsplus_module_3.flatMap(tsplus_module_3.service(RateLimitSto
16
16
  windowMs,
17
17
  limit,
18
18
  delay: d.millis,
19
- })), tsplus_module_3.sleep));
19
+ })), _ => (_.millis === 0 ? tsplus_module_3.unit() : tsplus_module_3.sleep(_))));
20
20
  };
21
21
  return { maybeWait };
22
22
  }));
package/RateLimit.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"RateLimit.js","sourceRoot":"","sources":["../src/RateLimit.ts"],"names":[],"mappings":";;;;AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,KAAK,MAAM,MAAM,uBAAuB,CAAA;AA+B/C,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAA,GAAG,EAAkB,CAAA;AACnD,MAAM,CAAC,MAAM,wBAAwB,GAAG,qBAAW,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;AAE/E,MAAM,WAAW,2BACC,wBAAe,cAAc,CAAC,EAAxC,KAAK,wBACG,wBAAe,gBAAA,GAAG,CAAC,GAAG,CAAC,EAA/B,GAAG;IAET,MAAM,SAAS,GAAG,CAChB,GAAW,EACX,MAAgB,EAChB,KAAa,EACb,UAAU,GAAG,IAAI,EACjB,EAAE;QACF,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,GAAG,UAAU,CAAA;QAE3C,8BAAO,oBAAA,oBAAA,oBAAA,KAAK;aACT,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,EAClC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,EACzD,CAAC,CAAC,EAAE,CACP,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE;YACpC,GAAG;YACH,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ;YACR,KAAK;YACL,KAAK,EAAE,CAAC,CAAC,MAAM;SAChB,CAAC,CACH,wBACiB,EAAO;IAC7B,CAAC,CAAA;IAED,OAAO,EAAE,SAAS,EAAE,CAAA;GACpB,CAAA;AAGF,MAAM,CAAC,MAAM,WAAW,GAAG,gBAAA,GAAG,EAAe,CAAA;AAC7C,MAAM,CAAC,MAAM,eAAe,GAAG,uBAAa,WAAW,EAAE,WAAW,CAAC,CAAA"}
1
+ {"version":3,"file":"RateLimit.js","sourceRoot":"","sources":["../src/RateLimit.ts"],"names":[],"mappings":";;;;AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,KAAK,MAAM,MAAM,uBAAuB,CAAA;AA+B/C,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAA,GAAG,EAAkB,CAAA;AACnD,MAAM,CAAC,MAAM,wBAAwB,GAAG,qBAAW,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;AAE/E,MAAM,WAAW,2BACC,wBAAe,cAAc,CAAC,EAAxC,KAAK,wBACG,wBAAe,gBAAA,GAAG,CAAC,GAAG,CAAC,EAA/B,GAAG;IAET,MAAM,SAAS,GAAG,CAChB,GAAW,EACX,MAAgB,EAChB,KAAa,EACb,UAAU,GAAG,IAAI,EACjB,EAAE;QACF,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,GAAG,UAAU,CAAA;QAE3C,8BAAO,oBAAA,oBAAA,oBAAA,KAAK;aACT,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,EAClC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,EACzD,CAAC,CAAC,EAAE,CACP,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE;YACpC,GAAG;YACH,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ;YACR,KAAK;YACL,KAAK,EAAE,CAAC,CAAC,MAAM;SAChB,CAAC,CACH,EACI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,sBAAa,CAAC,CAAC,CAAC,sBAAa,CAAC,CAAC,CAAC,CAAC,EAAO;IACxE,CAAC,CAAA;IAED,OAAO,EAAE,SAAS,EAAE,CAAA;GACpB,CAAA;AAGF,MAAM,CAAC,MAAM,WAAW,GAAG,gBAAA,GAAG,EAAe,CAAA;AAC7C,MAAM,CAAC,MAAM,eAAe,GAAG,uBAAa,WAAW,EAAE,WAAW,CAAC,CAAA"}
package/_common.d.ts CHANGED
@@ -1,12 +1,17 @@
1
+ import { Effect } from "dfx/_common";
1
2
  import type { Schedule as _Schedule } from "@effect/io/Schedule";
3
+ import * as Deferred from "@effect/io/Deferred";
2
4
  export type { Cause } from "@effect/io/Cause";
3
5
  export type { Config } from "@effect/io/Config";
4
6
  export type { ConfigSecret } from "@effect/io/Config/Secret";
5
7
  export type { ConfigError } from "@effect/io/Config/Error";
8
+ export type { Deferred } from "@effect/io/Deferred";
6
9
  export type { Effect } from "@effect/io/Effect";
7
10
  export type { Exit } from "@effect/io/Exit";
11
+ export type { RuntimeFiber } from "@effect/io/Fiber";
12
+ export type { Hub } from "@effect/io/Hub";
8
13
  export type { Layer } from "@effect/io/Layer";
9
- export type { Queue } from "@effect/io/Queue";
14
+ export type { Dequeue, Enqueue, Queue } from "@effect/io/Queue";
10
15
  export type { Ref } from "@effect/io/Ref";
11
16
  export type { Scope } from "@effect/io/Scope";
12
17
  export type { Stream } from "@effect/stream/Stream";
@@ -25,3 +30,8 @@ export * as ConfigWrap from "./utils/ConfigWrap.js";
25
30
  * @tsplus companion effect/io/Schedule.Ops
26
31
  */
27
32
  export type Schedule<Env, In, Out> = _Schedule<Env, In, Out>;
33
+ /**
34
+ * @tsplus getter effect/io/Deferred await
35
+ * @tsplus location "dfx/_common"
36
+ */
37
+ export declare const deferredAwait: <E, A>(self: Deferred.Deferred<E, A>) => Effect<never, E, A>;
package/_common.js CHANGED
@@ -1,4 +1,9 @@
1
+ import * as Deferred from "@effect/io/Deferred";
1
2
  export { Tag } from "@effect/data/Context";
2
3
  export * as Discord from "./types.js";
3
4
  export * as ConfigWrap from "./utils/ConfigWrap.js";
5
+ /**
6
+ * @tsplus getter effect/io/Deferred await
7
+ */
8
+ export const deferredAwait = Deferred.await;
4
9
  //# sourceMappingURL=_common.js.map
package/_common.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"_common.js","sourceRoot":"","sources":["../src/_common.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAW,GAAG,EAAE,MAAM,sBAAsB,CAAA;AASnD,OAAO,KAAK,OAAO,MAAM,YAAY,CAAA;AAErC,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAA"}
1
+ {"version":3,"file":"_common.js","sourceRoot":"","sources":["../src/_common.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAA;AAmB/C,OAAO,EAAW,GAAG,EAAE,MAAM,sBAAsB,CAAA;AASnD,OAAO,KAAK,OAAO,MAAM,YAAY,CAAA;AAErC,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAA;AAQnD;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAEC,QAAQ,CAAC,KAAK,CAAA"}
package/gateway.d.ts CHANGED
@@ -1,16 +1,13 @@
1
1
  import { ConfigWrap } from "dfx/_common";
2
2
  import { DiscordConfig, Log } from "dfx";
3
3
  export * as CachePrelude from "./Cache/prelude.js";
4
- export * as DiscordWS from "./DiscordGateway/DiscordWS.js";
5
4
  export * as Gateway from "./DiscordGateway.js";
5
+ export * as DiscordWS from "./DiscordGateway/DiscordWS.js";
6
6
  export * as Shard from "./DiscordGateway/Shard.js";
7
7
  export * as ShardStore from "./DiscordGateway/ShardStore.js";
8
8
  export * as WS from "./DiscordGateway/WS.js";
9
9
  export { run as runIx } from "./Interactions/gateway.js";
10
- export declare const MemoryRateLimit: import("@effect-http/client/_common").Layer<Log.Log, never, import("dfx").RateLimitStore | import("dfx").RateLimiter>;
11
- export declare const MemoryREST: import("@effect-http/client/_common").Layer<DiscordConfig.DiscordConfig | import("@effect-http/client/Request/Executor").HttpRequestExecutor | Log.Log, never, import("dfx").DiscordREST>;
12
- export declare const MemorySharder: import("@effect-http/client/_common").Layer<DiscordConfig.DiscordConfig | import("@effect-http/client/Request/Executor").HttpRequestExecutor | Log.Log, never, import("./DiscordGateway/Sharder.js").Sharder>;
13
- export declare const MemoryGateway: import("@effect-http/client/_common").Layer<DiscordConfig.DiscordConfig | import("@effect-http/client/Request/Executor").HttpRequestExecutor | Log.Log, never, import("./DiscordGateway.js").DiscordGateway>;
14
- export declare const MemoryBot: import("@effect-http/client/_common").Layer<DiscordConfig.DiscordConfig | import("@effect-http/client/Request/Executor").HttpRequestExecutor | Log.Log, never, import("dfx").DiscordREST | import("dfx").RateLimitStore | import("dfx").RateLimiter | import("./DiscordGateway.js").DiscordGateway>;
15
- export declare const makeLiveWithoutFetch: (config: ConfigWrap.Wrap<DiscordConfig.MakeOpts>, debug?: boolean) => import("@effect-http/client/_common").Layer<import("@effect-http/client/Request/Executor").HttpRequestExecutor, import("./_common.js").ConfigError, import("dfx").DiscordREST | DiscordConfig.DiscordConfig | Log.Log | import("dfx").RateLimitStore | import("dfx").RateLimiter | import("./DiscordGateway.js").DiscordGateway>;
16
- export declare const makeLive: (config: ConfigWrap.Wrap<DiscordConfig.MakeOpts>, debug?: boolean) => import("@effect-http/client/_common").Layer<never, import("./_common.js").ConfigError, import("dfx").DiscordREST | DiscordConfig.DiscordConfig | Log.Log | import("dfx").RateLimitStore | import("dfx").RateLimiter | import("./DiscordGateway.js").DiscordGateway>;
10
+ export declare const MemoryRateLimit: import("@effect-http/client/_common").Layer<Log.Log, never, import("dfx").RateLimiter>;
11
+ export declare const MemoryBot: import("@effect-http/client/_common").Layer<DiscordConfig.DiscordConfig | Log.Log | import("@effect-http/client/Request/Executor").HttpRequestExecutor, never, import("dfx").DiscordREST | import("dfx").RateLimiter | import("./DiscordGateway.js").DiscordGateway>;
12
+ export declare const makeLiveWithoutFetch: (config: ConfigWrap.Wrap<DiscordConfig.MakeOpts>, debug?: boolean) => import("@effect-http/client/_common").Layer<import("@effect-http/client/Request/Executor").HttpRequestExecutor, import("./_common.js").ConfigError, import("dfx").DiscordREST | DiscordConfig.DiscordConfig | Log.Log | import("dfx").RateLimiter | import("./DiscordGateway.js").DiscordGateway>;
13
+ export declare const makeLive: (config: ConfigWrap.Wrap<DiscordConfig.MakeOpts>, debug?: boolean) => import("@effect-http/client/_common").Layer<never, import("./_common.js").ConfigError, import("dfx").DiscordREST | DiscordConfig.DiscordConfig | Log.Log | import("dfx").RateLimiter | import("./DiscordGateway.js").DiscordGateway>;
package/gateway.js CHANGED
@@ -1,24 +1,20 @@
1
1
  import * as tsplus_module_1 from "@effect/io/Layer";
2
2
  import * as tsplus_module_2 from "dfx/_common";
3
+ import { LiveFetchRequestExecutor } from "@effect-http/client";
3
4
  import { DiscordConfig, LiveDiscordREST, Log } from "dfx";
4
- import { LiveJsonDiscordWSCodec } from "./DiscordGateway/DiscordWS.js";
5
5
  import { LiveDiscordGateway } from "./DiscordGateway.js";
6
- import { LiveSharder } from "./DiscordGateway/Sharder.js";
6
+ import { LiveJsonDiscordWSCodec } from "./DiscordGateway/DiscordWS.js";
7
7
  import { LiveMemoryShardStore } from "./DiscordGateway/ShardStore.js";
8
8
  import { LiveMemoryRateLimitStore, LiveRateLimiter } from "./RateLimit.js";
9
- import { LiveFetchRequestExecutor } from "@effect-http/client";
10
9
  export * as CachePrelude from "./Cache/prelude.js";
11
- export * as DiscordWS from "./DiscordGateway/DiscordWS.js";
12
10
  export * as Gateway from "./DiscordGateway.js";
11
+ export * as DiscordWS from "./DiscordGateway/DiscordWS.js";
13
12
  export * as Shard from "./DiscordGateway/Shard.js";
14
13
  export * as ShardStore from "./DiscordGateway/ShardStore.js";
15
14
  export * as WS from "./DiscordGateway/WS.js";
16
15
  export { run as runIx } from "./Interactions/gateway.js";
17
- export const MemoryRateLimit = tsplus_module_1.provideMerge(LiveRateLimiter)(LiveMemoryRateLimitStore);
18
- export const MemoryREST = tsplus_module_1.provide(LiveDiscordREST)(MemoryRateLimit);
19
- export const MemorySharder = tsplus_module_1.provide(LiveSharder)((tsplus_module_1.merge(LiveJsonDiscordWSCodec)(tsplus_module_1.merge(MemoryRateLimit)(tsplus_module_1.merge(LiveMemoryShardStore)(MemoryREST)))));
20
- export const MemoryGateway = tsplus_module_1.provide(LiveDiscordGateway)(MemorySharder);
21
- export const MemoryBot = tsplus_module_1.provideMerge(tsplus_module_1.merge(MemoryRateLimit)(MemoryGateway))(MemoryREST);
16
+ export const MemoryRateLimit = tsplus_module_1.provide(LiveRateLimiter)(LiveMemoryRateLimitStore);
17
+ export const MemoryBot = tsplus_module_1.provide((tsplus_module_1.merge(MemoryRateLimit)((tsplus_module_1.provideMerge(LiveDiscordGateway)(LiveDiscordREST)))))((tsplus_module_1.merge(LiveJsonDiscordWSCodec)(tsplus_module_1.merge(LiveMemoryRateLimitStore)(LiveMemoryShardStore))));
22
18
  export const makeLiveWithoutFetch = (config, debug = false) => {
23
19
  const LiveLog = debug ? Log.LiveLogDebug : Log.LiveLog;
24
20
  const LiveConfig = DiscordConfig.makeFromConfig(tsplus_module_2.ConfigWrap.unwrap(config));
package/gateway.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AACrE,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAE9D,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAC1D,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAA;AAC9C,OAAO,KAAK,KAAK,MAAM,2BAA2B,CAAA;AAClD,OAAO,KAAK,UAAU,MAAM,gCAAgC,CAAA;AAC5D,OAAO,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAC5C,OAAO,EAAE,GAAG,IAAI,KAAK,EAAE,MAAM,2BAA2B,CAAA;AAExD,MAAM,CAAC,MAAM,eAAe,gCAA8B,eAAe,EAA1C,wBAAwB,CAAkB,CAAA;AAEzE,MAAM,CAAC,MAAM,UAAU,2BAAsB,eAAe,EAAlC,eAAe,CAAmB,CAAA;AAE5D,MAAM,CAAC,MAAM,aAAa,2BAKxB,WAAW,EAJX,uBAGE,sBAAsB,wBADtB,eAAe,wBADf,oBAAoB,EADrB,UAAU,IAGc,CACd,CAAA;AAEb,MAAM,CAAC,MAAM,aAAa,2BAAoB,kBAAkB,EAAnC,aAAa,CAAsB,CAAA;AAEhE,MAAM,CAAC,MAAM,SAAS,sDAAgC,eAAe,EAA/B,aAAa,GAA1B,UAAU,CAAkC,CAAA;AAErE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,MAA+C,EAC/C,KAAK,GAAG,KAAK,EACb,EAAE;IACF,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAA;IACtD,MAAM,UAAU,GAAG,aAAa,CAAC,cAAc,CAAC,gBAAA,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;IAC1E,MAAM,OAAO,gCAA0B,SAAS,wBAAtB,UAAU,EAApB,OAAO,EAAyB,CAAA;IAEhD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,MAA+C,EAC/C,KAAK,GAAG,KAAK,EACb,EAAE;IACF,+BAAmC,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,EAA/D,wBAAwB,EAAuC;AACxE,CAAC,CAAA"}
1
+ {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AACrE,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAE1E,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAA;AAC9C,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAC1D,OAAO,KAAK,KAAK,MAAM,2BAA2B,CAAA;AAClD,OAAO,KAAK,UAAU,MAAM,gCAAgC,CAAA;AAC5D,OAAO,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAC5C,OAAO,EAAE,GAAG,IAAI,KAAK,EAAE,MAAM,2BAA2B,CAAA;AAExD,MAAM,CAAC,MAAM,eAAe,2BAA+B,eAAe,EAA3C,wBAAwB,CAAmB,CAAA;AAE1E,MAAM,CAAC,MAAM,SAAS,2BAEpB,uBAA0C,eAAe,EAAxD,8BAAmB,kBAAkB,EAApC,eAAe,EAAsB,EAAmB,EAD1D,uBAAmD,sBAAsB,wBAAjD,wBAAwB,EAA/C,oBAAoB,GAAqD,CAChB,CAAA;AAE5D,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,MAA+C,EAC/C,KAAK,GAAG,KAAK,EACb,EAAE;IACF,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAA;IACtD,MAAM,UAAU,GAAG,aAAa,CAAC,cAAc,CAAC,gBAAA,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;IAC1E,MAAM,OAAO,gCAA0B,SAAS,wBAAtB,UAAU,EAApB,OAAO,EAAyB,CAAA;IAEhD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,MAA+C,EAC/C,KAAK,GAAG,KAAK,EACb,EAAE;IACF,+BAAmC,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,EAA/D,wBAAwB,EAAuC;AACxE,CAAC,CAAA"}
package/global.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @tsplus global
3
3
  */
4
- import type { Cause, Config, ConfigSecret, ConfigError, Effect, Exit, Layer, Queue, Schedule, Scope, Stream, Chunk, Context, Duration, Equal, Either, HashMap, Maybe, Ref, HashSet, } from "dfx/_common";
4
+ import type { Cause, Config, ConfigSecret, ConfigError, Deferred, Effect, Exit, Hub, Layer, RuntimeFiber, Dequeue, Enqueue, Queue, Schedule, Scope, Stream, Chunk, Context, Duration, Equal, Either, HashMap, Maybe, Ref, HashSet, } from "dfx/_common";
5
5
  /**
6
6
  * @tsplus global
7
7
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dfx",
3
- "version": "0.24.0",
3
+ "version": "0.24.2",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public",
@@ -52,5 +52,5 @@
52
52
  "ws": "^8.12.1"
53
53
  },
54
54
  "sideEffects": false,
55
- "gitHead": "a99a038bd4b665ea0478d3f290371d454315733d"
55
+ "gitHead": "3948872d2a30f28847c0132151cd9b8d643c5e63"
56
56
  }
package/utils/hub.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ import { Hub, Effect, Dequeue, Maybe, RuntimeFiber } from "dfx/_common";
2
+ /**
3
+ * @tsplus fluent effect/io/Hub subscribeForEachPar
4
+ * @tsplus location "dfx/utils/hub"
5
+ */
6
+ export declare const subscribeForEachPar: <R, E, A, X>(self: import("../_common.js").Hub<A>, effect: (_: A) => import("@effect-http/client/_common").Effect<R, E, X>) => import("@effect-http/client/_common").Effect<Exclude<R, import("../_common.js").Scope>, E, never>;
7
+ /**
8
+ * @tsplus fluent effect/io/Queue/Dequeue transform
9
+ * @tsplus location "dfx/utils/hub"
10
+ */
11
+ export declare const transform: <A, B>(self: import("../_common.js").Dequeue<A>, f: (_: A) => B) => import("@effect-http/client/_common").Effect<never, never, readonly [import("../_common.js").Queue<B>, import("@effect-http/client/_common").Effect<never, never, never>]>;
12
+ /**
13
+ * @tsplus fluent effect/io/Effect foreverSwitch
14
+ * @tsplus location "dfx/utils/hub"
15
+ */
16
+ export declare const foreverSwitch: <R, E, A, R1, E1, X>(self: import("@effect-http/client/_common").Effect<R, E, A>, f: (_: A) => import("@effect-http/client/_common").Effect<R1, E1, X>) => import("@effect-http/client/_common").Effect<R | R1, E | E1, never>;
package/utils/hub.js ADDED
@@ -0,0 +1,31 @@
1
+ import * as tsplus_module_1 from "dfx/_common";
2
+ import * as tsplus_module_2 from "@effect/io/Effect";
3
+ import * as tsplus_module_3 from "@effect/io/Deferred";
4
+ import * as tsplus_module_4 from "@effect/io/Queue";
5
+ import * as tsplus_module_5 from "@effect/io/Fiber";
6
+ import * as tsplus_module_6 from "@fp-ts/core/Option";
7
+ import * as tsplus_module_7 from "@effect/io/Ref";
8
+ /**
9
+ * @tsplus fluent effect/io/Hub subscribeForEachPar
10
+ */
11
+ export const subscribeForEachPar = (self, effect) => tsplus_module_2.flatMap(tsplus_module_3.make(), deferred => {
12
+ const run = tsplus_module_2.scoped(tsplus_module_2.flatMap(self
13
+ .subscribe(), queue => tsplus_module_2.forever(tsplus_module_2.flatMap(queue
14
+ .take(), _ => tsplus_module_2.fork(tsplus_module_2.catchAllCause(effect(_), _ => tsplus_module_3.failCause(deferred, _)))))));
15
+ return tsplus_module_2.zipParLeft(run, tsplus_module_1.deferredAwait(deferred));
16
+ });
17
+ /**
18
+ * @tsplus fluent effect/io/Queue/Dequeue transform
19
+ */
20
+ export const transform = (self, f) => tsplus_module_2.map(tsplus_module_4.unbounded(), queue => {
21
+ const run = tsplus_module_2.forever(tsplus_module_2.flatMap(self.take(), _ => queue.offer(f(_))));
22
+ return [queue, run];
23
+ });
24
+ /**
25
+ * @tsplus fluent effect/io/Effect foreverSwitch
26
+ */
27
+ export const foreverSwitch = (self, f) => tsplus_module_2.scoped(tsplus_module_2.flatMap(tsplus_module_3.make(), causeDeferred => tsplus_module_2.flatMap(tsplus_module_7.make(tsplus_module_6.none()), fiberRef => {
28
+ const run = tsplus_module_2.forever(tsplus_module_2.tap(tsplus_module_2.flatMap(tsplus_module_2.flatMap(self, _ => tsplus_module_2.forkScoped(tsplus_module_2.tapErrorCause(f(_), _ => tsplus_module_3.failCause(causeDeferred, _)))), fiber => tsplus_module_7.getAndSet(fiberRef, tsplus_module_6.some(fiber))), _ => tsplus_module_6.match(_, () => tsplus_module_2.unit(), fiber => tsplus_module_5.interrupt(fiber))));
29
+ return tsplus_module_2.zipParLeft(run, tsplus_module_1.deferredAwait(causeDeferred));
30
+ })));
31
+ //# sourceMappingURL=hub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hub.js","sourceRoot":"","sources":["../../src/utils/hub.ts"],"names":[],"mappings":";;;;;;;AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,IAAY,EACZ,MAAiC,EACjC,EAAE,yBAEmB,sBAAyB,EAAtC,QAAQ;IAEd,MAAM,GAAG,0BAAG,wBAAA,IAAI;SACb,SAAS,EAAE,EAEV,KAAK,CAAC,EAAE,yBACN,wBAAA,KAAK;SACF,IAAI,EAAE,EAEL,CAAC,CAAC,EAAE,sBAAC,8BAAA,MAAM,CAAC,CAAC,CAAC,EAAe,CAAC,CAAC,EAAE,CAAC,0BAAA,QAAQ,EAAW,CAAC,CAAC,CAAC,CAAK,CAC9D,CAAQ,CACd,CAAO,CAAA;WAED,2BAAA,GAAG,gCAAY,QAAQ,EAAO;EACvC,CAAA;AAEJ;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAO,IAAgB,EAAE,CAAc,EAAE,EAAE,qBAEhD,2BAAoB,EAA9B,KAAK;IAEX,MAAM,GAAG,2BAAG,wBAAA,IAAI,CAAC,IAAI,EAAE,EAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAQ,CAAA;IAE/D,OAAO,CAAC,KAAK,EAAE,GAAG,CAAU,CAAA;EAC5B,CAAA;AAEJ;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,IAAqB,EACrB,CAA8B,EACC,EAAE,gDAEP,sBAA0B,EAA5C,aAAa,4BACA,qBAAqC,sBAAY,CAAC,EAA/D,QAAQ;IAEd,MAAM,GAAG,2BAAG,oBAAA,wBAAA,wBAAA,IAAI,EAEZ,CAAC,CAAC,EAAE,4BAAC,8BAAA,CAAC,CAAC,CAAC,CAAC,EAAe,CAAC,CAAC,EAAE,CAAC,0BAAA,aAAa,EAAW,CAAC,CAAC,CAAC,CAAW,CACpE,EACQ,KAAK,CAAC,EAAE,CAAC,0BAAA,QAAQ,EAAW,qBAAW,KAAK,CAAC,CAAC,CAAC,EACnD,CAAC,CAAC,EAAE,CACP,sBAAA,CAAC,EACC,GAAG,EAAE,CAAC,sBAAa,EACnB,KAAK,CAAC,EAAE,2BAAC,KAAK,CAAU,CACzB,CACF,CAAQ,CAAA;WAEF,2BAAA,GAAG,gCAAY,aAAa,EAAO;IACrC,CAAA"}
package/webhooks.d.ts CHANGED
@@ -2,7 +2,7 @@ import { ConfigWrap } from "dfx/_common";
2
2
  import { DiscordConfig } from "dfx";
3
3
  import { MakeConfigOpts } from "./Interactions/webhook.js";
4
4
  export { BadWebhookSignature, makeConfigLayer, makeHandler, makeSimpleHandler, WebhookConfig, WebhookParseError, } from "./Interactions/webhook.js";
5
- export declare const MemoryRateLimit: import("@effect-http/client/_common").Layer<import("./Log.js").Log, never, import("./RateLimit.js").RateLimitStore | import("./RateLimit.js").RateLimiter>;
6
- export declare const MemoryREST: import("@effect-http/client/_common").Layer<import("./DiscordConfig.js").DiscordConfig | import("@effect-http/client/Request/Executor").HttpRequestExecutor | import("./Log.js").Log, never, import("./DiscordREST.js").DiscordREST>;
7
- export declare const makeLiveWithoutFetch: (options: ConfigWrap.Wrap<DiscordConfig.MakeOpts & MakeConfigOpts>, debug?: boolean) => import("@effect-http/client/_common").Layer<import("@effect-http/client/Request/Executor").HttpRequestExecutor, import("./_common.js").ConfigError, import("./DiscordREST.js").DiscordREST | import("./RateLimit.js").RateLimitStore | import("./RateLimit.js").RateLimiter | import("./Interactions/webhook.js").WebhookConfig>;
8
- export declare const makeLive: (config: ConfigWrap.Wrap<DiscordConfig.MakeOpts & MakeConfigOpts>, debug?: boolean) => import("@effect-http/client/_common").Layer<never, import("./_common.js").ConfigError, import("./DiscordREST.js").DiscordREST | import("./RateLimit.js").RateLimitStore | import("./RateLimit.js").RateLimiter | import("./Interactions/webhook.js").WebhookConfig>;
5
+ export declare const MemoryRateLimit: import("@effect-http/client/_common").Layer<import("./Log.js").Log, never, import("./RateLimit.js").RateLimiter>;
6
+ export declare const MemoryREST: import("@effect-http/client/_common").Layer<import("./DiscordConfig.js").DiscordConfig | import("./Log.js").Log | import("@effect-http/client/Request/Executor").HttpRequestExecutor, never, import("./DiscordREST.js").DiscordREST>;
7
+ export declare const makeLiveWithoutFetch: (options: ConfigWrap.Wrap<DiscordConfig.MakeOpts & MakeConfigOpts>, debug?: boolean) => import("@effect-http/client/_common").Layer<import("@effect-http/client/Request/Executor").HttpRequestExecutor, import("./_common.js").ConfigError, import("./DiscordREST.js").DiscordREST | import("./RateLimit.js").RateLimiter | import("./Interactions/webhook.js").WebhookConfig>;
8
+ export declare const makeLive: (config: ConfigWrap.Wrap<DiscordConfig.MakeOpts & MakeConfigOpts>, debug?: boolean) => import("@effect-http/client/_common").Layer<never, import("./_common.js").ConfigError, import("./DiscordREST.js").DiscordREST | import("./RateLimit.js").RateLimiter | import("./Interactions/webhook.js").WebhookConfig>;
package/webhooks.js CHANGED
@@ -6,8 +6,8 @@ import { LiveDiscordREST } from "./DiscordREST.js";
6
6
  import { makeFromConfig } from "./Interactions/webhook.js";
7
7
  import { LiveMemoryRateLimitStore, LiveRateLimiter } from "./RateLimit.js";
8
8
  export { BadWebhookSignature, makeConfigLayer, makeHandler, makeSimpleHandler, WebhookConfig, WebhookParseError, } from "./Interactions/webhook.js";
9
- export const MemoryRateLimit = tsplus_module_1.provideMerge(LiveRateLimiter)(LiveMemoryRateLimitStore);
10
- export const MemoryREST = tsplus_module_1.provide(LiveDiscordREST)(MemoryRateLimit);
9
+ export const MemoryRateLimit = tsplus_module_1.provide(LiveRateLimiter)(LiveMemoryRateLimitStore);
10
+ export const MemoryREST = tsplus_module_1.provide(LiveDiscordREST)(LiveMemoryRateLimitStore);
11
11
  export const makeLiveWithoutFetch = (options, debug = false) => {
12
12
  const config = tsplus_module_2.ConfigWrap.unwrap(options);
13
13
  const LiveWebhook = makeFromConfig(config);
package/webhooks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":";;;AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAkB,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1E,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAE1E,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,iBAAiB,GAClB,MAAM,2BAA2B,CAAA;AAElC,MAAM,CAAC,MAAM,eAAe,gCAA8B,eAAe,EAA1C,wBAAwB,CAAkB,CAAA;AAEzE,MAAM,CAAC,MAAM,UAAU,2BAAsB,eAAe,EAAlC,eAAe,CAAmB,CAAA;AAE5D,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,OAAiE,EACjE,KAAK,GAAG,KAAK,EACb,EAAE;IACF,MAAM,MAAM,GAAG,gBAAA,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAEzC,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAAA;IAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,gBAAA,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAA,GAAG,CAAC,OAAO,CAAA;IACtD,MAAM,UAAU,GAAG,gBAAA,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;IACvD,MAAM,OAAO,2BACe,uBAA4B,eAAe,wBAA7B,WAAW,EAAxB,UAAU,GAAiC,EAAtE,uBAAW,UAAU,EAApB,OAAO,EAAc,CAAgD,CAAA;IAExE,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,MAAgE,EAChE,KAAK,GAAG,KAAK,EACb,EAAE;IACF,+BAAmC,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,EAA/D,wBAAwB,EAAuC;AACxE,CAAC,CAAA"}
1
+ {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":";;;AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAkB,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC1E,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAE1E,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,iBAAiB,GAClB,MAAM,2BAA2B,CAAA;AAElC,MAAM,CAAC,MAAM,eAAe,2BAA+B,eAAe,EAA3C,wBAAwB,CAAmB,CAAA;AAE1E,MAAM,CAAC,MAAM,UAAU,2BAA+B,eAAe,EAA3C,wBAAwB,CAAmB,CAAA;AAErE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,OAAiE,EACjE,KAAK,GAAG,KAAK,EACb,EAAE;IACF,MAAM,MAAM,GAAG,gBAAA,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAEzC,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAAA;IAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,gBAAA,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAA,GAAG,CAAC,OAAO,CAAA;IACtD,MAAM,UAAU,GAAG,gBAAA,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;IACvD,MAAM,OAAO,2BACe,uBAA4B,eAAe,wBAA7B,WAAW,EAAxB,UAAU,GAAiC,EAAtE,uBAAW,UAAU,EAApB,OAAO,EAAc,CAAgD,CAAA;IAExE,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,MAAgE,EAChE,KAAK,GAAG,KAAK,EACb,EAAE;IACF,+BAAmC,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,EAA/D,wBAAwB,EAAuC;AACxE,CAAC,CAAA"}