dfx 0.9.3 → 0.9.5

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.
package/README.md CHANGED
@@ -1,3 +1,41 @@
1
1
  # dfx
2
2
 
3
- A Discord library for effect-ts
3
+ A Discord library built on top of @effect/io
4
+
5
+ - Supports both the gateway and webhooks
6
+ - Simple yet powerful abstractions to build Discord bots
7
+
8
+ ## Example
9
+
10
+ ```typescript
11
+ import * as Effect from "@effect/io/Effect"
12
+ import { pipe } from "@fp-ts/data/Function"
13
+ import { Ix, runIxGateway, makeLayer } from "dfx"
14
+
15
+ // Create the dependencies layer
16
+ const Dependencies = makeLayer({
17
+ token: "xxx",
18
+ })
19
+
20
+ // Create hello command that responds with "Hello!"
21
+ const hello = Ix.global(
22
+ {
23
+ name: "hello",
24
+ description: "A basic command",
25
+ },
26
+ Effect.succeedSome({
27
+ type: 4,
28
+ data: {
29
+ content: "Hello!",
30
+ },
31
+ }),
32
+ )
33
+
34
+ // Run it
35
+ pipe(
36
+ Ix.builder.add(hello),
37
+ runIxGateway((error) => Effect.fail(error)),
38
+ Effect.providerLayer(Dependencies),
39
+ Effect.unsafeRunPromise,
40
+ )
41
+ ```
@@ -3,5 +3,5 @@ import { InteractionBuilder } from "./index.js";
3
3
  export interface RunOpts {
4
4
  sync?: boolean;
5
5
  }
6
- export declare const run: <R, R2, E, E2>(ix: InteractionBuilder<R, E>, catchAll: (e: import("../Http/index.js").FetchError | import("../Http/index.js").StatusCodeError | import("../Http/index.js").JsonParseError | E) => import("../common.js").Effect<R2, E2, any>, { sync }?: RunOpts) => import("../common.js").Effect<import("../index.js").DiscordREST | import("../DiscordGateway/index.js").DiscordGateway | R | R2, import("../Http/index.js").FetchError | import("../Http/index.js").StatusCodeError | import("../Http/index.js").JsonParseError | E2, void>;
6
+ export declare const run: <R2, E, E2>(catchAll: (e: import("../Http/index.js").FetchError | import("../Http/index.js").StatusCodeError | import("../Http/index.js").JsonParseError | E) => import("../common.js").Effect<R2, E2, any>, { sync }?: RunOpts) => <R>(ix: InteractionBuilder<R, E>) => import("../common.js").Effect<import("../index.js").DiscordREST | import("../DiscordGateway/index.js").DiscordGateway | R2 | R, import("../Http/index.js").FetchError | import("../Http/index.js").StatusCodeError | import("../Http/index.js").JsonParseError | E2, void>;
7
7
  //# sourceMappingURL=gateway.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../src/Interactions/gateway.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAG/C,MAAM,WAAW,OAAO;IACtB,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED,eAAO,MAAM,GAAG,2PAKG,OAAO,+QAwCtB,CAAA"}
1
+ {"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../src/Interactions/gateway.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAG/C,MAAM,WAAW,OAAO;IACtB,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED,eAAO,MAAM,GAAG,0NAKK,OAAO,oTAyCtB,CAAA"}
@@ -4,7 +4,7 @@ import * as tsplus_module_3 from "@fp-ts/data/Option";
4
4
  import * as tsplus_module_4 from "dfx/common-gateway";
5
5
  import { handlers } from "./handlers.js";
6
6
  import { splitDefinitions } from "./utils.js";
