dfx 0.61.4 → 0.61.6

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 (155) hide show
  1. package/Cache/memoryTTL.d.ts.map +1 -1
  2. package/Cache/memoryTTL.js.map +1 -1
  3. package/Cache/prelude.d.ts.map +1 -1
  4. package/Cache/prelude.js.map +1 -1
  5. package/Cache.d.ts.map +1 -1
  6. package/Cache.js.map +1 -1
  7. package/DiscordGateway/DiscordWS.d.ts +1 -1
  8. package/DiscordGateway/DiscordWS.d.ts.map +1 -1
  9. package/DiscordGateway/DiscordWS.js.map +1 -1
  10. package/DiscordGateway/Shard/heartbeats.d.ts.map +1 -1
  11. package/DiscordGateway/Shard/heartbeats.js.map +1 -1
  12. package/DiscordGateway/Shard/sendEvents.js +9 -6
  13. package/DiscordGateway/Shard/sendEvents.js.map +1 -1
  14. package/DiscordGateway/Shard/utils.d.ts.map +1 -1
  15. package/DiscordGateway/Shard/utils.js.map +1 -1
  16. package/DiscordGateway/Shard.d.ts +2 -2
  17. package/DiscordGateway/Shard.d.ts.map +1 -1
  18. package/DiscordGateway/Shard.js +8 -7
  19. package/DiscordGateway/Shard.js.map +1 -1
  20. package/DiscordGateway/Sharder.js.map +1 -1
  21. package/DiscordGateway/WS.d.ts +1 -0
  22. package/DiscordGateway/WS.d.ts.map +1 -1
  23. package/DiscordGateway/WS.js.map +1 -1
  24. package/DiscordGateway.d.ts.map +1 -1
  25. package/DiscordGateway.js.map +1 -1
  26. package/DiscordREST/utils.d.ts.map +1 -1
  27. package/DiscordREST/utils.js +3 -3
  28. package/DiscordREST/utils.js.map +1 -1
  29. package/DiscordREST.d.ts.map +1 -1
  30. package/DiscordREST.js +1 -1
  31. package/DiscordREST.js.map +1 -1
  32. package/Helpers/flags.d.ts.map +1 -1
  33. package/Helpers/flags.js.map +1 -1
  34. package/Helpers/intents.d.ts.map +1 -1
  35. package/Helpers/intents.js.map +1 -1
  36. package/Helpers/interactions.d.ts.map +1 -1
  37. package/Helpers/interactions.js +3 -2
  38. package/Helpers/interactions.js.map +1 -1
  39. package/Helpers/members.d.ts.map +1 -1
  40. package/Helpers/members.js.map +1 -1
  41. package/Helpers/permissions.js.map +1 -1
  42. package/Helpers/ui.js +12 -11
  43. package/Helpers/ui.js.map +1 -1
  44. package/Interactions/builder.d.ts.map +1 -1
  45. package/Interactions/builder.js +1 -1
  46. package/Interactions/builder.js.map +1 -1
  47. package/Interactions/context.d.ts +1 -1
  48. package/Interactions/context.d.ts.map +1 -1
  49. package/Interactions/context.js.map +1 -1
  50. package/Interactions/definitions.d.ts +3 -3
  51. package/Interactions/definitions.d.ts.map +1 -1
  52. package/Interactions/definitions.js.map +1 -1
  53. package/Interactions/gateway.d.ts.map +1 -1
  54. package/Interactions/gateway.js +1 -1
  55. package/Interactions/gateway.js.map +1 -1
  56. package/Interactions/handlers.d.ts.map +1 -1
  57. package/Interactions/handlers.js +7 -7
  58. package/Interactions/handlers.js.map +1 -1
  59. package/Interactions/index.d.ts.map +1 -1
  60. package/Interactions/index.js.map +1 -1
  61. package/Interactions/utils.d.ts.map +1 -1
  62. package/Interactions/utils.js.map +1 -1
  63. package/Interactions/webhook.d.ts +1 -1
  64. package/Interactions/webhook.d.ts.map +1 -1
  65. package/Interactions/webhook.js.map +1 -1
  66. package/Log.js.map +1 -1
  67. package/RateLimit.d.ts +2 -2
  68. package/RateLimit.d.ts.map +1 -1
  69. package/RateLimit.js.map +1 -1
  70. package/mjs/Cache/memoryTTL.mjs.map +1 -1
  71. package/mjs/Cache/prelude.mjs.map +1 -1
  72. package/mjs/Cache.mjs.map +1 -1
  73. package/mjs/DiscordGateway/DiscordWS.mjs.map +1 -1
  74. package/mjs/DiscordGateway/Shard/heartbeats.mjs.map +1 -1
  75. package/mjs/DiscordGateway/Shard/sendEvents.mjs +7 -6
  76. package/mjs/DiscordGateway/Shard/sendEvents.mjs.map +1 -1
  77. package/mjs/DiscordGateway/Shard/utils.mjs.map +1 -1
  78. package/mjs/DiscordGateway/Shard.mjs +8 -7
  79. package/mjs/DiscordGateway/Shard.mjs.map +1 -1
  80. package/mjs/DiscordGateway/Sharder.mjs.map +1 -1
  81. package/mjs/DiscordGateway/WS.mjs.map +1 -1
  82. package/mjs/DiscordGateway.mjs.map +1 -1
  83. package/mjs/DiscordREST/utils.mjs +3 -3
  84. package/mjs/DiscordREST/utils.mjs.map +1 -1
  85. package/mjs/DiscordREST.mjs +1 -1
  86. package/mjs/DiscordREST.mjs.map +1 -1
  87. package/mjs/Helpers/flags.mjs.map +1 -1
  88. package/mjs/Helpers/intents.mjs.map +1 -1
  89. package/mjs/Helpers/interactions.mjs +3 -2
  90. package/mjs/Helpers/interactions.mjs.map +1 -1
  91. package/mjs/Helpers/members.mjs.map +1 -1
  92. package/mjs/Helpers/permissions.mjs.map +1 -1
  93. package/mjs/Helpers/ui.mjs +12 -11
  94. package/mjs/Helpers/ui.mjs.map +1 -1
  95. package/mjs/Interactions/builder.mjs +1 -1
  96. package/mjs/Interactions/builder.mjs.map +1 -1
  97. package/mjs/Interactions/context.mjs.map +1 -1
  98. package/mjs/Interactions/definitions.mjs.map +1 -1
  99. package/mjs/Interactions/gateway.mjs +1 -1
  100. package/mjs/Interactions/gateway.mjs.map +1 -1
  101. package/mjs/Interactions/handlers.mjs +7 -7
  102. package/mjs/Interactions/handlers.mjs.map +1 -1
  103. package/mjs/Interactions/index.mjs.map +1 -1
  104. package/mjs/Interactions/utils.mjs.map +1 -1
  105. package/mjs/Interactions/webhook.mjs.map +1 -1
  106. package/mjs/Log.mjs.map +1 -1
  107. package/mjs/RateLimit.mjs.map +1 -1
  108. package/mjs/types.mjs +733 -9
  109. package/mjs/types.mjs.map +1 -1
  110. package/mjs/utils/Effect.mjs.map +1 -1
  111. package/mjs/version.mjs +1 -1
  112. package/mjs/webhooks.mjs.map +1 -1
  113. package/package.json +2 -2
  114. package/src/Cache/memoryTTL.ts +4 -6
  115. package/src/Cache/prelude.ts +13 -15
  116. package/src/Cache.ts +5 -2
  117. package/src/DiscordGateway/DiscordWS.ts +6 -5
  118. package/src/DiscordGateway/Shard/heartbeats.ts +2 -3
  119. package/src/DiscordGateway/Shard/utils.ts +10 -9
  120. package/src/DiscordGateway/Shard.ts +13 -12
  121. package/src/DiscordGateway/Sharder.ts +8 -8
  122. package/src/DiscordGateway/WS.ts +9 -6
  123. package/src/DiscordGateway.ts +9 -8
  124. package/src/DiscordREST/utils.ts +5 -7
  125. package/src/DiscordREST.ts +25 -27
  126. package/src/Helpers/flags.ts +4 -2
  127. package/src/Helpers/intents.ts +4 -3
  128. package/src/Helpers/interactions.ts +54 -51
  129. package/src/Helpers/members.ts +2 -2
  130. package/src/Helpers/permissions.ts +2 -2
  131. package/src/Interactions/builder.ts +18 -20
  132. package/src/Interactions/context.ts +31 -18
  133. package/src/Interactions/definitions.ts +36 -27
  134. package/src/Interactions/gateway.ts +86 -79
  135. package/src/Interactions/handlers.ts +35 -34
  136. package/src/Interactions/index.ts +20 -16
  137. package/src/Interactions/utils.ts +17 -13
  138. package/src/Interactions/webhook.ts +15 -19
  139. package/src/Log.ts +2 -2
  140. package/src/RateLimit.ts +4 -5
  141. package/src/types.ts +172 -188
  142. package/src/utils/Effect.ts +19 -21
  143. package/src/version.ts +1 -1
  144. package/src/webhooks.ts +1 -4
  145. package/types.d.ts +140 -132
  146. package/types.d.ts.map +1 -1
  147. package/types.js +784 -10
  148. package/types.js.map +1 -1
  149. package/utils/Effect.d.ts.map +1 -1
  150. package/utils/Effect.js.map +1 -1
  151. package/version.d.ts +1 -1
  152. package/version.js +1 -1
  153. package/webhooks.d.ts.map +1 -1
  154. package/webhooks.js.map +1 -1
  155. package/tsconfig.tsbuildinfo +0 -1
