dfx 0.0.5 → 0.1.0

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 (108) hide show
  1. package/DiscordConfig/index.d.ts +29 -0
  2. package/DiscordConfig/index.js +31 -0
  3. package/DiscordConfig/index.js.map +1 -0
  4. package/DiscordConfig/index.ts +45 -0
  5. package/DiscordGateway/index.d.ts +23 -0
  6. package/DiscordGateway/index.js +25 -0
  7. package/DiscordGateway/index.js.map +1 -0
  8. package/DiscordGateway/index.ts +34 -0
  9. package/DiscordGateway/utils.d.ts +3 -0
  10. package/DiscordGateway/utils.js +12 -0
  11. package/DiscordGateway/utils.js.map +1 -0
  12. package/DiscordGateway/utils.ts +17 -0
  13. package/DiscordREST/http.d.ts +3 -0
  14. package/DiscordREST/http.js +20 -0
  15. package/DiscordREST/http.js.map +1 -0
  16. package/DiscordREST/http.ts +21 -0
  17. package/DiscordREST/index.d.ts +11 -0
  18. package/DiscordREST/index.js +65 -0
  19. package/DiscordREST/index.js.map +1 -0
  20. package/DiscordREST/index.ts +83 -0
  21. package/DiscordREST/types.d.ts +5 -0
  22. package/DiscordREST/types.ts +9 -1
  23. package/DiscordShard/heartbeats.d.ts +2 -3
  24. package/DiscordShard/heartbeats.js +9 -13
  25. package/DiscordShard/heartbeats.js.map +1 -1
  26. package/DiscordShard/heartbeats.ts +23 -28
  27. package/DiscordShard/identify.d.ts +2 -3
  28. package/DiscordShard/identify.js +5 -5
  29. package/DiscordShard/identify.js.map +1 -1
  30. package/DiscordShard/identify.ts +11 -12
  31. package/DiscordShard/index.d.ts +14 -14
  32. package/DiscordShard/index.js +24 -21
  33. package/DiscordShard/index.js.map +1 -1
  34. package/DiscordShard/index.ts +45 -33
  35. package/DiscordShard/invalidSession.d.ts +2 -3
  36. package/DiscordShard/invalidSession.js +4 -4
  37. package/DiscordShard/invalidSession.js.map +1 -1
  38. package/DiscordShard/invalidSession.ts +7 -8
  39. package/DiscordShard/utils.d.ts +4 -6
  40. package/DiscordShard/utils.js +5 -12
  41. package/DiscordShard/utils.js.map +1 -1
  42. package/DiscordShard/utils.ts +22 -37
  43. package/DiscordWS/index.d.ts +10 -9
  44. package/DiscordWS/index.js +10 -8
  45. package/DiscordWS/index.js.map +1 -1
  46. package/DiscordWS/index.ts +25 -28
  47. package/Log/index.d.ts +7 -4
  48. package/Log/index.js +16 -7
  49. package/Log/index.js.map +1 -1
  50. package/Log/index.ts +21 -11
  51. package/Utils/memoize.d.ts +3 -0
  52. package/Utils/memoize.js +16 -0
  53. package/Utils/memoize.js.map +1 -0
  54. package/Utils/memoize.ts +15 -0
  55. package/WS/index.d.ts +8 -10
  56. package/WS/index.js +16 -16
  57. package/WS/index.js.map +1 -1
  58. package/WS/index.ts +33 -34
  59. package/bot.js +15 -20
  60. package/bot.js.map +1 -1
  61. package/bot.ts +35 -36
  62. package/esm/DiscordConfig/index.js +26 -0
  63. package/esm/DiscordConfig/index.js.map +1 -0
  64. package/esm/DiscordGateway/index.js +20 -0
  65. package/esm/DiscordGateway/index.js.map +1 -0
  66. package/esm/DiscordGateway/utils.js +7 -0
  67. package/esm/DiscordGateway/utils.js.map +1 -0
  68. package/esm/DiscordREST/http.js +15 -0
  69. package/esm/DiscordREST/http.js.map +1 -0
  70. package/esm/DiscordREST/index.js +61 -0
  71. package/esm/DiscordREST/index.js.map +1 -0
  72. package/esm/DiscordREST/types.js +3 -0
  73. package/esm/DiscordREST/types.js.map +1 -0
  74. package/esm/DiscordShard/commands.js +28 -0
  75. package/esm/DiscordShard/commands.js.map +1 -0
  76. package/esm/DiscordShard/heartbeats.js +24 -0
  77. package/esm/DiscordShard/heartbeats.js.map +1 -0
  78. package/esm/DiscordShard/identify.js +30 -0
  79. package/esm/DiscordShard/identify.js.map +1 -0
  80. package/esm/DiscordShard/index.js +58 -0
  81. package/esm/DiscordShard/index.js.map +1 -0
  82. package/esm/DiscordShard/invalidSession.js +12 -0
  83. package/esm/DiscordShard/invalidSession.js.map +1 -0
  84. package/esm/DiscordShard/utils.js +11 -0
  85. package/esm/DiscordShard/utils.js.map +1 -0
  86. package/esm/DiscordWS/index.js +34 -0
  87. package/esm/DiscordWS/index.js.map +1 -0
  88. package/esm/Log/index.js +22 -0
  89. package/esm/Log/index.js.map +1 -0
  90. package/esm/Utils/memoize.js +12 -0
  91. package/esm/Utils/memoize.js.map +1 -0
  92. package/esm/WS/index.js +65 -0
  93. package/esm/WS/index.js.map +1 -0
  94. package/esm/bot.js +25 -0
  95. package/esm/bot.js.map +1 -0
  96. package/esm/mod.js +16 -0
  97. package/esm/mod.js.map +1 -0
  98. package/esm/types.js +1559 -0
  99. package/esm/types.js.map +1 -0
  100. package/mod.d.ts +5 -1
  101. package/mod.js +15 -2
  102. package/mod.js.map +1 -1
  103. package/mod.ts +14 -3
  104. package/package.json +25 -10
  105. package/types.d.ts +19 -5
  106. package/types.js +2 -1
  107. package/types.js.map +1 -1
  108. package/types.ts +170 -149
