dfx 0.77.3 → 0.79.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 (139) hide show
  1. package/Cache/prelude.d.ts +3 -3
  2. package/DiscordConfig.d.ts +8 -10
  3. package/DiscordConfig.d.ts.map +1 -1
  4. package/DiscordConfig.js +1 -3
  5. package/DiscordConfig.js.map +1 -1
  6. package/DiscordGateway/DiscordWS.d.ts +12 -11
  7. package/DiscordGateway/DiscordWS.d.ts.map +1 -1
  8. package/DiscordGateway/DiscordWS.js +8 -5
  9. package/DiscordGateway/DiscordWS.js.map +1 -1
  10. package/DiscordGateway/Messaging.d.ts +28 -0
  11. package/DiscordGateway/Messaging.d.ts.map +1 -0
  12. package/DiscordGateway/Messaging.js +41 -0
  13. package/DiscordGateway/Messaging.js.map +1 -0
  14. package/DiscordGateway/Shard.d.ts +14 -11
  15. package/DiscordGateway/Shard.d.ts.map +1 -1
  16. package/DiscordGateway/Shard.js +22 -19
  17. package/DiscordGateway/Shard.js.map +1 -1
  18. package/DiscordGateway/ShardStore.d.ts +5 -2
  19. package/DiscordGateway/ShardStore.d.ts.map +1 -1
  20. package/DiscordGateway/ShardStore.js +1 -1
  21. package/DiscordGateway/ShardStore.js.map +1 -1
  22. package/DiscordGateway/Sharder.d.ts +9 -18
  23. package/DiscordGateway/Sharder.d.ts.map +1 -1
  24. package/DiscordGateway/Sharder.js +36 -45
  25. package/DiscordGateway/Sharder.js.map +1 -1
  26. package/DiscordGateway/WS.d.ts +14 -10
  27. package/DiscordGateway/WS.d.ts.map +1 -1
  28. package/DiscordGateway/WS.js +31 -21
  29. package/DiscordGateway/WS.js.map +1 -1
  30. package/DiscordGateway.d.ts +10 -7
  31. package/DiscordGateway.d.ts.map +1 -1
  32. package/DiscordGateway.js +13 -31
  33. package/DiscordGateway.js.map +1 -1
  34. package/DiscordREST.d.ts +6 -4
  35. package/DiscordREST.d.ts.map +1 -1
  36. package/DiscordREST.js +9 -8
  37. package/DiscordREST.js.map +1 -1
  38. package/Interactions/context.d.ts +36 -18
  39. package/Interactions/context.d.ts.map +1 -1
  40. package/Interactions/context.js +6 -6
  41. package/Interactions/context.js.map +1 -1
  42. package/Interactions/definitions.d.ts +11 -11
  43. package/Interactions/definitions.d.ts.map +1 -1
  44. package/Interactions/definitions.js.map +1 -1
  45. package/Interactions/gateway.d.ts +7 -6
  46. package/Interactions/gateway.d.ts.map +1 -1
  47. package/Interactions/gateway.js +1 -1
  48. package/Interactions/gateway.js.map +1 -1
  49. package/Interactions/handlers.d.ts +2 -1
  50. package/Interactions/handlers.d.ts.map +1 -1
  51. package/Interactions/webhook.d.ts +7 -8
  52. package/Interactions/webhook.d.ts.map +1 -1
  53. package/Interactions/webhook.js +3 -3
  54. package/Interactions/webhook.js.map +1 -1
  55. package/README.md +37 -29
  56. package/RateLimit/memory.d.ts +2 -2
  57. package/RateLimit/memory.d.ts.map +1 -1
  58. package/RateLimit/memory.js.map +1 -1
  59. package/RateLimit.d.ts +10 -9
  60. package/RateLimit.d.ts.map +1 -1
  61. package/RateLimit.js +4 -5
  62. package/RateLimit.js.map +1 -1
  63. package/gateway.d.ts +2 -2
  64. package/gateway.d.ts.map +1 -1
  65. package/gateway.js +1 -2
  66. package/gateway.js.map +1 -1
  67. package/index.d.ts +1 -2
  68. package/index.d.ts.map +1 -1
  69. package/index.js +1 -3
  70. package/index.js.map +1 -1
  71. package/mjs/DiscordConfig.mjs +1 -3
  72. package/mjs/DiscordConfig.mjs.map +1 -1
  73. package/mjs/DiscordGateway/DiscordWS.mjs +8 -5
  74. package/mjs/DiscordGateway/DiscordWS.mjs.map +1 -1
  75. package/mjs/DiscordGateway/Messaging.mjs +33 -0
  76. package/mjs/DiscordGateway/Messaging.mjs.map +1 -0
  77. package/mjs/DiscordGateway/Shard.mjs +22 -19
  78. package/mjs/DiscordGateway/Shard.mjs.map +1 -1
  79. package/mjs/DiscordGateway/ShardStore.mjs +1 -1
  80. package/mjs/DiscordGateway/ShardStore.mjs.map +1 -1
  81. package/mjs/DiscordGateway/Sharder.mjs +35 -44
  82. package/mjs/DiscordGateway/Sharder.mjs.map +1 -1
  83. package/mjs/DiscordGateway/WS.mjs +32 -22
  84. package/mjs/DiscordGateway/WS.mjs.map +1 -1
  85. package/mjs/DiscordGateway.mjs +12 -30
  86. package/mjs/DiscordGateway.mjs.map +1 -1
  87. package/mjs/DiscordREST.mjs +9 -8
  88. package/mjs/DiscordREST.mjs.map +1 -1
  89. package/mjs/Interactions/context.mjs +6 -6
  90. package/mjs/Interactions/context.mjs.map +1 -1
  91. package/mjs/Interactions/definitions.mjs.map +1 -1
  92. package/mjs/Interactions/gateway.mjs +1 -1
  93. package/mjs/Interactions/gateway.mjs.map +1 -1
  94. package/mjs/Interactions/webhook.mjs +3 -3
  95. package/mjs/Interactions/webhook.mjs.map +1 -1
  96. package/mjs/RateLimit/memory.mjs.map +1 -1
  97. package/mjs/RateLimit.mjs +4 -5
  98. package/mjs/RateLimit.mjs.map +1 -1
  99. package/mjs/gateway.mjs +1 -2
  100. package/mjs/gateway.mjs.map +1 -1
  101. package/mjs/index.mjs +1 -2
  102. package/mjs/index.mjs.map +1 -1
  103. package/mjs/version.mjs +1 -1
  104. package/mjs/webhooks.mjs +1 -2
  105. package/mjs/webhooks.mjs.map +1 -1
  106. package/package.json +4 -4
  107. package/src/DiscordConfig.ts +10 -12
  108. package/src/DiscordGateway/DiscordWS.ts +23 -13
  109. package/src/DiscordGateway/Messaging.ts +72 -0
  110. package/src/DiscordGateway/Shard.ts +53 -35
  111. package/src/DiscordGateway/ShardStore.ts +8 -3
  112. package/src/DiscordGateway/Sharder.ts +72 -97
  113. package/src/DiscordGateway/WS.ts +64 -32
  114. package/src/DiscordGateway.ts +22 -71
  115. package/src/DiscordREST.ts +42 -29
  116. package/src/Interactions/context.ts +47 -10
  117. package/src/Interactions/definitions.ts +22 -20
  118. package/src/Interactions/gateway.ts +14 -6
  119. package/src/Interactions/handlers.ts +1 -1
  120. package/src/Interactions/webhook.ts +21 -7
  121. package/src/RateLimit/memory.ts +2 -2
  122. package/src/RateLimit.ts +17 -8
  123. package/src/gateway.ts +0 -2
  124. package/src/index.ts +0 -2
  125. package/src/version.ts +1 -1
  126. package/src/webhooks.ts +1 -2
  127. package/version.d.ts +1 -1
  128. package/version.js +1 -1
  129. package/webhooks.d.ts +1 -2
  130. package/webhooks.d.ts.map +1 -1
  131. package/webhooks.js +1 -2
  132. package/webhooks.js.map +1 -1
  133. package/Log.d.ts +0 -14
  134. package/Log.d.ts.map +0 -1
  135. package/Log.js +0 -23
  136. package/Log.js.map +0 -1
  137. package/mjs/Log.mjs +0 -15
  138. package/mjs/Log.mjs.map +0 -1
  139. package/src/Log.ts +0 -24