@@ -25,9 +25,8 @@ export class GlobalApplicationCommand<R, E> {
25
25
  export const global = <
26
26
  R,
27
27
  E,
28
- const A extends DeepReadonlyObject<
29
- Discord.CreateGlobalApplicationCommandParams
30
- >,
28
+ const A extends
29
+ DeepReadonlyObject<Discord.CreateGlobalApplicationCommandParams>,
31
30
  >(
32
31
  command: A,
33
32
  handle: CommandHandler<R, E, A>,
@@ -48,9 +47,8 @@ export class GuildApplicationCommand<R, E> {
48
47
  export const guild = <
49
48
  R,
50
49
  E,
51
- const A extends DeepReadonlyObject<
52
- Discord.CreateGuildApplicationCommandParams
53
- >,
50
+ const A extends
51
+ DeepReadonlyObject<Discord.CreateGuildApplicationCommandParams>,
54
52
  >(
55
53
  command: A,
56
54
  handle: CommandHandler<R, E, A>,
@@ -123,9 +121,12 @@ export const autocomplete = <R1, R2, E1, E2>(
123
121
  >(pred as any, handle as any)
124
122
 
125
123
  // ==== Command handler helpers
126
- type DeepReadonly<T> = T extends Array<infer R> ? ReadonlyArray<DeepReadonly<R>>
127
- : T extends Function ? T
128
- : T extends object ? DeepReadonlyObject<T>
124
+ type DeepReadonly<T> = T extends Array<infer R>
125
+ ? ReadonlyArray<DeepReadonly<R>>
126
+ : T extends Function
127
+ ? T
128
+ : T extends object
129
+ ? DeepReadonlyObject<T>
129
130
  : T
130
131
  type DeepReadonlyObject<T> = {
131
132
  readonly [P in keyof T]: DeepReadonly<T[P]>
@@ -162,26 +163,29 @@ export interface CommandHelper<A> {
162
163
  >
163
164
 
164
165
  subCommands: <
165
- NER extends SubCommandNames<A> extends never ? never
166
+ NER extends SubCommandNames<A> extends never
167
+ ? never
166
168
  : Record<
167
- SubCommandNames<A>,
168
- Effect.Effect<any, any, Discord.InteractionResponse>
169
- >,
169
+ SubCommandNames<A>,
170
+ Effect.Effect<any, any, Discord.InteractionResponse>
171
+ >,
170
172
  >(
171
173
  commands: NER,
172
174
  ) => Effect.Effect<
173
175
  | Exclude<
174
- [NER[keyof NER]] extends [
175
- { [Effect.EffectTypeId]: { _R: (_: never) => infer R } },
176
- ] ? R
177
- : never,
178
- SubCommandContext
179
- >
176
+ [NER[keyof NER]] extends [
177
+ { [Effect.EffectTypeId]: { _R: (_: never) => infer R } },
178
+ ]
179
+ ? R
180
+ : never,
181
+ SubCommandContext
182
+ >
180
183
  | Discord.Interaction
181
184
  | Discord.ApplicationCommandDatum,
182
185
  [NER[keyof NER]] extends [
183
186
  { [Effect.EffectTypeId]: { _E: (_: never) => infer E } },
184
- ] ? E
187
+ ]
188
+ ? E
185
189
  : never,
186
190
  Discord.InteractionResponse
187
191
  >
@@ -201,9 +205,10 @@ interface CommandOption {
201
205
  type SubCommands<A> = A extends {
202
206
  readonly type: Discord.ApplicationCommandOptionType.SUB_COMMAND
203
207
  readonly options?: ReadonlyArray<CommandOption>
204
- } ? A
208
+ }
209
+ ? A
205
210
  : A extends { readonly options: ReadonlyArray<CommandOption> }
206
- ? SubCommands<A["options"][number]>
211
+ ? SubCommands<A["options"][number]>
207
212
  : never
208
213
 
209
214
  type SubCommandNames<A> = Option<SubCommands<A>>["name"]
@@ -280,16 +285,20 @@ type SubCommandResolvables<A> = Extract<
280
285
  type AllResolvables<A> = Resolvables<A> | SubCommandResolvables<A>
281
286
 
282
287
  // == Utilities
283
- type StringLiteral<T> = T extends string ? string extends T ? never
284
- : T
288
+ type StringLiteral<T> = T extends string
289
+ ? string extends T
290
+ ? never
291
+ : T
285
292
  : never
286
293
 
287
294
  type Option<A> = A extends { readonly name: infer N }
288
- ? N extends StringLiteral<N> ? A
289
- : never
295
+ ? N extends StringLiteral<N>
296
+ ? A
297
+ : never
290
298
  : never
291
299
 
292
300
  type OptionsWithLiteral<A, T> = A extends {
293
301
  readonly options: ReadonlyArray<CommandOption>
294
- } ? Extract<A["options"][number], Option<A["options"][number]> & T>
302
+ }
303
+ ? Extract<A["options"][number], Option<A["options"][number]> & T>
295
304
  : never
@@ -29,84 +29,90 @@ export interface RunOpts {
29
29
  /**
30
30
  * @tsplus pipeable dfx/InteractionBuilder runGateway
31
31
  */
32
- export const run = <R, R2, E, TE, E2>(
33
- postHandler: (
34
- effect: Effect.Effect<
35
- R | DiscordREST | Discord.Interaction,
36
- TE | DiscordRESTError | DefinitionNotFound,
37
- void
38
- >,
39
- ) => Effect.Effect<R2, E2, void>,
40
- { sync = true }: RunOpts = {},
41
- ) =>
42
- (
43
- ix: InteractionBuilder<R, E, TE>,
44
- ): Effect.Effect<
45
- DiscordREST | DiscordGateway | Exclude<R2, Discord.Interaction>,
46
- E2 | DiscordRESTError | Http.error.ResponseError,
47
- never
48
- > =>
49
- Effect.gen(function*(_) {
50
- const GlobalApplicationCommand = ix.definitions.pipe(
51
- Chunk.map(_ => _[0]),
52
- Chunk.filter(
53
- (_): _ is GlobalApplicationCommand<R, E> =>
54
- _._tag === "GlobalApplicationCommand",
55
- ),
56
- Chunk.toReadonlyArray,
57
- )
58
- const GuildApplicationCommand = ix.definitions.pipe(
59
- Chunk.map(_ => _[0]),
60
- Chunk.filter(
61
- (_): _ is GuildApplicationCommand<R, E> =>
62
- _._tag === "GuildApplicationCommand",
63
- ),
64
- Chunk.toReadonlyArray,
65
- )
66
-
67
- const gateway = yield* _(DiscordGateway)
68
- const rest = yield* _(DiscordREST)
69
-
70
- const application = yield* _(
71
- rest.getCurrentBotApplicationInformation(),
72
- Effect.flatMap(a => a.json),
73
- )
74
-
75
- const globalSync = rest.bulkOverwriteGlobalApplicationCommands(
76
- application.id,
77
- { body: Http.body.json(GlobalApplicationCommand.map(_ => _.command)) },
78
- )
79
-
80
- const guildSync = GuildApplicationCommand.length
81
- ? gateway.handleDispatch("GUILD_CREATE", a =>
82
- rest.bulkOverwriteGuildApplicationCommands(
83
- application.id,
84
- a.id,
85
- GuildApplicationCommand.map(_ =>
86
- _.command
87
- ) as any,
88
- ))
89
- : Effect.never
90
-
91
- const handle = handlers(ix.definitions, (i, r) =>
92
- rest.createInteractionResponse(i.id, i.token, r))
93
-
94
- const run = gateway.handleDispatch("INTERACTION_CREATE", i =>
95
- Effect.provideService(postHandler(handle[i.type](i)), Interaction, i))
96
-
97
- return yield* _(
98
- sync
99
- ? Effect.forever(
100
- Effect.all([run, globalSync, guildSync], {
101
- concurrency: "unbounded",
102
- discard: true,
103
- }),
104
- )
105
- : run,
106
- )
107
- })
108
-
109
- const makeRegistry = Effect.gen(function*(_) {
32
+ export const run =
33
+ <R, R2, E, TE, E2>(
34
+ postHandler: (
35
+ effect: Effect.Effect<
36
+ R | DiscordREST | Discord.Interaction,
37
+ TE | DiscordRESTError | DefinitionNotFound,
38
+ void
39
+ >,
40
+ ) => Effect.Effect<R2, E2, void>,
41
+ { sync = true }: RunOpts = {},
42
+ ) =>
43
+ (
44
+ ix: InteractionBuilder<R, E, TE>,
45
+ ): Effect.Effect<
46
+ DiscordREST | DiscordGateway | Exclude<R2, Discord.Interaction>,
47
+ E2 | DiscordRESTError | Http.error.ResponseError,
48
+ never
49
+ > =>
50
+ Effect.gen(function* (_) {
51
+ const GlobalApplicationCommand = ix.definitions.pipe(
52
+ Chunk.map(_ => _[0]),
53
+ Chunk.filter(
54
+ (_): _ is GlobalApplicationCommand<R, E> =>
55
+ _._tag === "GlobalApplicationCommand",
56
+ ),
57
+ Chunk.toReadonlyArray,
58
+ )
59
+ const GuildApplicationCommand = ix.definitions.pipe(
60
+ Chunk.map(_ => _[0]),
61
+ Chunk.filter(
62
+ (_): _ is GuildApplicationCommand<R, E> =>
63
+ _._tag === "GuildApplicationCommand",
64
+ ),
65
+ Chunk.toReadonlyArray,
66
+ )
67
+
68
+ const gateway = yield* _(DiscordGateway)
69
+ const rest = yield* _(DiscordREST)
70
+
71
+ const application = yield* _(
72
+ rest.getCurrentBotApplicationInformation(),
73
+ Effect.flatMap(a => a.json),
74
+ )
75
+
76
+ const globalSync = rest.bulkOverwriteGlobalApplicationCommands(
77
+ application.id,
78
+ {
79
+ body: Http.body.unsafeJson(
80
+ GlobalApplicationCommand.map(_ => _.command),
81
+ ),
82
+ },
83
+ )
84
+
85
+ const guildSync = GuildApplicationCommand.length
86
+ ? gateway.handleDispatch("GUILD_CREATE", a =>
87
+ rest.bulkOverwriteGuildApplicationCommands(
88
+ application.id,
89
+ a.id,
90
+ GuildApplicationCommand.map(_ => _.command) as any,
91
+ ),
92
+ )
93
+ : Effect.never
94
+
95
+ const handle = handlers(ix.definitions, (i, r) =>
96
+ rest.createInteractionResponse(i.id, i.token, r),
97
+ )
98
+
99
+ const run = gateway.handleDispatch("INTERACTION_CREATE", i =>
100
+ Effect.provideService(postHandler(handle[i.type](i)), Interaction, i),
101
+ )
102
+
103
+ return yield* _(
104
+ sync
105
+ ? Effect.forever(
106
+ Effect.all([run, globalSync, guildSync], {
107
+ concurrency: "unbounded",
108
+ discard: true,
109
+ }),
110
+ )
111
+ : run,
112
+ )
113
+ })
114
+
115
+ const makeRegistry = Effect.gen(function* (_) {
110
116
  const ref = yield* _(
111
117
  Ref.make(builder as InteractionBuilder<never, never, never>),
112
118
  )
@@ -130,7 +136,8 @@ const makeRegistry = Effect.gen(function*(_) {
130
136
  Effect.delay(
131
137
  pipe(ix, run(Effect.catchAllCause(onError), opts)),
132
138
  Duration.seconds(0.1),
133
- ))
139
+ ),
140
+ )
134
141
 
135
142
  return { register, run: run_ } as const
136
143
  })
@@ -61,28 +61,28 @@ export const handlers = <R, E, TE, A, B>(
61
61
  [Discord.InteractionType.MODAL_SUBMIT]: i => {
62
62
  const data = i.data as Discord.ModalSubmitDatum
63
63
 
64
- return Effect.findFirst(ModalSubmit, _ => _.predicate(data.custom_id))
65
- .pipe(
66
- Effect.flatMap(
67
- Option.match({
68
- onNone: () => Effect.fail(new DefinitionNotFound(i)),
69
- onSome: match =>
70
- Effect.provideService(
71
- match.handle(i),
72
- Ctx.ModalSubmitData,
73
- data,
74
- ) as Handler<R, E, B>,
75
- }),
76
- ),
77
- )
64
+ return Effect.findFirst(ModalSubmit, _ =>
65
+ _.predicate(data.custom_id),
66
+ ).pipe(
67
+ Effect.flatMap(
68
+ Option.match({
69
+ onNone: () => Effect.fail(new DefinitionNotFound(i)),
70
+ onSome: match =>
71
+ Effect.provideService(
72
+ match.handle(i),
73
+ Ctx.ModalSubmitData,
74
+ data,
75
+ ) as Handler<R, E, B>,
76
+ }),
77
+ ),
78
+ )
78
79
  },
79
80
 
80
81
  [Discord.InteractionType.MESSAGE_COMPONENT]: i => {
81
82
  const data = i.data as Discord.MessageComponentDatum
82
83
 
83
- return Effect.findFirst(
84
- MessageComponent,
85
- _ => _.predicate(data.custom_id),
84
+ return Effect.findFirst(MessageComponent, _ =>
85
+ _.predicate(data.custom_id),
86
86
  ).pipe(
87
87
  Effect.flatMap(
88
88
  Option.match({
@@ -104,24 +104,25 @@ export const handlers = <R, E, TE, A, B>(
104
104
  return Option.match(IxHelpers.focusedOption(data), {
105
105
  onNone: () => Effect.fail(new DefinitionNotFound(i)),
106
106
  onSome: focusedOption =>
107
- Effect.findFirst(Autocomplete, _ => _.predicate(data, focusedOption))
108
- .pipe(
109
- Effect.flatMap(
110
- Option.match({
111
- onNone: () => Effect.fail(new DefinitionNotFound(i)),
112
- onSome: match =>
113
- Effect.provideService(
114
- match.handle(i),
115
- Ctx.ApplicationCommand,
116
- data,
117
- ).pipe(
118
- Effect.provideService(Ctx.FocusedOptionContext, {
119
- focusedOption,
120
- }),
121
- ) as Handler<R, E, B>,
122
- }),
123
- ),
107
+ Effect.findFirst(Autocomplete, _ =>
108
+ _.predicate(data, focusedOption),
109
+ ).pipe(
110
+ Effect.flatMap(
111
+ Option.match({
112
+ onNone: () => Effect.fail(new DefinitionNotFound(i)),
113
+ onSome: match =>
114
+ Effect.provideService(
115
+ match.handle(i),
116
+ Ctx.ApplicationCommand,
117
+ data,
118
+ ).pipe(
119
+ Effect.provideService(Ctx.FocusedOptionContext, {
120
+ focusedOption,
121
+ }),
122
+ ) as Handler<R, E, B>,
123
+ }),
124
124
  ),
125
+ ),
125
126
  })
126
127
  },
127
128
  }
@@ -23,20 +23,24 @@ export const idStartsWith = (query: string) => (customId: string) =>
23
23
  export const idRegex = (query: RegExp) => (customId: string) =>
24
24
  Effect.succeed(query.test(customId))
25
25
 
26
- export const option = (command: string, optionName: string) =>
27
- (
28
- data: Pick<Discord.ApplicationCommandDatum, "name">,
29
- focusedOption: Pick<
30
- Discord.ApplicationCommandInteractionDataOption,
31
- "name"
32
- >,
33
- ) => Effect.succeed(data.name === command && focusedOption.name === optionName)
26
+ export const option =
27
+ (command: string, optionName: string) =>
28
+ (
29
+ data: Pick<Discord.ApplicationCommandDatum, "name">,
30
+ focusedOption: Pick<
31
+ Discord.ApplicationCommandInteractionDataOption,
32
+ "name"
33
+ >,
34
+ ) =>
35
+ Effect.succeed(data.name === command && focusedOption.name === optionName)
34
36
 
35
- export const optionOnly = (optionName: string) =>
36
- (
37
- _: unknown,
38
- focusedOption: Pick<
39
- Discord.ApplicationCommandInteractionDataOption,
40
- "name"
41
- >,
42
- ) => Effect.succeed(focusedOption.name === optionName)
37
+ export const optionOnly =
38
+ (optionName: string) =>
39
+ (
40
+ _: unknown,
41
+ focusedOption: Pick<
42
+ Discord.ApplicationCommandInteractionDataOption,
43
+ "name"
44
+ >,
45
+ ) =>
46
+ Effect.succeed(focusedOption.name === optionName)
@@ -7,11 +7,12 @@ import type * as Discord from "dfx/types"
7
7
  export type DefinitionFlattened<R, E, TE, A> = D.InteractionDefinition<
8
8
  R,
9
9
  E
10
- > extends infer D ? {
11
- [K in keyof D]: K extends "handle"
12
- ? (_: Discord.Interaction) => Effect.Effect<R, TE, A>
13
- : D[K]
14
- }
10
+ > extends infer D
11
+ ? {
12
+ [K in keyof D]: K extends "handle"
13
+ ? (_: Discord.Interaction) => Effect.Effect<R, TE, A>
14
+ : D[K]
15
+ }
15
16
  : never
16
17
 
17
18
  export type DefinitionFlattenedCommand<R, E, TE, A> = Extract<
@@ -44,11 +45,13 @@ export const flattenDefinitions = <R, E, TE, A, B>(
44
45
  handle: (i: Discord.Interaction) =>
45
46
  Effect.isEffect(definition.handle)
46
47
  ? transform(
47
- Effect.flatMap(definition.handle, _ => handleResponse(i, _)),
48
- )
48
+ Effect.flatMap(definition.handle, _ => handleResponse(i, _)),
49
+ )
49
50
  : transform(
50
- Effect.flatMap(definition.handle(context), _ => handleResponse(i, _)),
51
- ),
51
+ Effect.flatMap(definition.handle(context), _ =>
52
+ handleResponse(i, _),
53
+ ),
54
+ ),
52
55
  }))
53
56
 
54
57
  export const splitDefinitions = <R, E, TE, A>(
@@ -79,10 +82,11 @@ export const splitDefinitions = <R, E, TE, A>(
79
82
  ).pipe(
80
83
  Chunk.reduce(
81
84
  {} as Record<string, DefinitionFlattenedCommand<R, E, TE, A>>,
82
- (acc, d) => ({
83
- ...acc,
84
- [d.command.name]: d,
85
- } as any),
85
+ (acc, d) =>
86
+ ({
87
+ ...acc,
88
+ [d.command.name]: d,
89
+ }) as any,
86
90
  ),
87
91
  )
88
92
 
@@ -42,8 +42,8 @@ const checkSignature = (
42
42
  publicKey,
43
43
  crypto,
44
44
  algorithm,
45
- )
46
- )
45
+ ),
46
+ ),
47
47
  ),
48
48
  Effect.filterOrFail(identity, () => new BadWebhookSignature()),
49
49
  Effect.catchAllCause(() => Effect.fail(new BadWebhookSignature())),
@@ -86,16 +86,14 @@ export class WebhookParseError {
86
86
  }
87
87
 
88
88
  const fromHeadersAndBody = (headers: Headers, body: string) =>
89
- Effect.tap(
90
- WebhookConfig,
91
- ({ algorithm, crypto, publicKey }) =>
92
- checkSignature(publicKey, headers, body, crypto, algorithm),
89
+ Effect.tap(WebhookConfig, ({ algorithm, crypto, publicKey }) =>
90
+ checkSignature(publicKey, headers, body, crypto, algorithm),
93
91
  ).pipe(
94
92
  Effect.flatMap(() =>
95
93
  Effect.try({
96
94
  try: () => JSON.parse(body) as Discord.Interaction,
97
95
  catch: reason => new WebhookParseError(reason),
98
- })
96
+ }),
99
97
  ),
100
98
  )
101
99
 
@@ -115,14 +113,12 @@ const run = <R, E>(
115
113
  ) => {
116
114
  const handler = handlers(definitions, handleResponse)
117
115
  return (headers: Headers, body: string) =>
118
- Effect.flatMap(
119
- fromHeadersAndBody(headers, body),
120
- interaction =>
121
- Effect.provideService(
122
- handler[interaction.type](interaction),
123
- Interaction,
124
- interaction,
125
- ),
116
+ Effect.flatMap(fromHeadersAndBody(headers, body), interaction =>
117
+ Effect.provideService(
118
+ handler[interaction.type](interaction),
119
+ Interaction,
120
+ interaction,
121
+ ),
126
122
  )
127
123
  }
128
124
 
@@ -138,14 +134,14 @@ export interface HandleWebhookOpts<E> {
138
134
  */
139
135
  export const makeHandler = <R, E, TE>(
140
136
  ix: InteractionBuilder<R, E, TE>,
141
- ): ({
137
+ ): (({
142
138
  body,
143
139
  error,
144
140
  headers,
145
141
  success,
146
142
  }: HandleWebhookOpts<
147
143
  E | WebhookParseError | BadWebhookSignature | DefinitionNotFound
148
- >) => Effect.Effect<WebhookConfig, never, void> => {
144
+ >) => Effect.Effect<WebhookConfig, never, void>) => {
149
145
  const handle = run(
150
146
  Chunk.map(ix.definitions, ([d]) => [d, identity] as any),
151
147
  (_i, r) => Effect.succeed(r),
@@ -170,7 +166,7 @@ export const makeHandler = <R, E, TE>(
170
166
  */
171
167
  export const makeSimpleHandler = <R, E, TE>(
172
168
  ix: InteractionBuilder<R, E, TE>,
173
- ): ({
169
+ ): (({
174
170
  body,
175
171
  headers,
176
172
  }: {
@@ -180,7 +176,7 @@ export const makeSimpleHandler = <R, E, TE>(
180
176
  WebhookConfig,
181
177
  BadWebhookSignature | WebhookParseError | DefinitionNotFound,
182
178
  Discord.InteractionResponse
183
- > => {
179
+ >) => {
184
180
  const handle = run(
185
181
  Chunk.map(ix.definitions, ([d]) => [d, identity] as any),
186
182
  (_i, r) => Effect.succeed(r),
package/src/Log.ts CHANGED
@@ -10,8 +10,8 @@ const make = (debug = false) => ({
10
10
  debug: (...args: Array<any>) =>
11
11
  debug
12
12
  ? Effect.sync(() => {
13
- console.error("DEBUG", ...args)
14
- })
13
+ console.error("DEBUG", ...args)
14
+ })
15
15
  : Effect.unit,
16
16
  })
17
17
 
package/src/RateLimit.ts CHANGED
@@ -43,7 +43,7 @@ export interface RateLimitStore {
43
43
  export const RateLimitStore = Tag<RateLimitStore>()
44
44
  export const LiveMemoryRateLimitStore = Layer.sync(RateLimitStore, Memory.make)
45
45
 
46
- const makeLimiter = Effect.gen(function*(_) {
46
+ const makeLimiter = Effect.gen(function* (_) {
47
47
  const store = yield* _(RateLimitStore)
48
48
  const log = yield* _(Log)
49
49
 
@@ -64,10 +64,10 @@ const makeLimiter = Effect.gen(function*(_) {
64
64
  windowMs,
65
65
  limit,
66
66
  delay: Duration.toMillis(d),
67
- })
67
+ }),
68
68
  ),
69
69
  Effect.tap(_ =>
70
- Duration.toMillis(_) === 0 ? Effect.unit : Effect.sleep(_)
70
+ Duration.toMillis(_) === 0 ? Effect.unit : Effect.sleep(_),
71
71
  ),
72
72
  Effect.asUnit,
73
73
  )
@@ -77,7 +77,6 @@ const makeLimiter = Effect.gen(function*(_) {
77
77
  })
78
78
 
79
79
  export interface RateLimiter
80
- extends Effect.Effect.Success<typeof makeLimiter>
81
- {}
80
+ extends Effect.Effect.Success<typeof makeLimiter> {}
82
81
  export const RateLimiter = Tag<RateLimiter>()
83
82
  export const LiveRateLimiter = Layer.effect(RateLimiter, makeLimiter)