dfx 0.60.0 → 0.61.1

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 (199) hide show
  1. package/Cache/driver.d.ts +1 -1
  2. package/Cache/driver.d.ts.map +1 -1
  3. package/Cache/memory.js +2 -2
  4. package/Cache/memory.js.map +1 -1
  5. package/Cache/memoryTTL.d.ts.map +1 -1
  6. package/Cache/memoryTTL.js.map +1 -1
  7. package/Cache/prelude.d.ts +7 -7
  8. package/Cache/prelude.d.ts.map +1 -1
  9. package/Cache/prelude.js.map +1 -1
  10. package/Cache.d.ts +1 -1
  11. package/Cache.d.ts.map +1 -1
  12. package/Cache.js +1 -1
  13. package/Cache.js.map +1 -1
  14. package/DiscordGateway/DiscordWS.d.ts +5 -5
  15. package/DiscordGateway/DiscordWS.d.ts.map +1 -1
  16. package/DiscordGateway/DiscordWS.js +2 -2
  17. package/DiscordGateway/DiscordWS.js.map +1 -1
  18. package/DiscordGateway/Shard/heartbeats.js.map +1 -1
  19. package/DiscordGateway/Shard/utils.d.ts +1 -1
  20. package/DiscordGateway/Shard/utils.d.ts.map +1 -1
  21. package/DiscordGateway/Shard/utils.js.map +1 -1
  22. package/DiscordGateway/Shard.d.ts +8 -8
  23. package/DiscordGateway/Shard.d.ts.map +1 -1
  24. package/DiscordGateway/Shard.js +11 -11
  25. package/DiscordGateway/Shard.js.map +1 -1
  26. package/DiscordGateway/ShardStore.d.ts +2 -2
  27. package/DiscordGateway/ShardStore.d.ts.map +1 -1
  28. package/DiscordGateway/ShardStore.js +2 -2
  29. package/DiscordGateway/ShardStore.js.map +1 -1
  30. package/DiscordGateway/Sharder.d.ts +2 -2
  31. package/DiscordGateway/Sharder.js.map +1 -1
  32. package/DiscordGateway/WS.d.ts +4 -4
  33. package/DiscordGateway/WS.d.ts.map +1 -1
  34. package/DiscordGateway/WS.js +6 -6
  35. package/DiscordGateway/WS.js.map +1 -1
  36. package/DiscordGateway.d.ts +1 -1
  37. package/DiscordGateway.d.ts.map +1 -1
  38. package/DiscordGateway.js.map +1 -1
  39. package/DiscordREST/types.d.ts +4 -4
  40. package/DiscordREST/types.d.ts.map +1 -1
  41. package/DiscordREST/utils.d.ts +5 -4
  42. package/DiscordREST/utils.d.ts.map +1 -1
  43. package/DiscordREST/utils.js +4 -3
  44. package/DiscordREST/utils.js.map +1 -1
  45. package/DiscordREST.d.ts +6 -7
  46. package/DiscordREST.d.ts.map +1 -1
  47. package/DiscordREST.js +12 -18
  48. package/DiscordREST.js.map +1 -1
  49. package/Helpers/flags.d.ts.map +1 -1
  50. package/Helpers/flags.js.map +1 -1
  51. package/Helpers/intents.d.ts.map +1 -1
  52. package/Helpers/intents.js.map +1 -1
  53. package/Helpers/interactions.d.ts +1 -1
  54. package/Helpers/interactions.d.ts.map +1 -1
  55. package/Helpers/interactions.js +2 -2
  56. package/Helpers/interactions.js.map +1 -1
  57. package/Helpers/members.d.ts.map +1 -1
  58. package/Helpers/members.js.map +1 -1
  59. package/Helpers/permissions.js.map +1 -1
  60. package/Interactions/builder.d.ts +3 -3
  61. package/Interactions/builder.d.ts.map +1 -1
  62. package/Interactions/builder.js +1 -1
  63. package/Interactions/builder.js.map +1 -1
  64. package/Interactions/context.d.ts +1 -1
  65. package/Interactions/context.d.ts.map +1 -1
  66. package/Interactions/context.js.map +1 -1
  67. package/Interactions/definitions.d.ts +3 -3
  68. package/Interactions/definitions.d.ts.map +1 -1
  69. package/Interactions/definitions.js.map +1 -1
  70. package/Interactions/gateway.d.ts +3 -3
  71. package/Interactions/gateway.d.ts.map +1 -1
  72. package/Interactions/gateway.js +1 -1
  73. package/Interactions/gateway.js.map +1 -1
  74. package/Interactions/handlers.d.ts.map +1 -1
  75. package/Interactions/handlers.js.map +1 -1
  76. package/Interactions/index.d.ts +1 -1
  77. package/Interactions/index.d.ts.map +1 -1
  78. package/Interactions/index.js.map +1 -1
  79. package/Interactions/utils.d.ts.map +1 -1
  80. package/Interactions/utils.js.map +1 -1
  81. package/Interactions/webhook.d.ts.map +1 -1
  82. package/Interactions/webhook.js.map +1 -1
  83. package/LICENSE +21 -0
  84. package/Log.d.ts +1 -1
  85. package/Log.d.ts.map +1 -1
  86. package/Log.js +1 -1
  87. package/Log.js.map +1 -1
  88. package/RateLimit.d.ts +2 -2
  89. package/RateLimit.d.ts.map +1 -1
  90. package/RateLimit.js.map +1 -1
  91. package/gateway.d.ts +2 -4
  92. package/gateway.d.ts.map +1 -1
  93. package/gateway.js +3 -6
  94. package/gateway.js.map +1 -1
  95. package/index.d.ts +2 -3
  96. package/index.d.ts.map +1 -1
  97. package/index.js +1 -3
  98. package/index.js.map +1 -1
  99. package/mjs/Cache/memory.mjs +2 -2
  100. package/mjs/Cache/memory.mjs.map +1 -1
  101. package/mjs/Cache/memoryTTL.mjs.map +1 -1
  102. package/mjs/Cache/prelude.mjs.map +1 -1
  103. package/mjs/Cache.mjs +1 -1
  104. package/mjs/Cache.mjs.map +1 -1
  105. package/mjs/DiscordGateway/DiscordWS.mjs +2 -2
  106. package/mjs/DiscordGateway/DiscordWS.mjs.map +1 -1
  107. package/mjs/DiscordGateway/Shard/heartbeats.mjs.map +1 -1
  108. package/mjs/DiscordGateway/Shard/utils.mjs.map +1 -1
  109. package/mjs/DiscordGateway/Shard.mjs +11 -11
  110. package/mjs/DiscordGateway/Shard.mjs.map +1 -1
  111. package/mjs/DiscordGateway/ShardStore.mjs +2 -2
  112. package/mjs/DiscordGateway/ShardStore.mjs.map +1 -1
  113. package/mjs/DiscordGateway/Sharder.mjs.map +1 -1
  114. package/mjs/DiscordGateway/WS.mjs +5 -5
  115. package/mjs/DiscordGateway/WS.mjs.map +1 -1
  116. package/mjs/DiscordGateway.mjs.map +1 -1
  117. package/mjs/DiscordREST/utils.mjs +4 -3
  118. package/mjs/DiscordREST/utils.mjs.map +1 -1
  119. package/mjs/DiscordREST.mjs +13 -14
  120. package/mjs/DiscordREST.mjs.map +1 -1
  121. package/mjs/Helpers/flags.mjs.map +1 -1
  122. package/mjs/Helpers/intents.mjs.map +1 -1
  123. package/mjs/Helpers/interactions.mjs +2 -2
  124. package/mjs/Helpers/interactions.mjs.map +1 -1
  125. package/mjs/Helpers/members.mjs.map +1 -1
  126. package/mjs/Helpers/permissions.mjs.map +1 -1
  127. package/mjs/Interactions/builder.mjs +1 -1
  128. package/mjs/Interactions/builder.mjs.map +1 -1
  129. package/mjs/Interactions/context.mjs.map +1 -1
  130. package/mjs/Interactions/definitions.mjs.map +1 -1
  131. package/mjs/Interactions/gateway.mjs +2 -2
  132. package/mjs/Interactions/gateway.mjs.map +1 -1
  133. package/mjs/Interactions/handlers.mjs.map +1 -1
  134. package/mjs/Interactions/index.mjs.map +1 -1
  135. package/mjs/Interactions/utils.mjs.map +1 -1
  136. package/mjs/Interactions/webhook.mjs.map +1 -1
  137. package/mjs/Log.mjs +1 -1
  138. package/mjs/Log.mjs.map +1 -1
  139. package/mjs/RateLimit.mjs.map +1 -1
  140. package/mjs/gateway.mjs +2 -4
  141. package/mjs/gateway.mjs.map +1 -1
  142. package/mjs/index.mjs +2 -3
  143. package/mjs/index.mjs.map +1 -1
  144. package/mjs/types.mjs.map +1 -1
  145. package/mjs/utils/Effect.mjs +4 -4
  146. package/mjs/utils/Effect.mjs.map +1 -1
  147. package/mjs/version.mjs +1 -1
  148. package/mjs/webhooks.mjs +3 -12
  149. package/mjs/webhooks.mjs.map +1 -1
  150. package/package.json +32 -26
  151. package/src/Cache/driver.ts +1 -1
  152. package/src/Cache/memory.ts +2 -2
  153. package/src/Cache/memoryTTL.ts +6 -4
  154. package/src/Cache/prelude.ts +15 -13
  155. package/src/Cache.ts +3 -3
  156. package/src/DiscordGateway/DiscordWS.ts +9 -10
  157. package/src/DiscordGateway/Shard/heartbeats.ts +1 -1
  158. package/src/DiscordGateway/Shard/utils.ts +10 -12
  159. package/src/DiscordGateway/Shard.ts +23 -24
  160. package/src/DiscordGateway/ShardStore.ts +2 -2
  161. package/src/DiscordGateway/Sharder.ts +7 -7
  162. package/src/DiscordGateway/WS.ts +10 -10
  163. package/src/DiscordGateway.ts +8 -9
  164. package/src/DiscordREST/types.ts +4 -4
  165. package/src/DiscordREST/utils.ts +12 -8
  166. package/src/DiscordREST.ts +60 -53
  167. package/src/Helpers/flags.ts +2 -4
  168. package/src/Helpers/intents.ts +3 -4
  169. package/src/Helpers/interactions.ts +53 -56
  170. package/src/Helpers/members.ts +2 -2
  171. package/src/Helpers/permissions.ts +2 -2
  172. package/src/Interactions/builder.ts +22 -20
  173. package/src/Interactions/context.ts +16 -23
  174. package/src/Interactions/definitions.ts +27 -34
  175. package/src/Interactions/gateway.ts +82 -85
  176. package/src/Interactions/handlers.ts +34 -35
  177. package/src/Interactions/index.ts +17 -21
  178. package/src/Interactions/utils.ts +13 -17
  179. package/src/Interactions/webhook.ts +19 -15
  180. package/src/Log.ts +3 -3
  181. package/src/RateLimit.ts +5 -4
  182. package/src/gateway.ts +4 -19
  183. package/src/index.ts +1 -3
  184. package/src/types.ts +50 -26
  185. package/src/utils/Effect.ts +16 -17
  186. package/src/version.ts +1 -1
  187. package/src/webhooks.ts +21 -34
  188. package/tsconfig.tsbuildinfo +1 -0
  189. package/types.d.ts.map +1 -1
  190. package/types.js.map +1 -1
  191. package/utils/Effect.d.ts.map +1 -1
  192. package/utils/Effect.js +4 -4
  193. package/utils/Effect.js.map +1 -1
  194. package/version.d.ts +1 -1
  195. package/version.js +1 -1
  196. package/webhooks.d.ts +3 -5
  197. package/webhooks.d.ts.map +1 -1
  198. package/webhooks.js +4 -14
  199. package/webhooks.js.map +1 -1