@@ -3,7 +3,7 @@ import { Tag } from "effect/Context";
3
3
  import * as Duration from "effect/Duration";
4
4
  import { pipe } from "effect/Function";
5
5
  import * as Option from "effect/Option";
6
- import * as ConfigSecret from "effect/ConfigSecret";
6
+ import * as Secret from "effect/Secret";
7
7
  import * as Effect from "effect/Effect";
8
8
  import * as PubSub from "effect/PubSub";
9
9
  import * as Layer from "effect/Layer";
@@ -16,9 +16,9 @@ import * as Identify from "dfx/DiscordGateway/Shard/identify";
16
16
  import * as InvalidSession from "dfx/DiscordGateway/Shard/invalidSession";
17
17
  import * as Utils from "dfx/DiscordGateway/Shard/utils";
18
18
  import { Reconnect } from "dfx/DiscordGateway/WS";
19
- import { Log } from "dfx/Log";
20
19
  import { RateLimiterLive, RateLimiter } from "dfx/RateLimit";
21
20
  import * as Discord from "dfx/types";
21
+ import { Messaging, MesssagingLive } from "dfx/DiscordGateway/Messaging";
22
22
  export const make = /*#__PURE__*/Effect.gen(function* (_) {
23
23
  const {
24
24
  gateway,
@@ -26,12 +26,15 @@ export const make = /*#__PURE__*/Effect.gen(function* (_) {
26
26
  } = yield* _(DiscordConfig);
27
27
  const limiter = yield* _(RateLimiter);
28
28
  const dws = yield* _(DiscordWS);
29
- const log = yield* _(Log);
30
- const connect = (shard, hub, sendQueue) => Effect.gen(function* (_) {
29
+ const {
30
+ hub,
31
+ sendQueue
32
+ } = yield* _(Messaging);
33
+ const connect = shard => Effect.gen(function* (_) {
31
34
  const outboundQueue = yield* _(Queue.unbounded());
32
35
  const pendingQueue = yield* _(Queue.unbounded());
33
36
  const phase = yield* _(Ref.make(0 /* Phase.Connecting */));
34
- const setPhase = p => Effect.zipLeft(Ref.set(phase, p), log.debug("Shard", shard, "phase", p));
37
+ const setPhase = p => Effect.zipLeft(Ref.set(phase, p), Effect.annotateLogs(Effect.logTrace("phase transition"), "phase", p));
35
38
  const outbound = Effect.zipLeft(Queue.take(outboundQueue), limiter.maybeWait("dfx.shard.send", Duration.minutes(1), 120));
36
39
  const send = p => Effect.flatMap(Ref.get(phase), phase => phase === 2 /* Phase.Connected */ ? Queue.offer(outboundQueue, p) : Queue.offer(pendingQueue, p));
37
40
  const heartbeatSend = p => Effect.flatMap(Ref.get(phase), phase => phase !== 0 /* Phase.Connecting */ ? Queue.offer(outboundQueue, p) : Effect.succeed(false));
@@ -51,13 +54,13 @@ export const make = /*#__PURE__*/Effect.gen(function* (_) {
51
54
  resume_gateway_url
52
55
  }) => socket.setUrl(resume_gateway_url)
53
56
  });
54
- const hellos = yield* _(Queue.unbounded());
55
- const acks = yield* _(Queue.unbounded());
57
+ const hellos = yield* _(Effect.acquireRelease(Queue.unbounded(), Queue.shutdown));
58
+ const acks = yield* _(Effect.acquireRelease(Queue.unbounded(), Queue.shutdown));
56
59
  // heartbeats
57
- const heartbeats = Heartbeats.send(hellos, acks, latestSequence, heartbeatSend);
60
+ yield* _(Heartbeats.send(hellos, acks, latestSequence, heartbeatSend), Effect.forkScoped);
58
61
  // identify
59
62
  const identify = Identify.identifyOrResume({
60
- token: ConfigSecret.value(token),
63
+ token: Secret.value(token),
61
64
  shard,
62
65
  intents: gateway.intents,
63
66
  presence: gateway.presence
@@ -79,21 +82,21 @@ export const make = /*#__PURE__*/Effect.gen(function* (_) {
79
82
  return Effect.unit;
80
83
  }
81
84
  }));
82
- const drainSendQueue = Effect.forever(Effect.tap(Queue.take(sendQueue), send));
83
- const run = Effect.all([Effect.forever(Effect.flatMap(socket.take, onPayload)), heartbeats, drainSendQueue, socket.run], {
84
- discard: true,
85
- concurrency: "unbounded"
86
- });
85
+ yield* _(Queue.take(sendQueue), Effect.tap(send), Effect.forever, Effect.forkScoped);
86
+ yield* _(socket.take, Effect.flatMap(onPayload), Effect.forever, Effect.forkScoped);
87
87
  return {
88
88
  id: shard,
89
- send,
90
- run
89
+ send
91
90
  };
92
- });
91
+ }).pipe(Effect.annotateLogs({
92
+ package: "dfx",
93
+ module: "DiscordGateway/Shard",
94
+ shard
95
+ }));
93
96
  return {
94
97
  connect
95
98
  };
96
99
  });
97
- export const Shard = /*#__PURE__*/Tag();
98
- export const ShardLive = /*#__PURE__*/Layer.provide( /*#__PURE__*/Layer.effect(Shard, make), /*#__PURE__*/Layer.merge(DiscordWSLive, RateLimiterLive));
100
+ export const Shard = /*#__PURE__*/Tag("dfx/DiscordGateway/Shard");
101
+ export const ShardLive = /*#__PURE__*/Layer.effect(Shard, make).pipe( /*#__PURE__*/Layer.provide(DiscordWSLive), /*#__PURE__*/Layer.provide(MesssagingLive), /*#__PURE__*/Layer.provide(RateLimiterLive));
99
102
  //# sourceMappingURL=Shard.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Shard.mjs","names":["Chunk","Tag","Duration","pipe","Option","ConfigSecret","Effect","PubSub","Layer","Queue","Ref","DiscordConfig","DiscordWS","DiscordWSLive","Heartbeats","Identify","InvalidSession","Utils","Reconnect","Log","RateLimiterLive","RateLimiter","Discord","make","gen","_","gateway","token","limiter","dws","log","connect","shard","hub","sendQueue","outboundQueue","unbounded","pendingQueue","phase","setPhase","p","zipLeft","set","debug","outbound","take","maybeWait","minutes","send","flatMap","get","offer","heartbeatSend","succeed","prioritySend","resume","zipRight","takeAll","tap","offerAll","asUnit","onConnecting","msgs","filter","msg","op","GatewayOpcode","IDENTIFY","RESUME","HEARTBEAT","socket","isReady","liftPredicate","DISPATCH","t","latestReady","updateLatestReady","latest","map","d","latestSequence","updateLatestSequence","fromNullable","s","maybeUpdateUrl","match","onNone","unit","onSome","resume_gateway_url","setUrl","hellos","acks","heartbeats","identify","identifyOrResume","value","intents","presence","onPayload","HELLO","HEARTBEAT_ACK","INVALID_SESSION","fromPayload","publish","drainSendQueue","forever","run","all","discard","concurrency","id","Shard","ShardLive","provide","effect","merge"],"sources":["../../src/DiscordGateway/Shard.ts"],"sourcesContent":[null],"mappings":"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"}