@@ -1,47 +1,32 @@
1
1
  import * as T from "@effect-ts/core/Effect"
2
- import * as S from "@effect-ts/core/Effect/Experimental/Stream"
3
- import * as H from "@effect-ts/core/Effect/Hub"
4
2
  import * as R from "@effect-ts/core/Effect/Ref"
5
3
  import { flow, pipe } from "@effect-ts/core/Function"
6
4
  import * as O from "@effect-ts/core/Option"
7
- import {
8
- GatewayEvent,
9
- GatewayEvents,
10
- GatewayOpcode,
11
- GatewayPayload,
12
- } from "../types"
5
+ import * as CB from "callbag-effect-ts"
6
+ import { GatewayOpcode, GatewayPayload } from "../types"
13
7
 
14
8
  export const opCode =
15
- (hub: H.Hub<GatewayPayload>) =>
16
- <T = any>(code: GatewayOpcode): S.UIO<GatewayPayload<T>> =>
9
+ <R, E>(source: CB.EffectSource<R, E, GatewayPayload>) =>
10
+ <T = any>(code: GatewayOpcode) =>
17
11
  pipe(
18
- S.fromHub_(hub),
19
- S.filter((p) => p.op === code)
12
+ source,
13
+ CB.filter((p): p is GatewayPayload<T> => p.op === code),
20
14
  )
21
15
 
22
- export const latest = <T>(f: (p: GatewayPayload) => O.Option<T>) =>
23
- T.gen(function* (_) {
24
- const ref = yield* _(R.makeRef<O.Option<T>>(O.none))
25
-
26
- return [
27
- ref,
28
- S.tap(
29
- flow(
30
- f,
31
- O.fold(
32
- () => T.unit,
33
- (a) => R.set_(ref, O.some(a))
34
- )
35
- )
36
- ),
37
- ] as const
38
- })
16
+ const maybeUpdateRef = <T>(
17
+ f: (p: GatewayPayload) => O.Option<T>,
18
+ ref: R.Ref<O.Option<T>>,
19
+ ) =>
20
+ flow(
21
+ f,
22
+ O.fold(
23
+ () => T.unit,
24
+ (a) => R.set_(ref, O.some(a)),
25
+ ),
26
+ )
39
27
 
40
- export const fromDispatch =
41
- (hub: H.Hub<GatewayPayload<GatewayEvent>>) =>
42
- <K extends keyof GatewayEvents>(event: K) =>
43
- pipe(
44
- S.fromHub_(hub),
45
- S.filter((p): p is GatewayPayload<GatewayEvents[K]> => p.t === event),
46
- S.map((p) => p.d as GatewayEvents[K])
47
- )
28
+ export const latest = <T>(f: (p: GatewayPayload) => O.Option<T>) =>
29
+ pipe(
30
+ R.makeRef<O.Option<T>>(O.none),
31
+ T.map((ref) => [ref, CB.tap(maybeUpdateRef(f, ref))] as const),
32
+ )
@@ -1,6 +1,8 @@
1
1
  /// <reference types="node" />
2
2
  import * as T from "@effect-ts/core/Effect";
3
- import * as S from "@effect-ts/core/Effect/Experimental/Stream";
3
+ import * as L from "@effect-ts/core/Effect/Layer";
4
+ import * as Q from "@effect-ts/core/Effect/Queue";
5
+ import * as CB from "callbag-effect-ts";
4
6
  import { RawData } from "ws";
5
7
  import { GatewayPayload } from "../types";
6
8
  import * as WS from "../WS";
@@ -9,7 +11,7 @@ export interface OpenOpts {
9
11
  url?: string;
10
12
  version?: number;
11
13
  encoding?: Encoding;
12
- outgoing: WS.OutboundStream<Message>;
14
+ outgoingQueue: Q.Queue<Message>;
13
15
  }
