slack.ts 0.0.13 → 0.0.14

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/dist/client.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- import EventEmitter from "events";
2
1
  import { type SlackAPIMethod, type SlackAPIParams, type SlackAPIResponse } from "./api/index.js";
3
2
  import type { AllEvents, AllEventTypes, EventWrapper, SlackEventMap } from "./api/events/index.js";
4
3
  import type { MessageEvent } from "./api/events/events.js";
@@ -15,6 +14,7 @@ import type { DistributiveOmit } from "./utils/typing.js";
15
14
  import type { EventsReceiver } from "./receivers/base.js";
16
15
  import { type SlashCommandInstance } from "./resources/slash.js";
17
16
  import type { IM, MPIM, PrivateChannel, PublicChannel } from "./api/types/conversation.js";
17
+ import { AsyncEventEmitter } from "./utils/events.js";
18
18
  type ReceiverOptions = ({
19
19
  type: "socket";
20
20
  } & DistributiveOmit<SocketEventsReceiverOptions, "client">) | ({
@@ -50,7 +50,7 @@ type ChannelTypeMap = {
50
50
  mpim: MPIM;
51
51
  im: IM;
52
52
  };
53
- export declare class App extends EventEmitter<AppEventMap> {
53
+ export declare class App extends AsyncEventEmitter<AppEventMap> {
54
54
  #private;
55
55
  constructor({ token, receiver }?: AppOptions);
56
56
  get receiver(): EventsReceiver;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,QAAQ,CAAA;AACjC,OAAO,EAEN,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,MAAM,OAAO,CAAA;AACd,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACzF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,KAAK,EACX,WAAW,EACX,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,MAAM,iCAAiC,CAAA;AACxC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAGpE,OAAO,EAAwB,KAAK,2BAA2B,EAAE,MAAM,oBAAoB,CAAA;AAC3F,OAAO,EAAsB,KAAK,yBAAyB,EAAE,MAAM,kBAAkB,CAAA;AACrF,OAAO,EAAqB,KAAK,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AACpF,OAAO,EAAE,MAAM,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAW,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAEnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEtD,OAAO,EAAgB,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAC3E,OAAO,KAAK,EAEX,EAAE,EACF,IAAI,EACJ,cAAc,EACd,aAAa,EACb,MAAM,0BAA0B,CAAA;AAGjC,KAAK,eAAe,GACjB,CAAC;IACD,IAAI,EAAE,QAAQ,CAAA;CACb,GAAG,gBAAgB,CAAC,2BAA2B,EAAE,QAAQ,CAAC,CAAC,GAC5D,CAAC;IACD,IAAI,EAAE,MAAM,CAAA;CACX,GAAG,gBAAgB,CAAC,yBAAyB,EAAE,QAAQ,CAAC,CAAC,GAC1D,CAAC;IACD,IAAI,EAAE,OAAO,CAAA;CACZ,GAAG,gBAAgB,CAAC,wBAAwB,EAAE,QAAQ,CAAC,CAAC,GACzD;IACA,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,CAAC,EAAE,KAAK,CAAA;CACd,CAAA;AAEJ,UAAU,UAAU;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IAClD,QAAQ,CAAC,EAAE,eAAe,CAAA;CAC1B;AAED,MAAM,MAAM,mBAAmB,GAAG;IACjC,OAAO,EAAE,eAAe,CAAA;IACxB,MAAM,EAAE,GAAG,CAAA;IACX,KAAK,EAAE,YAAY,CAAC,YAAY,CAAC,CAAA;CACjC,CAAA;AACD,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,mBAAmB,KAAK,OAAO,CAAA;AAEpE,MAAM,MAAM,iBAAiB,CAAC,KAAK,SAAS,SAAS,IAAI;IACxD,MAAM,EAAE,GAAG,CAAA;IACX,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,CAAA;CAC1B,CAAA;AACD,MAAM,MAAM,aAAa,CAAC,KAAK,SAAS,SAAS,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,KAAK,CAAC,KAAK,OAAO,CAAA;AAEhG,MAAM,MAAM,mBAAmB,CAAC,IAAI,SAAS,WAAW,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,OAAO,CAAA;AAE3F,KAAK,cAAc,GAAG;IACrB,cAAc,EAAE,aAAa,CAAA;IAC7B,eAAe,EAAE,cAAc,CAAA;IAC/B,IAAI,EAAE,IAAI,CAAA;IACV,EAAE,EAAE,EAAE,CAAA;CACN,CAAA;AAED,qBAAa,GAAI,SAAQ,YAAY,CAAC,WAAW,CAAC;;gBAIrC,EAAE,KAAK,EAAE,QAA4B,EAAE,GAAE,UAAe;IAsEpE,IAAI,QAAQ,mBAEX;IAED;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,EAAE,eAAe;IAejC;;;;;;OAMG;IACH,KAAK,CAAC,KAAK,SAAS,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC;IAMlF;;;;;;;OAOG;IACH,MAAM,CAAC,IAAI,SAAS,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,mBAAmB,CAAC,IAAI,CAAC;IAMxF;;;OAGG;IACG,KAAK;IAIX;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM;IAIlB;;;;;OAKG;IACI,QAAQ,CAAC,KAAK,SAAS,CAAC,gBAAgB,GAAG,iBAAiB,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE,EACrF,GAAG,KAAK,EAAE,KAAK,GACb,cAAc,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAMnD,OAAO,CAAC,MAAM,SAAS,cAAc,EAC1C,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,GAC5B,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IAErD,OAAO,CAAC,MAAM,SAAS,MAAM,EAClC,MAAM,EAAE,MAAM,SAAS,cAAc,GAAG,KAAK,GAAG,MAAM,EACtD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QACjC,KAAK,CAAC,EAAE,MAAM,GAAG;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAA;KAClD,GACC,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAgElD;AAED,KAAK,WAAW,GAAG;IAClB,KAAK,EAAE,CAAC,YAAY,CAAC,CAAA;IACrB,OAAO,EAAE,CAAC,YAAY,CAAC,CAAA;IACvB,MAAM,EAAE,CAAC,cAAc,CAAC,CAAA;IACxB,MAAM,EAAE,CAAC,cAAc,CAAC,CAAA;IACxB,OAAO,EAAE,CAAC,eAAe,CAAC,CAAA;IAC1B,gBAAgB,EAAE,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAA;IAClD,KAAK,EAAE,CAAC,oBAAoB,CAAC,CAAA;CAC7B,GAAG;KACF,CAAC,IAAI,aAAa,IAAI,SAAS,CAAC,EAAE,GAAG;QACrC;YAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;YAAC,KAAK,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;SAAE;KACpE;CACD,GAAG;KACF,CAAC,IAAI,gBAAgB,IAAI,UAAU,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;CAC7E,GAAG;KACF,CAAC,IAAI,UAAU,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC;CAC3C,GAAG;KACF,CAAC,IAAI,gBAAgB,IAAI,UAAU,CAAC,IAAI,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;CACvF,GAAG;KACF,CAAC,IAAI,UAAU,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC;CAC3C,GAAG;KACF,CAAC,IAAI,WAAW,MAAM,EAAE,GAAG,CAAC,eAAe,CAAC;CAC7C,GAAG;KACF,CAAC,IAAI,OAAO,CAAC,UAAU,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,IAAI,WAAW,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;CAClG,GAAG;KACF,CAAC,IAAI,OAAO,CAAC,UAAU,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,IAAI,WAAW,CAAC,CAAC,SAAS,CAAC,IAAI,MAAM,EAAE,GAAG;QACvF,eAAe,CAAC,CAAC,CAAC;KAClB;CACD,GAAG;KACF,CAAC,IAAI,kBAAkB,MAAM,EAAE,GAAG,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;CACnE,GAAG;KACF,CAAC,IAAI,IAAI,MAAM,EAAE,GAAG,CAAC,oBAAoB,CAAC;CAC3C,CAAA"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,EAEN,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,MAAM,OAAO,CAAA;AACd,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACzF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,KAAK,EACX,WAAW,EACX,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,MAAM,iCAAiC,CAAA;AACxC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAGpE,OAAO,EAAwB,KAAK,2BAA2B,EAAE,MAAM,oBAAoB,CAAA;AAC3F,OAAO,EAAsB,KAAK,yBAAyB,EAAE,MAAM,kBAAkB,CAAA;AACrF,OAAO,EAAqB,KAAK,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AACpF,OAAO,EAAE,MAAM,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAW,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAEnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEtD,OAAO,EAAgB,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAC3E,OAAO,KAAK,EAEX,EAAE,EACF,IAAI,EACJ,cAAc,EACd,aAAa,EACb,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAElD,KAAK,eAAe,GACjB,CAAC;IACD,IAAI,EAAE,QAAQ,CAAA;CACb,GAAG,gBAAgB,CAAC,2BAA2B,EAAE,QAAQ,CAAC,CAAC,GAC5D,CAAC;IACD,IAAI,EAAE,MAAM,CAAA;CACX,GAAG,gBAAgB,CAAC,yBAAyB,EAAE,QAAQ,CAAC,CAAC,GAC1D,CAAC;IACD,IAAI,EAAE,OAAO,CAAA;CACZ,GAAG,gBAAgB,CAAC,wBAAwB,EAAE,QAAQ,CAAC,CAAC,GACzD;IACA,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,CAAC,EAAE,KAAK,CAAA;CACd,CAAA;AAEJ,UAAU,UAAU;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IAClD,QAAQ,CAAC,EAAE,eAAe,CAAA;CAC1B;AAED,MAAM,MAAM,mBAAmB,GAAG;IACjC,OAAO,EAAE,eAAe,CAAA;IACxB,MAAM,EAAE,GAAG,CAAA;IACX,KAAK,EAAE,YAAY,CAAC,YAAY,CAAC,CAAA;CACjC,CAAA;AACD,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,mBAAmB,KAAK,OAAO,CAAA;AAEpE,MAAM,MAAM,iBAAiB,CAAC,KAAK,SAAS,SAAS,IAAI;IACxD,MAAM,EAAE,GAAG,CAAA;IACX,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,CAAA;CAC1B,CAAA;AACD,MAAM,MAAM,aAAa,CAAC,KAAK,SAAS,SAAS,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,KAAK,CAAC,KAAK,OAAO,CAAA;AAEhG,MAAM,MAAM,mBAAmB,CAAC,IAAI,SAAS,WAAW,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,OAAO,CAAA;AAE3F,KAAK,cAAc,GAAG;IACrB,cAAc,EAAE,aAAa,CAAA;IAC7B,eAAe,EAAE,cAAc,CAAA;IAC/B,IAAI,EAAE,IAAI,CAAA;IACV,EAAE,EAAE,EAAE,CAAA;CACN,CAAA;AAED,qBAAa,GAAI,SAAQ,iBAAiB,CAAC,WAAW,CAAC;;gBAI1C,EAAE,KAAK,EAAE,QAA4B,EAAE,GAAE,UAAe;IAwEpE,IAAI,QAAQ,mBAEX;IAED;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,EAAE,eAAe;IAejC;;;;;;OAMG;IACH,KAAK,CAAC,KAAK,SAAS,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC;IAMlF;;;;;;;OAOG;IACH,MAAM,CAAC,IAAI,SAAS,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,mBAAmB,CAAC,IAAI,CAAC;IAMxF;;;OAGG;IACG,KAAK;IAIX;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM;IAIlB;;;;;OAKG;IACI,QAAQ,CAAC,KAAK,SAAS,CAAC,gBAAgB,GAAG,iBAAiB,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE,EACrF,GAAG,KAAK,EAAE,KAAK,GACb,cAAc,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAMnD,OAAO,CAAC,MAAM,SAAS,cAAc,EAC1C,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,GAC5B,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IAErD,OAAO,CAAC,MAAM,SAAS,MAAM,EAClC,MAAM,EAAE,MAAM,SAAS,cAAc,GAAG,KAAK,GAAG,MAAM,EACtD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QACjC,KAAK,CAAC,EAAE,MAAM,GAAG;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAA;KAClD,GACC,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAgElD;AAED,KAAK,WAAW,GAAG;IAClB,KAAK,EAAE,CAAC,YAAY,CAAC,CAAA;IACrB,OAAO,EAAE,CAAC,YAAY,CAAC,CAAA;IACvB,MAAM,EAAE,CAAC,cAAc,CAAC,CAAA;IACxB,MAAM,EAAE,CAAC,cAAc,CAAC,CAAA;IACxB,OAAO,EAAE,CAAC,eAAe,CAAC,CAAA;IAC1B,gBAAgB,EAAE,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAA;IAClD,KAAK,EAAE,CAAC,oBAAoB,CAAC,CAAA;CAC7B,GAAG;KACF,CAAC,IAAI,aAAa,IAAI,SAAS,CAAC,EAAE,GAAG;QACrC;YAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;YAAC,KAAK,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;SAAE;KACpE;CACD,GAAG;KACF,CAAC,IAAI,gBAAgB,IAAI,UAAU,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;CAC7E,GAAG;KACF,CAAC,IAAI,UAAU,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC;CAC3C,GAAG;KACF,CAAC,IAAI,gBAAgB,IAAI,UAAU,CAAC,IAAI,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;CACvF,GAAG;KACF,CAAC,IAAI,UAAU,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC;CAC3C,GAAG;KACF,CAAC,IAAI,WAAW,MAAM,EAAE,GAAG,CAAC,eAAe,CAAC;CAC7C,GAAG;KACF,CAAC,IAAI,OAAO,CAAC,UAAU,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,IAAI,WAAW,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;CAClG,GAAG;KACF,CAAC,IAAI,OAAO,CAAC,UAAU,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,IAAI,WAAW,CAAC,CAAC,SAAS,CAAC,IAAI,MAAM,EAAE,GAAG;QACvF,eAAe,CAAC,CAAC,CAAC;KAClB;CACD,GAAG;KACF,CAAC,IAAI,kBAAkB,MAAM,EAAE,GAAG,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;CACnE,GAAG;KACF,CAAC,IAAI,IAAI,MAAM,EAAE,GAAG,CAAC,oBAAoB,CAAC;CAC3C,CAAA"}
package/dist/client.js CHANGED
@@ -1,4 +1,3 @@
1
- import EventEmitter from "events";
2
1
  import { POST_METHODS, } from "./api/index.js";
3
2
  import { SlackWebAPIError, SlackWebAPIPlatformError } from "./error.js";
4
3
  import { DummyReceiver } from "./receivers/dummy.js";
@@ -11,12 +10,12 @@ import { Message } from "./resources/message.js";
11
10
  import { sleep } from "./utils/index.js";
12
11
  import { SlashCommand } from "./resources/slash.js";
13
12
  import { paginate } from "./utils/paginate.js";
14
- export class App extends EventEmitter {
13
+ import { AsyncEventEmitter } from "./utils/events.js";
14
+ export class App extends AsyncEventEmitter {
15
15
  #token;
16
16
  #receiver;
17
17
  constructor({ token, receiver = { type: "dummy" } } = {}) {
18
- super({ captureRejections: true });
19
- this.on("error", this.#onCallbackError.bind(this));
18
+ super();
20
19
  this.#token = token;
21
20
  switch (receiver.type) {
22
21
  case "socket":
@@ -37,38 +36,41 @@ export class App extends EventEmitter {
37
36
  this.#receiver.on("slash_command", this.#onSlashCommand.bind(this));
38
37
  this.on("event:message", this.#onMessage.bind(this));
39
38
  }
40
- #onEvent(event) {
41
- this.emit("event", event);
42
- this.emit(`event:${event.event.type}`, { payload: event.event, event: event });
39
+ async #onEvent(event) {
40
+ await this.emit("event", event);
41
+ await this.emit(`event:${event.event.type}`, {
42
+ payload: event.event,
43
+ event: event,
44
+ });
43
45
  }
44
- #onBlockActions(event) {
45
- this.emit("actions", event);
46
+ async #onBlockActions(event) {
47
+ await this.emit("actions", event);
46
48
  for (const action of event.actions) {
47
49
  const obj = new Action(this, action, event);
48
- this.emit(`action:${action.type}`, obj);
49
- this.emit(`action.${action.action_id}`, obj);
50
- this.emit(`action:${action.type}.${action.action_id}`, obj);
50
+ await this.emit(`action:${action.type}`, obj);
51
+ await this.emit(`action.${action.action_id}`, obj);
52
+ await this.emit(`action:${action.type}.${action.action_id}`, obj);
51
53
  }
52
54
  }
53
- #onViewSubmission(event) {
54
- this.emit("submit", event);
55
- this.emit(`submit.${event.view.callback_id}`, event);
55
+ async #onViewSubmission(event) {
56
+ await this.emit("submit", event);
57
+ await this.emit(`submit.${event.view.callback_id}`, event);
56
58
  }
57
- #onSlashCommand(event) {
59
+ async #onSlashCommand(event) {
58
60
  const command = new SlashCommand(this, event);
59
- this.emit("slash", command);
60
- this.emit(`/${event.command.substring(1)}`, command);
61
+ await this.emit("slash", command);
62
+ await this.emit(`/${event.command.substring(1)}`, command);
61
63
  }
62
64
  async #onCallbackError(error) {
63
65
  console.error("Error occurred executing callback");
64
66
  console.error(error);
65
67
  }
66
- #onMessage({ payload }) {
68
+ async #onMessage({ payload }) {
67
69
  const message = new Message(this, payload.channel, payload.ts, payload);
68
- this.emit("message", message);
69
- this.emit(`message:${payload.subtype ?? "normal"}`, message);
70
- this.emit(`message:${payload.subtype ?? "normal"}#${payload.channel}`, message);
71
- this.emit(`message#${payload.channel}`, message);
70
+ await this.emit("message", message);
71
+ await this.emit(`message:${payload.subtype ?? "normal"}`, message);
72
+ await this.emit(`message:${payload.subtype ?? "normal"}#${payload.channel}`, message);
73
+ await this.emit(`message#${payload.channel}`, message);
72
74
  }
73
75
  get receiver() {
74
76
  return this.#receiver;
package/dist/index.d.ts CHANGED
@@ -1,4 +1,7 @@
1
1
  export * from "./client.js";
2
2
  export * from "./error.js";
3
3
  export * from "./blocks/index.js";
4
+ export * from "./api/index.js";
5
+ export * from "./receivers/index.js";
6
+ export * from "./resources/index.js";
4
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,OAAO,CAAA;AACrB,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA"}
package/dist/index.js CHANGED
@@ -1,3 +1,6 @@
1
1
  export * from "./client.js";
2
2
  export * from "./error.js";
3
3
  export * from "./blocks/index.js";
4
+ export * from "./api/index.js";
5
+ export * from "./receivers/index.js";
6
+ export * from "./resources/index.js";
@@ -1,9 +1,9 @@
1
- import type EventEmitter from "events";
2
1
  import type { AllEvents, EventWrapper } from "../api/events/index.js";
3
2
  import type { BlockActions } from "../api/interactive/block_actions.js";
4
3
  import type { ViewSubmission } from "../api/interactive/view_submission.js";
5
4
  import type { SlashCommandPayload } from "../api/slash/index.js";
6
- export interface EventsReceiver extends EventEmitter<ReceiverEventMap> {
5
+ import type { AsyncEventEmitter } from "../utils/events.js";
6
+ export interface EventsReceiver extends AsyncEventEmitter<ReceiverEventMap> {
7
7
  start(): unknown;
8
8
  }
9
9
  export type ReceiverEventMap = {
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/receivers/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,QAAQ,CAAA;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AACxE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAEvD,MAAM,WAAW,cAAe,SAAQ,YAAY,CAAC,gBAAgB,CAAC;IACrE,KAAK,IAAI,OAAO,CAAA;CAChB;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC9B,KAAK,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAA;IAChC,aAAa,EAAE,CAAC,YAAY,CAAC,CAAA;IAC7B,eAAe,EAAE,CAAC,cAAc,CAAC,CAAA;IACjC,aAAa,EAAE,CAAC,mBAAmB,CAAC,CAAA;CACpC,CAAA"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/receivers/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AACxE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAExD,MAAM,WAAW,cAAe,SAAQ,iBAAiB,CAAC,gBAAgB,CAAC;IAC1E,KAAK,IAAI,OAAO,CAAA;CAChB;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC9B,KAAK,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAA;IAChC,aAAa,EAAE,CAAC,YAAY,CAAC,CAAA;IAC7B,eAAe,EAAE,CAAC,cAAc,CAAC,CAAA;IACjC,aAAa,EAAE,CAAC,mBAAmB,CAAC,CAAA;CACpC,CAAA"}
@@ -1,6 +1,6 @@
1
- import { EventEmitter } from "events";
1
+ import { AsyncEventEmitter } from "../utils/events.js";
2
2
  import type { EventsReceiver, ReceiverEventMap } from "./base.js";
3
- export declare class DummyReceiver extends EventEmitter<ReceiverEventMap> implements EventsReceiver {
3
+ export declare class DummyReceiver extends AsyncEventEmitter<ReceiverEventMap> implements EventsReceiver {
4
4
  constructor();
5
5
  start(): void;
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dummy.d.ts","sourceRoot":"","sources":["../../src/receivers/dummy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAE9D,qBAAa,aAAc,SAAQ,YAAY,CAAC,gBAAgB,CAAE,YAAW,cAAc;;IAK1F,KAAK;CACL"}
1
+ {"version":3,"file":"dummy.d.ts","sourceRoot":"","sources":["../../src/receivers/dummy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAE9D,qBAAa,aAAc,SAAQ,iBAAiB,CAAC,gBAAgB,CAAE,YAAW,cAAc;;IAK/F,KAAK;CACL"}
@@ -1,5 +1,5 @@
1
- import { EventEmitter } from 'events';
2
- export class DummyReceiver extends EventEmitter {
1
+ import { AsyncEventEmitter } from "../utils/events.js";
2
+ export class DummyReceiver extends AsyncEventEmitter {
3
3
  constructor() {
4
4
  super();
5
5
  }
@@ -1,9 +1,14 @@
1
- import { EventEmitter } from "events";
2
1
  import type { App } from "../client.js";
2
+ import { AsyncEventEmitter } from "../utils/events.js";
3
3
  import type { EventsReceiver, ReceiverEventMap } from "./base.js";
4
4
  export interface HttpFetchReceiverOptions {
5
5
  signingSecret: string;
6
6
  client: App;
7
+ /**
8
+ * Optional function that will be called with each `Promise` that is not awaited. Most useful in
9
+ * serverless environments like Cloudflare Workers, but can also be used to catch errors.
10
+ */
11
+ waitUntil?: (obj: Promise<unknown>) => unknown;
7
12
  }
8
13
  /**
9
14
  * Stateless HTTP receiver that exposes a fetch() method.
@@ -37,9 +42,9 @@ export interface HttpFetchReceiverOptions {
37
42
  * })
38
43
  * ```
39
44
  */
40
- export declare class HttpFetchReceiver extends EventEmitter<ReceiverEventMap> implements EventsReceiver {
45
+ export declare class HttpFetchReceiver extends AsyncEventEmitter<ReceiverEventMap> implements EventsReceiver {
41
46
  #private;
42
- constructor({ signingSecret, client }: HttpFetchReceiverOptions);
47
+ constructor({ signingSecret, client, waitUntil }: HttpFetchReceiverOptions);
43
48
  /**
44
49
  * Handles an incoming HTTP request from Slack.
45
50
  *
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/receivers/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAEpC,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAE9D,MAAM,WAAW,wBAAwB;IACxC,aAAa,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,GAAG,CAAA;CACX;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,qBAAa,iBAAkB,SAAQ,YAAY,CAAC,gBAAgB,CAAE,YAAW,cAAc;;gBAIlF,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,wBAAwB;IAY/D;;;;;OAKG;IACG,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IAgD1C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAC5B"}
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/receivers/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAEnD,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAE9D,MAAM,WAAW,wBAAwB;IACxC,aAAa,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,GAAG,CAAA;IACX;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,OAAO,CAAA;CAC9C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,qBAAa,iBACZ,SAAQ,iBAAiB,CAAC,gBAAgB,CAC1C,YAAW,cAAc;;gBAMb,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,wBAAwB;IAY1E;;;;;OAKG;IACG,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IAgD1C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAC5B"}
@@ -1,4 +1,4 @@
1
- import { EventEmitter } from "events";
1
+ import { AsyncEventEmitter } from "../utils/events.js";
2
2
  import { parseSlackRequest } from "../utils/http.js";
3
3
  /**
4
4
  * Stateless HTTP receiver that exposes a fetch() method.
@@ -32,14 +32,15 @@ import { parseSlackRequest } from "../utils/http.js";
32
32
  * })
33
33
  * ```
34
34
  */
35
- export class HttpFetchReceiver extends EventEmitter {
35
+ export class HttpFetchReceiver extends AsyncEventEmitter {
36
36
  #signingSecret;
37
37
  #client;
38
- constructor({ signingSecret, client }) {
39
- super({ captureRejections: true });
40
- this.on("error", this.#onError.bind(this));
38
+ #waitUntil;
39
+ constructor({ signingSecret, client, waitUntil }) {
40
+ super();
41
41
  this.#signingSecret = signingSecret;
42
42
  this.#client = client;
43
+ this.#waitUntil = waitUntil;
43
44
  }
44
45
  #onError(error) {
45
46
  console.error("[http-fetch] error occurred handling event");
@@ -64,7 +65,7 @@ export class HttpFetchReceiver extends EventEmitter {
64
65
  return new Response("Bad Request", { status: 400 });
65
66
  }
66
67
  }
67
- #handlePayload(payload) {
68
+ async #handlePayload(payload) {
68
69
  switch (payload.type) {
69
70
  case "url_verification":
70
71
  return new Response(JSON.stringify({ challenge: payload.challenge }), {
@@ -72,16 +73,16 @@ export class HttpFetchReceiver extends EventEmitter {
72
73
  headers: { "Content-Type": "application/json" },
73
74
  });
74
75
  case "event":
75
- this.emit("event", payload.payload);
76
+ this.#waitUntil?.(this.emit("event", payload.payload));
76
77
  return new Response(null, { status: 200 });
77
78
  case "block_actions":
78
- this.emit("block_actions", payload.payload);
79
+ this.#waitUntil?.(this.emit("block_actions", payload.payload));
79
80
  return new Response(null, { status: 200 });
80
81
  case "view_submission":
81
- this.emit("view_submission", payload.payload);
82
+ this.#waitUntil?.(this.emit("view_submission", payload.payload));
82
83
  return new Response(null, { status: 200 });
83
84
  case "slash_command":
84
- this.emit("slash_command", payload.payload);
85
+ this.#waitUntil?.(this.emit("slash_command", payload.payload));
85
86
  return new Response(null, { status: 200 });
86
87
  default:
87
88
  const _exhaustive = payload;
@@ -1,4 +1,4 @@
1
- import { EventEmitter } from "events";
1
+ import { AsyncEventEmitter } from "../utils/events.js";
2
2
  import type { EventsReceiver, ReceiverEventMap } from "./base.js";
3
3
  import { type HttpFetchReceiverOptions } from "./fetch.js";
4
4
  export interface HttpServerReceiverOptions extends Omit<HttpFetchReceiverOptions, "signingSecret"> {
@@ -29,7 +29,7 @@ export interface HttpServerReceiverOptions extends Omit<HttpFetchReceiverOptions
29
29
  * console.log('Server listening on port 3000 at /slack/events')
30
30
  * ```
31
31
  */
32
- export declare class HttpServerReceiver extends EventEmitter<ReceiverEventMap> implements EventsReceiver {
32
+ export declare class HttpServerReceiver extends AsyncEventEmitter<ReceiverEventMap> implements EventsReceiver {
33
33
  #private;
34
34
  constructor({ signingSecret, client, port, path, }: HttpServerReceiverOptions);
35
35
  start(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/receivers/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAErC,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAC9D,OAAO,EAAqB,KAAK,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAE1E,MAAM,WAAW,yBAA0B,SAAQ,IAAI,CAAC,wBAAwB,EAAE,eAAe,CAAC;IACjG,aAAa,EAAE,MAAM,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;CACb;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,kBAAmB,SAAQ,YAAY,CAAC,gBAAgB,CAAE,YAAW,cAAc;;gBAMnF,EACX,aAAa,EACb,MAAM,EACN,IAAW,EACX,IAAsB,GACtB,EAAE,yBAAyB;IAmBtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAatB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAuD3B"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/receivers/http.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAC9D,OAAO,EAAqB,KAAK,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAE1E,MAAM,WAAW,yBAA0B,SAAQ,IAAI,CAAC,wBAAwB,EAAE,eAAe,CAAC;IACjG,aAAa,EAAE,MAAM,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;CACb;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,kBACZ,SAAQ,iBAAiB,CAAC,gBAAgB,CAC1C,YAAW,cAAc;;gBAOb,EACX,aAAa,EACb,MAAM,EACN,IAAW,EACX,IAAsB,GACtB,EAAE,yBAAyB;IAkBtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAatB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAuD3B"}
@@ -1,5 +1,5 @@
1
- import { EventEmitter } from "events";
2
1
  import { createServer } from "http";
2
+ import { AsyncEventEmitter } from "../utils/events.js";
3
3
  import { HttpFetchReceiver } from "./fetch.js";
4
4
  /**
5
5
  * HTTP server receiver using Node.js built-in http module.
@@ -24,14 +24,13 @@ import { HttpFetchReceiver } from "./fetch.js";
24
24
  * console.log('Server listening on port 3000 at /slack/events')
25
25
  * ```
26
26
  */
27
- export class HttpServerReceiver extends EventEmitter {
27
+ export class HttpServerReceiver extends AsyncEventEmitter {
28
28
  #fetchReceiver;
29
29
  #server;
30
30
  #port;
31
31
  #path;
32
32
  constructor({ signingSecret, client, port = 3000, path = "/slack/events", }) {
33
- super({ captureRejections: true });
34
- this.on("error", this.#onError.bind(this));
33
+ super();
35
34
  this.#fetchReceiver = new HttpFetchReceiver({ signingSecret, client });
36
35
  this.#port = port;
37
36
  this.#path = path;
@@ -0,0 +1,6 @@
1
+ export { DummyReceiver } from "./dummy.js";
2
+ export { SocketEventsReceiver, type SocketEventsReceiverOptions } from "./socket.js";
3
+ export { HttpServerReceiver, type HttpServerReceiverOptions } from "./http.js";
4
+ export { HttpFetchReceiver, type HttpFetchReceiverOptions } from "./fetch.js";
5
+ export { type EventsReceiver, type ReceiverEventMap } from "./base.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/receivers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACvC,OAAO,EAAE,oBAAoB,EAAE,KAAK,2BAA2B,EAAE,MAAM,UAAU,CAAA;AACjF,OAAO,EAAE,kBAAkB,EAAE,KAAK,yBAAyB,EAAE,MAAM,QAAQ,CAAA;AAC3E,OAAO,EAAE,iBAAiB,EAAE,KAAK,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAC1E,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,QAAQ,CAAA"}
@@ -0,0 +1,4 @@
1
+ export { DummyReceiver } from "./dummy.js";
2
+ export { SocketEventsReceiver } from "./socket.js";
3
+ export { HttpServerReceiver } from "./http.js";
4
+ export { HttpFetchReceiver } from "./fetch.js";
@@ -1,11 +1,11 @@
1
- import EventEmitter from "events";
2
1
  import type { App } from "../client.js";
2
+ import { AsyncEventEmitter } from "../utils/events.js";
3
3
  import type { EventsReceiver, ReceiverEventMap } from "./base.js";
4
4
  export interface SocketEventsReceiverOptions {
5
5
  appToken: string;
6
6
  client: App;
7
7
  }
8
- export declare class SocketEventsReceiver extends EventEmitter<ReceiverEventMap> implements EventsReceiver {
8
+ export declare class SocketEventsReceiver extends AsyncEventEmitter<ReceiverEventMap> implements EventsReceiver {
9
9
  #private;
10
10
  client: App;
11
11
  constructor({ appToken, client }: SocketEventsReceiverOptions);
@@ -1 +1 @@
1
- {"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../src/receivers/socket.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,QAAQ,CAAA;AAIjC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAG9D,MAAM,WAAW,2BAA2B;IAC3C,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,GAAG,CAAA;CACX;AAED,qBAAa,oBAAqB,SAAQ,YAAY,CAAC,gBAAgB,CAAE,YAAW,cAAc;;IAE1F,MAAM,EAAE,GAAG,CAAA;gBAGN,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,2BAA2B;IAYvD,KAAK;YAIG,QAAQ;CAoDtB"}
1
+ {"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../src/receivers/socket.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAE9D,MAAM,WAAW,2BAA2B;IAC3C,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,GAAG,CAAA;CACX;AAED,qBAAa,oBACZ,SAAQ,iBAAiB,CAAC,gBAAgB,CAC1C,YAAW,cAAc;;IAGlB,MAAM,EAAE,GAAG,CAAA;gBAGN,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,2BAA2B;IAWvD,KAAK;YAIG,QAAQ;CAoDtB"}
@@ -1,68 +1,67 @@
1
- import EventEmitter from 'events';
2
- import WebSocket from 'ws';
3
- export class SocketEventsReceiver extends EventEmitter {
1
+ import WebSocket from "ws";
2
+ import { AsyncEventEmitter } from "../utils/events.js";
3
+ export class SocketEventsReceiver extends AsyncEventEmitter {
4
4
  #appToken;
5
5
  client;
6
6
  #ws;
7
7
  constructor({ appToken, client }) {
8
- super({ captureRejections: true });
9
- this.on('error', this.#onEventError.bind(this));
8
+ super();
10
9
  this.#appToken = appToken;
11
10
  this.client = client;
12
11
  }
13
12
  #onEventError(error) {
14
- console.error('[socket-mode] error occurred handling event');
13
+ console.error("[socket-mode] error occurred handling event");
15
14
  console.error(error);
16
15
  }
17
16
  async start() {
18
17
  await this._connect();
19
18
  }
20
19
  async _connect() {
21
- const { url } = await this.client.request('apps.connections.open', { token: this.#appToken });
20
+ const { url } = await this.client.request("apps.connections.open", { token: this.#appToken });
22
21
  this.#ws = new WebSocket(url);
23
- this.#ws.addEventListener('open', this.#onOpen.bind(this));
24
- this.#ws.addEventListener('message', this.#onMessage.bind(this));
25
- this.#ws.addEventListener('close', this.#onClose.bind(this));
26
- this.#ws.addEventListener('error', this.#onError.bind(this));
22
+ this.#ws.addEventListener("open", this.#onOpen.bind(this));
23
+ this.#ws.addEventListener("message", this.#onMessage.bind(this));
24
+ this.#ws.addEventListener("close", this.#onClose.bind(this));
25
+ this.#ws.addEventListener("error", this.#onError.bind(this));
27
26
  }
28
27
  #onOpen() {
29
- console.debug('[socket-mode] websocket connected');
28
+ console.debug("[socket-mode] websocket connected");
30
29
  }
31
30
  #onMessage(event) {
32
- console.debug('[socket-mode] message received');
33
- if (typeof event.data === 'string') {
31
+ console.debug("[socket-mode] message received");
32
+ if (typeof event.data === "string") {
34
33
  try {
35
34
  const data = JSON.parse(event.data);
36
- if (data.type === 'events_api') {
35
+ if (data.type === "events_api") {
37
36
  this.#ws?.send(JSON.stringify({ envelope_id: data.envelope_id }));
38
- this.emit('event', data.payload);
37
+ this.emit("event", data.payload);
39
38
  }
40
- else if (data.type === 'interactive') {
39
+ else if (data.type === "interactive") {
41
40
  this.#ws?.send(JSON.stringify({ envelope_id: data.envelope_id }));
42
41
  this.emit(data.payload.type, data.payload);
43
42
  }
44
- else if (data.type === 'slash_commands') {
43
+ else if (data.type === "slash_commands") {
45
44
  this.#ws?.send(JSON.stringify({ envelope_id: data.envelope_id }));
46
- this.emit('slash_command', data.payload);
45
+ this.emit("slash_command", data.payload);
47
46
  }
48
- else if (data.type === 'hello') {
49
- console.debug('[socket-mode] received server hello, app id', data.connection_info.app_id);
47
+ else if (data.type === "hello") {
48
+ console.debug("[socket-mode] received server hello, app id", data.connection_info.app_id);
50
49
  }
51
50
  else {
52
- console.warn('[socket-mode] unknown message:', data);
51
+ console.warn("[socket-mode] unknown message:", data);
53
52
  }
54
53
  }
55
54
  catch (error) {
56
- console.error('[socket-mode] failed to parse message:', error instanceof Error ? error.message : error);
55
+ console.error("[socket-mode] failed to parse message:", error instanceof Error ? error.message : error);
57
56
  }
58
57
  }
59
58
  }
60
59
  #onClose(event) {
61
- console.debug('[socket-mode] websocket closed with code', event.code, event.reason);
60
+ console.debug("[socket-mode] websocket closed with code", event.code, event.reason);
62
61
  this._connect();
63
62
  }
64
63
  #onError(event) {
65
- console.debug('[socket-mode] websocket error', event.message);
64
+ console.debug("[socket-mode] websocket error", event.message);
66
65
  this.#ws?.close();
67
66
  this._connect();
68
67
  }
@@ -0,0 +1,8 @@
1
+ export { Action, type ActionInstance } from "./action.js";
2
+ export { Channel, ChannelRef, type ChannelInstance } from "./channel.js";
3
+ export { Message, MessageRef, type MessageInstance } from "./message.js";
4
+ export { Modal, type ModalInstance } from "./modal.js";
5
+ export { SlashCommand, type SlashCommandInstance } from "./slash.js";
6
+ export { Submission, type SubmissionInstance } from "./submission.js";
7
+ export { User, UserRef, type UserInstance } from "./user.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,cAAc,EAAE,MAAM,UAAU,CAAA;AACtD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,WAAW,CAAA;AACrE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,WAAW,CAAA;AACrE,OAAO,EAAE,KAAK,EAAE,KAAK,aAAa,EAAE,MAAM,SAAS,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,KAAK,oBAAoB,EAAE,MAAM,SAAS,CAAA;AACjE,OAAO,EAAE,UAAU,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAClE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,QAAQ,CAAA"}
@@ -0,0 +1,7 @@
1
+ export { Action } from "./action.js";
2
+ export { Channel, ChannelRef } from "./channel.js";
3
+ export { Message, MessageRef } from "./message.js";
4
+ export { Modal } from "./modal.js";
5
+ export { SlashCommand } from "./slash.js";
6
+ export { Submission } from "./submission.js";
7
+ export { User, UserRef } from "./user.js";
@@ -0,0 +1,11 @@
1
+ type EventListener<EventMap extends Record<string, unknown[]>, Event extends keyof EventMap> = (...args: EventMap[Event]) => unknown;
2
+ export declare class AsyncEventEmitter<EventMap extends Record<string, unknown[]> = Record<string, unknown[]>> {
3
+ #private;
4
+ constructor();
5
+ on<Event extends keyof EventMap & string>(event: Event, listener: EventListener<EventMap, Event>): void;
6
+ once<Event extends keyof EventMap & string>(event: Event, listener: EventListener<EventMap, Event>): void;
7
+ off<Event extends keyof EventMap & string>(event: Event, listener: EventListener<EventMap, Event>): void;
8
+ emit<Event extends keyof EventMap & string>(event: Event, ...args: EventMap[Event]): Promise<void>;
9
+ }
10
+ export {};
11
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/utils/events.ts"],"names":[],"mappings":"AAAA,KAAK,aAAa,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,SAAS,MAAM,QAAQ,IAAI,CAC9F,GAAG,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,KACpB,OAAO,CAAA;AAEZ,qBAAa,iBAAiB,CAC7B,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;;;IAMtE,EAAE,CAAC,KAAK,SAAS,MAAM,QAAQ,GAAG,MAAM,EACvC,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC;IAOzC,IAAI,CAAC,KAAK,SAAS,MAAM,QAAQ,GAAG,MAAM,EACzC,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC;IASzC,GAAG,CAAC,KAAK,SAAS,MAAM,QAAQ,GAAG,MAAM,EACxC,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC;IAOnC,IAAI,CAAC,KAAK,SAAS,MAAM,QAAQ,GAAG,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC;CAIxF"}
@@ -0,0 +1,29 @@
1
+ export class AsyncEventEmitter {
2
+ #listeners = {};
3
+ constructor() { }
4
+ on(event, listener) {
5
+ if (!this.#listeners[event])
6
+ this.#listeners[event] = [];
7
+ if (this.#listeners[event].includes(listener))
8
+ return;
9
+ this.#listeners[event].push(listener);
10
+ }
11
+ once(event, listener) {
12
+ const callback = (...args) => {
13
+ this.off(event, callback);
14
+ return listener(...args);
15
+ };
16
+ this.on(event, callback);
17
+ }
18
+ off(event, listener) {
19
+ if (!this.#listeners[event])
20
+ this.#listeners[event] = [];
21
+ const index = this.#listeners[event].indexOf(listener);
22
+ if (index)
23
+ this.#listeners[event].splice(index, 1);
24
+ }
25
+ async emit(event, ...args) {
26
+ const listeners = this.#listeners[event] || [];
27
+ await Promise.all(listeners.map((listener) => listener(...args)));
28
+ }
29
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "slack.ts",
3
- "version": "0.0.13",
3
+ "version": "0.0.14",
4
4
  "description": "A fully-typed, opinionated Slack API library",
5
5
  "author": "@jollyroger182",
6
6
  "license": "MIT",