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
@@ -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, unknown, 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, unknown, 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, unknown, 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, unknown, 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,11 @@
1
+ import * as T from "@effect-ts/core/Effect";
2
+ import { AxiosInstance, AxiosRequestConfig } from "axios";
3
+ import * as Config from "../DiscordConfig";
4
+ import { Endpoints } from "../types";
5
+ export interface DiscordREST extends Endpoints<AxiosRequestConfig> {
6
+ _tag: "DiscordREST";
7
+ axios: AxiosInstance;
8
+ }
9
+ export declare const DiscordREST: import("@effect-ts/system/Has").Tag<DiscordREST>;
10
+ 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>>;
11
+ export declare const rest: <R, E, B>(f: (a: DiscordREST) => T.Effect<R, E, B>, __trace?: string | undefined) => T.Effect<R & import("@effect-ts/system/Has").Has<DiscordREST>, E, B>;
@@ -0,0 +1,65 @@
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/system/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
+ exports.DiscordREST = (0, Has_1.tag)();
14
+ const make = T.gen(function* (_) {
15
+ const token = yield* _(Config.token, fileName_1 + ":20:25");
16
+ const config = yield* _(Config.rest, fileName_1 + ":21:26");
17
+ const axios = axios_1.default.create({
18
+ baseURL: config.baseUrl,
19
+ headers: {
20
+ Authorization: `Bot ${token}`,
21
+ },
22
+ });
23
+ const request = Http.request(axios);
24
+ const routes = (0, types_1.createRoutes)(({ method, url, params = {}, options = {} }) => {
25
+ const hasBody = method !== "GET" && method !== "DELETE";
26
+ let hasFormData = false;
27
+ if (typeof options.data?.append === "function") {
28
+ hasFormData = true;
29
+ options.data.append("payload_json", JSON.stringify(params));
30
+ }
31
+ const qsParams = hasBody
32
+ ? options.params
33
+ : {
34
+ ...(options.params || {}),
35
+ ...params,
36
+ };
37
+ const data = hasFormData || !hasBody
38
+ ? options.data
39
+ : {
40
+ ...(options.data || {}),
41
+ ...params,
42
+ };
43
+ const config = {
44
+ ...options,
45
+ headers: {
46
+ ...(options.headers || {}),
47
+ ...(hasFormData ? data.getHeaders() : {}),
48
+ },
49
+ method: method,
50
+ url,
51
+ params: qsParams,
52
+ data,
53
+ };
54
+ return request(config);
55
+ });
56
+ const rest = {
57
+ _tag: "DiscordREST",
58
+ axios,
59
+ ...routes,
60
+ };
61
+ return rest;
62
+ }, fileName_1 + ":19:19");
63
+ exports.LiveDiscordREST = T.toLayer(exports.DiscordREST)(make);
64
+ exports.rest = T.accessServiceM(exports.DiscordREST);
65
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;;;;AAAA,kEAA2C;AAC3C,+CAA2C;AAC3C,0DAAwE;AACxE,iEAA0C;AAC1C,oCAAkD;AAClD,qDAA8B;AAMjB,QAAA,WAAW,GAAG,IAAA,SAAG,GAAe,CAAA;AAO7C,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;IACnC,MAAM,MAAM,GAAG,IAAA,oBAAY,EACzB,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE,EAAE;QAC7C,MAAM,OAAO,GAAG,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,QAAQ,CAAA;QACvD,IAAI,WAAW,GAAG,KAAK,CAAA;QAEvB,IAAI,OAAO,OAAO,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,EAAE;YAC9C,WAAW,GAAG,IAAI,CACjB;YAAC,OAAO,CAAC,IAAiB,CAAC,MAAM,CAChC,cAAc,EACd,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CACvB,CAAA;SACF;QAED,MAAM,QAAQ,GAAG,OAAO;YACtB,CAAC,CAAC,OAAO,CAAC,MAAM;YAChB,CAAC,CAAC;gBACE,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;gBACzB,GAAG,MAAM;aACV,CAAA;QACL,MAAM,IAAI,GACR,WAAW,IAAI,CAAC,OAAO;YACrB,CAAC,CAAC,OAAO,CAAC,IAAI;YACd,CAAC,CAAC;gBACE,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;gBACvB,GAAG,MAAM;aACV,CAAA;QAEP,MAAM,MAAM,GAAG;YACb,GAAG,OAAO;YACV,OAAO,EAAE;gBACP,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;gBAC1B,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1C;YACD,MAAM,EAAE,MAAgB;YACxB,GAAG;YACH,MAAM,EAAE,QAAQ;YAChB,IAAI;SACL,CAAA;QACD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAA;IACxB,CAAC,CACF,CAAA;IAED,MAAM,IAAI,GAAgB;QACxB,IAAI,EAAE,aAAa;QACnB,KAAK;QACL,GAAG,MAAM;KACV,CAAA;IAED,OAAO,IAAI,CAAA;AACb,CAAC,wBAAC,CAAA;AAEW,QAAA,eAAe,GAAG,CAAC,CAAC,OAAO,CAAC,mBAAW,CAAC,CAAC,IAAI,CAAC,CAAA;AAE9C,QAAA,IAAI,GAAG,CAAC,CAAC,cAAc,CAAC,mBAAW,CAAC,CAAA"}
@@ -0,0 +1,83 @@
1
+ import * as T from "@effect-ts/core/Effect"
2
+ import { tag } from "@effect-ts/system/Has"
3
+ import Axios, { AxiosInstance, AxiosRequestConfig, Method } from "axios"
4
+ import * as Config from "../DiscordConfig"
5
+ import { createRoutes, Endpoints } from "../types"
6
+ import * as Http from "./http"
7
+
8
+ export interface DiscordREST extends Endpoints<AxiosRequestConfig> {
9
+ _tag: "DiscordREST"
10
+ axios: AxiosInstance
11
+ }
12
+ export const DiscordREST = tag<DiscordREST>()
13
+
14
+ interface FormData {
15
+ append: (key: string, value: unknown) => void
16
+ getHeaders: () => Record<string, string>
17
+ }
18
+
19
+ const make = T.gen(function* (_) {
20
+ const token = yield* _(Config.token)
21
+ const config = yield* _(Config.rest)
22
+
23
+ const axios = Axios.create({
24
+ baseURL: config.baseUrl,
25
+ headers: {
26
+ Authorization: `Bot ${token}`,
27
+ },
28
+ })
29
+ const request = Http.request(axios)
30
+ const routes = createRoutes<AxiosRequestConfig>(
31
+ ({ method, url, params = {}, options = {} }) => {
32
+ const hasBody = method !== "GET" && method !== "DELETE"
33
+ let hasFormData = false
34
+
35
+ if (typeof options.data?.append === "function") {
36
+ hasFormData = true
37
+ ;(options.data as FormData).append(
38
+ "payload_json",
39
+ JSON.stringify(params),
40
+ )
41
+ }
42
+
43
+ const qsParams = hasBody
44
+ ? options.params
45
+ : {
46
+ ...(options.params || {}),
47
+ ...params,
48
+ }
49
+ const data =
50
+ hasFormData || !hasBody
51
+ ? options.data
52
+ : {
53
+ ...(options.data || {}),
54
+ ...params,
55
+ }
56
+
57
+ const config = {
58
+ ...options,
59
+ headers: {
60
+ ...(options.headers || {}),
61
+ ...(hasFormData ? data.getHeaders() : {}),
62
+ },
63
+ method: method as Method,
64
+ url,
65
+ params: qsParams,
66
+ data,
67
+ }
68
+ return request(config)
69
+ },
70
+ )
71
+
72
+ const rest: DiscordREST = {
73
+ _tag: "DiscordREST",
74
+ axios,
75
+ ...routes,
76
+ }
77
+
78
+ return rest
79
+ })
80
+
81
+ export const LiveDiscordREST = T.toLayer(DiscordREST)(make)
82
+
83
+ export const rest = T.accessServiceM(DiscordREST)
@@ -1,7 +1,12 @@
1
1
  import * as T from "@effect-ts/core/Effect";
2
+ import { AxiosError, AxiosRequestConfig } from "axios";
2
3
  export declare type RESTError = {
3
4
  _tag: "http";
5
+ config: AxiosRequestConfig<unknown>;
4
6
  code: number;
5
7
  body?: unknown;
8
+ } | {
9
+ _tag: "axios";
10
+ cause: AxiosError<never>;
6
11
  };
7
12
  export declare type Response<T> = T.IO<RESTError, T>;
@@ -1,5 +1,13 @@
1
1
  import * as T from "@effect-ts/core/Effect"
2
+ import { AxiosError, AxiosRequestConfig } from "axios"
2
3
 
3
- export type RESTError = { _tag: "http"; code: number; body?: unknown }
4
+ export type RESTError =
5
+ | {
6
+ _tag: "http"
7
+ config: AxiosRequestConfig<unknown>
8
+ code: number
9
+ body?: unknown
10
+ }
11
+ | { _tag: "axios"; cause: AxiosError<never> }
4
12
 
5
13
  export type Response<T> = T.IO<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"}