14
16
  export interface Encoding {
15
17
  type: "json" | "etf";
@@ -17,16 +19,15 @@ export interface Encoding {
17
19
  decode: (p: RawData) => GatewayPayload;
18
20
  }
19
21
  export declare const jsonEncoding: Encoding;
20
- declare const openImpl: ({ url, version, encoding, outgoing, }: OpenOpts) => S.Stream<import("@effect-ts/system/Has").Has<WS.WS> & import("@effect-ts/system/Clock").HasClock & import("@effect-ts/system/Has").Has<import("../Log").Log>, unknown, GatewayPayload<any>>;
22
+ declare const openImpl: ({ url, version, encoding, outgoingQueue: outgoing, }: OpenOpts) => CB.EffectSource<import("@effect-ts/system/Has").Has<WS.WS> & import("@effect-ts/system/Has").Has<import("../Log").Log> & import("@effect-ts/system/Clock").HasClock, unknown, GatewayPayload<any>>;
21
23
  export declare type Connection = ReturnType<typeof openImpl>;
22
- declare const service: {
24
+ declare const makeService: () => {
23
25
  readonly _tag: "DiscordWSService";
24
- readonly open: ({ url, version, encoding, outgoing, }: OpenOpts) => S.Stream<import("@effect-ts/system/Has").Has<WS.WS> & import("@effect-ts/system/Clock").HasClock & import("@effect-ts/system/Has").Has<import("../Log").Log>, unknown, GatewayPayload<any>>;
26
+ readonly open: ({ url, version, encoding, outgoingQueue: outgoing, }: OpenOpts) => CB.EffectSource<import("@effect-ts/system/Has").Has<WS.WS> & import("@effect-ts/system/Has").Has<import("../Log").Log> & import("@effect-ts/system/Clock").HasClock, unknown, GatewayPayload<any>>;
25
27
  };
26
- declare type Service = typeof service;
27
- export interface DiscordWS extends Service {
28
+ export interface DiscordWS extends ReturnType<typeof makeService> {
28
29
  }
29
30
  export declare const DiscordWS: import("@effect-ts/system/Has").Tag<DiscordWS>;
30
- export declare const LiveDiscordWS: import("@effect-ts/system/Layer").Layer<unknown, never, import("@effect-ts/system/Has").Has<DiscordWS>>;
31
- export declare const open: (opts: OpenOpts) => T.Effect<import("@effect-ts/system/Has").Has<DiscordWS>, never, S.Stream<import("@effect-ts/system/Has").Has<WS.WS> & import("@effect-ts/system/Clock").HasClock & import("@effect-ts/system/Has").Has<import("../Log").Log>, unknown, GatewayPayload<any>>>;
31
+ export declare const LiveDiscordWS: L.Layer<unknown, never, import("@effect-ts/system/Has").Has<DiscordWS>>;
32
+ export declare const open: (opts: OpenOpts) => T.Effect<import("@effect-ts/system/Has").Has<DiscordWS>, never, CB.EffectSource<import("@effect-ts/system/Has").Has<WS.WS> & import("@effect-ts/system/Has").Has<import("../Log").Log> & import("@effect-ts/system/Clock").HasClock, unknown, GatewayPayload<any>>>;
32
33
  export {};
@@ -5,10 +5,12 @@ const tslib_1 = require("tslib");
5
5
  const tracing_1 = tslib_1.__importStar(require("@effect-ts/core/Tracing"));
6
6
  const fileName_1 = "DiscordWS/index.ts";
7
7
  const T = tslib_1.__importStar(require("@effect-ts/core/Effect"));
8
- const S = tslib_1.__importStar(require("@effect-ts/core/Effect/Experimental/Stream"));
8
+ const L = tslib_1.__importStar(require("@effect-ts/core/Effect/Layer"));
9
+ const Q = tslib_1.__importStar(require("@effect-ts/core/Effect/Queue"));
9
10
  const SC = tslib_1.__importStar(require("@effect-ts/core/Effect/Schedule"));
10
11
  const Function_1 = require("@effect-ts/core/Function");
11
12
  const Has_1 = require("@effect-ts/core/Has");
13
+ const CB = tslib_1.__importStar(require("callbag-effect-ts"));
12
14
  const Log_1 = require("../Log");
13
15
  const WS = tslib_1.__importStar(require("../WS"));
14
16
  exports.jsonEncoding = {
@@ -16,22 +18,22 @@ exports.jsonEncoding = {
16
18
  encode: (p) => JSON.stringify(p),
17
19
  decode: (p) => JSON.parse(p.toString("utf8")),
18
20
  };
19
- const makeOutgoing = (s, e) => (S.map_(s, (data) => {
21
+ const makeOutgoing = (q, e) => Q.map_(q, (data) => {
20
22
  if (data === WS.Reconnect) {
21
23
  return data;
22
24
  }
23
25
  return e.encode(data);
24
- }));
25
- const openImpl = ({ url = "wss://gateway.discord.gg/", version = 9, encoding = exports.jsonEncoding, outgoing, }) => (S.map_(S.retry_(S.onError_(S.unwrap(WS.open(`${url}?v=${version}&encoding=${encoding.type}`, makeOutgoing(outgoing, encoding))), (e) => e._tag === "Fail" ? (0, Log_1.log)(serviceTag, "error", e.value) : T.unit), SC.exponential(250)), encoding.decode));
26
+ });
27
+ const openImpl = ({ url = "wss://gateway.discord.gg/", version = 9, encoding = exports.jsonEncoding, outgoingQueue: outgoing, }) => (CB.map_(CB.retry_(CB.tapError_(CB.unwrap(WS.open(`${url}?v=${version}&encoding=${encoding.type}`, makeOutgoing(outgoing, encoding))), (e) => (0, Log_1.log)(serviceTag, "error", e)), SC.exponential(500)), encoding.decode));
26
28
  // Service definition
27
29
  const serviceTag = "DiscordWSService";
28
- const service = {
30
+ const makeService = () => ({
29
31
  _tag: serviceTag,
30
32
  open: openImpl,
31
- };
33
+ });
32
34
  exports.DiscordWS = (0, Has_1.tag)();
33
- exports.LiveDiscordWS = T.toLayer(exports.DiscordWS)(T.succeed(service, fileName_1 + ":75:60"));
35
+ exports.LiveDiscordWS = L.fromFunction(exports.DiscordWS)(makeService);
34
36
  // Helpers
35
- const open = (opts) => T.accessService(exports.DiscordWS)(({ open }) => open(opts), fileName_1 + ":79:29");
37
+ const open = (opts) => T.accessService(exports.DiscordWS)(({ open }) => open(opts), fileName_1 + ":76:29");
36
38
  exports.open = open;
37
39
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;;AAAA,kEAA2C;AAC3C,sFAA+D;AAC/D,4EAAqD;AACrD,uDAA+C;AAC/C,6CAAyC;AAGzC,gCAA4B;AAE5B,kDAA2B;AAiBd,QAAA,YAAY,GAAa;IACpC,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAChC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;CAC9C,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,CAAiB,EAAE,CAAW,EAAqB,EAAE,EAGvE,CAAC,MADD,CAAC,EACK,CAAC,IAAI,EAAE,EAAE;IACb,IAAI,IAAI,KAAK,EAAE,CAAC,SAAS,EAAE;QACzB,OAAO,IAAI,CAAA;KACZ;IAED,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AACvB,CAAC,EACF,CAAA;AAEH,MAAM,QAAQ,GAAG,CAAC,EAChB,GAAG,GAAG,2BAA2B,EACjC,OAAO,GAAG,CAAC,EACX,QAAQ,GAAG,oBAAY,EACvB,QAAQ,GACC,EAAE,EAAE,EAWX,CAAC,MADD,CAAC,QAHD,CAAC,UADD,CAAC,CAAC,MAAM,CAJR,EAAE,CAAC,IAAI,CACL,GAAG,GAAG,MAAM,OAAO,aAAa,QAAQ,CAAC,IAAI,EAAE,EAC/C,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CACjC,GAES,CAAC,CAAC,EAAE,EAAE,CACd,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAA,SAAG,EAAC,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAExD,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,GACrB,QAAQ,CAAC,MAAM,EACtB,CAAA;AAIH,qBAAqB;AACrB,MAAM,UAAU,GAAG,kBAA2B,CAAA;AAC9C,MAAM,OAAO,GAAG;IACd,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,QAAQ;CACN,CAAA;AAGG,QAAA,SAAS,GAAG,IAAA,SAAG,GAAa,CAAA;AAC5B,QAAA,aAAa,GAAG,CAAC,CAAC,OAAO,CAAC,iBAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,wBAAC,CAAC,CAAA;AAErE,UAAU;AACH,MAAM,IAAI,GAAG,CAAC,IAAc,EAAE,EAAE,CACrC,CAAC,CAAC,aAAa,CAAC,iBAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAC,CAAA;AADzC,QAAA,IAAI,QACqC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;;AAAA,kEAA2C;AAC3C,wEAAiD;AACjD,wEAAiD;AACjD,4EAAqD;AACrD,uDAA+C;AAC/C,6CAAyC;AACzC,8DAAuC;AAEvC,gCAA4B;AAE5B,kDAA2B;AAiBd,QAAA,YAAY,GAAa;IACpC,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAChC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;CAC9C,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,CAAmB,EAAE,CAAW,EAAoB,EAAE,CAC1E,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,EAAc,EAAE;IAC7B,IAAI,IAAI,KAAK,EAAE,CAAC,SAAS,EAAE;QACzB,OAAO,IAAI,CAAA;KACZ;IAED,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AACvB,CAAC,CAAC,CAAA;AAEJ,MAAM,QAAQ,GAAG,CAAC,EAChB,GAAG,GAAG,2BAA2B,EACjC,OAAO,GAAG,CAAC,EACX,QAAQ,GAAG,oBAAY,EACvB,aAAa,EAAE,QAAQ,GACd,EAAE,EAAE,EASX,EAAE,MADF,EAAE,QADF,EAAE,WADF,EAAE,CAAC,MAAM,CAJT,EAAE,CAAC,IAAI,CACL,GAAG,GAAG,MAAM,OAAO,aAAa,QAAQ,CAAC,IAAI,EAAE,EAC/C,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CACjC,GAEW,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,SAAG,EAAC,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,GACrC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,GACrB,QAAQ,CAAC,MAAM,EACvB,CAAA;AAIH,qBAAqB;AACrB,MAAM,UAAU,GAAG,kBAA2B,CAAA;AAC9C,MAAM,WAAW,GAAG,GAAG,EAAE,CACvB,CAAC;IACC,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,QAAQ;CACL,CAAA,CAAA;AAGA,QAAA,SAAS,GAAG,IAAA,SAAG,GAAa,CAAA;AAC5B,QAAA,aAAa,GAAG,CAAC,CAAC,YAAY,CAAC,iBAAS,CAAC,CAAC,WAAW,CAAC,CAAA;AAEnE,UAAU;AACH,MAAM,IAAI,GAAG,CAAC,IAAc,EAAE,EAAE,CACrC,CAAC,CAAC,aAAa,CAAC,iBAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAC,CAAA;AADzC,QAAA,IAAI,QACqC"}
@@ -1,9 +1,10 @@
1
1
  import * as T from "@effect-ts/core/Effect"
2
- import * as S from "@effect-ts/core/Effect/Experimental/Stream"
2
+ import * as L from "@effect-ts/core/Effect/Layer"
3
+ import * as Q from "@effect-ts/core/Effect/Queue"
3
4
  import * as SC from "@effect-ts/core/Effect/Schedule"
4
5
  import { pipe } from "@effect-ts/core/Function"
5
6
  import { tag } from "@effect-ts/core/Has"
6
- import { _A } from "@effect-ts/core/Utils"
7
+ import * as CB from "callbag-effect-ts"
7
8
  import { RawData } from "ws"
8
9
  import { log } from "../Log"
9
10
  import { GatewayPayload } from "../types"
@@ -15,7 +16,7 @@ export interface OpenOpts {
15
16
  url?: string
16
17
  version?: number
17
18
  encoding?: Encoding
18
- outgoing: WS.OutboundStream<Message>
19
+ outgoingQueue: Q.Queue<Message>
19
20
  }
20
21
 
21
22
  export interface Encoding {
@@ -30,49 +31,45 @@ export const jsonEncoding: Encoding = {
30
31
  decode: (p) => JSON.parse(p.toString("utf8")),
31
32
  }
32
33
 
33
- const makeOutgoing = (s: S.UIO<Message>, e: Encoding): WS.OutboundStream =>
34
- pipe(
35
- s,
36
- S.map((data) => {
37
- if (data === WS.Reconnect) {
38
- return data
39
- }
34
+ const makeOutgoing = (q: Q.Queue<Message>, e: Encoding): WS.OutboundQueue =>
35
+ Q.map_(q, (data): WS.Message => {
36
+ if (data === WS.Reconnect) {
37
+ return data
38
+ }
40
39
 
41
- return e.encode(data)
42
- })
43
- )
40
+ return e.encode(data)
41
+ })
44
42
 
45
43
  const openImpl = ({
46
44
  url = "wss://gateway.discord.gg/",
47
45
  version = 9,
48
46
  encoding = jsonEncoding,
49
- outgoing,
47
+ outgoingQueue: outgoing,
50
48
  }: OpenOpts) =>
51
49
  pipe(
52
50
  WS.open(
53
51
  `${url}?v=${version}&encoding=${encoding.type}`,
54
- makeOutgoing(outgoing, encoding)
52
+ makeOutgoing(outgoing, encoding),
55
53
  ),
56
- S.unwrap,
57
- S.onError((e) =>
58
- e._tag === "Fail" ? log(serviceTag, "error", e.value) : T.unit
59
- ),
60
- S.retry(SC.exponential(250)),
61
- S.map(encoding.decode)
54
+ CB.unwrap,
55
+ CB.tapError((e) => log(serviceTag, "error", e)),
56
+ CB.retry(SC.exponential(500)),
57
+ CB.map(encoding.decode),
62
58
  )
63
59
 
64
60
  export type Connection = ReturnType<typeof openImpl>
65
61
 
66
62
  // Service definition
67
63
  const serviceTag = "DiscordWSService" as const
68
- const service = {
69
- _tag: serviceTag,
70
- open: openImpl,
71
- } as const
72
- type Service = typeof service
73
- export interface DiscordWS extends Service {}
64
+ const makeService = () =>
65
+ ({
66
+ _tag: serviceTag,
67
+ open: openImpl,
68
+ } as const)
69
+
70
+ export interface DiscordWS extends ReturnType<typeof makeService> {}
74
71
  export const DiscordWS = tag<DiscordWS>()
75
- export const LiveDiscordWS = T.toLayer(DiscordWS)(T.succeed(service))
72
+ export const LiveDiscordWS = L.fromFunction(DiscordWS)(makeService)
76
73
 
77
74
  // Helpers
78
75
  export const open = (opts: OpenOpts) =>
package/Log/index.d.ts CHANGED
@@ -1,12 +1,15 @@
1
+ import * as L from "@effect-ts/core/Effect/Layer";
1
2
  import * as T from "@effect-ts/core/Effect";
2
- declare const service: {
3
+ declare const make: (debug?: boolean) => {
3
4
  readonly _tag: "LogService";
4
5
  readonly log: (...args: any[]) => T.UIO<void>;
6
+ readonly debug: (...args: any[]) => T.UIO<void>;
5
7
  };
6
- declare type Service = typeof service;
7
- export interface Log extends Service {
8
+ export interface Log extends ReturnType<typeof make> {
8
9
  }
9
10
  export declare const Log: import("@effect-ts/system/Has").Tag<Log>;
10
- export declare const LiveLog: import("@effect-ts/system/Layer").Layer<unknown, never, import("@effect-ts/system/Has").Has<Log>>;
11
+ export declare const LiveLog: L.Layer<{}, never, import("@effect-ts/system/Has").Has<Log>>;
12
+ export declare const LiveLogDebug: L.Layer<{}, never, import("@effect-ts/system/Has").Has<Log>>;
11
13
  export declare const log: (...args: any[]) => T.Effect<import("@effect-ts/system/Has").Has<Log>, never, void>;
14
+ export declare const logDebug: (...args: any[]) => T.Effect<import("@effect-ts/system/Has").Has<Log>, never, void>;
12
15
  export {};
package/Log/index.js CHANGED
@@ -1,19 +1,28 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.log = exports.LiveLog = exports.Log = void 0;
3
+ exports.logDebug = exports.log = exports.LiveLogDebug = exports.LiveLog = exports.Log = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const tracing_1 = tslib_1.__importStar(require("@effect-ts/core/Tracing"));
6
6
  const fileName_1 = "Log/index.ts";
7
+ const L = tslib_1.__importStar(require("@effect-ts/core/Effect/Layer"));
7
8
  const T = tslib_1.__importStar(require("@effect-ts/core/Effect"));
8
9
  const Has_1 = require("@effect-ts/core/Has");
9
- const service = {
10
+ const make = (debug = false) => ({
10
11
  _tag: "LogService",
11
12
  log: (...args) => T.succeedWith(() => {
12
- console.error(...args);
13
- }, fileName_1 + ":8:18"),
14
- };
13
+ console.error("INFO", ...args);
14
+ }, fileName_1 + ":10:20"),
15
+ debug: (...args) => debug
16
+ ? T.succeedWith(() => {
17
+ console.error("DEBUG", ...args);
18
+ }, fileName_1 + ":15:24")
19
+ : T.unit,
20
+ });
15
21
  exports.Log = (0, Has_1.tag)();
16
- exports.LiveLog = T.toLayer(exports.Log)(T.succeed(service, fileName_1 + ":17:48"));
17
- const log = (...args) => T.accessServiceM(exports.Log)(({ log }) => log(...args), fileName_1 + ":20:24");
22
+ exports.LiveLog = L.fromValue(exports.Log)(make(false));
23
+ exports.LiveLogDebug = L.fromValue(exports.Log)(make(true));
24
+ const log = (...args) => T.accessServiceM(exports.Log)(({ log }) => log(...args), fileName_1 + ":27:24");
18
25
  exports.log = log;
26
+ const logDebug = (...args) => T.accessServiceM(exports.Log)(({ debug }) => debug(...args), fileName_1 + ":30:24");
27
+ exports.logDebug = logDebug;
19
28
  //# sourceMappingURL=index.js.map
package/Log/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;;AAAA,kEAA2C;AAC3C,6CAAyC;AAGzC,MAAM,OAAO,GAAG;IACd,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE,CACtB,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE;QACjB,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAA;IACxB,CAAC,uBAAC;CACI,CAAA;AAKG,QAAA,GAAG,GAAG,IAAA,SAAG,GAAO,CAAA;AAChB,QAAA,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,WAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,wBAAC,CAAC,CAAA;AAElD,MAAM,GAAG,GAAG,CAAC,GAAG,IAAW,EAAE,EAAE,CACpC,CAAC,CAAC,cAAc,CAAC,WAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,wBAAC,CAAA;AADrC,QAAA,GAAG,OACkC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;;AAAA,wEAAiD;AACjD,kEAA2C;AAC3C,6CAAyC;AAGzC,MAAM,IAAI,GAAG,CAAC,KAAK,GAAG,KAAK,EAAE,EAAE,CAC7B,CAAC;IACC,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE,CACtB,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE;QACjB,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAA;IAChC,CAAC,wBAAC;IACJ,KAAK,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE,CACxB,KAAK;QACH,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE;YACjB,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAA;QACjC,CAAC,wBAAC;QACJ,CAAC,CAAC,CAAC,CAAC,IAAI;CACH,CAAA,CAAA;AAGA,QAAA,GAAG,GAAG,IAAA,SAAG,GAAO,CAAA;AAChB,QAAA,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC,WAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;AACvC,QAAA,YAAY,GAAG,CAAC,CAAC,SAAS,CAAC,WAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;AAEjD,MAAM,GAAG,GAAG,CAAC,GAAG,IAAW,EAAE,EAAE,CACpC,CAAC,CAAC,cAAc,CAAC,WAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,wBAAC,CAAA;AADrC,QAAA,GAAG,OACkC;AAE3C,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAW,EAAE,EAAE,CACzC,CAAC,CAAC,cAAc,CAAC,WAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,wBAAC,CAAA;AADzC,QAAA,QAAQ,YACiC"}
package/Log/index.ts CHANGED
@@ -1,20 +1,30 @@
1
+ import * as L from "@effect-ts/core/Effect/Layer"
1
2
  import * as T from "@effect-ts/core/Effect"
2
3
  import { tag } from "@effect-ts/core/Has"
3
4
  import { _A } from "@effect-ts/core/Utils"
4
5
 
5
- const service = {
6
- _tag: "LogService",
7
- log: (...args: any[]) =>
8
- T.succeedWith(() => {
9
- console.error(...args)
10
- }),
11
- } as const
6
+ const make = (debug = false) =>
7
+ ({
8
+ _tag: "LogService",
9
+ log: (...args: any[]) =>
10
+ T.succeedWith(() => {
11
+ console.error("INFO", ...args)
12
+ }),
13
+ debug: (...args: any[]) =>
14
+ debug
15
+ ? T.succeedWith(() => {
16
+ console.error("DEBUG", ...args)
17
+ })
18
+ : T.unit,
19
+ } as const)
12
20
 
13
- type Service = typeof service
14
-
15
- export interface Log extends Service {}
21
+ export interface Log extends ReturnType<typeof make> {}
16
22
  export const Log = tag<Log>()
17
- export const LiveLog = T.toLayer(Log)(T.succeed(service))
23
+ export const LiveLog = L.fromValue(Log)(make(false))
24
+ export const LiveLogDebug = L.fromValue(Log)(make(true))
18
25
 
19
26
  export const log = (...args: any[]) =>
20
27
  T.accessServiceM(Log)(({ log }) => log(...args))
28
+
29
+ export const logDebug = (...args: any[]) =>
30
+ T.accessServiceM(Log)(({ debug }) => debug(...args))
@@ -0,0 +1,3 @@
1
+ declare type Primitive = string | number | boolean;
2
+ export declare function memoize<A extends Primitive, T>(f: (a: A) => T): (a: A) => T;
3
+ export {};
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.memoize = void 0;
4
+ function memoize(f) {
5
+ const cache = new Map();
6
+ return (a) => {
7
+ if (cache.has(a)) {
8
+ return cache.get(a);
9
+ }
10
+ const value = f(a);
11
+ cache.set(a, value);
12
+ return value;
13
+ };
14
+ }
15
+ exports.memoize = memoize;
16
+ //# sourceMappingURL=memoize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memoize.js","sourceRoot":"","sources":["memoize.ts"],"names":[],"mappings":";;;AAEA,SAAgB,OAAO,CAAyB,CAAc;IAC5D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAQ,CAAA;IAE7B,OAAO,CAAC,CAAI,EAAK,EAAE;QACjB,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAChB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,CAAA;SACzB;QAED,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QAClB,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;QACnB,OAAO,KAAK,CAAA;IACd,CAAC,CAAA;AACH,CAAC;AAZD,0BAYC"}
@@ -0,0 +1,15 @@
1
+ type Primitive = string | number | boolean
2
+
3
+ export function memoize<A extends Primitive, T>(f: (a: A) => T) {
4
+ const cache = new Map<A, T>()
5
+
6
+ return (a: A): T => {
7
+ if (cache.has(a)) {
8
+ return cache.get(a) as T
9
+ }
10
+
11
+ const value = f(a)
12
+ cache.set(a, value)
13
+ return value
14
+ }
15
+ }
package/WS/index.d.ts CHANGED
@@ -1,8 +1,7 @@
1
1
  /// <reference types="node" />
2
2
  import * as T from "@effect-ts/core/Effect";
3
- import * as S from "@effect-ts/core/Effect/Experimental/Stream";
4
- import type { _A } from "@effect-ts/core/Utils";
5
- import { HasClock } from "@effect-ts/system/Clock";
3
+ import * as Q from "@effect-ts/core/Effect/Queue";
4
+ import * as CB from "callbag-effect-ts";
6
5
  import * as Ws from "ws";
7
6
  export declare type WsError = {
8
7
  _tag: "close";
@@ -15,18 +14,17 @@ export declare type WsError = {
15
14
  _tag: "write";
16
15
  cause: unknown;
17
16
  };
18
- export declare type WebSocketStream<T = Ws.RawData> = S.Stream<HasClock, WsError, T>;
19
17
  export declare const Reconnect: unique symbol;
20
18
  export declare type Reconnect = typeof Reconnect;
21
19
  export declare type Message = string | Buffer | ArrayBuffer | Reconnect;
22
- export declare type OutboundStream<T = Message> = S.UIO<T>;
23
- declare const makeWS: T.Effect<unknown, never, {
20
+ export declare type OutboundQueue = Q.Dequeue<Message>;
21
+ declare const makeService: () => {
24
22
  readonly _tag: "WSService";
25
- readonly open: (url: string, out: OutboundStream<Message>, options?: Ws.ClientOptions | undefined) => WebSocketStream<Ws.RawData>;
26
- }>;
27
- export interface WS extends _A<typeof makeWS> {
23
+ readonly open: (url: string, out: OutboundQueue, options?: Ws.ClientOptions | undefined) => CB.EffectSource<import("@effect-ts/system/Has").Has<import("../Log").Log> & import("@effect-ts/system/Clock").HasClock, WsError, Ws.RawData>;
24
+ };
25
+ export interface WS extends ReturnType<typeof makeService> {
28
26
  }
29
27
  export declare const WS: import("@effect-ts/system/Has").Tag<WS>;
30
28
  export declare const LiveWS: import("@effect-ts/system/Layer").Layer<unknown, never, import("@effect-ts/system/Has").Has<WS>>;
31
- export declare const open: (url: string, out: OutboundStream<Message>, options?: Ws.ClientOptions | undefined) => T.Effect<import("@effect-ts/system/Has").Has<WS>, never, WebSocketStream<Ws.RawData>>;
29
+ export declare const open: (url: string, out: OutboundQueue, options?: Ws.ClientOptions | undefined) => T.Effect<import("@effect-ts/system/Has").Has<WS>, never, CB.EffectSource<import("@effect-ts/system/Has").Has<import("../Log").Log> & import("@effect-ts/system/Clock").HasClock, WsError, Ws.RawData>>;
32
30
  export {};
package/WS/index.js CHANGED
@@ -5,19 +5,20 @@ const tslib_1 = require("tslib");
5
5
  const tracing_1 = tslib_1.__importStar(require("@effect-ts/core/Tracing"));
6
6
  const fileName_1 = "WS/index.ts";
7
7
  const T = tslib_1.__importStar(require("@effect-ts/core/Effect"));
8
- const S = tslib_1.__importStar(require("@effect-ts/core/Effect/Experimental/Stream"));
9
8
  const M = tslib_1.__importStar(require("@effect-ts/core/Effect/Managed"));
10
9
  const SC = tslib_1.__importStar(require("@effect-ts/core/Effect/Schedule"));
10
+ const CB = tslib_1.__importStar(require("callbag-effect-ts"));
11
11
  const Function_1 = require("@effect-ts/core/Function");
12
12
  const Has_1 = require("@effect-ts/core/Has");
13
13
  const Ws = tslib_1.__importStar(require("ws"));
14
+ const Log_1 = require("../Log");
14
15
  exports.Reconnect = Symbol();
15
- const openSocket = (url, options) => (M.makeExit_(T.succeedWith(() => new Ws.WebSocket(url, options), fileName_1 + ":25:18"), (ws) => T.succeedWith(() => {
16
+ const openSocket = (url, options) => (M.makeExit_(T.succeedWith(() => new Ws.WebSocket(url, options), fileName_1 + ":23:18"), (ws) => T.succeedWith(() => {
16
17
  ws.removeAllListeners();
17
18
  ws.close();
18
- }, fileName_1 + ":27:20"), fileName_1 + ":26:15"));
19
- const recv = (ws) => S.async((emit) => {
20
- ws.on("message", (message) => emit.single(message));
19
+ }, fileName_1 + ":25:20"), fileName_1 + ":24:15"));
20
+ const recv = (ws) => CB.async((emit) => {
21
+ ws.on("message", (message) => emit.data(message));
21
22
  ws.on("error", (cause) => {
22
23
  emit.fail({
23
24
  _tag: "error",
@@ -30,7 +31,7 @@ const recv = (ws) => S.async((emit) => {
30
31
  reason: reason.toString("utf8"),
31
32
  }));
32
33
  });
33
- const send = (out) => (ws) => (S.drain(S.tap_(S.unwrap(T.map_(T.effectAsync((cb) => {
34
+ const send = (ws, out) => (CB.drain(CB.tap_(CB.tap_(CB.unwrap(T.map_(T.effectAsync((cb) => {
34
35
  if (ws.readyState & ws.OPEN) {
35
36
  cb(T.unit);
36
37
  }
@@ -39,32 +40,31 @@ const send = (out) => (ws) => (S.drain(S.tap_(S.unwrap(T.map_(T.effectAsync((cb)
39
40
  cb(T.unit);
40
41
  });
41
42
  }
42
- }, fileName_1 + ":54:18"), () => out, fileName_1 + ":63:10")), (data) => T.effectAsync((cb) => {
43
+ }, fileName_1 + ":52:18"), () => CB.fromQueue(out), fileName_1 + ":61:10")), (p) => (0, Log_1.logDebug)("WSService", "send", p)), (data) => T.effectAsync((cb) => {
43
44
  if (data === exports.Reconnect) {
44
45
  ws.close(1012, "reconnecting");
45
46
  cb(T.unit);
46
47
  }
47
48
  else {
48
- console.error(data);
49
49
  ws.send(data, (err) => {
50
50
  if (err) {
51
- cb(T.fail({ _tag: "write", cause: err }, fileName_1 + ":74:24"));
51
+ cb(T.fail({ _tag: "write", cause: err }, fileName_1 + ":72:24"));
52
52
  }
53
53
  else {
54
54
  cb(T.unit);
55
55
  }
56
56
  });
57
57
  }
58
- }, fileName_1 + ":66:20"))));
59
- const duplex = (out) => (ws) => (S.mergeTerminateLeft_(recv(ws), send(out)(ws)));
60
- const openDuplex = (url, out, options) => (S.retry_(S.unwrapManaged(M.map_(openSocket(url, options), duplex(out), fileName_1 + ":95:10")), SC.recurWhile((e) => e._tag === "close" && e.code === 1012)));
61
- const makeWS = T.succeed({
58
+ }, fileName_1 + ":65:20"))));
59
+ const duplex = (out) => (ws) => CB.merge_(recv(ws), send(ws, out));
60
+ const openDuplex = (url, out, options) => (CB.retry_(CB.unwrapManaged(M.map_(openSocket(url, options), duplex(out), fileName_1 + ":93:10")), SC.recurWhile((e) => e._tag === "close" && e.code === 1012)));
61
+ const makeService = () => ({
62
62
  _tag: "WSService",
63
63
  open: openDuplex,
64
- }, fileName_1 + ":100:25");
64
+ });
65
65
  exports.WS = (0, Has_1.tag)();
66
- exports.LiveWS = T.toLayer(exports.WS)(makeWS);
66
+ exports.LiveWS = T.toLayer(exports.WS)(T.succeedWith(makeService, fileName_1 + ":106:50"));
67
67
  // Helpers
68
- const open = (url, out, options) => T.accessService(exports.WS)(({ open }) => open(url, out, options), fileName_1 + ":114:25");
68
+ const open = (url, out, options) => T.accessService(exports.WS)(({ open }) => open(url, out, options), fileName_1 + ":113:25");
69
69
  exports.open = open;
70
70
  //# sourceMappingURL=index.js.map
package/WS/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}