dfx 0.0.5 → 0.3.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 +15 -0
  18. package/DiscordREST/index.js +63 -0
  19. package/DiscordREST/index.js.map +1 -0
  20. package/DiscordREST/index.ts +79 -0
  21. package/DiscordREST/types.d.ts +8 -1
  22. package/DiscordREST/types.ts +12 -2
  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 +13 -9
  44. package/DiscordWS/index.js +10 -8
  45. package/DiscordWS/index.js.map +1 -1
  46. package/DiscordWS/index.ts +34 -31
  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 +33 -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 +59 -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
@@ -0,0 +1,29 @@
1
+ import * as T from "@effect-ts/core/Effect";
2
+ import { UpdatePresence } from "../types";
3
+ export interface DiscordConfig {
4
+ _tag: "DiscordConfig";
5
+ token: string;
6
+ rest: {
7
+ baseUrl: string;
8
+ };
9
+ gateway: {
10
+ intents: number;
11
+ presence?: UpdatePresence;
12
+ };
13
+ }
14
+ export declare const DiscordConfig: import("@effect-ts/system/Has").Tag<DiscordConfig>;
15
+ export interface MakeOpts {
16
+ token: string;
17
+ rest?: Partial<DiscordConfig["rest"]>;
18
+ gateway?: Partial<DiscordConfig["gateway"]>;
19
+ }
20
+ export declare const make: ({ token, rest, gateway }: MakeOpts) => DiscordConfig;
21
+ export declare const makeLayer: (a_0: MakeOpts) => import("@effect-ts/system/Layer").Layer<{}, never, import("@effect-ts/system/Has").Has<DiscordConfig>>;
22
+ export declare const token: T.Effect<import("@effect-ts/system/Has").Has<DiscordConfig>, never, string>;
23
+ export declare const rest: T.Effect<import("@effect-ts/system/Has").Has<DiscordConfig>, never, {
24
+ baseUrl: string;
25
+ }>;
26
+ export declare const gateway: T.Effect<import("@effect-ts/system/Has").Has<DiscordConfig>, never, {
27
+ intents: number;
28
+ presence?: UpdatePresence | undefined;
29
+ }>;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.gateway = exports.rest = exports.token = exports.makeLayer = exports.make = exports.DiscordConfig = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const tracing_1 = tslib_1.__importStar(require("@effect-ts/core/Tracing"));
6
+ const fileName_1 = "DiscordConfig/index.ts";
7
+ const Has_1 = require("@effect-ts/system/Has");
8
+ const T = tslib_1.__importStar(require("@effect-ts/core/Effect"));
9
+ const Function_1 = require("@effect-ts/system/Function");
10
+ const Layer_1 = require("@effect-ts/system/Layer");
11
+ const types_1 = require("../types");
12
+ const VERSION = 9;
13
+ exports.DiscordConfig = (0, Has_1.tag)();
14
+ const make = ({ token, rest, gateway }) => ({
15
+ _tag: "DiscordConfig",
16
+ token,
17
+ rest: {
18
+ baseUrl: `https://discord.com/api/v${VERSION}`,
19
+ ...(rest ?? {}),
20
+ },
21
+ gateway: {
22
+ intents: types_1.GatewayIntents.GUILDS,
23
+ ...(gateway ?? {}),
24
+ },
25
+ });
26
+ exports.make = make;
27
+ exports.makeLayer = (0, Function_1.flow)(exports.make, (0, Layer_1.fromValue)(exports.DiscordConfig));
28
+ exports.token = T.accessService(exports.DiscordConfig)(({ token }) => token, fileName_1 + ":43:52");
29
+ exports.rest = T.accessService(exports.DiscordConfig)(({ rest }) => rest, fileName_1 + ":44:51");
30
+ exports.gateway = T.accessService(exports.DiscordConfig)(({ gateway }) => gateway, fileName_1 + ":45:54");
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;;AAAA,+CAA2C;AAC3C,kEAA2C;AAC3C,yDAAiD;AACjD,mDAAmD;AACnD,oCAAyD;AAEzD,MAAM,OAAO,GAAG,CAAC,CAAA;AAaJ,QAAA,aAAa,GAAG,IAAA,SAAG,GAAiB,CAAA;AAQ1C,MAAM,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAY,EAAiB,EAAE,CAAC,CAAC;IAC1E,IAAI,EAAE,eAAe;IACrB,KAAK;IACL,IAAI,EAAE;QACJ,OAAO,EAAE,4BAA4B,OAAO,EAAE;QAC9C,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;KAChB;IACD,OAAO,EAAE;QACP,OAAO,EAAE,sBAAc,CAAC,MAAM;QAC9B,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;KACnB;CACF,CAAC,CAAA;AAXW,QAAA,IAAI,QAWf;AAEW,QAAA,SAAS,GAAG,IAAA,eAAI,EAAC,YAAI,EAAE,IAAA,iBAAS,EAAC,qBAAa,CAAC,CAAC,CAAA;AAEhD,QAAA,KAAK,GAAG,CAAC,CAAC,aAAa,CAAC,qBAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,wBAAC,CAAA;AAC5D,QAAA,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,qBAAa,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,wBAAC,CAAA;AACzD,QAAA,OAAO,GAAG,CAAC,CAAC,aAAa,CAAC,qBAAa,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,wBAAC,CAAA"}
@@ -0,0 +1,45 @@
1
+ import { tag } from "@effect-ts/system/Has"
2
+ import * as T from "@effect-ts/core/Effect"
3
+ import { flow } from "@effect-ts/system/Function"
4
+ import { fromValue } from "@effect-ts/system/Layer"
5
+ import { GatewayIntents, UpdatePresence } from "../types"
6
+
7
+ const VERSION = 9
8
+
9
+ export interface DiscordConfig {
10
+ _tag: "DiscordConfig"
11
+ token: string
12
+ rest: {
13
+ baseUrl: string
14
+ }
15
+ gateway: {
16
+ intents: number
17
+ presence?: UpdatePresence
18
+ }
19
+ }
20
+ export const DiscordConfig = tag<DiscordConfig>()
21
+
22
+ export interface MakeOpts {
23
+ token: string
24
+ rest?: Partial<DiscordConfig["rest"]>
25
+ gateway?: Partial<DiscordConfig["gateway"]>
26
+ }
27
+
28
+ export const make = ({ token, rest, gateway }: MakeOpts): DiscordConfig => ({
29
+ _tag: "DiscordConfig",
30
+ token,
31
+ rest: {
32
+ baseUrl: `https://discord.com/api/v${VERSION}`,
33
+ ...(rest ?? {}),
34
+ },
35
+ gateway: {
36
+ intents: GatewayIntents.GUILDS,
37
+ ...(gateway ?? {}),
38
+ },
39
+ })
40
+
41
+ export const makeLayer = flow(make, fromValue(DiscordConfig))
42
+
43
+ export const token = T.accessService(DiscordConfig)(({ token }) => token)
44
+ export const rest = T.accessService(DiscordConfig)(({ rest }) => rest)
45
+ export const gateway = T.accessService(DiscordConfig)(({ gateway }) => gateway)
@@ -0,0 +1,23 @@
1
+ import * as T from "@effect-ts/core/Effect";
2
+ import * as M from "@effect-ts/core/Effect/Managed";
3
+ import { _A } from "@effect-ts/core/Utils";
4
+ import * as Shard from "../DiscordShard";
5
+ import * as CB from "callbag-effect-ts";
6
+ import { GatewayEvents } from "../types";
7
+ declare const make: M.Managed<import("@effect-ts/system/Has").Has<import("../DiscordConfig").DiscordConfig> & import("@effect-ts/system/Has").Has<Shard.DiscordShard>, never, {
8
+ readonly fromDispatch: <K extends keyof GatewayEvents>(event: K) => CB.EffectSource<import("@effect-ts/system/Has").Has<import("../DiscordWS").DiscordWS> & import("@effect-ts/system/Has").Has<import("../WS").WS> & import("@effect-ts/system/Has").Has<import("../Log").Log> & import("@effect-ts/system/Clock").HasClock, never, GatewayEvents[K]>;
9
+ readonly run: T.RIO<import("@effect-ts/system/Has").Has<import("../DiscordWS").DiscordWS> & import("@effect-ts/system/Has").Has<import("../WS").WS> & import("@effect-ts/system/Has").Has<import("../Log").Log> & import("@effect-ts/system/Clock").HasClock, void>;
10
+ readonly raw: CB.EffectSource<import("@effect-ts/system/Has").Has<import("../DiscordWS").DiscordWS> & import("@effect-ts/system/Has").Has<import("../WS").WS> & import("@effect-ts/system/Has").Has<import("../Log").Log> & import("@effect-ts/system/Clock").HasClock, never, import("../types").GatewayPayload<any>>;
11
+ readonly dispatch: CB.EffectSource<import("@effect-ts/system/Has").Has<import("../DiscordWS").DiscordWS> & import("@effect-ts/system/Has").Has<import("../WS").WS> & import("@effect-ts/system/Has").Has<import("../Log").Log> & import("@effect-ts/system/Clock").HasClock, never, import("../types").GatewayPayload<import("../types").GatewayEvent>>;
12
+ readonly send: (p: import("../types").GatewayPayload<any>) => T.Effect<unknown, never, boolean>;
13
+ readonly reconnect: () => T.Effect<unknown, never, boolean>;
14
+ readonly _tag: "DiscordGatewayService";
15
+ }>;
16
+ export interface DiscordGateway extends _A<typeof make> {
17
+ }
18
+ export declare const DiscordGateway: import("@effect-ts/system/Has").Tag<DiscordGateway>;
19
+ export declare const LiveDiscordGateway: import("@effect-ts/system/Layer").Layer<import("@effect-ts/system/Has").Has<import("../DiscordConfig").DiscordConfig> & import("@effect-ts/system/Has").Has<Shard.DiscordShard>, never, import("@effect-ts/system/Has").Has<DiscordGateway>>;
20
+ export declare const gateway: T.Effect<import("@effect-ts/system/Has").Has<DiscordGateway>, never, DiscordGateway>;
21
+ export declare const run: T.Effect<import("@effect-ts/system/Has").Has<import("../DiscordWS").DiscordWS> & import("@effect-ts/system/Has").Has<import("../WS").WS> & import("@effect-ts/system/Has").Has<import("../Log").Log> & import("@effect-ts/system/Clock").HasClock & import("@effect-ts/system/Has").Has<DiscordGateway>, never, void>;
22
+ export declare const fromDispatch: <K extends keyof GatewayEvents>(event: K) => CB.EffectSource<import("@effect-ts/system/Has").Has<DiscordGateway> & import("@effect-ts/system/Has").Has<import("../DiscordWS").DiscordWS> & import("@effect-ts/system/Has").Has<import("../WS").WS> & import("@effect-ts/system/Has").Has<import("../Log").Log> & import("@effect-ts/system/Clock").HasClock, never, GatewayEvents[K]>;
23
+ export {};
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fromDispatch = exports.run = exports.gateway = exports.LiveDiscordGateway = exports.DiscordGateway = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const tracing_1 = tslib_1.__importStar(require("@effect-ts/core/Tracing"));
6
+ const fileName_1 = "DiscordGateway/index.ts";
7
+ const T = tslib_1.__importStar(require("@effect-ts/core/Effect"));
8
+ const M = tslib_1.__importStar(require("@effect-ts/core/Effect/Managed"));
9
+ const Function_1 = require("@effect-ts/core/Function");
10
+ const Has_1 = require("@effect-ts/core/Has");
11
+ const Shard = tslib_1.__importStar(require("../DiscordShard"));
12
+ const Utils = tslib_1.__importStar(require("./utils"));
13
+ const CB = tslib_1.__importStar(require("callbag-effect-ts"));
14
+ const make = (M.map_(Shard.make([0, 1]), (shard) => ({
15
+ _tag: "DiscordGatewayService",
16
+ ...shard,
17
+ fromDispatch: Utils.fromDispatch(shard.dispatch),
18
+ }), fileName_1 + ":13:8"));
19
+ exports.DiscordGateway = (0, Has_1.tag)();
20
+ exports.LiveDiscordGateway = M.toLayer_(make, exports.DiscordGateway);
21
+ exports.gateway = T.accessService(exports.DiscordGateway)(Function_1.identity, fileName_1 + ":27:55");
22
+ exports.run = T.accessServiceM(exports.DiscordGateway)(({ run }) => run, fileName_1 + ":28:52");
23
+ const fromDispatch = (event) => (CB.unwrap(T.accessService(exports.DiscordGateway)(({ fromDispatch }) => fromDispatch(event), fileName_1 + ":32:36")));
24
+ exports.fromDispatch = fromDispatch;
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;;AAAA,kEAA2C;AAC3C,0EAAmD;AACnD,uDAAyD;AACzD,6CAAyC;AAEzC,+DAAwC;AACxC,uDAAgC;AAChC,8DAAuC;AAGvC,MAAM,IAAI,IAER,CAAC,MADD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAEhB,CAAC,KAAK,EAAE,EAAE,CACR,CAAC;IACC,IAAI,EAAE,uBAAuB;IAC7B,GAAG,KAAK;IACR,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC;CACvC,CAAA,wBAEhB,CAAA;AAGY,QAAA,cAAc,GAAG,IAAA,SAAG,GAAkB,CAAA;AACtC,QAAA,kBAAkB,GAAG,CAAC,UAAyB,IAAI,EAApB,sBAAc,EAAO;AAEpD,QAAA,OAAO,GAAG,CAAC,CAAC,aAAa,CAAC,sBAAc,CAAC,CAAC,mBAAQ,wBAAC,CAAA;AACnD,QAAA,GAAG,GAAG,CAAC,CAAC,cAAc,CAAC,sBAAc,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,wBAAC,CAAA;AAE9D,MAAM,YAAY,GAAG,CAAgC,KAAQ,EAAE,EAAE,EAGpE,EAAE,CAAC,MAAM,CADT,CAAC,CAAC,aAAa,CAAC,sBAAc,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,wBAAC,EAE3E,CAAA;AAJU,QAAA,YAAY,gBAItB"}
@@ -0,0 +1,34 @@
1
+ import * as T from "@effect-ts/core/Effect"
2
+ import * as M from "@effect-ts/core/Effect/Managed"
3
+ import { identity, pipe } from "@effect-ts/core/Function"
4
+ import { tag } from "@effect-ts/core/Has"
5
+ import { _A } from "@effect-ts/core/Utils"
6
+ import * as Shard from "../DiscordShard"
7
+ import * as Utils from "./utils"
8
+ import * as CB from "callbag-effect-ts"
9
+ import { GatewayEvents } from "../types"
10
+
11
+ const make = pipe(
12
+ Shard.make([0, 1]),
13
+ M.map(
14
+ (shard) =>
15
+ ({
16
+ _tag: "DiscordGatewayService",
17
+ ...shard,
18
+ fromDispatch: Utils.fromDispatch(shard.dispatch),
19
+ } as const),
20
+ ),
21
+ )
22
+
23
+ export interface DiscordGateway extends _A<typeof make> {}
24
+ export const DiscordGateway = tag<DiscordGateway>()
25
+ export const LiveDiscordGateway = M.toLayer(DiscordGateway)(make)
26
+
27
+ export const gateway = T.accessService(DiscordGateway)(identity)
28
+ export const run = T.accessServiceM(DiscordGateway)(({ run }) => run)
29
+
30
+ export const fromDispatch = <K extends keyof GatewayEvents>(event: K) =>
31
+ pipe(
32
+ T.accessService(DiscordGateway)(({ fromDispatch }) => fromDispatch(event)),
33
+ CB.unwrap,
34
+ )
@@ -0,0 +1,3 @@
1
+ import * as CB from "callbag-effect-ts";
2
+ import { GatewayEvent, GatewayEvents, GatewayPayload } from "../types";
3
+ export declare const fromDispatch: <R, E>(source: CB.EffectSource<R, E, GatewayPayload<GatewayEvent>>) => <K extends keyof GatewayEvents>(event: K) => CB.EffectSource<R, E, GatewayEvents[K]>;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fromDispatch = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const tracing_1 = tslib_1.__importStar(require("@effect-ts/core/Tracing"));
6
+ const fileName_1 = "DiscordGateway/utils.ts";
7
+ const Function_1 = require("@effect-ts/core/Function");
8
+ const CB = tslib_1.__importStar(require("callbag-effect-ts"));
9
+ const memoize_1 = require("../Utils/memoize");
10
+ const fromDispatch = (source) => (0, memoize_1.memoize)((event) => (CB.share(CB.map_(CB.filter_(source, (p) => p.t === event), (p) => p.d))));
11
+ exports.fromDispatch = fromDispatch;
12
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["utils.ts"],"names":[],"mappings":";;;;;;AAAA,uDAA+C;AAC/C,8DAAuC;AAEvC,8CAA0C;AAEnC,MAAM,YAAY,GAAG,CAC1B,MAA2D,EAGf,EAAE,CAC9C,IAAA,iBAAO,EAAC,CAAC,KAAK,EAAE,EAAE,EAId,EAAE,CAAC,KAAK,CADR,EAAE,MADF,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,EACjC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAQ,GAEzB,CACF,CAAA;AAXU,QAAA,YAAY,gBAWtB"}
@@ -0,0 +1,17 @@
1
+ import { pipe } from "@effect-ts/core/Function"
2
+ import * as CB from "callbag-effect-ts"
3
+ import { GatewayEvent, GatewayEvents, GatewayPayload } from "../types"
4
+ import { memoize } from "../Utils/memoize"
5
+
6
+ export const fromDispatch = <R, E>(
7
+ source: CB.EffectSource<R, E, GatewayPayload<GatewayEvent>>,
8
+ ): (<K extends keyof GatewayEvents>(
9
+ event: K,
10
+ ) => CB.EffectSource<R, E, GatewayEvents[K]>) =>
11
+ memoize((event) =>
12
+ pipe(
13
+ CB.filter_(source, (p) => p.t === event),
14
+ CB.map((p) => p.d as any),
15
+ CB.share,
16
+ ),
17
+ )
@@ -0,0 +1,3 @@
1
+ import * as Axios from "axios";
2
+ import { Response } from "./types";
3
+ export declare const request: (axios: Axios.AxiosInstance) => <A>(config: Axios.AxiosRequestConfig) => Response<A>;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.request = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const tracing_1 = tslib_1.__importStar(require("@effect-ts/core/Tracing"));
6
+ const fileName_1 = "DiscordREST/http.ts";
7
+ const T = tslib_1.__importStar(require("@effect-ts/core/Effect"));
8
+ const request = (axios) => (config) => T.tryCatchPromise(() => axios.request(config).then((r) => r.data), (err) => {
9
+ const axiosErr = err;
10
+ return axiosErr.response
11
+ ? {
12
+ _tag: "http",
13
+ config: axiosErr.config,
14
+ code: axiosErr.response.status,
15
+ body: axiosErr.response.data,
16
+ }
17
+ : { _tag: "axios", cause: axiosErr };
18
+ }, fileName_1 + ":8:22");
19
+ exports.request = request;
20
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["http.ts"],"names":[],"mappings":";;;;;;AAAA,kEAA2C;AAIpC,MAAM,OAAO,GAClB,CAAC,KAA0B,EAAE,EAAE,CAC/B,CAAI,MAAgC,EAAe,EAAE,CACnD,CAAC,CAAC,eAAe,CACf,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAI,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAClD,CAAC,GAAG,EAAE,EAAE;IACN,MAAM,QAAQ,GAAG,GAA0B,CAAA;IAC3C,OAAO,QAAQ,CAAC,QAAQ;QACtB,CAAC,CAAC;YACE,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM;YAC9B,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI;SAC7B;QACH,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAmC,EAAE,CAAA;AACnE,CAAC,uBACF,CAAA;AAhBQ,QAAA,OAAO,WAgBf"}
@@ -0,0 +1,21 @@
1
+ import * as T from "@effect-ts/core/Effect"
2
+ import * as Axios from "axios"
3
+ import { RESTError, Response } from "./types"
4
+
5
+ export const request =
6
+ (axios: Axios.AxiosInstance) =>
7
+ <A>(config: Axios.AxiosRequestConfig): Response<A> =>
8
+ T.tryCatchPromise<RESTError, A>(
9
+ () => axios.request<A>(config).then((r) => r.data),
10
+ (err) => {
11
+ const axiosErr = err as Axios.AxiosError<A>
12
+ return axiosErr.response
13
+ ? {
14
+ _tag: "http",
15
+ config: axiosErr.config,
16
+ code: axiosErr.response.status,
17
+ body: axiosErr.response.data,
18
+ }
19
+ : { _tag: "axios", cause: axiosErr as Axios.AxiosError<never> }
20
+ },
21
+ )
@@ -0,0 +1,15 @@
1
+ import * as T from "@effect-ts/core/Effect";
2
+ import { _A } from "@effect-ts/core/Utils";
3
+ import { AxiosRequestConfig } from "axios";
4
+ import * as Config from "../DiscordConfig";
5
+ declare const make: T.Effect<import("@effect-ts/system/Has").Has<Config.DiscordConfig>, never, {
6
+ _tag: string;
7
+ axios: import("axios").AxiosInstance;
8
+ request: <A>(config: AxiosRequestConfig<any>) => import("./types").Response<A>;
9
+ }>;
10
+ export interface DiscordREST extends _A<typeof make> {
11
+ }
12
+ export declare const DiscordREST: import("@effect-ts/system/Has").Tag<DiscordREST>;
13
+ export declare const LiveDiscordREST: import("@effect-ts/system/Layer").Layer<import("@effect-ts/system/Has").Has<Config.DiscordConfig>, never, import("@effect-ts/system/Has").Has<DiscordREST>>;
14
+ export declare const rest: import("../types").Endpoints<AxiosRequestConfig<any>>;
15
+ export {};
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.rest = exports.LiveDiscordREST = exports.DiscordREST = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const tracing_1 = tslib_1.__importStar(require("@effect-ts/core/Tracing"));
6
+ const fileName_1 = "DiscordREST/index.ts";
7
+ const T = tslib_1.__importStar(require("@effect-ts/core/Effect"));
8
+ const Has_1 = require("@effect-ts/core/Has");
9
+ const axios_1 = tslib_1.__importDefault(require("axios"));
10
+ const Config = tslib_1.__importStar(require("../DiscordConfig"));
11
+ const types_1 = require("../types");
12
+ const Http = tslib_1.__importStar(require("./http"));
13
+ const make = T.gen(function* (_) {
14
+ const token = yield* _(Config.token, fileName_1 + ":15:25");
15
+ const config = yield* _(Config.rest, fileName_1 + ":16:26");
16
+ const axios = axios_1.default.create({
17
+ baseURL: config.baseUrl,
18
+ headers: {
19
+ Authorization: `Bot ${token}`,
20
+ },
21
+ });
22
+ const request = Http.request(axios);
23
+ return {
24
+ _tag: "DiscordREST",
25
+ axios,
26
+ request,
27
+ };
28
+ }, fileName_1 + ":14:19");
29
+ exports.DiscordREST = (0, Has_1.tag)();
30
+ exports.LiveDiscordREST = T.toLayer(exports.DiscordREST)(make);
31
+ exports.rest = (0, types_1.createRoutes)(({ method, url, params = {}, options = {} }) => T.accessServiceM(exports.DiscordREST)(({ request }) => {
32
+ const hasBody = method !== "GET" && method !== "DELETE";
33
+ let hasFormData = false;
34
+ if (typeof options.data?.append === "function") {
35
+ hasFormData = true;
36
+ options.data.append("payload_json", JSON.stringify(params));
37
+ }
38
+ const qsParams = hasBody
39
+ ? options.params
40
+ : {
41
+ ...(options.params || {}),
42
+ ...params,
43
+ };
44
+ const data = hasFormData || !hasBody
45
+ ? options.data
46
+ : {
47
+ ...(options.data || {}),
48
+ ...params,
49
+ };
50
+ const config = {
51
+ ...options,
52
+ headers: {
53
+ ...(options.headers || {}),
54
+ ...(hasFormData ? data.getHeaders() : {}),
55
+ },
56
+ method: method,
57
+ url,
58
+ params: qsParams,
59
+ data,
60
+ };
61
+ return request(config);
62
+ }, fileName_1 + ":39:34"));
63
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;;AAAA,kEAA2C;AAC3C,6CAAyC;AAEzC,0DAAyD;AACzD,iEAA0C;AAC1C,oCAAuC;AACvC,qDAA8B;AAO9B,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,wBAAC,CAAA;IACpC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,wBAAC,CAAA;IAEpC,MAAM,KAAK,GAAG,eAAK,CAAC,MAAM,CAAC;QACzB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE;YACP,aAAa,EAAE,OAAO,KAAK,EAAE;SAC9B;KACF,CAAC,CAAA;IACF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAEnC,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,KAAK;QACL,OAAO;KACR,CAAA;AACH,CAAC,wBAAC,CAAA;AAGW,QAAA,WAAW,GAAG,IAAA,SAAG,GAAe,CAAA;AAChC,QAAA,eAAe,GAAG,CAAC,CAAC,OAAO,CAAC,mBAAW,CAAC,CAAC,IAAI,CAAC,CAAA;AAE9C,QAAA,IAAI,GAAG,IAAA,oBAAY,EAC9B,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE,EAAE,CAC7C,CAAC,CAAC,cAAc,CAAC,mBAAW,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;IAC5C,MAAM,OAAO,GAAG,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,QAAQ,CAAA;IACvD,IAAI,WAAW,GAAG,KAAK,CAAA;IAEvB,IAAI,OAAO,OAAO,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,EAAE;QAC9C,WAAW,GAAG,IAAI,CACjB;QAAC,OAAO,CAAC,IAAiB,CAAC,MAAM,CAChC,cAAc,EACd,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CACvB,CAAA;KACF;IAED,MAAM,QAAQ,GAAG,OAAO;QACtB,CAAC,CAAC,OAAO,CAAC,MAAM;QAChB,CAAC,CAAC;YACE,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;YACzB,GAAG,MAAM;SACV,CAAA;IACL,MAAM,IAAI,GACR,WAAW,IAAI,CAAC,OAAO;QACrB,CAAC,CAAC,OAAO,CAAC,IAAI;QACd,CAAC,CAAC;YACE,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;YACvB,GAAG,MAAM;SACV,CAAA;IAEP,MAAM,MAAM,GAAG;QACb,GAAG,OAAO;QACV,OAAO,EAAE;YACP,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;YAC1B,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1C;QACD,MAAM,EAAE,MAAgB;QACxB,GAAG;QACH,MAAM,EAAE,QAAQ;QAChB,IAAI;KACL,CAAA;IAED,OAAO,OAAO,CAAC,MAAM,CAAC,CAAA;AACxB,CAAC,wBAAC,CACL,CAAA"}
@@ -0,0 +1,79 @@
1
+ import * as T from "@effect-ts/core/Effect"
2
+ import { tag } from "@effect-ts/core/Has"
3
+ import { _A } from "@effect-ts/core/Utils"
4
+ import Axios, { AxiosRequestConfig, Method } from "axios"
5
+ import * as Config from "../DiscordConfig"
6
+ import { createRoutes } from "../types"
7
+ import * as Http from "./http"
8
+
9
+ interface FormData {
10
+ append: (key: string, value: unknown) => void
11
+ getHeaders: () => Record<string, string>
12
+ }
13
+
14
+ const make = T.gen(function* (_) {
15
+ const token = yield* _(Config.token)
16
+ const config = yield* _(Config.rest)
17
+
18
+ const axios = Axios.create({
19
+ baseURL: config.baseUrl,
20
+ headers: {
21
+ Authorization: `Bot ${token}`,
22
+ },
23
+ })
24
+ const request = Http.request(axios)
25
+
26
+ return {
27
+ _tag: "DiscordREST",
28
+ axios,
29
+ request,
30
+ }
31
+ })
32
+
33
+ export interface DiscordREST extends _A<typeof make> {}
34
+ export const DiscordREST = tag<DiscordREST>()
35
+ export const LiveDiscordREST = T.toLayer(DiscordREST)(make)
36
+
37
+ export const rest = createRoutes<AxiosRequestConfig>(
38
+ ({ method, url, params = {}, options = {} }) =>
39
+ T.accessServiceM(DiscordREST)(({ request }) => {
40
+ const hasBody = method !== "GET" && method !== "DELETE"
41
+ let hasFormData = false
42
+
43
+ if (typeof options.data?.append === "function") {
44
+ hasFormData = true
45
+ ;(options.data as FormData).append(
46
+ "payload_json",
47
+ JSON.stringify(params),
48
+ )
49
+ }
50
+
51
+ const qsParams = hasBody
52
+ ? options.params
53
+ : {
54
+ ...(options.params || {}),
55
+ ...params,
56
+ }
57
+ const data =
58
+ hasFormData || !hasBody
59
+ ? options.data
60
+ : {
61
+ ...(options.data || {}),
62
+ ...params,
63
+ }
64
+
65
+ const config = {
66
+ ...options,
67
+ headers: {
68
+ ...(options.headers || {}),
69
+ ...(hasFormData ? data.getHeaders() : {}),
70
+ },
71
+ method: method as Method,
72
+ url,
73
+ params: qsParams,
74
+ data,
75
+ }
76
+
77
+ return request(config)
78
+ }),
79
+ )
@@ -1,7 +1,14 @@
1
1
  import * as T from "@effect-ts/core/Effect";