@@ -32,17 +32,19 @@ export const opsWithParent = <E, T>({
32
32
  remove,
33
33
  update,
34
34
  }: OptsWithParentOptions<E, T>) => {
35
- const fromParentOps = Stream.flatMap(fromParent, ([parentId, a]) =>
36
- Stream.fromIterable(
37
- a.map(
38
- (resource): ParentCacheOp<T> => ({
39
- op: "create",
40
- parentId,
41
- resourceId: id(resource),
42
- resource,
43
- }),
35
+ const fromParentOps = Stream.flatMap(
36
+ fromParent,
37
+ ([parentId, a]) =>
38
+ Stream.fromIterable(
39
+ a.map(
40
+ (resource): ParentCacheOp<T> => ({
41
+ op: "create",
42
+ parentId,
43
+ resourceId: id(resource),
44
+ resource,
45
+ }),
46
+ ),
44
47
  ),
45
- ),
46
48
  )
47
49
 
48
50
  const createOps = Stream.map(
@@ -129,7 +131,7 @@ export const ops = <E, T>({ create, id, remove, update }: OpsOptions<E, T>) => {
129
131
  export const guilds = <RM, EM, E>(
130
132
  makeDriver: Effect.Effect<RM, EM, CacheDriver<E, Discord.Guild>>,
131
133
  ) =>
132
- Effect.gen(function* (_) {
134
+ Effect.gen(function*(_) {
133
135
  const driver = yield* _(makeDriver)
134
136
  const gateway = yield* _(DiscordGateway)
135
137
  const rest = yield* _(DiscordREST)
@@ -156,7 +158,7 @@ export const guilds = <RM, EM, E>(
156
158
  export const channels = <RM, EM, E>(
157
159
  makeDriver: Effect.Effect<RM, EM, ParentCacheDriver<E, Discord.Channel>>,
158
160
  ) =>
159
- Effect.gen(function* (_) {
161
+ Effect.gen(function*(_) {
160
162
  const driver = yield* _(makeDriver)
161
163
  const gateway = yield* _(DiscordGateway)
162
164
  const rest = yield* _(DiscordREST)
@@ -199,7 +201,7 @@ export const channels = <RM, EM, E>(
199
201
  export const roles = <RM, EM, E>(
200
202
  makeDriver: Effect.Effect<RM, EM, ParentCacheDriver<E, Discord.Role>>,
201
203
  ) =>
202
- Effect.gen(function* (_) {
204
+ Effect.gen(function*(_) {
203
205
  const driver = yield* _(makeDriver)
204
206
  const gateway = yield* _(DiscordGateway)
205
207
  const rest = yield* _(DiscordREST)
package/src/Cache.ts CHANGED
@@ -1,7 +1,7 @@
1
- import type { CacheDriver, ParentCacheDriver } from "dfx/Cache/driver"
2
- import * as Effect from "@effect/io/Effect"
3
1
  import * as Option from "@effect/data/Option"
2
+ import * as Effect from "@effect/io/Effect"
4
3
  import * as Stream from "@effect/stream/Stream"
4
+ import type { CacheDriver, ParentCacheDriver } from "dfx/Cache/driver"
5
5
 
6
6
  export * from "dfx/Cache/driver"
7
7
  export {
@@ -97,7 +97,7 @@ export const makeWithParent = <EOps, EDriver, EMiss, EPMiss, A>({
97
97
  Effect.all(
98
98
  entries.map(([id, a]) => driver.set(parentId, id, a)),
99
99
  { concurrency: "unbounded" },
100
- ),
100
+ )
101
101
  ),
102
102
  Effect.map(entries => new Map(entries) as ReadonlyMap<string, A>),
103
103
  ),
@@ -1,10 +1,10 @@
1
- import { LiveWS, Reconnect, WS } from "dfx/DiscordGateway/WS"
2
- import type WebSocket from "isomorphic-ws"
3
- import type * as Discord from "dfx/types"
1
+ import { Tag } from "@effect/data/Context"
4
2
  import * as Effect from "@effect/io/Effect"
5
3
  import * as Layer from "@effect/io/Layer"
6
- import { Tag } from "@effect/data/Context"
7
4
  import * as Ref from "@effect/io/Ref"
5
+ import { LiveWS, Reconnect, WS } from "dfx/DiscordGateway/WS"
6
+ import type * as Discord from "dfx/types"
7
+ import type WebSocket from "isomorphic-ws"
8
8
 
9
9
  export type Message = Discord.GatewayPayload | Reconnect
10
10
 
@@ -28,7 +28,7 @@ export const LiveJsonDiscordWSCodec = Layer.succeed(DiscordWSCodec, {
28
28
  decode: p => JSON.parse(p.toString("utf8")),
29
29
  })
30
30
 
31
- const make = Effect.gen(function* (_) {
31
+ const make = Effect.gen(function*(_) {
32
32
  const ws = yield* _(WS)
33
33
  const encoding = yield* _(DiscordWSCodec)
34
34
 
@@ -38,23 +38,22 @@ const make = Effect.gen(function* (_) {
38
38
  url = "wss://gateway.discord.gg/",
39
39
  version = 10,
40
40
  }: OpenOpts) =>
41
- Effect.gen(function* (_) {
41
+ Effect.gen(function*(_) {
42
42
  const urlRef = yield* _(
43
43
  Ref.make(`${url}?v=${version}&encoding=${encoding.type}`),
44
44
  )
45
45
  const setUrl = (url: string) =>
46
46
  Ref.set(urlRef, `${url}?v=${version}&encoding=${encoding.type}`)
47
47
  const takeOutbound = Effect.map(outbound, msg =>
48
- msg === Reconnect ? msg : encoding.encode(msg),
49
- )
48
+ msg === Reconnect ? msg : encoding.encode(msg))
50
49
  const socket = yield* _(ws.connect(urlRef, takeOutbound, onConnecting))
51
50
  const take = Effect.map(socket.take, encoding.decode)
52
51
 
53
52
  const run = Effect.retryWhile(
54
53
  socket.run,
55
54
  e =>
56
- (e._tag === "WebSocketCloseError" && e.code < 2000) ||
57
- (e._tag === "WebSocketError" && e.reason === "open-timeout"),
55
+ (e._tag === "WebSocketCloseError" && e.code < 2000)
56
+ || (e._tag === "WebSocketError" && e.reason === "open-timeout"),
58
57
  )
59
58
 
60
59
  return {
@@ -35,7 +35,7 @@ export const send = (
35
35
  seqRef: Ref.Ref<Option.Option<number>>,
36
36
  send: (p: DiscordWS.Message) => Effect.Effect<never, never, boolean>,
37
37
  ) =>
38
- Effect.gen(function* (_) {
38
+ Effect.gen(function*(_) {
39
39
  const ackedRef = yield* _(Ref.make(true))
40
40
 
41
41
  const heartbeats = EffectU.foreverSwitch(
@@ -1,8 +1,8 @@
1
1
  import * as Option from "@effect/data/Option"
2
2
  import * as Effect from "@effect/io/Effect"
3
3
  import * as Ref from "@effect/io/Ref"
4
- import type * as Discord from "dfx/types"
5
4
  import * as Stream from "@effect/stream/Stream"
5
+ import type * as Discord from "dfx/types"
6
6
 
7
7
  export const opCode =
8
8
  <R, E>(source: Stream.Stream<R, E, Discord.GatewayPayload>) =>
@@ -13,16 +13,15 @@ export const opCode =
13
13
  Stream.filter((p): p is Discord.GatewayPayload<T> => p.op === code),
14
14
  )
15
15
 
16
- const maybeUpdateRef =
17
- <T>(
18
- f: (p: Discord.GatewayPayload) => Option.Option<T>,
19
- ref: Ref.Ref<Option.Option<T>>,
20
- ) =>
21
- (_: Discord.GatewayPayload): Effect.Effect<never, never, void> =>
22
- Option.match(f(_), {
23
- onNone: () => Effect.unit,
24
- onSome: a => Ref.set(ref, Option.some(a)),
25
- })
16
+ const maybeUpdateRef = <T>(
17
+ f: (p: Discord.GatewayPayload) => Option.Option<T>,
18
+ ref: Ref.Ref<Option.Option<T>>,
19
+ ) =>
20
+ (_: Discord.GatewayPayload): Effect.Effect<never, never, void> =>
21
+ Option.match(f(_), {
22
+ onNone: () => Effect.unit,
23
+ onSome: a => Ref.set(ref, Option.some(a)),
24
+ })
26
25
 
27
26
  export const latest = <T>(
28
27
  f: (p: Discord.GatewayPayload) => Option.Option<T>,
@@ -36,6 +35,5 @@ export const latest = <T>(
36
35
  > =>
37
36
  Effect.map(
38
37
  Ref.make<Option.Option<T>>(Option.none()),
39
-
40
38
  ref => [ref, maybeUpdateRef(f, ref)] as const,
41
39
  )
@@ -1,5 +1,14 @@
1
+ import * as Chunk from "@effect/data/Chunk"
2
+ import { Tag } from "@effect/data/Context"
3
+ import * as Duration from "@effect/data/Duration"
4
+ import * as Option from "@effect/data/Option"
5
+ import * as ConfigSecret from "@effect/io/Config/Secret"
6
+ import * as Effect from "@effect/io/Effect"
7
+ import * as Hub from "@effect/io/Hub"
8
+ import * as Layer from "@effect/io/Layer"
9
+ import * as Queue from "@effect/io/Queue"
10
+ import * as Ref from "@effect/io/Ref"
1
11
  import { DiscordConfig } from "dfx/DiscordConfig"
2
- import { LiveRateLimiter, RateLimiter } from "dfx/RateLimit"
3
12
  import type { Message } from "dfx/DiscordGateway/DiscordWS"
4
13
  import { DiscordWS, LiveDiscordWS } from "dfx/DiscordGateway/DiscordWS"
5
14
  import * as Heartbeats from "dfx/DiscordGateway/Shard/heartbeats"
@@ -8,17 +17,8 @@ import * as InvalidSession from "dfx/DiscordGateway/Shard/invalidSession"
8
17
  import * as Utils from "dfx/DiscordGateway/Shard/utils"
9
18
  import { Reconnect } from "dfx/DiscordGateway/WS"
10
19
  import { Log } from "dfx/Log"
20
+ import { LiveRateLimiter, RateLimiter } from "dfx/RateLimit"
11
21
  import * as Discord from "dfx/types"
12
- import * as Effect from "@effect/io/Effect"
13
- import * as Layer from "@effect/io/Layer"
14
- import { Tag } from "@effect/data/Context"
15
- import * as Option from "@effect/data/Option"
16
- import * as Hub from "@effect/io/Hub"
17
- import * as Queue from "@effect/io/Queue"
18
- import * as Ref from "@effect/io/Ref"
19
- import * as Duration from "@effect/data/Duration"
20
- import * as Chunk from "@effect/data/Chunk"
21
- import * as ConfigSecret from "@effect/io/Config/Secret"
22
22
 
23
23
  const enum Phase {
24
24
  Connecting,
@@ -26,7 +26,7 @@ const enum Phase {
26
26
  Connected,
27
27
  }
28
28
 
29
- export const make = Effect.gen(function* (_) {
29
+ export const make = Effect.gen(function*(_) {
30
30
  const { gateway, token } = yield* _(DiscordConfig)
31
31
  const limiter = yield* _(RateLimiter)
32
32
  const dws = yield* _(DiscordWS)
@@ -37,7 +37,7 @@ export const make = Effect.gen(function* (_) {
37
37
  hub: Hub.Hub<Discord.GatewayPayload<Discord.ReceiveEvent>>,
38
38
  sendQueue: Queue.Dequeue<Discord.GatewayPayload<Discord.SendEvent>>,
39
39
  ) =>
40
- Effect.gen(function* (_) {
40
+ Effect.gen(function*(_) {
41
41
  const outboundQueue = yield* _(Queue.unbounded<Message>())
42
42
  const pendingQueue = yield* _(Queue.unbounded<Message>())
43
43
  const phase = yield* _(Ref.make(Phase.Connecting))
@@ -52,15 +52,13 @@ export const make = Effect.gen(function* (_) {
52
52
  Effect.flatMap(Ref.get(phase), phase =>
53
53
  phase === Phase.Connected
54
54
  ? Queue.offer(outboundQueue, p)
55
- : Queue.offer(pendingQueue, p),
56
- )
55
+ : Queue.offer(pendingQueue, p))
57
56
 
58
57
  const heartbeatSend = (p: Message) =>
59
58
  Effect.flatMap(Ref.get(phase), phase =>
60
59
  phase !== Phase.Connecting
61
60
  ? Queue.offer(outboundQueue, p)
62
- : Effect.succeed(false),
63
- )
61
+ : Effect.succeed(false))
64
62
 
65
63
  const prioritySend = (p: Message) => Queue.offer(outboundQueue, p)
66
64
 
@@ -77,12 +75,12 @@ export const make = Effect.gen(function* (_) {
77
75
  Chunk.filter(
78
76
  msgs,
79
77
  msg =>
80
- msg !== Reconnect &&
81
- msg.op !== Discord.GatewayOpcode.IDENTIFY &&
82
- msg.op !== Discord.GatewayOpcode.RESUME &&
83
- msg.op !== Discord.GatewayOpcode.HEARTBEAT,
78
+ msg !== Reconnect
79
+ && msg.op !== Discord.GatewayOpcode.IDENTIFY
80
+ && msg.op !== Discord.GatewayOpcode.RESUME
81
+ && msg.op !== Discord.GatewayOpcode.HEARTBEAT,
84
82
  ),
85
- ),
83
+ )
86
84
  ),
87
85
  Effect.zipRight(setPhase(Phase.Connecting)),
88
86
  )
@@ -97,7 +95,7 @@ export const make = Effect.gen(function* (_) {
97
95
  p.op === Discord.GatewayOpcode.DISPATCH && p.t === "READY",
98
96
  ),
99
97
  Option.map(p => p.d!),
100
- ),
98
+ )
101
99
  ),
102
100
  )
103
101
  const [latestSequence, updateLatestSequence] = yield* _(
@@ -198,4 +196,5 @@ export const LiveShard = Layer.provide(
198
196
  )
199
197
 
200
198
  export interface RunningShard
201
- extends Effect.Effect.Success<ReturnType<Shard["connect"]>> {}
199
+ extends Effect.Effect.Success<ReturnType<Shard["connect"]>>
200
+ {}
@@ -1,7 +1,7 @@
1
- import * as Effect from "@effect/io/Effect"
2
- import * as Layer from "@effect/io/Layer"
3
1
  import { Tag } from "@effect/data/Context"
4
2
  import * as Option from "@effect/data/Option"
3
+ import * as Effect from "@effect/io/Effect"
4
+ import * as Layer from "@effect/io/Layer"
5
5
 
6
6
  export interface ClaimIdContext {
7
7
  sharderCount: number
@@ -24,7 +24,7 @@ const claimRepeatPolicy = Schedule.fixed("3 minutes").pipe(
24
24
  Schedule.passthrough,
25
25
  ) as Schedule.Schedule<never, Option.Option<number>, Option.Some<number>>
26
26
 
27
- const make = Effect.gen(function* (_) {
27
+ const make = Effect.gen(function*(_) {
28
28
  const store = yield* _(ShardStore)
29
29
  const rest = yield* _(DiscordREST)
30
30
  const { gateway: config } = yield* _(DiscordConfig)
@@ -33,7 +33,7 @@ const make = Effect.gen(function* (_) {
33
33
  const currentShards = yield* _(Ref.make(HashSet.empty<RunningShard>()))
34
34
 
35
35
  const takeConfig = (totalCount: number) =>
36
- Effect.gen(function* (_) {
36
+ Effect.gen(function*(_) {
37
37
  const currentCount = yield* _(Ref.make(0))
38
38
 
39
39
  const claimId = (
@@ -68,7 +68,7 @@ const make = Effect.gen(function* (_) {
68
68
  reset_after: 0,
69
69
  max_concurrency: 1,
70
70
  },
71
- }),
71
+ })
72
72
  ),
73
73
  )
74
74
 
@@ -76,7 +76,7 @@ const make = Effect.gen(function* (_) {
76
76
  hub: Hub.Hub<Discord.GatewayPayload<Discord.ReceiveEvent>>,
77
77
  sendQueue: Queue.Dequeue<Discord.GatewayPayload<Discord.SendEvent>>,
78
78
  ) =>
79
- Effect.gen(function* (_) {
79
+ Effect.gen(function*(_) {
80
80
  const deferred = yield* _(
81
81
  Deferred.make<WebSocketError | WebSocketCloseError, never>(),
82
82
  )
@@ -93,10 +93,10 @@ const make = Effect.gen(function* (_) {
93
93
  `dfx.sharder.${id % concurrency}`,
94
94
  Duration.millis(config.identifyRateLimit[0]),
95
95
  config.identifyRateLimit[1],
96
- ),
96
+ )
97
97
  ),
98
98
  Effect.flatMap(c =>
99
- shard.connect([c.id, c.totalCount], hub, sendQueue),
99
+ shard.connect([c.id, c.totalCount], hub, sendQueue)
100
100
  ),
101
101
  Effect.flatMap(shard =>
102
102
  Effect.acquireUseRelease(
@@ -106,7 +106,7 @@ const make = Effect.gen(function* (_) {
106
106
  ).pipe(
107
107
  Effect.catchAllCause(_ => Deferred.failCause(deferred, _)),
108
108
  Effect.fork,
109
- ),
109
+ )
110
110
  ),
111
111
  Effect.forever,
112
112
  )
@@ -1,12 +1,12 @@
1
- import { Log } from "dfx/Log"
2
- import WebSocket from "isomorphic-ws"
1
+ import { Tag } from "@effect/data/Context"
2
+ import * as Duration from "@effect/data/Duration"
3
3
  import * as Effect from "@effect/io/Effect"
4
4
  import * as Layer from "@effect/io/Layer"
5
- import { Tag } from "@effect/data/Context"
6
- import * as Ref from "@effect/io/Ref"
7
5
  import * as Queue from "@effect/io/Queue"
6
+ import * as Ref from "@effect/io/Ref"
8
7
  import * as Runtime from "@effect/io/Runtime"
9
- import * as Duration from "@effect/data/Duration"
8
+ import { Log } from "dfx/Log"
9
+ import WebSocket from "isomorphic-ws"
10
10
 
11
11
  export const Reconnect = Symbol()
12
12
  export type Reconnect = typeof Reconnect
@@ -38,7 +38,7 @@ const socket = (urlRef: Ref.Ref<string>) =>
38
38
  // eslint-disable-next-line no-extra-semi
39
39
  ;(ws as any).removeAllListeners?.()
40
40
  ws.close()
41
- }),
41
+ })
42
42
  ),
43
43
  )
44
44
 
@@ -72,7 +72,7 @@ const offer = (
72
72
  resume(Effect.fail(new WebSocketCloseError(e.code, e.reason)))
73
73
  })
74
74
  },
75
- ),
75
+ )
76
76
  ),
77
77
  )
78
78
 
@@ -117,7 +117,7 @@ const send = (
117
117
  Effect.forever,
118
118
  )
119
119
 
120
- const make = Effect.gen(function* (_) {
120
+ const make = Effect.gen(function*(_) {
121
121
  const log = yield* _(Log)
122
122
 
123
123
  const connect = (
@@ -126,7 +126,7 @@ const make = Effect.gen(function* (_) {
126
126
  onConnecting = Effect.unit,
127
127
  openTimeout = Duration.seconds(3),
128
128
  ) =>
129
- Effect.gen(function* (_) {
129
+ Effect.gen(function*(_) {
130
130
  const queue = yield* _(Queue.unbounded<WebSocket.Data>())
131
131
 
132
132
  const run = onConnecting.pipe(
@@ -140,7 +140,7 @@ const make = Effect.gen(function* (_) {
140
140
  ),
141
141
  ],
142
142
  { concurrency: "unbounded", discard: true },
143
- ),
143
+ )
144
144
  ),
145
145
  Effect.scoped,
146
146
  Effect.retryWhile(isReconnect),
@@ -11,14 +11,13 @@ import type { WebSocketCloseError, WebSocketError } from "dfx/DiscordGateway/WS"
11
11
  import type * as Discord from "dfx/types"
12
12
  import * as EffectUtils from "dfx/utils/Effect"
13
13
 
14
- const fromDispatchFactory =
15
- <R, E>(
16
- source: Stream.Stream<R, E, Discord.GatewayPayload<Discord.ReceiveEvent>>,
17
- ) =>
18
- <K extends keyof Discord.ReceiveEvents>(
19
- event: K,
20
- ): Stream.Stream<R, E, Discord.ReceiveEvents[K]> =>
21
- Stream.filter(source, p => p.t === event).pipe(Stream.map(p => p.d! as any))
14
+ const fromDispatchFactory = <R, E>(
15
+ source: Stream.Stream<R, E, Discord.GatewayPayload<Discord.ReceiveEvent>>,
16
+ ) =>
17
+ <K extends keyof Discord.ReceiveEvents>(
18
+ event: K,
19
+ ): Stream.Stream<R, E, Discord.ReceiveEvents[K]> =>
20
+ Stream.filter(source, p => p.t === event).pipe(Stream.map(p => p.d! as any))
22
21
 
23
22
  const handleDispatchFactory =
24
23
  (hub: Hub.Hub<Discord.GatewayPayload<Discord.ReceiveEvent>>) =>
@@ -58,7 +57,7 @@ export interface DiscordGateway {
58
57
  }
59
58
  export const DiscordGateway = Tag<DiscordGateway>()
60
59
 
61
- export const make = Effect.gen(function* (_) {
60
+ export const make = Effect.gen(function*(_) {
62
61
  const sharder = yield* _(Sharder)
63
62
  const hub = yield* _(
64
63
  Hub.unbounded<Discord.GatewayPayload<Discord.ReceiveEvent>>(),
@@ -1,9 +1,9 @@
1
- import type * as Http from "@effect-http/client"
2
- import type { DiscordRESTError } from "dfx/DiscordREST"
3
1
  import type * as Effect from "@effect/io/Effect"
2
+ import type * as Http from "@effect/platform/HttpClient"
3
+ import type { DiscordRESTError } from "dfx/DiscordREST"
4
4
 
5
- export interface ResponseWithData<A> extends Http.response.Response {
6
- readonly json: Effect.Effect<never, Http.ResponseDecodeError, A>
5
+ export interface ResponseWithData<A> extends Http.response.ClientResponse {
6
+ readonly json: Effect.Effect<never, Http.error.ResponseError, A>
7
7
  }
8
8
 
9
9
  export type RestResponse<T> = Effect.Effect<
@@ -1,5 +1,7 @@
1
- import * as Option from "@effect/data/Option"
2
1
  import * as Duration from "@effect/data/Duration"
2
+ import * as HashMap from "@effect/data/HashMap"
3
+ import * as Option from "@effect/data/Option"
4
+ import type * as Http from "@effect/platform/HttpClient"
3
5
 
4
6
  const majorResources = ["channels", "guilds", "webhooks"] as const
5
7
 
@@ -7,8 +9,10 @@ export const routeFromConfig = (path: string, method: string) => {
7
9
  // Only keep major ID's
8
10
  const routeURL = path
9
11
  .split("?")[0]
10
- .replace(/\/([A-Za-z]+)\/(\d{16,21}|@me)/g, (match, resource) =>
11
- majorResources.includes(resource) ? match : `/${resource}`,
12
+ .replace(
13
+ /\/([A-Za-z]+)\/(\d{16,21}|@me)/g,
14
+ (match, resource) =>
15
+ majorResources.includes(resource) ? match : `/${resource}`,
12
16
  )
13
17
  // Strip reactions
14
18
  .replace(/\/reactions\/(.*)/, "/reactions")
@@ -16,21 +20,21 @@ export const routeFromConfig = (path: string, method: string) => {
16
20
  return `${method}-${routeURL}`
17
21
  }
18
22
 
19
- export const numberHeader = (headers: Headers) => (key: string) =>
20
- Option.fromNullable(headers.get(key)).pipe(
23
+ export const numberHeader = (headers: Http.headers.Headers) => (key: string) =>
24
+ HashMap.get(headers, key).pipe(
21
25
  Option.map(parseFloat),
22
26
  Option.filter(n => !isNaN(n)),
23
27
  )
24
28
 
25
- export const retryAfter = (headers: Headers) =>
29
+ export const retryAfter = (headers: Http.headers.Headers) =>
26
30
  numberHeader(headers)("x-ratelimit-reset-after").pipe(
27
31
  Option.orElse(() => numberHeader(headers)("retry-after")),
28
32
  Option.map(Duration.seconds),
29
33
  )
30
34
 
31
- export const rateLimitFromHeaders = (headers: Headers) =>
35
+ export const rateLimitFromHeaders = (headers: Http.headers.Headers) =>
32
36
  Option.all({
33
- bucket: Option.fromNullable(headers.get("x-ratelimit-bucket")),
37
+ bucket: HashMap.get(headers, "x-ratelimit-bucket"),
34
38
  retryAfter: retryAfter(headers),
35
39
  limit: numberHeader(headers)("x-ratelimit-limit"),
36
40
  remaining: numberHeader(headers)("x-ratelimit-remaining"),