1
+ {"version":3,"file":"Shard.mjs","names":["Chunk","Tag","Duration","pipe","Option","Secret","Effect","PubSub","Layer","Queue","Ref","DiscordConfig","DiscordWS","DiscordWSLive","Heartbeats","Identify","InvalidSession","Utils","Reconnect","RateLimiterLive","RateLimiter","Discord","Messaging","MesssagingLive","make","gen","_","gateway","token","limiter","dws","hub","sendQueue","connect","shard","outboundQueue","unbounded","pendingQueue","phase","setPhase","p","zipLeft","set","annotateLogs","logTrace","outbound","take","maybeWait","minutes","send","flatMap","get","offer","heartbeatSend","succeed","prioritySend","resume","zipRight","takeAll","tap","offerAll","asUnit","onConnecting","msgs","filter","msg","op","GatewayOpcode","IDENTIFY","RESUME","HEARTBEAT","socket","isReady","liftPredicate","DISPATCH","t","latestReady","updateLatestReady","latest","map","d","latestSequence","updateLatestSequence","fromNullable","s","maybeUpdateUrl","match","onNone","unit","onSome","resume_gateway_url","setUrl","hellos","acquireRelease","shutdown","acks","forkScoped","identify","identifyOrResume","value","intents","presence","onPayload","HELLO","HEARTBEAT_ACK","INVALID_SESSION","fromPayload","publish","forever","id","package","module","Shard","ShardLive","effect","provide"],"sources":["../../src/DiscordGateway/Shard.ts"],"sourcesContent":[null],"mappings":"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"}
@@ -2,7 +2,7 @@ import { Tag } from "effect/Context";
2
2
  import * as Option from "effect/Option";
3
3
  import * as Effect from "effect/Effect";
4
4
  import * as Layer from "effect/Layer";
5
- export const ShardStore = /*#__PURE__*/Tag();
5
+ export const ShardStore = /*#__PURE__*/Tag("dfx/DiscordGateway/ShardStore");
6
6
  // Very basic shard id store, that does no health checks