2
+ import { Has } from "@effect-ts/core/Has";
3
+ import { AxiosError, AxiosRequestConfig } from "axios";
4
+ import { DiscordREST } from ".";
2
5
  export declare type RESTError = {
3
6
  _tag: "http";
7
+ config: AxiosRequestConfig<unknown>;
4
8
  code: number;
5
9
  body?: unknown;
10
+ } | {
11
+ _tag: "axios";
12
+ cause: AxiosError<never>;
6
13
  };
7
- export declare type Response<T> = T.IO<RESTError, T>;
14
+ export declare type Response<T> = T.Effect<Has<DiscordREST>, RESTError, T>;
@@ -1,5 +1,15 @@
1
1
  import * as T from "@effect-ts/core/Effect"
2
+ import { Has } from "@effect-ts/core/Has"
3
+ import { AxiosError, AxiosRequestConfig } from "axios"
4
+ import { DiscordREST } from "."
2
5
 
3
- export type RESTError = { _tag: "http"; code: number; body?: unknown }
6
+ export type RESTError =
7
+ | {
8
+ _tag: "http"
9
+ config: AxiosRequestConfig<unknown>
10
+ code: number
11
+ body?: unknown
12
+ }
13
+ | { _tag: "axios"; cause: AxiosError<never> }
4
14
 