7
- export const run = (ix, catchAll, { sync = true } = {}) => (() => {
7
+ export const run = (catchAll, { sync = true } = {}) => (ix) => (() => {
8
8
  const { GlobalApplicationCommand, GuildApplicationCommand } = splitDefinitions(ix.definitions);
9
9
  return tsplus_module_1.flatMap(application => {
10
10
  const globalSync = tsplus_module_2.Rest.rest.bulkOverwriteGlobalApplicationCommands(application.id, {
@@ -1 +1 @@
1
- {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/Interactions/gateway.ts"],"names":[],"mappings":";;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAM7C,MAAM,CAAC,MAAM,GAAG,GAAG,CACjB,EAA4B,EAC5B,QAEwB,EACxB,EAAE,IAAI,GAAG,IAAI,KAAc,EAAE,EAC7B,EAAE;IAEA,MAAM,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,GACzD,gBAAgB,CAAC,EAAE,CAAC,WAAW,CAAC,CAAA;mCAE5B,WAAW;QAIjB,MAAM,UAAU,GAAG,gBAAA,IAAI,CAAC,IAAI,CAAC,sCAAsC,CACjE,WAAW,CAAC,EAAE,EACd;YACE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;SACrE,CACF,CAAA;QAED,MAAM,SAAS,GAAG,uBAAuB,CAAC,MAAM;YAC9C,CAAC,CAAC,gBAAA,OAAO,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE,CAC3C,gBAAA,IAAI,CAAC,IAAI,CAAC,qCAAqC,CAC7C,WAAW,CAAC,EAAE,EACd,CAAC,CAAC,EAAE,EACJ,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAQ,CACrD,CACF;YACH,CAAC,CAAC,sBAAa,CAAA;QAEjB,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,WAAW,CAAC,CAAA;QAEvC,MAAM,GAAG,GAAG,gBAAA,OAAO,CAAC,cAAc,CAAC,oBAAoB,EAAE,CAAC,CAAC,EAAE,EAAE,CAC7D,yBAMY,QAAQ,EANpB,oBACO,CAAC,CAAC,EAAE,EAAE,CACT,4CAAqB,CAAC,CAAC,EAAE,EAAE,CACzB,gBAAA,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EADvD,CAAC,CAEA,EAJL,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAKd,CACkB,CACtB,CAAA;iDAEC,IAAI,CAAC,CAAC,CAAC,uBAA8B,SAAS,EAAvC,uBAAW,UAAU,EAArB,GAAG,CAAmB,CAAkB,CAAC,CAAC,CAAC,GAAG;OAhCrD,wBAAwD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAArE,gBAAA,IAAI,CAAC,IAAI,CAAC,mCAAmC,EAAE,CAAuB;IAiCxE,CAAA"}
1
+ {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/Interactions/gateway.ts"],"names":[],"mappings":";;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAM7C,MAAM,CAAC,MAAM,GAAG,GACd,CACE,QAEwB,EACxB,EAAE,IAAI,GAAG,IAAI,KAAc,EAAE,EAC7B,EAAE,CACJ,CAAI,EAA4B,EAAE,EAAE;IAEhC,MAAM,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,GACzD,gBAAgB,CAAC,EAAE,CAAC,WAAW,CAAC,CAAA;mCAE5B,WAAW;QAIjB,MAAM,UAAU,GAAG,gBAAA,IAAI,CAAC,IAAI,CAAC,sCAAsC,CACjE,WAAW,CAAC,EAAE,EACd;YACE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;SACrE,CACF,CAAA;QAED,MAAM,SAAS,GAAG,uBAAuB,CAAC,MAAM;YAC9C,CAAC,CAAC,gBAAA,OAAO,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE,CAC3C,gBAAA,IAAI,CAAC,IAAI,CAAC,qCAAqC,CAC7C,WAAW,CAAC,EAAE,EACd,CAAC,CAAC,EAAE,EACJ,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAQ,CACrD,CACF;YACH,CAAC,CAAC,sBAAa,CAAA;QAEjB,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,WAAW,CAAC,CAAA;QAEvC,MAAM,GAAG,GAAG,gBAAA,OAAO,CAAC,cAAc,CAAC,oBAAoB,EAAE,CAAC,CAAC,EAAE,EAAE,CAC7D,yBAMY,QAAQ,EANpB,oBACO,CAAC,CAAC,EAAE,EAAE,CACT,4CAAqB,CAAC,CAAC,EAAE,EAAE,CACzB,gBAAA,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EADvD,CAAC,CAEA,EAJL,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAKd,CACkB,CACtB,CAAA;iDAEC,IAAI,CAAC,CAAC,CAAC,uBAA8B,SAAS,EAAvC,uBAAW,UAAU,EAArB,GAAG,CAAmB,CAAkB,CAAC,CAAC,CAAC,GAAG;OAhCrD,wBAAwD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAArE,gBAAA,IAAI,CAAC,IAAI,CAAC,mCAAmC,EAAE,CAAuB;IAiCxE,CAAA"}
@@ -2,7 +2,7 @@ import { Rest, Discord } from "dfx/common";
2
2
  import * as D from "./definitions.js";
3
3
  export * from "./context.js";
4
4
  export { global, guild, messageComponent, modalSubmit, autocomplete, InteractionDefinition, InteractionResponse, } from "./definitions.js";
5
- export { makeConfig as makeWebhookConfig, makeHandler as makeWebhookHandler, WebhookConfig, WebhookParseError, BadWebhookSignature, } from "./webhook.js";
5
+ export { makeConfigLayer as makeWebhookConfig, makeHandler as makeWebhookHandler, MakeConfigOpts as MakeWebhookConfigOpts, WebhookConfig, WebhookParseError, BadWebhookSignature, } from "./webhook.js";
6
6
  export declare class InteractionBuilder<R, E> {
7
7
  readonly definitions: D.InteractionDefinition<R, E>[];
8
8
  constructor(definitions: D.InteractionDefinition<R, E>[]);
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Interactions/index.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,CAAC,MAAM,kBAAkB,CAAA;AAErC,cAAc,cAAc,CAAA;AAE5B,OAAO,EACL,MAAM,EACN,KAAK,EACL,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EACL,UAAU,IAAI,iBAAiB,EAC/B,WAAW,IAAI,kBAAkB,EACjC,aAAa,EACb,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,cAAc,CAAA;AAErB,qBAAa,kBAAkB,CAAC,CAAC,EAAE,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;gBAA5C,WAAW,EAAE,CAAC,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;IAEjE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,qBAAqB,CAAC,EAAE,EAAE,EAAE,CAAC;IAOvD,IAAI,UAAU,qSAgBb;IAED,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,SAAS;CAc/D;AAED,eAAO,MAAM,OAAO,kCAA2C,CAAA;AAG/D,eAAO,MAAM,EAAE,UAAW,MAAM,gBAAgB,MAAM,yDAClB,CAAA;AAEpC,eAAO,MAAM,YAAY,UAAW,MAAM,gBAAgB,MAAM,yDACpB,CAAA;AAE5C,eAAO,MAAM,KAAK,UAAW,MAAM,gBAAgB,MAAM,yDACnB,CAAA;AAEtC,eAAO,MAAM,MAAM,SACV,MAAM,qBACG,QAAQ,uCAAuC,yDAClB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Interactions/index.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,CAAC,MAAM,kBAAkB,CAAA;AAErC,cAAc,cAAc,CAAA;AAE5B,OAAO,EACL,MAAM,EACN,KAAK,EACL,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EACL,eAAe,IAAI,iBAAiB,EACpC,WAAW,IAAI,kBAAkB,EACjC,cAAc,IAAI,qBAAqB,EACvC,aAAa,EACb,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,cAAc,CAAA;AAErB,qBAAa,kBAAkB,CAAC,CAAC,EAAE,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;gBAA5C,WAAW,EAAE,CAAC,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;IAEjE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,qBAAqB,CAAC,EAAE,EAAE,EAAE,CAAC;IAOvD,IAAI,UAAU,qSAgBb;IAED,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,SAAS;CAc/D;AAED,eAAO,MAAM,OAAO,kCAA2C,CAAA;AAG/D,eAAO,MAAM,EAAE,UAAW,MAAM,gBAAgB,MAAM,yDAClB,CAAA;AAEpC,eAAO,MAAM,YAAY,UAAW,MAAM,gBAAgB,MAAM,yDACpB,CAAA;AAE5C,eAAO,MAAM,KAAK,UAAW,MAAM,gBAAgB,MAAM,yDACnB,CAAA;AAEtC,eAAO,MAAM,MAAM,SACV,MAAM,qBACG,QAAQ,uCAAuC,yDAClB,CAAA"}
@@ -2,7 +2,7 @@ import * as tsplus_module_1 from "dfx/common";
2
2
  import * as tsplus_module_2 from "@effect/io/Effect";
3
3
  export * from "./context.js";
4
4
  export { global, guild, messageComponent, modalSubmit, autocomplete, } from "./definitions.js";
5
- export { makeConfig as makeWebhookConfig, makeHandler as makeWebhookHandler, WebhookConfig, WebhookParseError, BadWebhookSignature, } from "./webhook.js";
5
+ export { makeConfigLayer as makeWebhookConfig, makeHandler as makeWebhookHandler, WebhookConfig, WebhookParseError, BadWebhookSignature, } from "./webhook.js";
6
6
  export class InteractionBuilder {
7
7
  definitions;
8
8
  constructor(definitions) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Interactions/index.ts"],"names":[],"mappings":";;AAEA,cAAc,cAAc,CAAA;AAE5B,OAAO,EACL,MAAM,EACN,KAAK,EACL,gBAAgB,EAChB,WAAW,EACX,YAAY,GAGb,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EACL,UAAU,IAAI,iBAAiB,EAC/B,WAAW,IAAI,kBAAkB,EACjC,aAAa,EACb,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,cAAc,CAAA;AAErB,MAAM,OAAO,kBAAkB;IACR;IAArB,YAAqB,WAA4C;QAA5C,gBAAW,GAAX,WAAW,CAAiC;IAAG,CAAC;IAErE,GAAG,CAAS,UAA2C;QACrD,OAAO,IAAI,kBAAkB,CAAiB;YAC5C,GAAG,IAAI,CAAC,WAAW;YACnB,UAAU;SACX,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,UAAU;QACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW;aAC9B,MAAM,CACL,CAAC,CAAC,EAAyC,EAAE,CAC3C,CAAC,CAAC,IAAI,KAAK,0BAA0B,CACxC;aACA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;QAExB,OAAO,wBAGI,CAAC,GAAG,EAAE,EAAE,CACf,gBAAA,IAAI,CAAC,IAAI,CAAC,sCAAsC,CAAC,GAAG,CAAC,EAAE,EAAE;YACvD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;SAC/B,CAAC,EANC,wBAEI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAFjB,gBAAA,IAAI,CAAC,IAAI;aACb,mCAAmC,EAAE,CACf,CAKtB,CAAA;IACL,CAAC;IAED,SAAS,CAAC,KAAwB,EAAE,OAA0B;QAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW;aAC9B,MAAM,CACL,CAAC,CAAC,EAAwC,EAAE,CAC1C,CAAC,CAAC,IAAI,KAAK,yBAAyB,CACvC;aACA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;QAExB,OAAO,gBAAA,IAAI,CAAC,IAAI,CAAC,qCAAqC,CACpD,KAAK,EACL,OAAO,EACP,QAAe,CAChB,CAAA;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,kBAAkB,CAAe,EAAE,CAAC,CAAA;AAE/D,UAAU;AACV,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,QAAgB,EAAE,EAAE,CACxD,wBAAe,KAAK,KAAK,QAAQ,CAAC,CAAA;AAEpC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,QAAgB,EAAE,EAAE,CAClE,wBAAe,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;AAE5C,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,QAAgB,EAAE,EAAE,CAC3D,wBAAe,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;AAEtC,MAAM,CAAC,MAAM,MAAM,GACjB,CAAC,IAAY,EAAE,EAAE,CACjB,CAAC,aAA8D,EAAE,EAAE,CACjE,wBAAe,aAAa,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Interactions/index.ts"],"names":[],"mappings":";;AAEA,cAAc,cAAc,CAAA;AAE5B,OAAO,EACL,MAAM,EACN,KAAK,EACL,gBAAgB,EAChB,WAAW,EACX,YAAY,GAGb,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EACL,eAAe,IAAI,iBAAiB,EACpC,WAAW,IAAI,kBAAkB,EAEjC,aAAa,EACb,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,cAAc,CAAA;AAErB,MAAM,OAAO,kBAAkB;IACR;IAArB,YAAqB,WAA4C;QAA5C,gBAAW,GAAX,WAAW,CAAiC;IAAG,CAAC;IAErE,GAAG,CAAS,UAA2C;QACrD,OAAO,IAAI,kBAAkB,CAAiB;YAC5C,GAAG,IAAI,CAAC,WAAW;YACnB,UAAU;SACX,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,UAAU;QACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW;aAC9B,MAAM,CACL,CAAC,CAAC,EAAyC,EAAE,CAC3C,CAAC,CAAC,IAAI,KAAK,0BAA0B,CACxC;aACA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;QAExB,OAAO,wBAGI,CAAC,GAAG,EAAE,EAAE,CACf,gBAAA,IAAI,CAAC,IAAI,CAAC,sCAAsC,CAAC,GAAG,CAAC,EAAE,EAAE;YACvD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;SAC/B,CAAC,EANC,wBAEI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAFjB,gBAAA,IAAI,CAAC,IAAI;aACb,mCAAmC,EAAE,CACf,CAKtB,CAAA;IACL,CAAC;IAED,SAAS,CAAC,KAAwB,EAAE,OAA0B;QAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW;aAC9B,MAAM,CACL,CAAC,CAAC,EAAwC,EAAE,CAC1C,CAAC,CAAC,IAAI,KAAK,yBAAyB,CACvC;aACA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;QAExB,OAAO,gBAAA,IAAI,CAAC,IAAI,CAAC,qCAAqC,CACpD,KAAK,EACL,OAAO,EACP,QAAe,CAChB,CAAA;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,kBAAkB,CAAe,EAAE,CAAC,CAAA;AAE/D,UAAU;AACV,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,QAAgB,EAAE,EAAE,CACxD,wBAAe,KAAK,KAAK,QAAQ,CAAC,CAAA;AAEpC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,QAAgB,EAAE,EAAE,CAClE,wBAAe,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;AAE5C,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,QAAgB,EAAE,EAAE,CAC3D,wBAAe,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;AAEtC,MAAM,CAAC,MAAM,MAAM,GACjB,CAAC,IAAY,EAAE,EAAE,CACjB,CAAC,aAA8D,EAAE,EAAE,CACjE,wBAAe,aAAa,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA"}
@@ -7,4 +7,5 @@ export declare const splitDefinitions: <R, E>(definitions: D.InteractionDefiniti
7
7
  ModalSubmit: D.ModalSubmit<R, E>[];
8
8
  Autocomplete: D.Autocomplete<R, E>[];
9
9
  };
10
+ export declare function fromHex(hexString: string): Uint8Array;
10
11
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/Interactions/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,kBAAkB,CAAA;AAErC,eAAO,MAAM,gBAAgB;;;;;;;CAwC5B,CAAA"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/Interactions/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,kBAAkB,CAAA;AAErC,eAAO,MAAM,gBAAgB;;;;;;;CAwC5B,CAAA;AA0BD,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,cAYxC"}
@@ -21,4 +21,41 @@ export const splitDefinitions = (definitions) => {
21
21
  Commands,
22
22
  };
23
23
  };
24
+ const MAP_HEX = {
25
+ 0: 0,
26
+ 1: 1,
27
+ 2: 2,
28
+ 3: 3,
29
+ 4: 4,
30
+ 5: 5,
31
+ 6: 6,
32
+ 7: 7,
33
+ 8: 8,
34
+ 9: 9,
35
+ a: 10,
36
+ b: 11,
37
+ c: 12,
38
+ d: 13,
39
+ e: 14,
40
+ f: 15,
41
+ A: 10,
42
+ B: 11,
43
+ C: 12,
44
+ D: 13,
45
+ E: 14,
46
+ F: 15,
47
+ };
48
+ export function fromHex(hexString) {
49
+ const bytes = new Uint8Array(Math.floor((hexString || "").length / 2));
50
+ let i;
51
+ for (i = 0; i < bytes.length; i++) {
52
+ const a = MAP_HEX[hexString[i * 2]];
53
+ const b = MAP_HEX[hexString[i * 2 + 1]];
54
+ if (a === undefined || b === undefined) {
55
+ break;
56
+ }
57
+ bytes[i] = (a << 4) | b;
58
+ }
59
+ return i === bytes.length ? bytes : bytes.slice(0, i);
60
+ }
24
61
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/Interactions/utils.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,WAA4C,EAC5C,EAAE;IACF,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAMhC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,GAAG,GAAG;QACN,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;KACtC,CAAC,EACF;QACE,YAAY,EAAE,EAAE;QAChB,wBAAwB,EAAE,EAAE;QAC5B,uBAAuB,EAAE,EAAE;QAC3B,gBAAgB,EAAE,EAAE;QACpB,WAAW,EAAE,EAAE;KAChB,CACF,CAAA;IAED,MAAM,QAAQ,GAAG;QACf,GAAG,OAAO,CAAC,wBAAwB;QACnC,GAAG,OAAO,CAAC,uBAAuB;KACnC,CAAC,MAAM,CACN,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,GAAG,GAAG;QACN,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;KACpB,CAAC,EACF,EAGC,CACF,CAAA;IAED,OAAO;QACL,GAAG,OAAO;QACV,QAAQ;KACT,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/Interactions/utils.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,WAA4C,EAC5C,EAAE;IACF,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAMhC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,GAAG,GAAG;QACN,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;KACtC,CAAC,EACF;QACE,YAAY,EAAE,EAAE;QAChB,wBAAwB,EAAE,EAAE;QAC5B,uBAAuB,EAAE,EAAE;QAC3B,gBAAgB,EAAE,EAAE;QACpB,WAAW,EAAE,EAAE;KAChB,CACF,CAAA;IAED,MAAM,QAAQ,GAAG;QACf,GAAG,OAAO,CAAC,wBAAwB;QACnC,GAAG,OAAO,CAAC,uBAAuB;KACnC,CAAC,MAAM,CACN,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,GAAG,GAAG;QACN,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;KACpB,CAAC,EACF,EAGC,CACF,CAAA;IAED,OAAO;QACL,GAAG,OAAO;QACV,QAAQ;KACT,CAAA;AACH,CAAC,CAAA;AACD,MAAM,OAAO,GAA2B;IACtC,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;CACN,CAAA;AAED,MAAM,UAAU,OAAO,CAAC,SAAiB;IACvC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;IACtE,IAAI,CAAC,CAAA;IACL,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACjC,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACnC,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACvC,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS,EAAE;YACtC,MAAK;SACN;QACD,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;KACxB;IACD,OAAO,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACvD,CAAC"}
@@ -4,12 +4,18 @@ export declare class BadWebhookSignature {
4
4
  readonly _tag = "BadWebhookSignature";
5
5
  }
6
6
  export type Headers = Record<string, string | string[] | undefined>;
7
- export interface WebhookConfig {
7
+ export interface MakeConfigOpts {
8
8
  applicationId: string;
9
9
  publicKey: string;
10
10
  }
11
+ declare const makeConfig: ({ applicationId, publicKey }: MakeConfigOpts) => {
12
+ applicationId: string;
13
+ publicKey: Uint8Array;
14
+ };
15
+ export interface WebhookConfig extends ReturnType<typeof makeConfig> {
16
+ }
11
17
  export declare const WebhookConfig: import("../common.js").Tag<WebhookConfig>;
12
- export declare const makeConfig: (a: WebhookConfig) => import("../common.js").Layer<never, never, WebhookConfig>;
18
+ export declare const makeConfigLayer: (a_0: MakeConfigOpts) => import("../common.js").Layer<never, never, WebhookConfig>;
13
19
  export declare class WebhookParseError {
14
20
  readonly reason: unknown;
15
21
  readonly _tag = "WebhookParseError";
@@ -23,4 +29,5 @@ export interface HandleWebhookOpts<E> {
23
29
  empty: Effect<never, never, void>;
24
30
  }
25
31
  export declare const makeHandler: <R, E>(ix: InteractionBuilder<R, E>) => ({ headers, body, success, empty, error, }: HandleWebhookOpts<BadWebhookSignature | WebhookParseError | E>) => import("../common.js").Effect<WebhookConfig | R, never, void>;
32
+ export {};
26
33
  //# sourceMappingURL=webhook.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../src/Interactions/webhook.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAE/C,qBAAa,mBAAmB;IAC9B,QAAQ,CAAC,IAAI,yBAAwB;CACtC;AAED,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAA;AAgBnE,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;CAClB;AACD,eAAO,MAAM,aAAa,2CAAuB,CAAA;AACjD,eAAO,MAAM,UAAU,MAAO,aAAa,8DAAoC,CAAA;AAE/E,qBAAa,iBAAiB;IAEhB,QAAQ,CAAC,MAAM,EAAE,OAAO;IADpC,QAAQ,CAAC,IAAI,uBAAsB;gBACd,MAAM,EAAE,OAAO;CACrC;AAuBD,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,mBAAmB,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;IACvE,KAAK,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;IAClD,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;CAClC;AAED,eAAO,MAAM,WAAW,sNAkBvB,CAAA"}
1
+ {"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../src/Interactions/webhook.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAG/C,qBAAa,mBAAmB;IAC9B,QAAQ,CAAC,IAAI,yBAAwB;CACtC;AAED,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAA;AAqBnE,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;CAClB;AACD,QAAA,MAAM,UAAU,iCAAkC,cAAc;;;CAG9D,CAAA;AACF,MAAM,WAAW,aAAc,SAAQ,UAAU,CAAC,OAAO,UAAU,CAAC;CAAG;AACvE,eAAO,MAAM,aAAa,2CAAuB,CAAA;AACjD,eAAO,MAAM,eAAe,oFAAiD,CAAA;AAE7E,qBAAa,iBAAiB;IAEhB,QAAQ,CAAC,MAAM,EAAE,OAAO;IADpC,QAAQ,CAAC,IAAI,uBAAsB;gBACd,MAAM,EAAE,OAAO;CACrC;AAuBD,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,mBAAmB,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;IACvE,KAAK,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;IAClD,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;CAClC;AAED,eAAO,MAAM,WAAW,sNAkBvB,CAAA"}
@@ -2,18 +2,27 @@ import * as tsplus_module_1 from "@fp-ts/data/Option";
2
2
  import * as tsplus_module_2 from "@fp-ts/data/Either";
3
3
  import * as tsplus_module_3 from "dfx/common";
4
4
  import * as tsplus_module_4 from "@effect/io/Layer";
5
- import * as tsplus_module_5 from "@effect/io/Effect";
5
+ import * as tsplus_module_5 from "@fp-ts/data/Function";
6
+ import * as tsplus_module_6 from "@effect/io/Effect";
6
7
  import Nacl from "tweetnacl";
7
8
  import { handlers } from "./handlers.js";
9
+ import { fromHex } from "./utils.js";
8
10
  export class BadWebhookSignature {
9
11
  _tag = "BadWebhookSignature";
10
12
  }
11
- const checkSignature = (publicKey, headers, body) => tsplus_module_2.asUnit(tsplus_module_1.toEither(() => new BadWebhookSignature())(tsplus_module_1.filter((a) => Nacl.sign.detached.verify(Buffer.from(a.timestamp + body), Buffer.from(`${a.signature}`, "hex"), Buffer.from(publicKey, "hex")))(tsplus_module_1.struct({
13
+ const checkSignature = (publicKey, headers, body) => tsplus_module_2.asUnit(tsplus_module_1.toEither(() => new BadWebhookSignature())(tsplus_module_1.filter((a) => {
14
+ const enc = new TextEncoder();
15
+ return Nacl.sign.detached.verify(enc.encode(a.timestamp + body), fromHex(`${a.signature}`), publicKey);
16
+ })(tsplus_module_1.struct({
12
17
  signature: tsplus_module_1.fromNullable(headers["x-signature-ed25519"]),
13
18
  timestamp: tsplus_module_1.fromNullable(headers["x-signature-timestamp"]),
14
19
  }))));
20
+ const makeConfig = ({ applicationId, publicKey }) => ({
21
+ applicationId,
22
+ publicKey: fromHex(publicKey),
23
+ });
15
24
  export const WebhookConfig = tsplus_module_3.Tag();
16
- export const makeConfig = (a) => tsplus_module_4.succeed(WebhookConfig)(a);
25
+ export const makeConfigLayer = tsplus_module_5.flow(makeConfig, tsplus_module_4.succeed(WebhookConfig));
17
26
  export class WebhookParseError {
18
27
  reason;
19
28
  _tag = "WebhookParseError";
@@ -21,13 +30,13 @@ export class WebhookParseError {
21
30
  this.reason = reason;
22
31
  }
23
32
  }
24
- const fromHeadersAndBody = (headers, body) => tsplus_module_5.flatMap(({ publicKey }) => tsplus_module_5.flatMap(() => tsplus_module_5.tryCatch(() => JSON.parse(body), (reason) => new WebhookParseError(reason)))(tsplus_module_5.fromEither(checkSignature(publicKey, headers, body))))(tsplus_module_5.service(WebhookConfig));
33
+ const fromHeadersAndBody = (headers, body) => tsplus_module_6.flatMap(({ publicKey }) => tsplus_module_6.flatMap(() => tsplus_module_6.tryCatch(() => JSON.parse(body), (reason) => new WebhookParseError(reason)))(tsplus_module_6.fromEither(checkSignature(publicKey, headers, body))))(tsplus_module_6.service(WebhookConfig));
25
34
  const run = (definitions) => {
26
35
  const handler = handlers(definitions);
27
- return (headers, body) => tsplus_module_5.flatMap(interaction => handler[interaction.type](interaction))(fromHeadersAndBody(headers, body));
36
+ return (headers, body) => tsplus_module_6.flatMap(interaction => handler[interaction.type](interaction))(fromHeadersAndBody(headers, body));
28
37
  };
29
38
  export const makeHandler = (ix) => {
30
39
  const handle = run(ix.definitions);
31
- return ({ headers, body, success, empty, error, }) => tsplus_module_5.catchAllCause(error)(tsplus_module_5.flatMap((o) => tsplus_module_1.match(() => empty, (a) => success(a))(o))(handle(headers, body)));
40
+ return ({ headers, body, success, empty, error, }) => tsplus_module_6.catchAllCause(error)(tsplus_module_6.flatMap((o) => tsplus_module_1.match(() => empty, (a) => success(a))(o))(handle(headers, body)));
32
41
  };
33
42
  //# sourceMappingURL=webhook.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../src/Interactions/webhook.ts"],"names":[],"mappings":";;;;;AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAGxC,MAAM,OAAO,mBAAmB;IACrB,IAAI,GAAG,qBAAqB,CAAA;CACtC;AAID,MAAM,cAAc,GAAG,CAAC,SAAiB,EAAE,OAAgB,EAAE,IAAY,EAAE,EAAE,wBAC3E,yBAWY,GAAG,EAAE,CAAC,IAAI,mBAAmB,EAAE,EAX3C,uBAIU,CAAC,CAAC,EAAE,EAAE,CACZ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CACvB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,EAC/B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC,EACpC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAC9B,EATL,uBAAa;IACX,SAAS,EAAE,6BAAmB,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC7D,SAAS,EAAE,6BAAmB,OAAO,CAAC,uBAAuB,CAAC,CAAC;CAChE,CAAC,CAOC,CACyC,CAAO,CAAA;AAMrD,MAAM,CAAC,MAAM,aAAa,GAAG,gBAAA,GAAG,EAAiB,CAAA;AACjD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAgB,EAAE,EAAE,CAAC,wBAAc,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;AAE/E,MAAM,OAAO,iBAAiB;IAEP;IADZ,IAAI,GAAG,mBAAmB,CAAA;IACnC,YAAqB,MAAe;QAAf,WAAM,GAAN,MAAM,CAAS;IAAG,CAAC;CACzC;AAED,MAAM,kBAAkB,GAAG,CAAC,OAAgB,EAAE,IAAY,EAAE,EAAE,0BAEpD,EAAE,SAAS,EAAE,mCAGjB,yBACE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAwB,EAC7C,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAC1C,EALD,2BAAkB,cAAc,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,GADrC,wBAAe,aAAa,CAAC,CAQrD,CAAA;AAEJ,MAAM,GAAG,GAAG,CAAO,WAA4C,EAAE,EAAE;IACjE,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAA;IACrC,OAAO,CAAC,OAAgB,EAAE,IAAY,EAAE,EAAE,yBAEhC,WAAW,IACR,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,EADzB,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAEvD,CAAA;AACN,CAAC,CAAA;AAUD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAO,EAA4B,EAAE,EAAE;IAChE,MAAM,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,CAAA;IAElC,OAAO,CAAC,EACN,OAAO,EACP,IAAI,EACJ,OAAO,EACP,KAAK,EACL,KAAK,GAC0D,EAAE,EAAE,CACnE,8BAOiB,KAAK,EAPtB,wBACW,CAAC,CAAC,EAAE,EAAE,CACb,sBACE,GAAG,EAAE,CAAC,KAAK,EACX,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAFnB,CAAC,CAGA,EALL,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAMlB,CACoB,CAAA;AAC3B,CAAC,CAAA"}
1
+ {"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../src/Interactions/webhook.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -5,7 +5,7 @@ export * as DiscordWS from "./DiscordGateway/DiscordWS/index.js";
5
5
  export * as Gateway from "./DiscordGateway/index.js";
6
6
  export { DiscordREST, LiveDiscordREST, rest } from "./DiscordREST/index.js";
7
7
  export * as Ix from "./Interactions/index.js";
8
- export { run as IxRunGateway } from "./Interactions/gateway.js";
8
+ export { run as runIxGateway } from "./Interactions/gateway.js";
9
9
  export * as Log from "./Log/index.js";
10
10
  export * as RateLimitStore from "./RateLimitStore/index.js";
11
11
  export * as Flags from "./Helpers/flags.js";
package/dist/index.js CHANGED
@@ -7,7 +7,7 @@ export * as DiscordWS from "./DiscordGateway/DiscordWS/index.js";
7
7
  export * as Gateway from "./DiscordGateway/index.js";
8
8
  export { DiscordREST, LiveDiscordREST, rest } from "./DiscordREST/index.js";
9
9
  export * as Ix from "./Interactions/index.js";
10
- export { run as IxRunGateway } from "./Interactions/gateway.js";
10
+ export { run as runIxGateway } from "./Interactions/gateway.js";
11
11
  export * as Log from "./Log/index.js";
12
12
  export * as RateLimitStore from "./RateLimitStore/index.js";
13
13
  export * as Flags from "./Helpers/flags.js";
@@ -12,5 +12,5 @@ export * as Perms from "./Helpers/permissions.js";
12
12
  export * as UI from "./Helpers/ui.js";
13
13
  export declare const LiveRateLimit: import("./common.js").Layer<import("./Log/index.js").Log, never, import("./RateLimitStore/index.js").RateLimitStore | import("./RateLimitStore/index.js").RateLimiter>;
14
14
  export declare const LiveREST: import("./common.js").Layer<import("./DiscordConfig/index.js").DiscordConfig | import("./Log/index.js").Log, never, import("./DiscordREST/index.js").DiscordREST | import("./RateLimitStore/index.js").RateLimitStore | import("./RateLimitStore/index.js").RateLimiter>;
15
- export declare const makeLayer: (config: Config.MakeOpts & Ix.WebhookConfig, debug?: boolean) => import("./common.js").Layer<never, never, import("./DiscordREST/index.js").DiscordREST | import("./DiscordConfig/index.js").DiscordConfig | import("./Log/index.js").Log | import("./RateLimitStore/index.js").RateLimitStore | import("./RateLimitStore/index.js").RateLimiter | import("./Interactions/webhook.js").WebhookConfig>;
15
+ export declare const makeLayer: (config: Config.MakeOpts & Ix.MakeWebhookConfigOpts, debug?: boolean) => import("./common.js").Layer<never, never, import("./DiscordREST/index.js").DiscordREST | import("./DiscordConfig/index.js").DiscordConfig | import("./Log/index.js").Log | import("./RateLimitStore/index.js").RateLimitStore | import("./RateLimitStore/index.js").RateLimiter | import("./Interactions/webhook.js").WebhookConfig>;
16
16
  //# sourceMappingURL=webhooks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,OAAO,MAAM,YAAY,CAAA;AAErC,OAAO,KAAK,MAAM,MAAM,0BAA0B,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAA;AAC3E,OAAO,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAC7C,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAA;AACrC,OAAO,KAAK,cAAc,MAAM,2BAA2B,CAAA;AAE3D,OAAO,KAAK,KAAK,MAAM,oBAAoB,CAAA;AAC3C,OAAO,KAAK,SAAS,MAAM,2BAA2B,CAAA;AACtD,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAC/C,OAAO,KAAK,KAAK,MAAM,0BAA0B,CAAA;AACjD,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAErC,eAAO,MAAM,aAAa,wKACgD,CAAA;AAE1E,eAAO,MAAM,QAAQ,0QAAuC,CAAA;AAE5D,eAAO,MAAM,SAAS,WACZ,OAAO,QAAQ,GAAG,GAAG,aAAa,0VAS3C,CAAA"}
1
+ {"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,OAAO,MAAM,YAAY,CAAA;AAErC,OAAO,KAAK,MAAM,MAAM,0BAA0B,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAA;AAC3E,OAAO,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAC7C,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAA;AACrC,OAAO,KAAK,cAAc,MAAM,2BAA2B,CAAA;AAE3D,OAAO,KAAK,KAAK,MAAM,oBAAoB,CAAA;AAC3C,OAAO,KAAK,SAAS,MAAM,2BAA2B,CAAA;AACtD,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAC/C,OAAO,KAAK,KAAK,MAAM,0BAA0B,CAAA;AACjD,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAErC,eAAO,MAAM,aAAa,wKACgD,CAAA;AAE1E,eAAO,MAAM,QAAQ,0QAAuC,CAAA;AAE5D,eAAO,MAAM,SAAS,WACZ,OAAO,QAAQ,GAAG,GAAG,qBAAqB,0VASnD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":";;AAAA,OAAO,KAAK,OAAO,MAAM,YAAY,CAAA;AAErC,OAAO,KAAK,MAAM,MAAM,0BAA0B,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAA;AAC3E,OAAO,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAC7C,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAA;AACrC,OAAO,KAAK,cAAc,MAAM,2BAA2B,CAAA;AAE3D,OAAO,KAAK,KAAK,MAAM,oBAAoB,CAAA;AAC3C,OAAO,KAAK,SAAS,MAAM,2BAA2B,CAAA;AACtD,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAC/C,OAAO,KAAK,KAAK,MAAM,0BAA0B,CAAA;AACjD,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAErC,MAAM,CAAC,MAAM,aAAa,qCACkB,gBAAA,cAAc,CAAC,eAAe,EAAxE,gBAAA,cAAc,CAAC,wBAAwB,CAAiC,CAAA;AAE1E,MAAM,CAAC,MAAM,QAAQ,qCAAmB,gBAAA,IAAI,CAAC,eAAe,EAApC,aAAa,CAAuB,CAAA;AAE5D,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,MAA0C,EAC1C,KAAK,GAAG,KAAK,EACb,EAAE;IACF,MAAM,WAAW,GAAG,gBAAA,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAChD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,gBAAA,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAA,GAAG,CAAC,OAAO,CAAA;IACtD,MAAM,UAAU,GAAG,gBAAA,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IAC3C,MAAM,OAAO,qCAAwC,QAAQ,wBAAtB,WAAW,wBAAxB,UAAU,EAApB,OAAO,GAAsC,CAAA;IAE7D,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
1
+ {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":";;AAAA,OAAO,KAAK,OAAO,MAAM,YAAY,CAAA;AAErC,OAAO,KAAK,MAAM,MAAM,0BAA0B,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAA;AAC3E,OAAO,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAC7C,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAA;AACrC,OAAO,KAAK,cAAc,MAAM,2BAA2B,CAAA;AAE3D,OAAO,KAAK,KAAK,MAAM,oBAAoB,CAAA;AAC3C,OAAO,KAAK,SAAS,MAAM,2BAA2B,CAAA;AACtD,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAC/C,OAAO,KAAK,KAAK,MAAM,0BAA0B,CAAA;AACjD,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAErC,MAAM,CAAC,MAAM,aAAa,qCACkB,gBAAA,cAAc,CAAC,eAAe,EAAxE,gBAAA,cAAc,CAAC,wBAAwB,CAAiC,CAAA;AAE1E,MAAM,CAAC,MAAM,QAAQ,qCAAmB,gBAAA,IAAI,CAAC,eAAe,EAApC,aAAa,CAAuB,CAAA;AAE5D,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,MAAkD,EAClD,KAAK,GAAG,KAAK,EACb,EAAE;IACF,MAAM,WAAW,GAAG,gBAAA,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAChD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,gBAAA,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAA,GAAG,CAAC,OAAO,CAAA;IACtD,MAAM,UAAU,GAAG,gBAAA,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IAC3C,MAAM,OAAO,qCAAwC,QAAQ,wBAAtB,WAAW,wBAAxB,UAAU,EAApB,OAAO,GAAsC,CAAA;IAE7D,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dfx",
3
- "version": "0.9.3",
3
+ "version": "0.9.5",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -50,5 +50,5 @@
50
50
  "@fp-ts/data": "^0.0.20"
51
51
  }
52
52
  },
53
- "gitHead": "9b16eecbd76b957b5051a61a17f9836312c99a20"
53
+ "gitHead": "138bb3ca8bee27e8fb9b66916ed1b75c2751198b"
54
54
  }
@@ -6,49 +6,50 @@ export interface RunOpts {
6
6
  sync?: boolean
7
7
  }
8
8
 
9
- export const run = <R, R2, E, E2>(
10
- ix: InteractionBuilder<R, E>,
11
- catchAll: (
12
- e: Http.FetchError | Http.StatusCodeError | Http.JsonParseError | E,
13
- ) => Effect<R2, E2, any>,
14
- { sync = true }: RunOpts = {},
15
- ) =>
16
- Do(($) => {
17
- const { GlobalApplicationCommand, GuildApplicationCommand } =
18
- splitDefinitions(ix.definitions)
19
-
20
- const application = $(
21
- Rest.rest.getCurrentBotApplicationInformation().flatMap((a) => a.json),
22
- )
23
-
24
- const globalSync = Rest.rest.bulkOverwriteGlobalApplicationCommands(
25
- application.id,
26
- {
27
- body: JSON.stringify(GlobalApplicationCommand.map((a) => a.command)),
28
- },
29
- )
30
-
31
- const guildSync = GuildApplicationCommand.length
32
- ? Gateway.handleDispatch("GUILD_CREATE", (a) =>
33
- Rest.rest.bulkOverwriteGuildApplicationCommands(
34
- application.id,
35
- a.id,
36
- GuildApplicationCommand.map((a) => a.command) as any,
37
- ),
38
- )
39
- : Effect.unit()
40
-
41
- const handle = handlers(ix.definitions)
42
-
43
- const run = Gateway.handleDispatch("INTERACTION_CREATE", (i) =>
44
- handle[i.type](i)
45
- .tap((r) =>
46
- r.match(Effect.unit, (r) =>
47
- Rest.rest.createInteractionResponse(i.id, i.token, r),
48
- ),
49
- )
50
- .catchAll(catchAll),
51
- )
52
-
53
- $(sync ? run.zipPar(globalSync).zipPar(guildSync) : run)
54
- })
9
+ export const run =
10
+ <R2, E, E2>(
11
+ catchAll: (
12
+ e: Http.FetchError | Http.StatusCodeError | Http.JsonParseError | E,
13
+ ) => Effect<R2, E2, any>,
14
+ { sync = true }: RunOpts = {},
15
+ ) =>
16
+ <R>(ix: InteractionBuilder<R, E>) =>
17
+ Do(($) => {
18
+ const { GlobalApplicationCommand, GuildApplicationCommand } =
19
+ splitDefinitions(ix.definitions)
20
+
21
+ const application = $(
22
+ Rest.rest.getCurrentBotApplicationInformation().flatMap((a) => a.json),
23
+ )
24
+
25
+ const globalSync = Rest.rest.bulkOverwriteGlobalApplicationCommands(
26
+ application.id,
27
+ {
28
+ body: JSON.stringify(GlobalApplicationCommand.map((a) => a.command)),
29
+ },
30
+ )
31
+
32
+ const guildSync = GuildApplicationCommand.length
33
+ ? Gateway.handleDispatch("GUILD_CREATE", (a) =>
34
+ Rest.rest.bulkOverwriteGuildApplicationCommands(
35
+ application.id,
36
+ a.id,
37
+ GuildApplicationCommand.map((a) => a.command) as any,
38
+ ),
39
+ )
40
+ : Effect.unit()
41
+
42
+ const handle = handlers(ix.definitions)
43
+
44
+ const run = Gateway.handleDispatch("INTERACTION_CREATE", (i) =>
45
+ handle[i.type](i)
46
+ .tap((r) =>
47
+ r.match(Effect.unit, (r) =>
48
+ Rest.rest.createInteractionResponse(i.id, i.token, r),
49
+ ),
50
+ )
51
+ .catchAll(catchAll),
52
+ )
53
+
54
+ $(sync ? run.zipPar(globalSync).zipPar(guildSync) : run)
55
+ })
@@ -13,8 +13,9 @@ export {
13
13
  } from "./definitions.js"
14
14
 
15
15
  export {
16
- makeConfig as makeWebhookConfig,
16
+ makeConfigLayer as makeWebhookConfig,
17
17
  makeHandler as makeWebhookHandler,
18
+ MakeConfigOpts as MakeWebhookConfigOpts,
18
19
  WebhookConfig,
19
20
  WebhookParseError,
20
21
  BadWebhookSignature,
@@ -41,3 +41,41 @@ export const splitDefinitions = <R, E>(
41
41
  Commands,
42
42
  }
43
43
  }
44
+ const MAP_HEX: Record<string, number> = {
45
+ 0: 0,
46
+ 1: 1,
47
+ 2: 2,
48
+ 3: 3,
49
+ 4: 4,
50
+ 5: 5,
51
+ 6: 6,
52
+ 7: 7,
53
+ 8: 8,
54
+ 9: 9,
55
+ a: 10,
56
+ b: 11,
57
+ c: 12,
58
+ d: 13,
59
+ e: 14,
60
+ f: 15,
61
+ A: 10,
62
+ B: 11,
63
+ C: 12,
64
+ D: 13,
65
+ E: 14,
66
+ F: 15,
67
+ }
68
+
69
+ export function fromHex(hexString: string) {
70
+ const bytes = new Uint8Array(Math.floor((hexString || "").length / 2))
71
+ let i
72
+ for (i = 0; i < bytes.length; i++) {
73
+ const a = MAP_HEX[hexString[i * 2]]
74
+ const b = MAP_HEX[hexString[i * 2 + 1]]
75
+ if (a === undefined || b === undefined) {
76
+ break
77
+ }
78
+ bytes[i] = (a << 4) | b
79
+ }
80
+ return i === bytes.length ? bytes : bytes.slice(0, i)
81
+ }
@@ -2,6 +2,7 @@ import Nacl from "tweetnacl"
2
2
  import * as D from "./definitions.js"
3
3
  import { handlers } from "./handlers.js"
4
4
  import { InteractionBuilder } from "./index.js"
5
+ import { fromHex } from "./utils.js"
5
6
 
6
7
  export class BadWebhookSignature {
7
8
  readonly _tag = "BadWebhookSignature"
@@ -9,26 +10,36 @@ export class BadWebhookSignature {
9
10
 
10
11
  export type Headers = Record<string, string | string[] | undefined>
11
12
 
12
- const checkSignature = (publicKey: string, headers: Headers, body: string) =>
13
+ const checkSignature = (
14
+ publicKey: Uint8Array,
15
+ headers: Headers,
16
+ body: string,
17
+ ) =>
13
18
  Maybe.struct({
14
19
  signature: Maybe.fromNullable(headers["x-signature-ed25519"]),
15
20
  timestamp: Maybe.fromNullable(headers["x-signature-timestamp"]),
16
21
  })
17
- .filter((a) =>
18
- Nacl.sign.detached.verify(
19
- Buffer.from(a.timestamp + body),
20
- Buffer.from(`${a.signature}`, "hex"),
21
- Buffer.from(publicKey, "hex"),
22
- ),
23
- )
22
+ .filter((a) => {
23
+ const enc = new TextEncoder()
24
+ return Nacl.sign.detached.verify(
25
+ enc.encode(a.timestamp + body),
26
+ fromHex(`${a.signature}`),
27
+ publicKey,
28
+ )
29
+ })
24
30
  .toEither(() => new BadWebhookSignature()).asUnit
25
31
 
26
- export interface WebhookConfig {
32
+ export interface MakeConfigOpts {
27
33
  applicationId: string
28
34
  publicKey: string
29
35
  }
36
+ const makeConfig = ({ applicationId, publicKey }: MakeConfigOpts) => ({
37
+ applicationId,
38
+ publicKey: fromHex(publicKey),
39
+ })
40
+ export interface WebhookConfig extends ReturnType<typeof makeConfig> {}
30
41
  export const WebhookConfig = Tag<WebhookConfig>()
31
- export const makeConfig = (a: WebhookConfig) => Layer.succeed(WebhookConfig)(a)
42
+ export const makeConfigLayer = flow(makeConfig, Layer.succeed(WebhookConfig))
32
43
 
33
44
  export class WebhookParseError {
34
45
  readonly _tag = "WebhookParseError"
package/src/index.ts CHANGED
@@ -5,7 +5,7 @@ export * as DiscordWS from "./DiscordGateway/DiscordWS/index.js"
5
5
  export * as Gateway from "./DiscordGateway/index.js"
6
6
  export { DiscordREST, LiveDiscordREST, rest } from "./DiscordREST/index.js"
7
7
  export * as Ix from "./Interactions/index.js"
8
- export { run as IxRunGateway } from "./Interactions/gateway.js"
8
+ export { run as runIxGateway } from "./Interactions/gateway.js"
9
9
  export * as Log from "./Log/index.js"
10
10
  export * as RateLimitStore from "./RateLimitStore/index.js"
11
11
 
package/src/webhooks.ts CHANGED
@@ -18,7 +18,7 @@ export const LiveRateLimit =
18
18
  export const LiveREST = LiveRateLimit > Rest.LiveDiscordREST
19
19
 
20
20
  export const makeLayer = (
21
- config: Config.MakeOpts & Ix.WebhookConfig,
21
+ config: Config.MakeOpts & Ix.MakeWebhookConfigOpts,
22
22
  debug = false,
23
23
  ) => {
24
24
  const LiveWebhook = Ix.makeWebhookConfig(config)