7
7
  const memoryStore = () => {
8
8
  let currentId = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"ShardStore.mjs","names":["Tag","Option","Effect","Layer","ShardStore","memoryStore","currentId","claimId","totalCount","sync","none","id","some","allClaimed","MemoryShardStoreLive"],"sources":["../../src/DiscordGateway/ShardStore.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,GAAG,QAAQ,gBAAgB;AACpC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,KAAK,MAAM,cAAc;AAcrC,OAAO,MAAMC,UAAU,gBAAGJ,GAAG,EAAc;AAE3C;AACA,MAAMK,WAAW,GAAGA,CAAA,KAAiB;EACnC,IAAIC,SAAS,GAAG,CAAC;EAEjB,OAAO;IACLC,OAAO,EAAEA,CAAC;MAAEC;IAAU,CAAE,KACtBN,MAAM,CAACO,IAAI,CAAC,MAAK;MACf,IAAIH,SAAS,IAAIE,UAAU,EAAE;QAC3B,OAAOP,MAAM,CAACS,IAAI,EAAE;MACtB;MAEA,MAAMC,EAAE,GAAGL,SAAS;MACpBA,SAAS,EAAE;MACX,OAAOL,MAAM,CAACW,IAAI,CAACD,EAAE,CAAC;IACxB,CAAC,CAAC;IAEJE,UAAU,EAAEL,UAAU,IAAIN,MAAM,CAACO,IAAI,CAAC,MAAMH,SAAS,IAAIE,UAAU;GACpE;AACH,CAAC;AAED,OAAO,MAAMM,oBAAoB,gBAAGX,KAAK,CAACM,IAAI,CAACL,UAAU,EAAEC,WAAW,CAAC"}
1
+ {"version":3,"file":"ShardStore.mjs","names":["Tag","Option","Effect","Layer","ShardStore","memoryStore","currentId","claimId","totalCount","sync","none","id","some","allClaimed","MemoryShardStoreLive"],"sources":["../../src/DiscordGateway/ShardStore.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,GAAG,QAAQ,gBAAgB;AACpC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,KAAK,MAAM,cAAc;AAiBrC,OAAO,MAAMC,UAAU,gBAAGJ,GAAG,CAC3B,+BAA+B,CAChC;AAED;AACA,MAAMK,WAAW,GAAGA,CAAA,KAAwB;EAC1C,IAAIC,SAAS,GAAG,CAAC;EAEjB,OAAO;IACLC,OAAO,EAAEA,CAAC;MAAEC;IAAU,CAAE,KACtBN,MAAM,CAACO,IAAI,CAAC,MAAK;MACf,IAAIH,SAAS,IAAIE,UAAU,EAAE;QAC3B,OAAOP,MAAM,CAACS,IAAI,EAAE;MACtB;MAEA,MAAMC,EAAE,GAAGL,SAAS;MACpBA,SAAS,EAAE;MACX,OAAOL,MAAM,CAACW,IAAI,CAACD,EAAE,CAAC;IACxB,CAAC,CAAC;IAEJE,UAAU,EAAEL,UAAU,IAAIN,MAAM,CAACO,IAAI,CAAC,MAAMH,SAAS,IAAIE,UAAU;GACpE;AACH,CAAC;AAED,OAAO,MAAMM,oBAAoB,gBAAGX,KAAK,CAACM,IAAI,CAACL,UAAU,EAAEC,WAAW,CAAC"}
@@ -1,18 +1,16 @@
1
- import * as Chunk from "effect/Chunk";
1
+ import { DiscordConfig } from "dfx/DiscordConfig";
2
+ import { Shard, ShardLive } from "dfx/DiscordGateway/Shard";
3
+ import { ShardStore } from "dfx/DiscordGateway/ShardStore";
4
+ import { DiscordREST, DiscordRESTLive } from "dfx/DiscordREST";
5
+ import { RateLimiter, RateLimiterLive } from "dfx/RateLimit";
2
6
  import { Tag } from "effect/Context";
3
7
  import * as Duration from "effect/Duration";
8
+ import * as Effect from "effect/Effect";
4
9
  import { pipe } from "effect/Function";
5
10
  import * as HashSet from "effect/HashSet";
6
- import * as Deferred from "effect/Deferred";
7
- import * as Effect from "effect/Effect";
8
11
  import * as Layer from "effect/Layer";
9
12
  import * as Ref from "effect/Ref";
10
13
  import * as Schedule from "effect/Schedule";
11
- import { DiscordConfig } from "dfx/DiscordConfig";
12
- import { ShardLive, Shard } from "dfx/DiscordGateway/Shard";
13
- import { ShardStore } from "dfx/DiscordGateway/ShardStore";
14
- import { DiscordREST } from "dfx/DiscordREST";
15
- import { RateLimiterLive, RateLimiter } from "dfx/RateLimit";
16
14
  const claimRepeatPolicy = /*#__PURE__*/Schedule.spaced("3 minutes").pipe( /*#__PURE__*/Schedule.whileInput(_ => _._tag === "None"), Schedule.passthrough);
17
15
  const make = /*#__PURE__*/Effect.gen(function* (_) {
18
16
  const store = yield* _(ShardStore);
@@ -23,17 +21,6 @@ const make = /*#__PURE__*/Effect.gen(function* (_) {
23
21
  const limiter = yield* _(RateLimiter);
24
22
  const shard = yield* _(Shard);
25
23
  const currentShards = yield* _(Ref.make(HashSet.empty()));
26
- const takeConfig = totalCount => Effect.gen(function* (_) {
27
- const currentCount = yield* _(Ref.make(0));
28
- const claimId = sharderCount => pipe(store.claimId({
29
- totalCount,
30
- sharderCount
31
- }), Effect.repeat(claimRepeatPolicy), Effect.map(_ => _.value));
32
- return pipe(Ref.getAndUpdate(currentCount, _ => _ + 1), Effect.flatMap(claimId), Effect.map(id => ({
33
- id,
34
- totalCount
35
- })));
36
- });
37
24
  const gateway = yield* _(rest.getGatewayBot(), Effect.flatMap(r => r.json), Effect.catchAll(() => Effect.succeed({
38
25
  url: "wss://gateway.discord.gg/",
39
26
  shards: 1,
@@ -44,31 +31,35 @@ const make = /*#__PURE__*/Effect.gen(function* (_) {
44
31
  max_concurrency: 1
45
32
  }
46
33
  })));
47
- const run = (hub, sendQueue) => Effect.gen(function* (_) {
48
- const deferred = yield* _(Deferred.make());
49
- const take = yield* _(takeConfig(config.shardCount ?? gateway.shards));
50
- const spawner = pipe(take, Effect.map(config => ({
51
- ...config,
52
- url: gateway.url,
53
- concurrency: gateway.session_start_limit.max_concurrency
54
- })), Effect.tap(({
55
- concurrency,
56
- id
57
- }) => limiter.maybeWait(`dfx.sharder.${id % concurrency}`, Duration.millis(config.identifyRateLimit[0]), config.identifyRateLimit[1])), Effect.flatMap(c => shard.connect([c.id, c.totalCount], hub, sendQueue)), Effect.flatMap(shard => Effect.acquireUseRelease(Ref.update(currentShards, HashSet.add(shard)), () => shard.run, () => Ref.update(currentShards, HashSet.remove(shard))).pipe(Effect.catchAllCause(_ => Deferred.failCause(deferred, _)), Effect.fork)), Effect.forever);
58
- const spawners = Chunk.map(Chunk.range(1, gateway.session_start_limit.max_concurrency), () => spawner);
59
- return yield* _(Effect.all([Effect.all(spawners, {
60
- concurrency: "unbounded",
61
- discard: true
62
- }), Deferred.await(deferred)], {
63
- concurrency: "unbounded",
64
- discard: true
65
- }));
66
- });
34
+ const totalCount = config.shardCount ?? gateway.shards;
35
+ const currentCount = yield* _(Ref.make(0));
36
+ const claimId = sharderCount => pipe(store.claimId({
37
+ totalCount,
38
+ sharderCount
39
+ }), Effect.repeat(claimRepeatPolicy), Effect.map(_ => _.value));
40
+ const takeConfig = pipe(Ref.getAndUpdate(currentCount, _ => _ + 1), Effect.flatMap(claimId), Effect.map(id => ({
41
+ id,
42
+ totalCount
43
+ })));
44
+ const spawner = pipe(takeConfig, Effect.map(config => ({
45
+ ...config,
46
+ url: gateway.url,
47
+ concurrency: gateway.session_start_limit.max_concurrency
48
+ })), Effect.tap(({
49
+ concurrency,
50
+ id
51
+ }) => limiter.maybeWait(`dfx.sharder.${id % concurrency}`, Duration.millis(config.identifyRateLimit[0]), config.identifyRateLimit[1])), Effect.flatMap(c => shard.connect([c.id, c.totalCount])), Effect.flatMap(shard => Ref.update(currentShards, HashSet.add(shard))), Effect.forever);
52
+ yield* _(Effect.replicateEffect(spawner, gateway.session_start_limit.max_concurrency, {
53
+ concurrency: "unbounded",
54
+ discard: true
55
+ }), Effect.scoped, Effect.catchAllCause(Effect.logError), Effect.ensuring(Ref.set(currentShards, HashSet.empty())), Effect.forever, Effect.forkScoped);
67
56
  return {
68
- shards: Ref.get(currentShards),
69
- run
57
+ shards: Ref.get(currentShards)
70
58
  };
71
- });
72
- export const Sharder = /*#__PURE__*/Tag();
73
- export const SharedLive = /*#__PURE__*/Layer.provide( /*#__PURE__*/Layer.effect(Sharder, make), /*#__PURE__*/Layer.merge(RateLimiterLive, ShardLive));
59
+ }).pipe( /*#__PURE__*/Effect.annotateLogs({
60
+ package: "dfx",
61
+ module: "DiscordGateway/Sharder"
62
+ }));
63
+ export const Sharder = /*#__PURE__*/Tag("dfx/DiscordGateway/Sharder");
64
+ export const SharderLive = /*#__PURE__*/Layer.scoped(Sharder, make).pipe( /*#__PURE__*/Layer.provide(DiscordRESTLive), /*#__PURE__*/Layer.provide(RateLimiterLive), /*#__PURE__*/Layer.provide(ShardLive));
74
65
  //# sourceMappingURL=Sharder.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Sharder.mjs","names":["Chunk","Tag","Duration","pipe","HashSet","Deferred","Effect","Layer","Ref","Schedule","DiscordConfig","ShardLive","Shard","ShardStore","DiscordREST","RateLimiterLive","RateLimiter","claimRepeatPolicy","spaced","whileInput","_","_tag","passthrough","make","gen","store","rest","gateway","config","limiter","shard","currentShards","empty","takeConfig","totalCount","currentCount","claimId","sharderCount","repeat","map","value","getAndUpdate","flatMap","id","getGatewayBot","r","json","catchAll","succeed","url","shards","session_start_limit","total","remaining","reset_after","max_concurrency","run","hub","sendQueue","deferred","take","shardCount","spawner","concurrency","tap","maybeWait","millis","identifyRateLimit","c","connect","acquireUseRelease","update","add","remove","catchAllCause","failCause","fork","forever","spawners","range","all","discard","await","get","Sharder","SharedLive","provide","effect","merge"],"sources":["../../src/DiscordGateway/Sharder.ts"],"sourcesContent":[null],"mappings":"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"}
1
+ {"version":3,"file":"Sharder.mjs","names":["DiscordConfig","Shard","ShardLive","ShardStore","DiscordREST","DiscordRESTLive","RateLimiter","RateLimiterLive","Tag","Duration","Effect","pipe","HashSet","Layer","Ref","Schedule","claimRepeatPolicy","spaced","whileInput","_","_tag","passthrough","make","gen","store","rest","gateway","config","limiter","shard","currentShards","empty","getGatewayBot","flatMap","r","json","catchAll","succeed","url","shards","session_start_limit","total","remaining","reset_after","max_concurrency","totalCount","shardCount","currentCount","claimId","sharderCount","repeat","map","value","takeConfig","getAndUpdate","id","spawner","concurrency","tap","maybeWait","millis","identifyRateLimit","c","connect","update","add","forever","replicateEffect","discard","scoped","catchAllCause","logError","ensuring","set","forkScoped","get","annotateLogs","package","module","Sharder","SharderLive","provide"],"sources":["../../src/DiscordGateway/Sharder.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,aAAa,QAAQ,mBAAmB;AAEjD,SAASC,KAAK,EAAEC,SAAS,QAAQ,0BAA0B;AAC3D,SAASC,UAAU,QAAQ,+BAA+B;AAC1D,SAASC,WAAW,EAAEC,eAAe,QAAQ,iBAAiB;AAC9D,SAASC,WAAW,EAAEC,eAAe,QAAQ,eAAe;AAE5D,SAASC,GAAG,QAAQ,gBAAgB;AACpC,OAAO,KAAKC,QAAQ,MAAM,iBAAiB;AAC3C,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,SAASC,IAAI,QAAQ,iBAAiB;AACtC,OAAO,KAAKC,OAAO,MAAM,gBAAgB;AACzC,OAAO,KAAKC,KAAK,MAAM,cAAc;AAErC,OAAO,KAAKC,GAAG,MAAM,YAAY;AACjC,OAAO,KAAKC,QAAQ,MAAM,iBAAiB;AAE3C,MAAMC,iBAAiB,gBAAGD,QAAQ,CAACE,MAAM,CAAC,WAAW,CAAC,CAACN,IAAI,eACzDI,QAAQ,CAACG,UAAU,CAAEC,CAAwB,IAAKA,CAAC,CAACC,IAAI,KAAK,MAAM,CAAC,EACpEL,QAAQ,CAACM,WAAW,CACmD;AAEzE,MAAMC,IAAI,gBAAGZ,MAAM,CAACa,GAAG,CAAC,WAAWJ,CAAC;EAClC,MAAMK,KAAK,GAAG,OAAOL,CAAC,CAAChB,UAAU,CAAC;EAClC,MAAMsB,IAAI,GAAG,OAAON,CAAC,CAACf,WAAW,CAAC;EAClC,MAAM;IAAEsB,OAAO,EAAEC;EAAM,CAAE,GAAG,OAAOR,CAAC,CAACnB,aAAa,CAAC;EACnD,MAAM4B,OAAO,GAAG,OAAOT,CAAC,CAACb,WAAW,CAAC;EACrC,MAAMuB,KAAK,GAAG,OAAOV,CAAC,CAAClB,KAAK,CAAC;EAC7B,MAAM6B,aAAa,GAAG,OAAOX,CAAC,CAACL,GAAG,CAACQ,IAAI,CAACV,OAAO,CAACmB,KAAK,EAAgB,CAAC,CAAC;EAEvE,MAAML,OAAO,GAAG,OAAOP,CAAC,CACtBM,IAAI,CAACO,aAAa,EAAE,EACpBtB,MAAM,CAACuB,OAAO,CAACC,CAAC,IAAIA,CAAC,CAACC,IAAI,CAAC,EAC3BzB,MAAM,CAAC0B,QAAQ,CAAC,MACd1B,MAAM,CAAC2B,OAAO,CAAgC;IAC5CC,GAAG,EAAE,2BAA2B;IAChCC,MAAM,EAAE,CAAC;IACTC,mBAAmB,EAAE;MACnBC,KAAK,EAAE,CAAC;MACRC,SAAS,EAAE,CAAC;MACZC,WAAW,EAAE,CAAC;MACdC,eAAe,EAAE;;GAEpB,CAAC,CACH,CACF;EAED,MAAMC,UAAU,GAAGlB,MAAM,CAACmB,UAAU,IAAIpB,OAAO,CAACa,MAAM;EACtD,MAAMQ,YAAY,GAAG,OAAO5B,CAAC,CAACL,GAAG,CAACQ,IAAI,CAAC,CAAC,CAAC,CAAC;EAC1C,MAAM0B,OAAO,GAAIC,YAAoB,IACnCtC,IAAI,CACFa,KAAK,CAACwB,OAAO,CAAC;IACZH,UAAU;IACVI;GACD,CAAC,EACFvC,MAAM,CAACwC,MAAM,CAAClC,iBAAiB,CAAC,EAChCN,MAAM,CAACyC,GAAG,CAAChC,CAAC,IAAIA,CAAC,CAACiC,KAAK,CAAC,CACzB;EACH,MAAMC,UAAU,GAAG1C,IAAI,CACrBG,GAAG,CAACwC,YAAY,CAACP,YAAY,EAAE5B,CAAC,IAAIA,CAAC,GAAG,CAAC,CAAC,EAC1CT,MAAM,CAACuB,OAAO,CAACe,OAAO,CAAC,EACvBtC,MAAM,CAACyC,GAAG,CAACI,EAAE,KAAK;IAAEA,EAAE;IAAEV;EAAU,CAAE,CAAU,CAAC,CAChD;EAED,MAAMW,OAAO,GAAG7C,IAAI,CAClB0C,UAAU,EACV3C,MAAM,CAACyC,GAAG,CAACxB,MAAM,KAAK;IACpB,GAAGA,MAAM;IACTW,GAAG,EAAEZ,OAAO,CAACY,GAAG;IAChBmB,WAAW,EAAE/B,OAAO,CAACc,mBAAmB,CAACI;GAC1C,CAAC,CAAC,EACHlC,MAAM,CAACgD,GAAG,CAAC,CAAC;IAAED,WAAW;IAAEF;EAAE,CAAE,KAC7B3B,OAAO,CAAC+B,SAAS,CACf,eAAeJ,EAAE,GAAGE,WAAW,EAAE,EACjChD,QAAQ,CAACmD,MAAM,CAACjC,MAAM,CAACkC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAC5ClC,MAAM,CAACkC,iBAAiB,CAAC,CAAC,CAAC,CAC5B,CACF,EACDnD,MAAM,CAACuB,OAAO,CAAC6B,CAAC,IAAIjC,KAAK,CAACkC,OAAO,CAAC,CAACD,CAAC,CAACP,EAAE,EAAEO,CAAC,CAACjB,UAAU,CAAC,CAAC,CAAC,EACxDnC,MAAM,CAACuB,OAAO,CAACJ,KAAK,IAAIf,GAAG,CAACkD,MAAM,CAAClC,aAAa,EAAElB,OAAO,CAACqD,GAAG,CAACpC,KAAK,CAAC,CAAC,CAAC,EACtEnB,MAAM,CAACwD,OAAO,CACf;EAED,OAAO/C,CAAC,CACNT,MAAM,CAACyD,eAAe,CACpBX,OAAO,EACP9B,OAAO,CAACc,mBAAmB,CAACI,eAAe,EAC3C;IAAEa,WAAW,EAAE,WAAW;IAAEW,OAAO,EAAE;EAAI,CAAE,CAC5C,EACD1D,MAAM,CAAC2D,MAAM,EACb3D,MAAM,CAAC4D,aAAa,CAAC5D,MAAM,CAAC6D,QAAQ,CAAC,EACrC7D,MAAM,CAAC8D,QAAQ,CAAC1D,GAAG,CAAC2D,GAAG,CAAC3C,aAAa,EAAElB,OAAO,CAACmB,KAAK,EAAE,CAAC,CAAC,EACxDrB,MAAM,CAACwD,OAAO,EACdxD,MAAM,CAACgE,UAAU,CAClB;EAED,OAAO;IAAEnC,MAAM,EAAEzB,GAAG,CAAC6D,GAAG,CAAC7C,aAAa;EAAC,CAAW;AACpD,CAAC,CAAC,CAACnB,IAAI,eACLD,MAAM,CAACkE,YAAY,CAAC;EAClBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;CACT,CAAC,CACH;AAKD,OAAO,MAAMC,OAAO,gBAAGvE,GAAG,CACxB,4BAA4B,CAC7B;AACD,OAAO,MAAMwE,WAAW,gBAAGnE,KAAK,CAACwD,MAAM,CAACU,OAAO,EAAEzD,IAAI,CAAC,CAACX,IAAI,eACzDE,KAAK,CAACoE,OAAO,CAAC5E,eAAe,CAAC,eAC9BQ,KAAK,CAACoE,OAAO,CAAC1E,eAAe,CAAC,eAC9BM,KAAK,CAACoE,OAAO,CAAC/E,SAAS,CAAC,CACzB"}
@@ -1,12 +1,11 @@
1
1
  import { Tag } from "effect/Context";
2
- import * as Duration from "effect/Duration";
3
- import { pipe } from "effect/Function";
2
+ import { identity, pipe } from "effect/Function";
4
3
  import * as Effect from "effect/Effect";
5
4
  import * as Layer from "effect/Layer";
6
5
  import * as Queue from "effect/Queue";
7
6
  import * as Ref from "effect/Ref";
8
- import { Log } from "dfx/Log";
9
7
  import WebSocket from "isomorphic-ws";
8
+ import * as Schedule from "effect/Schedule";
10
9
  export const Reconnect = /*#__PURE__*/Symbol();
11
10
  export class WebSocketError {
12
11
  reason;
@@ -33,9 +32,9 @@ const socket = urlRef => pipe(Ref.get(urlRef), Effect.map(_ => new WebSocket(_))
33
32
  ws.removeAllListeners?.();
34
33
  ws.close();
35
34
  })));
36
- const offer = (ws, queue, log) => Effect.async(resume => {
35
+ const offer = (ws, queue) => Effect.async(resume => {
37
36
  ws.addEventListener("message", message => {
38
- Effect.runFork(Effect.zipRight(log.debug("WS", "receive", message.data), Queue.offer(queue, message.data)));
37
+ Queue.unsafeOffer(queue, message.data);
39
38
  });
40
39
  ws.addEventListener("error", cause => {
41
40
  resume(Effect.fail(new WebSocketError("error", cause)));
@@ -57,7 +56,7 @@ const waitForOpen = (ws, timeout) => Effect.timeoutFail(Effect.suspend(() => {
57
56
  onTimeout: () => new WebSocketError("open-timeout"),
58
57
  duration: timeout
59
58
  });
60
- const send = (ws, take, log) => pipe(take, Effect.tap(data => log.debug("WS", "send", data)), Effect.tap(data => {
59
+ const send = (ws, take) => pipe(take, Effect.tap(data => Effect.logTrace(data)), Effect.tap(data => {
61
60
  if (data === Reconnect) {
62
61
  return Effect.failSync(() => {
63
62
  ws.close(1012, "reconnecting");
@@ -67,24 +66,35 @@ const send = (ws, take, log) => pipe(take, Effect.tap(data => log.debug("WS", "s
67
66
  return Effect.sync(() => {
68
67
  ws.send(data);
69
68
  });
70
- }), Effect.forever);
71
- const make = /*#__PURE__*/Effect.gen(function* (_) {
72
- const log = yield* _(Log);
73
- const connect = (url, takeOutbound, onConnecting = Effect.unit, openTimeout = Duration.seconds(3)) => Effect.gen(function* (_) {
74
- const queue = yield* _(Queue.unbounded());
75
- const run = pipe(onConnecting, Effect.zipRight(socket(url)), Effect.flatMap(ws => Effect.all([offer(ws, queue, log), Effect.zipRight(waitForOpen(ws, openTimeout), send(ws, takeOutbound, log))], {
69
+ }), Effect.forever, Effect.annotateLogs("method", "send"));
70
+ const wsImpl = {
71
+ connect: ({
72
+ onConnecting = Effect.unit,
73
+ openTimeout = "3 seconds",
74
+ reconnectWhen,
75
+ takeOutbound,
76
+ urlRef
77
+ }) => Effect.gen(function* (_) {
78
+ const scope = yield* _(Effect.scope);
79
+ const queue = yield* _(Effect.acquireRelease(Queue.unbounded(), Queue.shutdown));
80
+ const take = Effect.annotateLogs(Effect.tap(Queue.take(queue), data => Effect.logTrace(data)), {
81
+ package: "dfx",
82
+ module: "DiscordGateway/WS",
83
+ method: "take"
84
+ });
85
+ const run = pipe(onConnecting, Effect.zipRight(socket(urlRef)), Effect.flatMap(ws => Effect.all([offer(ws, queue), Effect.zipRight(waitForOpen(ws, openTimeout), send(ws, takeOutbound))], {
76
86
  concurrency: "unbounded",
77
87
  discard: true
78
- })), Effect.scoped, Effect.retryWhile(isReconnect));
88
+ })), Effect.scoped, Effect.retryWhile(isReconnect), reconnectWhen ? Effect.retryWhile(reconnectWhen) : identity, Effect.catchAllCause(Effect.logError), Effect.repeat(Schedule.exponential("500 millis").pipe(Schedule.union(Schedule.spaced("30 seconds")))), Effect.forkIn(scope));
89
+ yield* _(run);
79
90
  return {
80
- run,
81
- take: Queue.take(queue)
91
+ take
82
92
  };
83
- });
84
- return {
85
- connect
86
- };
87
- });
88
- export const WS = /*#__PURE__*/Tag();
89
- export const WSLive = /*#__PURE__*/Layer.effect(WS, make);
93
+ }).pipe(Effect.annotateLogs({
94
+ package: "dfx",
95
+ module: "DiscordGateway/WS"
96
+ }))
97
+ };
98
+ export const WS = /*#__PURE__*/Tag("dfx/DiscordGateway/WS");
99
+ export const WSLive = /*#__PURE__*/Layer.succeed(WS, wsImpl);
90
100
  //# sourceMappingURL=WS.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"WS.mjs","names":["Tag","Duration","pipe","Effect","Layer","Queue","Ref","Log","WebSocket","Reconnect","Symbol","WebSocketError","reason","error","_tag","constructor","WebSocketCloseError","code","isReconnect","e","socket","urlRef","get","map","_","acquireRelease","ws","sync","removeAllListeners","close","offer","queue","log","async","resume","addEventListener","message","runFork","zipRight","debug","data","cause","fail","waitForOpen","timeout","timeoutFail","suspend","readyState","OPEN","unit","once","onTimeout","duration","send","take","tap","failSync","forever","make","gen","connect","url","takeOutbound","onConnecting","openTimeout","seconds","unbounded","run","flatMap","all","concurrency","discard","scoped","retryWhile","WS","WSLive","effect"],"sources":["../../src/DiscordGateway/WS.ts"],"sourcesContent":[null],"mappings":"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"}
1
+ {"version":3,"file":"WS.mjs","names":["Tag","identity","pipe","Effect","Layer","Queue","Ref","WebSocket","Schedule","Reconnect","Symbol","WebSocketError","reason","error","_tag","constructor","WebSocketCloseError","code","isReconnect","e","socket","urlRef","get","map","_","acquireRelease","ws","sync","removeAllListeners","close","offer","queue","async","resume","addEventListener","message","unsafeOffer","data","cause","fail","waitForOpen","timeout","timeoutFail","suspend","readyState","OPEN","unit","once","onTimeout","duration","send","take","tap","logTrace","failSync","forever","annotateLogs","wsImpl","connect","onConnecting","openTimeout","reconnectWhen","takeOutbound","gen","scope","unbounded","shutdown","package","module","method","run","zipRight","flatMap","all","concurrency","discard","scoped","retryWhile","catchAllCause","logError","repeat","exponential","union","spaced","forkIn","WS","WSLive","succeed"],"sources":["../../src/DiscordGateway/WS.ts"],"sourcesContent":[null],"mappings":"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"}
@@ -1,39 +1,21 @@
1
+ import { Messaging, MesssagingLive } from "dfx/DiscordGateway/Messaging";
2
+ import { Sharder, SharderLive } from "dfx/DiscordGateway/Sharder";
1
3
  import { Tag } from "effect/Context";
2
4
  import * as Effect from "effect/Effect";
3
- import * as PubSub from "effect/PubSub";
4
5
  import * as Layer from "effect/Layer";
5
- import * as Queue from "effect/Queue";
6
- import * as Stream from "effect/Stream";
7
- import { SharedLive, Sharder } from "dfx/DiscordGateway/Sharder";
8
- import * as EffectUtils from "dfx/utils/Effect";
9
- import * as Schedule from "effect/Schedule";
10
- const fromDispatchFactory = source => event => Stream.map(Stream.filter(source, p => p.t === event), p => p.d);
11
- const handleDispatchFactory = hub => (event, handle) => EffectUtils.subscribeForEachPar(hub, _ => {
12
- if (_.t === event) {
13
- return handle(_.d);
14
- }
15
- return Effect.unit;
16
- });
17
- export const DiscordGateway = /*#__PURE__*/Tag();
6
+ export const TypeId = /*#__PURE__*/Symbol.for("dfx/DiscordGateway");
7
+ export const DiscordGateway = /*#__PURE__*/Tag(TypeId);
18
8
  export const make = /*#__PURE__*/Effect.gen(function* (_) {
19
9
  const sharder = yield* _(Sharder);
20
- const hub = yield* _(PubSub.unbounded());
21
- const sendQueue = yield* _(Queue.unbounded());
22
- const send = payload => sendQueue.offer(payload);
23
- const dispatch = Stream.fromPubSub(hub);
24
- const fromDispatch = fromDispatchFactory(dispatch);
25
- const handleDispatch = handleDispatchFactory(hub);
26
- yield* _(sharder.run(hub, sendQueue), Effect.tapErrorCause(_ => Effect.logError("fatal error, restarting", _)), Effect.retry(Schedule.exponential("1 seconds").pipe(Schedule.union(Schedule.spaced("30 seconds")))), Effect.forkScoped);
10
+ const messaging = yield* _(Messaging);
27
11
  return DiscordGateway.of({
28
- dispatch,
29
- fromDispatch,
30
- handleDispatch,
31
- send,
12
+ [TypeId]: TypeId,
13
+ dispatch: messaging.dispatch,
14
+ fromDispatch: messaging.fromDispatch,
15
+ handleDispatch: messaging.handleDispatch,
16
+ send: messaging.send,
32
17
  shards: sharder.shards
33
18
  });
34
- }).pipe( /*#__PURE__*/Effect.annotateLogs({
35
- package: "dfx",
36
- service: "DiscordGateway"
37
- }));
38
- export const DiscordGatewayLive = /*#__PURE__*/Layer.provide( /*#__PURE__*/Layer.scoped(DiscordGateway, make), SharedLive);
19
+ });
20
+ export const DiscordGatewayLive = /*#__PURE__*/Layer.effect(DiscordGateway, make).pipe( /*#__PURE__*/Layer.provide(MesssagingLive), /*#__PURE__*/Layer.provide(SharderLive));
39
21
  //# sourceMappingURL=DiscordGateway.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"DiscordGateway.mjs","names":["Tag","Effect","PubSub","Layer","Queue","Stream","SharedLive","Sharder","EffectUtils","Schedule","fromDispatchFactory","source","event","map","filter","p","t","d","handleDispatchFactory","hub","handle","subscribeForEachPar","_","unit","DiscordGateway","make","gen","sharder","unbounded","sendQueue","send","payload","offer","dispatch","fromPubSub","fromDispatch","handleDispatch","run","tapErrorCause","logError","retry","exponential","pipe","union","spaced","forkScoped","of","shards","annotateLogs","package","service","DiscordGatewayLive","provide","scoped"],"sources":["../src/DiscordGateway.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,GAAG,QAAQ,gBAAgB;AAEpC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,MAAM,MAAM,eAAe;AAEvC,SAASC,UAAU,EAAEC,OAAO,QAAQ,4BAA4B;AAEhE,OAAO,KAAKC,WAAW,MAAM,kBAAkB;AAC/C,OAAO,KAAKC,QAAQ,MAAM,iBAAiB;AAE3C,MAAMC,mBAAmB,GAErBC,MAAyE,IAGzEC,KAAQ,IAERP,MAAM,CAACQ,GAAG,CACRR,MAAM,CAACS,MAAM,CAACH,MAAM,EAAEI,CAAC,IAAIA,CAAC,CAACC,CAAC,KAAKJ,KAAK,CAAC,EACzCG,CAAC,IAAIA,CAAC,CAACE,CAAS,CACjB;AAEL,MAAMC,qBAAqB,GACxBC,GAAgE,IACjE,CACEP,KAAQ,EACRQ,MAAmE,KAEnEZ,WAAW,CAACa,mBAAmB,CAACF,GAAG,EAAEG,CAAC,IAAG;EACvC,IAAIA,CAAC,CAACN,CAAC,KAAKJ,KAAK,EAAE;IACjB,OAAOQ,MAAM,CAACE,CAAC,CAACL,CAAQ,CAAC;EAC3B;EACA,OAAOhB,MAAM,CAACsB,IAAW;AAC3B,CAAC,CAAC;AAoBN,OAAO,MAAMC,cAAc,gBAAGxB,GAAG,EAAkB;AAEnD,OAAO,MAAMyB,IAAI,gBAAGxB,MAAM,CAACyB,GAAG,CAAC,WAAWJ,CAAC;EACzC,MAAMK,OAAO,GAAG,OAAOL,CAAC,CAACf,OAAO,CAAC;EACjC,MAAMY,GAAG,GAAG,OAAOG,CAAC,CAClBpB,MAAM,CAAC0B,SAAS,EAAgD,CACjE;EAED,MAAMC,SAAS,GAAG,OAAOP,CAAC,CACxBlB,KAAK,CAACwB,SAAS,EAA6C,CAC7D;EACD,MAAME,IAAI,GAAIC,OAAkD,IAC9DF,SAAS,CAACG,KAAK,CAACD,OAAO,CAAC;EAE1B,MAAME,QAAQ,GAAG5B,MAAM,CAAC6B,UAAU,CAACf,GAAG,CAAC;EACvC,MAAMgB,YAAY,GAAGzB,mBAAmB,CAACuB,QAAQ,CAAC;EAClD,MAAMG,cAAc,GAAGlB,qBAAqB,CAACC,GAAG,CAAC;EAEjD,OAAOG,CAAC,CACNK,OAAO,CAACU,GAAG,CAAClB,GAAG,EAAEU,SAAS,CAAC,EAC3B5B,MAAM,CAACqC,aAAa,CAAChB,CAAC,IAAIrB,MAAM,CAACsC,QAAQ,CAAC,yBAAyB,EAAEjB,CAAC,CAAC,CAAC,EACxErB,MAAM,CAACuC,KAAK,CACV/B,QAAQ,CAACgC,WAAW,CAAC,WAAW,CAAC,CAACC,IAAI,CACpCjC,QAAQ,CAACkC,KAAK,CAAClC,QAAQ,CAACmC,MAAM,CAAC,YAAY,CAAC,CAAC,CAC9C,CACF,EACD3C,MAAM,CAAC4C,UAAU,CAClB;EAED,OAAOrB,cAAc,CAACsB,EAAE,CAAC;IACvBb,QAAQ;IACRE,YAAY;IACZC,cAAc;IACdN,IAAI;IACJiB,MAAM,EAAEpB,OAAO,CAACoB;GACjB,CAAC;AACJ,CAAC,CAAC,CAACL,IAAI,eACLzC,MAAM,CAAC+C,YAAY,CAAC;EAClBC,OAAO,EAAE,KAAK;EACdC,OAAO,EAAE;CACV,CAAC,CACH;AAED,OAAO,MAAMC,kBAAkB,gBAAGhD,KAAK,CAACiD,OAAO,eAC7CjD,KAAK,CAACkD,MAAM,CAAC7B,cAAc,EAAEC,IAAI,CAAC,EAClCnB,UAAU,CACX"}
1
+ {"version":3,"file":"DiscordGateway.mjs","names":["Messaging","MesssagingLive","Sharder","SharderLive","Tag","Effect","Layer","TypeId","Symbol","for","DiscordGateway","make","gen","_","sharder","messaging","of","dispatch","fromDispatch","handleDispatch","send","shards","DiscordGatewayLive","effect","pipe","provide"],"sources":["../src/DiscordGateway.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,SAAS,EAAEC,cAAc,QAAQ,8BAA8B;AAExE,SAASC,OAAO,EAAEC,WAAW,QAAQ,4BAA4B;AAEjE,SAASC,GAAG,QAAQ,gBAAgB;AACpC,OAAO,KAAKC,MAAM,MAAM,eAAe;AAEvC,OAAO,KAAKC,KAAK,MAAM,cAAc;AAGrC,OAAO,MAAMC,MAAM,gBAAGC,MAAM,CAACC,GAAG,CAAC,oBAAoB,CAAC;AAwBtD,OAAO,MAAMC,cAAc,gBAAGN,GAAG,CAAiBG,MAAM,CAAC;AAEzD,OAAO,MAAMI,IAAI,gBAAGN,MAAM,CAACO,GAAG,CAAC,WAAWC,CAAC;EACzC,MAAMC,OAAO,GAAG,OAAOD,CAAC,CAACX,OAAO,CAAC;EACjC,MAAMa,SAAS,GAAG,OAAOF,CAAC,CAACb,SAAS,CAAC;EAErC,OAAOU,cAAc,CAACM,EAAE,CAAC;IACvB,CAACT,MAAM,GAAGA,MAAM;IAChBU,QAAQ,EAAEF,SAAS,CAACE,QAAQ;IAC5BC,YAAY,EAAEH,SAAS,CAACG,YAAY;IACpCC,cAAc,EAAEJ,SAAS,CAACI,cAAc;IACxCC,IAAI,EAAEL,SAAS,CAACK,IAAI;IACpBC,MAAM,EAAEP,OAAO,CAACO;GACjB,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,MAAMC,kBAAkB,gBAAGhB,KAAK,CAACiB,MAAM,CAACb,cAAc,EAAEC,IAAI,CAAC,CAACa,IAAI,eACvElB,KAAK,CAACmB,OAAO,CAACxB,cAAc,CAAC,eAC7BK,KAAK,CAACmB,OAAO,CAACtB,WAAW,CAAC,CAC3B"}
@@ -4,14 +4,13 @@ import { millis } from "effect/Duration";
4
4
  import { pipe } from "effect/Function";
5
5
  import * as HashSet from "effect/HashSet";
6
6
  import * as Option from "effect/Option";
7
- import * as ConfigSecret from "effect/ConfigSecret";
7
+ import * as Secret from "effect/Secret";
8
8
  import * as Effect from "effect/Effect";
9
9
  import * as Layer from "effect/Layer";
10
10
  import * as Ref from "effect/Ref";
11
11
  import * as Http from "@effect/platform/HttpClient";
12
12
  import { DiscordConfig } from "dfx/DiscordConfig";
13
13
  import { rateLimitFromHeaders, retryAfter, routeFromConfig } from "dfx/DiscordREST/utils";
14
- import { Log } from "dfx/Log";
15
14
  import { RateLimiterLive, RateLimiter, RateLimitStore } from "dfx/RateLimit";
16
15
  import * as Discord from "dfx/types";
17
16
  import { LIB_VERSION } from "dfx/version";
@@ -30,7 +29,6 @@ const make = /*#__PURE__*/Effect.gen(function* (_) {
30
29
  token
31
30
  } = yield* _(DiscordConfig);
32
31
  const http = yield* _(Http.client.Client);
33
- const log = yield* _(Log);
34
32
  const store = yield* _(RateLimitStore);
35
33
  const {
36
34
  maybeWait
@@ -39,7 +37,7 @@ const make = /*#__PURE__*/Effect.gen(function* (_) {
39
37
  // Invalid route handling (40x)
40
38
  const badRoutesRef = yield* _(Ref.make(HashSet.empty()));
41
39
  const tenMinutes = Duration.toMillis(Duration.minutes(10));
42
- const addBadRoute = route => log.info("DiscordREST", "addBadRoute", route).pipe(Effect.zipRight(Ref.update(badRoutesRef, HashSet.add(route))), Effect.zipRight(store.incrementCounter("dfx.rest.invalid", tenMinutes, 10000)));
40
+ const addBadRoute = route => Effect.logDebug("bad route").pipe(Effect.zipRight(Ref.update(badRoutesRef, HashSet.add(route))), Effect.zipRight(store.incrementCounter("dfx.rest.invalid", tenMinutes, 10000)), Effect.annotateLogs("route", route));
43
41
  const isBadRoute = route => Effect.map(Ref.get(badRoutesRef), HashSet.has(route));
44
42
  const removeBadRoute = route => Ref.update(badRoutesRef, HashSet.remove(route));
45
43
  const invalidRateLimit = route => isBadRoute(route).pipe(Effect.tap(invalid => invalid ? maybeWait("dfx.rest.invalid", Duration.minutes(10), 10000) : Effect.unit), Effect.asUnit);
@@ -75,7 +73,7 @@ const make = /*#__PURE__*/Effect.gen(function* (_) {
75
73
  });
76
74
  }), Effect.ignore);
77
75
  const httpExecutor = pipe(Http.client.filterStatusOk(http), Http.client.mapRequest(req => pipe(Http.request.prependUrl(req, rest.baseUrl), Http.request.setHeaders({
78
- Authorization: `Bot ${ConfigSecret.value(token)}`,
76
+ Authorization: `Bot ${Secret.value(token)}`,
79
77
  "User-Agent": `DiscordBot (https://github.com/tim-smart/dfx, ${LIB_VERSION})`
80
78
  }))), Http.client.catchAll(error => error.reason === "StatusCode" ? error.response.json.pipe(Effect.mapError(_ => new DiscordRESTError(_)), Effect.flatMap(body => Effect.fail(new DiscordRESTError(error, body)))) : Effect.fail(new DiscordRESTError(error))));
81
79
  const executor = request => requestRateLimit(request.url, request).pipe(Effect.zipLeft(globalRateLimit), Effect.zipRight(httpExecutor(request)), Effect.tap(response => updateBuckets(request, response)), Effect.catchTag("DiscordRESTError", e => {
@@ -85,14 +83,17 @@ const make = /*#__PURE__*/Effect.gen(function* (_) {
85
83
  const response = e.error.response;
86
84
  switch (response.status) {
87
85
  case 403:
88
- return Effect.zipRight(Effect.all([log.info("DiscordREST", "403", request.url), addBadRoute(routeFromConfig(request.url, request.method)), updateBuckets(request, response)], {
86
+ return Effect.zipRight(Effect.all([Effect.annotateLogs(Effect.logDebug("403"), "url", request.url), addBadRoute(routeFromConfig(request.url, request.method)), updateBuckets(request, response)], {
89
87
  concurrency: "unbounded",
90
88
  discard: true
91
89
  }), Effect.fail(e));
92
90
  case 429:
93
- return log.info("DiscordREST", "429", request.url).pipe(Effect.zipRight(addBadRoute(routeFromConfig(request.url, request.method))), Effect.zipRight(updateBuckets(request, response)), Effect.zipRight(Effect.sleep(Option.getOrElse(retryAfter(response.headers), () => Duration.seconds(5)))), Effect.zipRight(executor(request)));
91
+ return Effect.annotateLogs(Effect.logDebug("429"), "url", request.url).pipe(Effect.zipRight(addBadRoute(routeFromConfig(request.url, request.method))), Effect.zipRight(updateBuckets(request, response)), Effect.zipRight(Effect.sleep(Option.getOrElse(retryAfter(response.headers), () => Duration.seconds(5)))), Effect.zipRight(executor(request)));
94
92
  }
95
93
  return Effect.fail(e);
94
+ }), Effect.annotateLogs({
95
+ package: "dfx",
96
+ module: "DiscordREST"
96
97
  }));
97
98
  const routes = Discord.createRoutes(({
98
99
  method,
@@ -118,6 +119,6 @@ const make = /*#__PURE__*/Effect.gen(function* (_) {
118
119
  executor
119
120
  };
120
121
  });
121
- export const DiscordREST = /*#__PURE__*/Tag();
122
+ export const DiscordREST = /*#__PURE__*/Tag("dfx/DiscordREST");
122
123
  export const DiscordRESTLive = /*#__PURE__*/Layer.effect(DiscordREST, make).pipe( /*#__PURE__*/Layer.provide(RateLimiterLive), /*#__PURE__*/Layer.provide(Http.client.layer));
123
124
  //# sourceMappingURL=DiscordREST.mjs.map