5
- export type Response<T> = T.IO<RESTError, T>
15
+ export type Response<T> = T.Effect<Has<DiscordREST>, RESTError, T>
@@ -1,7 +1,6 @@
1
- import * as S from "@effect-ts/core/Effect/Experimental/Stream";
2
- import * as H from "@effect-ts/core/Effect/Hub";
3
1
  import * as R from "@effect-ts/core/Effect/Ref";
4
2
  import * as O from "@effect-ts/core/Option";
3
+ import * as CB from "callbag-effect-ts";
5
4
  import * as DWS from "../DiscordWS";
6
5
  import { GatewayPayload } from "../types";
7
- export declare const fromHub: (hub: H.Hub<GatewayPayload<any>>, seqRef: R.Ref<O.Option<number>>) => S.Stream<import("@effect-ts/system/Has").Has<import("@effect-ts/system/Clock").Clock>, never, DWS.Message>;
6
+ export declare const fromRaw: <R, E>(source: CB.EffectSource<R, E, GatewayPayload<any>>, seqRef: R.Ref<O.Option<number>>) => CB.EffectSource<R & import("@effect-ts/system/Clock").HasClock, E, DWS.Message>;
@@ -1,33 +1,29 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.fromHub = void 0;
3
+ exports.fromRaw = 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 = "DiscordShard/heartbeats.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 R = tslib_1.__importStar(require("@effect-ts/core/Effect/Ref"));
9
+ const SC = tslib_1.__importStar(require("@effect-ts/core/Effect/Schedule"));
10
10
  const Function_1 = require("@effect-ts/core/Function");
11
11
  const O = tslib_1.__importStar(require("@effect-ts/core/Option"));
12
+ const CB = tslib_1.__importStar(require("callbag-effect-ts"));
12
13
  const types_1 = require("../types");
13
14
  const WS_1 = require("../WS");
14
15
  const Commands = tslib_1.__importStar(require("./commands"));
15
16
  const Utils = tslib_1.__importStar(require("./utils"));
16
17
  const send = (ref, seqRef) => (T.tap_(T.map_(R.get(seqRef), (o) => Commands.heartbeat(O.toNullable(o)), fileName_1 + ":16:10"), () => R.set_(ref, false), fileName_1 + ":17:10"));
17
18
  const maybeSend = (ref, seqRef) => (T.chain_(R.get(ref), (acked) => acked ? send(ref, seqRef) : T.succeed(WS_1.Reconnect, fileName_1 + ":25:46"), fileName_1 + ":23:12"));
18
- const fromHub = (hub, seqRef) => (S.unwrap(T.map_(R.makeRef(true), (ackedRef) => {
19
+ const fromRaw = (source, seqRef) => (CB.unwrap(T.map_(R.makeRef(true), (ackedRef) => {
19
20
  const heartbeats = (
20
21
  // Map to gateway message depending on ack state
21
- S.mapEffect_(S.chainParSwitch_(
22
+ CB.mapEffect_(CB.switchMap_(
22
23
  // Reset ack state for each hello
23
- S.tap_(Utils.opCode(hub)(types_1.GatewayOpcode.HELLO), () => R.set_(ackedRef, true)), (p) => {
24
- const initial = p.d.heartbeat_interval * Math.random();
25
- return S.merge_(
26
- // First random heartbeat
27
- S.fromEffect(T.sleep(initial, fileName_1 + ":47:33")), (S.chain_(S.fromEffect(T.sleep(initial, fileName_1 + ":50:35")), () => S.repeatEffect(T.sleep(p.d.heartbeat_interval, fileName_1 + ":51:51")))));
28
- }, 1), () => maybeSend(ackedRef, seqRef)));
29
- const acks = (S.drain(S.tap_(Utils.opCode(hub)(types_1.GatewayOpcode.HEARTBEAT_ACK), () => R.set_(ackedRef, true))));
30
- return S.merge_(heartbeats, acks);
24
+ CB.tap_(Utils.opCode(source)(types_1.GatewayOpcode.HELLO), () => R.set_(ackedRef, true)), (p) => CB.fromSchedule(SC.duration(p.d.heartbeat_interval * Math.random())["++"](SC.spaced(p.d.heartbeat_interval)))), () => maybeSend(ackedRef, seqRef)));
25
+ const acks = (CB.drain(CB.tap_(Utils.opCode(source)(types_1.GatewayOpcode.HEARTBEAT_ACK), () => R.set_(ackedRef, true))));
26
+ return CB.merge_(heartbeats, acks);
31
27
  }, fileName_1 + ":36:10")));
32
- exports.fromHub = fromHub;
28
+ exports.fromRaw = fromRaw;
33
29
  //# sourceMappingURL=heartbeats.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"heartbeats.js","sourceRoot":"","sources":["heartbeats.ts"],"names":[],"mappings":";;;;;;AAAA,kEAA2C;AAC3C,sFAA+D;AAE/D,sEAA+C;AAC/C,uDAA+C;AAC/C,kEAA2C;AAE3C,oCAAoE;AACpE,8BAAiC;AACjC,6DAAsC;AACtC,uDAAgC;AAEhC,MAAM,IAAI,GAAG,CAAC,GAAmB,EAAE,MAA+B,EAAE,EAAE,EAIlE,CAAC,MADD,CAAC,MADD,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EACP,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,0BAC1C,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,yBAC/B,CAAA;AAEH,MAAM,SAAS,GAAG,CAAC,GAAmB,EAAE,MAA+B,EAAE,EAAE,EAGvE,CAAC,QADD,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAER,CAAC,KAAK,EAAsB,EAAE,CAC5B,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAS,wBAAC,yBAErD,CAAA;AAEI,MAAM,OAAO,GAAG,CACrB,GAA0B,EAC1B,MAA+B,EAC/B,EAAE,EAqCA,CAAC,CAAC,MAAM,CAjCR,CAAC,MAFD,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAET,CAAC,QAAQ,EAAE,EAAE;IACjB,MAAM,UAAU;IAmBd,gDAAgD;IAChD,CAAC,YAdD,CAAC;IAHD,iCAAiC;IACjC,CAAC,MAHD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAa,qBAAa,CAAC,KAAK,CAAC,EAG5C,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,GAEjB,CAAC,CAAC,EAAE,EAAE;QACrB,MAAM,OAAO,GAAG,CAAC,CAAC,CAAE,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;QACvD,OAAO,CAAC,CAAC,MAAM;QACb,yBAAyB;QACzB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAC,CAAC,GAI5B,CAAC,QADD,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAC,CAAC,EACtB,GAAG,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,CAAC,kBAAkB,wBAAC,CAAC,GAEjE,CAAA;IACH,CAAC,EAAE,CAAC,GAGQ,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,EAC9C,CAAA;IAED,MAAM,IAAI,IAGR,CAAC,CAAC,KAAK,CADP,CAAC,MADD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,qBAAa,CAAC,aAAa,CAAC,EACxC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,GAEnC,CAAA;IAED,OAAO,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AACnC,CAAC,0BAGF,CAAA;AAzCU,QAAA,OAAO,WAyCjB"}
1
+ {"version":3,"file":"heartbeats.js","sourceRoot":"","sources":["heartbeats.ts"],"names":[],"mappings":";;;;;;AAAA,kEAA2C;AAC3C,sEAA+C;AAC/C,4EAAqD;AACrD,uDAA+C;AAC/C,kEAA2C;AAC3C,8DAAuC;AAEvC,oCAAoE;AACpE,8BAAiC;AACjC,6DAAsC;AACtC,uDAAgC;AAEhC,MAAM,IAAI,GAAG,CAAC,GAAmB,EAAE,MAA+B,EAAE,EAAE,EAIlE,CAAC,MADD,CAAC,MADD,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EACP,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,0BAC1C,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,yBAC/B,CAAA;AAEH,MAAM,SAAS,GAAG,CAAC,GAAmB,EAAE,MAA+B,EAAE,EAAE,EAGvE,CAAC,QADD,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAER,CAAC,KAAK,EAAsB,EAAE,CAC5B,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAS,wBAAC,yBAErD,CAAA;AAEI,MAAM,OAAO,GAAG,CACrB,MAA6C,EAC7C,MAA+B,EAC/B,EAAE,EAgCA,EAAE,CAAC,MAAM,CA5BT,CAAC,MAFD,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAET,CAAC,QAAQ,EAAE,EAAE;IACjB,MAAM,UAAU;IAcd,gDAAgD;IAChD,EAAE,YATF,EAAE;IAHF,iCAAiC;IACjC,EAAE,MAHF,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAa,qBAAa,CAAC,KAAK,CAAC,EAG9C,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,GAEtB,CAAC,CAAC,EAAE,EAAE,CACjB,EAAE,CAAC,YAAY,CACb,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAE,CAAC,kBAAkB,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CACxD,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,CAAC,kBAAkB,CAAC,CACnC,CACF,GAIU,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,EAC/C,CAAA;IAED,MAAM,IAAI,IAGR,EAAE,CAAC,KAAK,CADR,EAAE,MADF,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,qBAAa,CAAC,aAAa,CAAC,EAC1C,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,GAEpC,CAAA;IAED,OAAO,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AACpC,CAAC,0BAGF,CAAA;AApCU,QAAA,OAAO,WAoCjB"}