@phxgg/kick.js 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. package/dist/BaseResponse.d.ts +10 -0
  2. package/dist/BaseResponse.d.ts.map +1 -0
  3. package/dist/BaseResponse.js +2 -0
  4. package/dist/BaseResponse.js.map +1 -0
  5. package/dist/Errors.d.ts +25 -0
  6. package/dist/Errors.d.ts.map +1 -0
  7. package/dist/Errors.js +49 -0
  8. package/dist/Errors.js.map +1 -0
  9. package/dist/EventManager.d.ts +15 -0
  10. package/dist/EventManager.d.ts.map +1 -0
  11. package/dist/EventManager.js +35 -0
  12. package/dist/EventManager.js.map +1 -0
  13. package/dist/KickClient.d.ts +46 -0
  14. package/dist/KickClient.d.ts.map +1 -0
  15. package/dist/KickClient.js +88 -0
  16. package/dist/KickClient.js.map +1 -0
  17. package/dist/OAuth.d.ts +77 -0
  18. package/dist/OAuth.d.ts.map +1 -0
  19. package/dist/OAuth.js +162 -0
  20. package/dist/OAuth.js.map +1 -0
  21. package/dist/Scope.d.ts +14 -0
  22. package/dist/Scope.d.ts.map +1 -0
  23. package/dist/Scope.js +15 -0
  24. package/dist/Scope.js.map +1 -0
  25. package/dist/Serializable.d.ts +15 -0
  26. package/dist/Serializable.d.ts.map +1 -0
  27. package/dist/Serializable.js +111 -0
  28. package/dist/Serializable.js.map +1 -0
  29. package/dist/Version.d.ts +5 -0
  30. package/dist/Version.d.ts.map +1 -0
  31. package/dist/Version.js +6 -0
  32. package/dist/Version.js.map +1 -0
  33. package/dist/index.d.ts +49 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +41 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/resources/Category.d.ts +20 -0
  38. package/dist/resources/Category.d.ts.map +1 -0
  39. package/dist/resources/Category.js +26 -0
  40. package/dist/resources/Category.js.map +1 -0
  41. package/dist/resources/Channel.d.ts +48 -0
  42. package/dist/resources/Channel.d.ts.map +1 -0
  43. package/dist/resources/Channel.js +51 -0
  44. package/dist/resources/Channel.js.map +1 -0
  45. package/dist/resources/ChannelReward.d.ts +28 -0
  46. package/dist/resources/ChannelReward.d.ts.map +1 -0
  47. package/dist/resources/ChannelReward.js +38 -0
  48. package/dist/resources/ChannelReward.js.map +1 -0
  49. package/dist/resources/ChannelRewardRedemption.d.ts +59 -0
  50. package/dist/resources/ChannelRewardRedemption.d.ts.map +1 -0
  51. package/dist/resources/ChannelRewardRedemption.js +38 -0
  52. package/dist/resources/ChannelRewardRedemption.js.map +1 -0
  53. package/dist/resources/EventSubscription.d.ts +26 -0
  54. package/dist/resources/EventSubscription.d.ts.map +1 -0
  55. package/dist/resources/EventSubscription.js +35 -0
  56. package/dist/resources/EventSubscription.js.map +1 -0
  57. package/dist/resources/Leaderboard.d.ts +22 -0
  58. package/dist/resources/Leaderboard.d.ts.map +1 -0
  59. package/dist/resources/Leaderboard.js +20 -0
  60. package/dist/resources/Leaderboard.js.map +1 -0
  61. package/dist/resources/Livestream.d.ts +38 -0
  62. package/dist/resources/Livestream.d.ts.map +1 -0
  63. package/dist/resources/Livestream.js +48 -0
  64. package/dist/resources/Livestream.js.map +1 -0
  65. package/dist/resources/Message.d.ts +14 -0
  66. package/dist/resources/Message.d.ts.map +1 -0
  67. package/dist/resources/Message.js +17 -0
  68. package/dist/resources/Message.js.map +1 -0
  69. package/dist/resources/User.d.ts +18 -0
  70. package/dist/resources/User.d.ts.map +1 -0
  71. package/dist/resources/User.js +23 -0
  72. package/dist/resources/User.js.map +1 -0
  73. package/dist/services/CategoriesService.d.ts +39 -0
  74. package/dist/services/CategoriesService.d.ts.map +1 -0
  75. package/dist/services/CategoriesService.js +73 -0
  76. package/dist/services/CategoriesService.js.map +1 -0
  77. package/dist/services/CategoriesServiceV2.d.ts +39 -0
  78. package/dist/services/CategoriesServiceV2.d.ts.map +1 -0
  79. package/dist/services/CategoriesServiceV2.js +89 -0
  80. package/dist/services/CategoriesServiceV2.js.map +1 -0
  81. package/dist/services/ChannelRewardsService.d.ts +128 -0
  82. package/dist/services/ChannelRewardsService.d.ts.map +1 -0
  83. package/dist/services/ChannelRewardsService.js +296 -0
  84. package/dist/services/ChannelRewardsService.js.map +1 -0
  85. package/dist/services/ChannelsService.d.ts +64 -0
  86. package/dist/services/ChannelsService.d.ts.map +1 -0
  87. package/dist/services/ChannelsService.js +126 -0
  88. package/dist/services/ChannelsService.js.map +1 -0
  89. package/dist/services/ChatService.d.ts +49 -0
  90. package/dist/services/ChatService.d.ts.map +1 -0
  91. package/dist/services/ChatService.js +90 -0
  92. package/dist/services/ChatService.js.map +1 -0
  93. package/dist/services/EventsService.d.ts +96 -0
  94. package/dist/services/EventsService.d.ts.map +1 -0
  95. package/dist/services/EventsService.js +145 -0
  96. package/dist/services/EventsService.js.map +1 -0
  97. package/dist/services/KICKsService.d.ts +26 -0
  98. package/dist/services/KICKsService.d.ts.map +1 -0
  99. package/dist/services/KICKsService.js +49 -0
  100. package/dist/services/KICKsService.js.map +1 -0
  101. package/dist/services/LivestreamsService.d.ts +39 -0
  102. package/dist/services/LivestreamsService.d.ts.map +1 -0
  103. package/dist/services/LivestreamsService.js +92 -0
  104. package/dist/services/LivestreamsService.js.map +1 -0
  105. package/dist/services/ModerationService.d.ts +65 -0
  106. package/dist/services/ModerationService.d.ts.map +1 -0
  107. package/dist/services/ModerationService.js +132 -0
  108. package/dist/services/ModerationService.js.map +1 -0
  109. package/dist/services/PublicKeyService.d.ts +22 -0
  110. package/dist/services/PublicKeyService.d.ts.map +1 -0
  111. package/dist/services/PublicKeyService.js +58 -0
  112. package/dist/services/PublicKeyService.js.map +1 -0
  113. package/dist/services/UsersService.d.ts +23 -0
  114. package/dist/services/UsersService.d.ts.map +1 -0
  115. package/dist/services/UsersService.js +44 -0
  116. package/dist/services/UsersService.js.map +1 -0
  117. package/dist/utils.d.ts +21 -0
  118. package/dist/utils.d.ts.map +1 -0
  119. package/dist/utils.js +66 -0
  120. package/dist/utils.js.map +1 -0
  121. package/dist/webhooks/WebhookEvents.d.ts +27 -0
  122. package/dist/webhooks/WebhookEvents.d.ts.map +1 -0
  123. package/dist/webhooks/WebhookEvents.js +14 -0
  124. package/dist/webhooks/WebhookEvents.js.map +1 -0
  125. package/dist/webhooks/dispatch.d.ts +10 -0
  126. package/dist/webhooks/dispatch.d.ts.map +1 -0
  127. package/dist/webhooks/dispatch.js +16 -0
  128. package/dist/webhooks/dispatch.js.map +1 -0
  129. package/dist/webhooks/v1/Properties.d.ts +50 -0
  130. package/dist/webhooks/v1/Properties.d.ts.map +1 -0
  131. package/dist/webhooks/v1/Properties.js +2 -0
  132. package/dist/webhooks/v1/Properties.js.map +1 -0
  133. package/dist/webhooks/v1/payloads/ChannelFollowed.d.ts +6 -0
  134. package/dist/webhooks/v1/payloads/ChannelFollowed.d.ts.map +1 -0
  135. package/dist/webhooks/v1/payloads/ChannelFollowed.js +2 -0
  136. package/dist/webhooks/v1/payloads/ChannelFollowed.js.map +1 -0
  137. package/dist/webhooks/v1/payloads/ChannelRewardRedemptionUpdated.d.ts +17 -0
  138. package/dist/webhooks/v1/payloads/ChannelRewardRedemptionUpdated.d.ts.map +1 -0
  139. package/dist/webhooks/v1/payloads/ChannelRewardRedemptionUpdated.js +2 -0
  140. package/dist/webhooks/v1/payloads/ChannelRewardRedemptionUpdated.js.map +1 -0
  141. package/dist/webhooks/v1/payloads/ChannelSubscriptionGifts.d.ts +9 -0
  142. package/dist/webhooks/v1/payloads/ChannelSubscriptionGifts.d.ts.map +1 -0
  143. package/dist/webhooks/v1/payloads/ChannelSubscriptionGifts.js +2 -0
  144. package/dist/webhooks/v1/payloads/ChannelSubscriptionGifts.js.map +1 -0
  145. package/dist/webhooks/v1/payloads/ChannelSubscriptionNew.d.ts +9 -0
  146. package/dist/webhooks/v1/payloads/ChannelSubscriptionNew.d.ts.map +1 -0
  147. package/dist/webhooks/v1/payloads/ChannelSubscriptionNew.js +2 -0
  148. package/dist/webhooks/v1/payloads/ChannelSubscriptionNew.js.map +1 -0
  149. package/dist/webhooks/v1/payloads/ChannelSubscriptionRenewal.d.ts +9 -0
  150. package/dist/webhooks/v1/payloads/ChannelSubscriptionRenewal.d.ts.map +1 -0
  151. package/dist/webhooks/v1/payloads/ChannelSubscriptionRenewal.js +2 -0
  152. package/dist/webhooks/v1/payloads/ChannelSubscriptionRenewal.js.map +1 -0
  153. package/dist/webhooks/v1/payloads/ChatMessageSent.d.ts +15 -0
  154. package/dist/webhooks/v1/payloads/ChatMessageSent.d.ts.map +1 -0
  155. package/dist/webhooks/v1/payloads/ChatMessageSent.js +2 -0
  156. package/dist/webhooks/v1/payloads/ChatMessageSent.js.map +1 -0
  157. package/dist/webhooks/v1/payloads/KicksGifted.d.ts +8 -0
  158. package/dist/webhooks/v1/payloads/KicksGifted.d.ts.map +1 -0
  159. package/dist/webhooks/v1/payloads/KicksGifted.js +2 -0
  160. package/dist/webhooks/v1/payloads/KicksGifted.js.map +1 -0
  161. package/dist/webhooks/v1/payloads/LivestreamMetadataUpdated.d.ts +6 -0
  162. package/dist/webhooks/v1/payloads/LivestreamMetadataUpdated.d.ts.map +1 -0
  163. package/dist/webhooks/v1/payloads/LivestreamMetadataUpdated.js +2 -0
  164. package/dist/webhooks/v1/payloads/LivestreamMetadataUpdated.js.map +1 -0
  165. package/dist/webhooks/v1/payloads/LivestreamStatusUpdated.d.ts +9 -0
  166. package/dist/webhooks/v1/payloads/LivestreamStatusUpdated.d.ts.map +1 -0
  167. package/dist/webhooks/v1/payloads/LivestreamStatusUpdated.js +2 -0
  168. package/dist/webhooks/v1/payloads/LivestreamStatusUpdated.js.map +1 -0
  169. package/dist/webhooks/v1/payloads/ModerationBanned.d.ts +12 -0
  170. package/dist/webhooks/v1/payloads/ModerationBanned.d.ts.map +1 -0
  171. package/dist/webhooks/v1/payloads/ModerationBanned.js +2 -0
  172. package/dist/webhooks/v1/payloads/ModerationBanned.js.map +1 -0
  173. package/dist/webhooks/v1/payloads/index.d.ts +12 -0
  174. package/dist/webhooks/v1/payloads/index.d.ts.map +1 -0
  175. package/dist/webhooks/v1/payloads/index.js +2 -0
  176. package/dist/webhooks/v1/payloads/index.js.map +1 -0
  177. package/dist/webhooks/verify.d.ts +21 -0
  178. package/dist/webhooks/verify.d.ts.map +1 -0
  179. package/dist/webhooks/verify.js +15 -0
  180. package/dist/webhooks/verify.js.map +1 -0
  181. package/package.json +36 -0
@@ -0,0 +1,10 @@
1
+ export type BaseResponse<T> = {
2
+ data: T;
3
+ message: string;
4
+ };
5
+ export type BaseResponseWithPagination<T> = BaseResponse<T> & {
6
+ pagination: {
7
+ next_cursor: string;
8
+ };
9
+ };
10
+ //# sourceMappingURL=BaseResponse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseResponse.d.ts","sourceRoot":"","sources":["../src/BaseResponse.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;IAC5B,IAAI,EAAE,CAAC,CAAC;IACR,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,0BAA0B,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG;IAC5D,UAAU,EAAE;QACV,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=BaseResponse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseResponse.js","sourceRoot":"","sources":["../src/BaseResponse.ts"],"names":[],"mappings":""}
@@ -0,0 +1,25 @@
1
+ export declare class UnauthorizedError extends Error {
2
+ constructor(message?: string);
3
+ }
4
+ export declare class InternalServerError extends Error {
5
+ constructor(message?: string);
6
+ }
7
+ export declare class ForbiddenError extends Error {
8
+ constructor(message?: string);
9
+ }
10
+ export declare class NotFoundError extends Error {
11
+ constructor(message?: string);
12
+ }
13
+ export declare class BadRequestError extends Error {
14
+ constructor(message?: string);
15
+ }
16
+ export declare class RateLimitError extends Error {
17
+ constructor(message?: string);
18
+ }
19
+ export declare class NoTokenSetError extends Error {
20
+ constructor(message?: string);
21
+ }
22
+ export declare class MissingScopeError extends Error {
23
+ constructor(message?: string);
24
+ }
25
+ //# sourceMappingURL=Errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Errors.d.ts","sourceRoot":"","sources":["../src/Errors.ts"],"names":[],"mappings":"AAAA,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,OAAO,CAAC,EAAE,MAAM;CAI7B;AAED,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,CAAC,EAAE,MAAM;CAI7B;AAED,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,OAAO,CAAC,EAAE,MAAM;CAI7B;AAED,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,OAAO,CAAC,EAAE,MAAM;CAI7B;AAED,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,CAAC,EAAE,MAAM;CAI7B;AAED,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,OAAO,CAAC,EAAE,MAAM;CAI7B;AAED,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,CAAC,EAAE,MAAM;CAI7B;AAED,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,OAAO,CAAC,EAAE,MAAM;CAI7B"}
package/dist/Errors.js ADDED
@@ -0,0 +1,49 @@
1
+ export class UnauthorizedError extends Error {
2
+ constructor(message) {
3
+ super(message);
4
+ this.name = 'UnauthorizedError';
5
+ }
6
+ }
7
+ export class InternalServerError extends Error {
8
+ constructor(message) {
9
+ super(message);
10
+ this.name = 'InternalServerError';
11
+ }
12
+ }
13
+ export class ForbiddenError extends Error {
14
+ constructor(message) {
15
+ super(message);
16
+ this.name = 'ForbiddenError';
17
+ }
18
+ }
19
+ export class NotFoundError extends Error {
20
+ constructor(message) {
21
+ super(message);
22
+ this.name = 'NotFoundError';
23
+ }
24
+ }
25
+ export class BadRequestError extends Error {
26
+ constructor(message) {
27
+ super(message);
28
+ this.name = 'BadRequestError';
29
+ }
30
+ }
31
+ export class RateLimitError extends Error {
32
+ constructor(message) {
33
+ super(message);
34
+ this.name = 'RateLimitError';
35
+ }
36
+ }
37
+ export class NoTokenSetError extends Error {
38
+ constructor(message) {
39
+ super(message);
40
+ this.name = 'NoTokenSetError';
41
+ }
42
+ }
43
+ export class MissingScopeError extends Error {
44
+ constructor(message) {
45
+ super(message);
46
+ this.name = 'MissingScopeError';
47
+ }
48
+ }
49
+ //# sourceMappingURL=Errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Errors.js","sourceRoot":"","sources":["../src/Errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,OAAgB;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,OAAgB;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC,YAAY,OAAgB;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,KAAK;IACtC,YAAY,OAAgB;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxC,YAAY,OAAgB;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC,YAAY,OAAgB;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxC,YAAY,OAAgB;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,OAAgB;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import EventEmitter from 'events';
2
+ import { WebhookEventNames } from './webhooks/WebhookEvents.js';
3
+ declare class EventManager {
4
+ private static instance;
5
+ private clientsByUniqueId;
6
+ private constructor();
7
+ static getInstance(): EventManager;
8
+ register(uniqueId: string, client: EventEmitter): void;
9
+ destroy(uniqueId: string): void;
10
+ destroyAll(): void;
11
+ emit(uniqueId: string, event: WebhookEventNames, payload: any): void;
12
+ }
13
+ export declare const eventManager: EventManager;
14
+ export {};
15
+ //# sourceMappingURL=EventManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventManager.d.ts","sourceRoot":"","sources":["../src/EventManager.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,QAAQ,CAAC;AAElC,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEhE,cAAM,YAAY;IAChB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAe;IACtC,OAAO,CAAC,iBAAiB,CAAwC;IAEjE,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,YAAY;IAOlC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY;IAI/C,OAAO,CAAC,QAAQ,EAAE,MAAM;IAQxB,UAAU;IAOV,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,GAAG;CAM9D;AAED,eAAO,MAAM,YAAY,cAA6B,CAAC"}
@@ -0,0 +1,35 @@
1
+ class EventManager {
2
+ static instance;
3
+ clientsByUniqueId = new Map();
4
+ constructor() { }
5
+ static getInstance() {
6
+ if (!this.instance) {
7
+ this.instance = new EventManager();
8
+ }
9
+ return this.instance;
10
+ }
11
+ register(uniqueId, client) {
12
+ this.clientsByUniqueId.set(uniqueId, client);
13
+ }
14
+ destroy(uniqueId) {
15
+ const client = this.clientsByUniqueId.get(uniqueId);
16
+ if (client) {
17
+ client.removeAllListeners();
18
+ }
19
+ this.clientsByUniqueId.delete(uniqueId);
20
+ }
21
+ destroyAll() {
22
+ for (const [uniqueId, client] of this.clientsByUniqueId) {
23
+ client.removeAllListeners();
24
+ this.clientsByUniqueId.delete(uniqueId);
25
+ }
26
+ }
27
+ emit(uniqueId, event, payload) {
28
+ const client = this.clientsByUniqueId.get(uniqueId);
29
+ if (client) {
30
+ client.emit(event, payload);
31
+ }
32
+ }
33
+ }
34
+ export const eventManager = EventManager.getInstance();
35
+ //# sourceMappingURL=EventManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventManager.js","sourceRoot":"","sources":["../src/EventManager.ts"],"names":[],"mappings":"AAIA,MAAM,YAAY;IACR,MAAM,CAAC,QAAQ,CAAe;IAC9B,iBAAiB,GAA8B,IAAI,GAAG,EAAE,CAAC;IAEjE,gBAAuB,CAAC;IAExB,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;QACrC,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,QAAQ,CAAC,QAAgB,EAAE,MAAoB;QAC7C,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,CAAC,QAAgB;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,kBAAkB,EAAE,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED,UAAU;QACR,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACxD,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAC5B,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,IAAI,CAAC,QAAgB,EAAE,KAAwB,EAAE,OAAY;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { AppToken, OAuth, Token } from './OAuth.js';
2
+ import { Scope } from './Scope.js';
3
+ import { CategoriesService } from './services/CategoriesService.js';
4
+ import { CategoriesServiceV2 } from './services/CategoriesServiceV2.js';
5
+ import { ChannelRewardsService } from './services/ChannelRewardsService.js';
6
+ import { ChannelsService } from './services/ChannelsService.js';
7
+ import { ChatService } from './services/ChatService.js';
8
+ import { EventsService } from './services/EventsService.js';
9
+ import { KICKsService } from './services/KICKsService.js';
10
+ import { LivestreamsService } from './services/LivestreamsService.js';
11
+ import { ModerationService } from './services/ModerationService.js';
12
+ import { UsersService } from './services/UsersService.js';
13
+ import { WebhookEventNames, WebhookEventPayloadMap } from './webhooks/WebhookEvents.js';
14
+ export declare const KICK_BASE_URL = "https://api.kick.com/public";
15
+ export interface KickClientOptions {
16
+ clientId: string;
17
+ clientSecret: string;
18
+ /** OAuth redirect URI. Required only for `oauth.generateAuthorizeURL()` and `oauth.exchangeToken()`. */
19
+ redirectUri?: string;
20
+ }
21
+ export declare class KickClient {
22
+ private me;
23
+ private eventEmitter;
24
+ token: Token | null;
25
+ appToken: AppToken | null;
26
+ oauth: OAuth;
27
+ categories: CategoriesService;
28
+ categoriesV2: CategoriesServiceV2;
29
+ channels: ChannelsService;
30
+ channelRewards: ChannelRewardsService;
31
+ users: UsersService;
32
+ chat: ChatService;
33
+ moderation: ModerationService;
34
+ livestreams: LivestreamsService;
35
+ events: EventsService;
36
+ kicks: KICKsService;
37
+ constructor(options: KickClientOptions);
38
+ setToken(token: Token): void;
39
+ destroy(): void;
40
+ on<E extends WebhookEventNames>(event: E, listener: (payload: WebhookEventPayloadMap[E]) => void): void;
41
+ off<E extends WebhookEventNames>(event: E, listener: (payload: WebhookEventPayloadMap[E]) => void): void;
42
+ once<E extends WebhookEventNames>(event: E, listener: (payload: WebhookEventPayloadMap[E]) => void): void;
43
+ removeAllListeners(): void;
44
+ requiresScope(scope: Scope): void;
45
+ }
46
+ //# sourceMappingURL=KickClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KickClient.d.ts","sourceRoot":"","sources":["../src/KickClient.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEpD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAExF,eAAO,MAAM,aAAa,gCAAgC,CAAC;AAE3D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,wGAAwG;IACxG,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,EAAE,CAAqB;IAC/B,OAAO,CAAC,YAAY,CAAsB;IAEnC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAQ;IAC3B,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAQ;IACjC,KAAK,EAAE,KAAK,CAAC;IAGb,UAAU,EAAE,iBAAiB,CAAC;IAC9B,YAAY,EAAE,mBAAmB,CAAC;IAClC,QAAQ,EAAE,eAAe,CAAC;IAC1B,cAAc,EAAE,qBAAqB,CAAC;IACtC,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,WAAW,EAAE,kBAAkB,CAAC;IAChC,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE,YAAY,CAAC;gBAEf,OAAO,EAAE,iBAAiB;IActC,QAAQ,CAAC,KAAK,EAAE,KAAK;IAgBrB,OAAO;IAMP,EAAE,CAAC,CAAC,SAAS,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC,KAAK,IAAI;IAIhG,GAAG,CAAC,CAAC,SAAS,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC,KAAK,IAAI;IAIjG,IAAI,CAAC,CAAC,SAAS,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC,KAAK,IAAI;IAIlG,kBAAkB;IAIlB,aAAa,CAAC,KAAK,EAAE,KAAK;CAS3B"}
@@ -0,0 +1,88 @@
1
+ import EventEmitter from 'events';
2
+ import { MissingScopeError, NoTokenSetError } from './Errors.js';
3
+ import { eventManager } from './EventManager.js';
4
+ import { OAuth } from './OAuth.js';
5
+ import { CategoriesService } from './services/CategoriesService.js';
6
+ import { CategoriesServiceV2 } from './services/CategoriesServiceV2.js';
7
+ import { ChannelRewardsService } from './services/ChannelRewardsService.js';
8
+ import { ChannelsService } from './services/ChannelsService.js';
9
+ import { ChatService } from './services/ChatService.js';
10
+ import { EventsService } from './services/EventsService.js';
11
+ import { KICKsService } from './services/KICKsService.js';
12
+ import { LivestreamsService } from './services/LivestreamsService.js';
13
+ import { ModerationService } from './services/ModerationService.js';
14
+ import { UsersService } from './services/UsersService.js';
15
+ export const KICK_BASE_URL = 'https://api.kick.com/public';
16
+ export class KickClient {
17
+ me = null;
18
+ eventEmitter = new EventEmitter();
19
+ token = null;
20
+ appToken = null;
21
+ oauth;
22
+ // Services
23
+ categories;
24
+ categoriesV2;
25
+ channels;
26
+ channelRewards;
27
+ users;
28
+ chat;
29
+ moderation;
30
+ livestreams;
31
+ events;
32
+ kicks;
33
+ constructor(options) {
34
+ this.oauth = new OAuth(this, options.clientId, options.clientSecret, options.redirectUri);
35
+ this.categories = new CategoriesService(this);
36
+ this.categoriesV2 = new CategoriesServiceV2(this);
37
+ this.channels = new ChannelsService(this);
38
+ this.channelRewards = new ChannelRewardsService(this);
39
+ this.users = new UsersService(this);
40
+ this.chat = new ChatService(this);
41
+ this.moderation = new ModerationService(this);
42
+ this.livestreams = new LivestreamsService(this);
43
+ this.events = new EventsService(this);
44
+ this.kicks = new KICKsService(this);
45
+ }
46
+ setToken(token) {
47
+ this.token = token;
48
+ // register event emitter in the global event manager
49
+ if (!this.me) {
50
+ this.users
51
+ .me()
52
+ .then((me) => {
53
+ this.me = me;
54
+ eventManager.register(this.me.userId.toString(), this.eventEmitter);
55
+ })
56
+ .catch((err) => {
57
+ console.error('Failed to fetch authenticated user for KickClient:', err);
58
+ });
59
+ }
60
+ }
61
+ destroy() {
62
+ if (this.me) {
63
+ eventManager.destroy(this.me.userId.toString());
64
+ }
65
+ }
66
+ on(event, listener) {
67
+ this.eventEmitter.on(event, listener);
68
+ }
69
+ off(event, listener) {
70
+ this.eventEmitter.off(event, listener);
71
+ }
72
+ once(event, listener) {
73
+ this.eventEmitter.once(event, listener);
74
+ }
75
+ removeAllListeners() {
76
+ this.eventEmitter.removeAllListeners();
77
+ }
78
+ requiresScope(scope) {
79
+ if (!this.token) {
80
+ throw new NoTokenSetError('No user token set on KickClient.');
81
+ }
82
+ const tokenScopes = this.token.scope ? this.token.scope.split(' ') : [];
83
+ if (!tokenScopes.includes(scope)) {
84
+ throw new MissingScopeError(`Missing required scope: ${scope}`);
85
+ }
86
+ }
87
+ }
88
+ //# sourceMappingURL=KickClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KickClient.js","sourceRoot":"","sources":["../src/KickClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ import { BaseResponse } from './BaseResponse.js';
2
+ import { KickClient } from './KickClient.js';
3
+ export type AppToken = {
4
+ access_token: string;
5
+ token_type: string;
6
+ expires_in: number;
7
+ };
8
+ export type Token = {
9
+ access_token: string;
10
+ token_type: string;
11
+ refresh_token: string;
12
+ expires_in: number;
13
+ scope: string;
14
+ };
15
+ export declare enum TokenHintType {
16
+ ACCESS_TOKEN = "access_token",
17
+ REFRESH_TOKEN = "refresh_token"
18
+ }
19
+ export type TokenIntrospect = {
20
+ active: boolean;
21
+ client_id: string;
22
+ exp: number;
23
+ scope: string;
24
+ token_type: string;
25
+ };
26
+ export type TokenIntrospectResponse = BaseResponse<TokenIntrospect>;
27
+ export declare class OAuth {
28
+ private readonly OAUTH_URL;
29
+ protected readonly client: KickClient;
30
+ private clientId;
31
+ private clientSecret;
32
+ private redirectUri?;
33
+ constructor(client: KickClient, clientId: string, clientSecret: string, redirectUri?: string);
34
+ private requireRedirectUri;
35
+ /**
36
+ * Generate the URL where users can authorize your application.
37
+ * @returns An object containing the authorization URL and the code verifier.
38
+ */
39
+ generateAuthorizeURL(): Promise<{
40
+ url: string;
41
+ codeVerifier: string;
42
+ }>;
43
+ /**
44
+ * Exchange an authorization code for an access token.
45
+ * @param code The authorization code received from the authorization server.
46
+ * @param codeVerifier The code verifier used to generate the code challenge.
47
+ * @returns An object containing the access token and related information.
48
+ */
49
+ exchangeToken(code: string, codeVerifier: string): Promise<Token>;
50
+ /**
51
+ * Generate an application token using client credentials.
52
+ * @returns An object containing the application token and related information.
53
+ */
54
+ generateAppToken(): Promise<AppToken>;
55
+ /**
56
+ * Refresh an access token using a refresh token.
57
+ * @param refreshToken The refresh token.
58
+ * @returns An object containing the new access token and related information.
59
+ */
60
+ refreshToken(refreshToken: string): Promise<Token>;
61
+ /**
62
+ * Revoke an access or refresh token.
63
+ * @param token The token to revoke.
64
+ * @param tokenHintType The type of token being revoked (access or refresh, defaults to access token).
65
+ */
66
+ revokeToken(token: string, tokenHintType?: TokenHintType): Promise<void>;
67
+ /**
68
+ * Get information about the token that is passed in via the Authorization header.
69
+ * This function is implements part of the on the OAuth 2.0 spec for token introspection.
70
+ * Find the full spec here: https://datatracker.ietf.org/doc/html/rfc7662
71
+ * When `active=false` there is no additional information added in the response.
72
+ *
73
+ * @returns Token information.
74
+ */
75
+ introspect(): Promise<TokenIntrospect>;
76
+ }
77
+ //# sourceMappingURL=OAuth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OAuth.d.ts","sourceRoot":"","sources":["../src/OAuth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAI7C,MAAM,MAAM,QAAQ,GAAG;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,oBAAY,aAAa;IACvB,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;CAChC;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;AAEpE,qBAAa,KAAK;IAChB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiC;IAC3D,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAEtC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,WAAW,CAAC,CAAS;gBAEjB,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;IAO5F,OAAO,CAAC,kBAAkB;IAO1B;;;OAGG;IACG,oBAAoB,IAAI,OAAO,CAAC;QACpC,GAAG,EAAE,MAAM,CAAC;QACZ,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IAkBF;;;;;OAKG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAyBvE;;;OAGG;IACG,gBAAgB,IAAI,OAAO,CAAC,QAAQ,CAAC;IAsB3C;;;;OAIG;IACG,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAuBxD;;;;OAIG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,GAAE,aAA0C,GAAG,OAAO,CAAC,IAAI,CAAC;IAc1G;;;;;;;OAOG;IACG,UAAU,IAAI,OAAO,CAAC,eAAe,CAAC;CAkB7C"}
package/dist/OAuth.js ADDED
@@ -0,0 +1,162 @@
1
+ import { Scope } from './Scope.js';
2
+ import { generateCodeChallenge, generateCodeVerifier, handleError, parseJSON } from './utils.js';
3
+ export var TokenHintType;
4
+ (function (TokenHintType) {
5
+ TokenHintType["ACCESS_TOKEN"] = "access_token";
6
+ TokenHintType["REFRESH_TOKEN"] = "refresh_token";
7
+ })(TokenHintType || (TokenHintType = {}));
8
+ export class OAuth {
9
+ OAUTH_URL = 'https://id.kick.com';
10
+ client;
11
+ clientId;
12
+ clientSecret;
13
+ redirectUri;
14
+ constructor(client, clientId, clientSecret, redirectUri) {
15
+ this.client = client;
16
+ this.clientId = clientId;
17
+ this.clientSecret = clientSecret;
18
+ this.redirectUri = redirectUri;
19
+ }
20
+ requireRedirectUri() {
21
+ if (!this.redirectUri) {
22
+ throw new Error('redirectUri is required for this OAuth operation. Pass it to the KickClient constructor.');
23
+ }
24
+ return this.redirectUri;
25
+ }
26
+ /**
27
+ * Generate the URL where users can authorize your application.
28
+ * @returns An object containing the authorization URL and the code verifier.
29
+ */
30
+ async generateAuthorizeURL() {
31
+ const authorizeUrl = new URL(`${this.OAUTH_URL}/oauth/authorize`);
32
+ const scopes = Object.values(Scope);
33
+ // Generate a code challenge from the verifier (async)
34
+ const codeVerifier = generateCodeVerifier();
35
+ const codeChallenge = generateCodeChallenge(codeVerifier);
36
+ authorizeUrl.searchParams.append('client_id', this.clientId);
37
+ authorizeUrl.searchParams.append('response_type', 'code');
38
+ authorizeUrl.searchParams.append('redirect_uri', this.requireRedirectUri());
39
+ authorizeUrl.searchParams.append('state', 'your_state');
40
+ authorizeUrl.searchParams.append('scope', scopes.join(' '));
41
+ authorizeUrl.searchParams.append('code_challenge', codeChallenge);
42
+ authorizeUrl.searchParams.append('code_challenge_method', 'S256');
43
+ return { url: authorizeUrl.toString(), codeVerifier };
44
+ }
45
+ /**
46
+ * Exchange an authorization code for an access token.
47
+ * @param code The authorization code received from the authorization server.
48
+ * @param codeVerifier The code verifier used to generate the code challenge.
49
+ * @returns An object containing the access token and related information.
50
+ */
51
+ async exchangeToken(code, codeVerifier) {
52
+ const tokenUrl = `${this.OAUTH_URL}/oauth/token`;
53
+ const response = await fetch(tokenUrl, {
54
+ method: 'POST',
55
+ headers: {
56
+ 'Content-Type': 'application/x-www-form-urlencoded',
57
+ },
58
+ body: new URLSearchParams({
59
+ client_id: this.clientId,
60
+ client_secret: this.clientSecret,
61
+ grant_type: 'authorization_code',
62
+ code,
63
+ redirect_uri: this.requireRedirectUri(),
64
+ code_verifier: codeVerifier,
65
+ }),
66
+ });
67
+ if (!response.ok) {
68
+ handleError(response);
69
+ }
70
+ const data = (await response.json());
71
+ return data;
72
+ }
73
+ /**
74
+ * Generate an application token using client credentials.
75
+ * @returns An object containing the application token and related information.
76
+ */
77
+ async generateAppToken() {
78
+ const tokenUrl = `${this.OAUTH_URL}/oauth/token`;
79
+ const response = await fetch(tokenUrl, {
80
+ method: 'POST',
81
+ headers: {
82
+ 'Content-Type': 'application/x-www-form-urlencoded',
83
+ },
84
+ body: new URLSearchParams({
85
+ client_id: this.clientId,
86
+ client_secret: this.clientSecret,
87
+ grant_type: 'client_credentials',
88
+ }),
89
+ });
90
+ if (!response.ok) {
91
+ handleError(response);
92
+ }
93
+ const data = await response.json();
94
+ return data;
95
+ }
96
+ /**
97
+ * Refresh an access token using a refresh token.
98
+ * @param refreshToken The refresh token.
99
+ * @returns An object containing the new access token and related information.
100
+ */
101
+ async refreshToken(refreshToken) {
102
+ const tokenUrl = `${this.OAUTH_URL}/oauth/token`;
103
+ const response = await fetch(tokenUrl, {
104
+ method: 'POST',
105
+ headers: {
106
+ 'Content-Type': 'application/x-www-form-urlencoded',
107
+ },
108
+ body: new URLSearchParams({
109
+ refresh_token: refreshToken,
110
+ client_id: this.clientId,
111
+ client_secret: this.clientSecret,
112
+ grant_type: 'refresh_token',
113
+ }),
114
+ });
115
+ if (!response.ok) {
116
+ handleError(response);
117
+ }
118
+ const data = await response.json();
119
+ return data;
120
+ }
121
+ /**
122
+ * Revoke an access or refresh token.
123
+ * @param token The token to revoke.
124
+ * @param tokenHintType The type of token being revoked (access or refresh, defaults to access token).
125
+ */
126
+ async revokeToken(token, tokenHintType = TokenHintType.ACCESS_TOKEN) {
127
+ const tokenUrl = `${this.OAUTH_URL}/oauth/revoke`;
128
+ const response = await fetch(`${tokenUrl}?token=${token}&token_hint_type=${tokenHintType}`, {
129
+ method: 'POST',
130
+ headers: {
131
+ 'Content-Type': 'application/x-www-form-urlencoded',
132
+ },
133
+ });
134
+ if (!response.ok) {
135
+ handleError(response);
136
+ }
137
+ }
138
+ /**
139
+ * Get information about the token that is passed in via the Authorization header.
140
+ * This function is implements part of the on the OAuth 2.0 spec for token introspection.
141
+ * Find the full spec here: https://datatracker.ietf.org/doc/html/rfc7662
142
+ * When `active=false` there is no additional information added in the response.
143
+ *
144
+ * @returns Token information.
145
+ */
146
+ async introspect() {
147
+ const endpoint = new URL(`${this.OAUTH_URL}/oauth/token/introspect`);
148
+ const response = await fetch(endpoint, {
149
+ method: 'POST',
150
+ headers: {
151
+ Authorization: `Bearer ${this.client.token?.access_token}`,
152
+ },
153
+ });
154
+ if (!response.ok) {
155
+ handleError(response);
156
+ }
157
+ const json = await parseJSON(response);
158
+ const token = json.data;
159
+ return token;
160
+ }
161
+ }
162
+ //# sourceMappingURL=OAuth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OAuth.js","sourceRoot":"","sources":["../src/OAuth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export declare enum Scope {
2
+ USER_READ = "user:read",
3
+ CHANNEL_READ = "channel:read",
4
+ CHANNEL_WRITE = "channel:write",
5
+ CHANNEL_REWARDS_READ = "channel:rewards:read",
6
+ CHANNEL_REWARDS_WRITE = "channel:rewards:write",
7
+ CHAT_WRITE = "chat:write",
8
+ STREAMKEY_READ = "streamkey:read",
9
+ EVENTS_SUBSCRIBE = "events:subscribe",
10
+ MODERATION_BAN = "moderation:ban",
11
+ MODERATION_CHAT_MESSAGE_MANAGE = "moderation:chat_message:manage",
12
+ KICKS_READ = "kicks:read"
13
+ }
14
+ //# sourceMappingURL=Scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Scope.d.ts","sourceRoot":"","sources":["../src/Scope.ts"],"names":[],"mappings":"AAAA,oBAAY,KAAK;IACf,SAAS,cAAc;IACvB,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;IAC/B,oBAAoB,yBAAyB;IAC7C,qBAAqB,0BAA0B;IAC/C,UAAU,eAAe;IACzB,cAAc,mBAAmB;IACjC,gBAAgB,qBAAqB;IACrC,cAAc,mBAAmB;IACjC,8BAA8B,mCAAmC;IACjE,UAAU,eAAe;CAC1B"}
package/dist/Scope.js ADDED
@@ -0,0 +1,15 @@
1
+ export var Scope;
2
+ (function (Scope) {
3
+ Scope["USER_READ"] = "user:read";
4
+ Scope["CHANNEL_READ"] = "channel:read";
5
+ Scope["CHANNEL_WRITE"] = "channel:write";
6
+ Scope["CHANNEL_REWARDS_READ"] = "channel:rewards:read";
7
+ Scope["CHANNEL_REWARDS_WRITE"] = "channel:rewards:write";
8
+ Scope["CHAT_WRITE"] = "chat:write";
9
+ Scope["STREAMKEY_READ"] = "streamkey:read";
10
+ Scope["EVENTS_SUBSCRIBE"] = "events:subscribe";
11
+ Scope["MODERATION_BAN"] = "moderation:ban";
12
+ Scope["MODERATION_CHAT_MESSAGE_MANAGE"] = "moderation:chat_message:manage";
13
+ Scope["KICKS_READ"] = "kicks:read";
14
+ })(Scope || (Scope = {}));
15
+ //# sourceMappingURL=Scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Scope.js","sourceRoot":"","sources":["../src/Scope.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,KAYX;AAZD,WAAY,KAAK;IACf,gCAAuB,CAAA;IACvB,sCAA6B,CAAA;IAC7B,wCAA+B,CAAA;IAC/B,sDAA6C,CAAA;IAC7C,wDAA+C,CAAA;IAC/C,kCAAyB,CAAA;IACzB,0CAAiC,CAAA;IACjC,8CAAqC,CAAA;IACrC,0CAAiC,CAAA;IACjC,0EAAiE,CAAA;IACjE,kCAAyB,CAAA;AAC3B,CAAC,EAZW,KAAK,KAAL,KAAK,QAYhB"}
@@ -0,0 +1,15 @@
1
+ export interface SerializeOptions {
2
+ include?: (key: string, value: unknown, owner: any) => boolean;
3
+ transform?: (key: string, value: unknown, owner: any) => unknown;
4
+ circularValue?: (value: unknown) => unknown;
5
+ skipNull?: boolean;
6
+ skipUndefined?: boolean;
7
+ }
8
+ export declare abstract class Serializable {
9
+ protected static serializeDefaults?: SerializeOptions;
10
+ toJSON(options?: SerializeOptions): any;
11
+ }
12
+ declare function serializeInstance<T extends object>(instance: T, opts?: SerializeOptions): any;
13
+ export declare const serialize: typeof serializeInstance;
14
+ export {};
15
+ //# sourceMappingURL=Serializable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Serializable.d.ts","sourceRoot":"","sources":["../src/Serializable.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC;IAC/D,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC;IACjE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,8BAAsB,YAAY;IAEhC,SAAS,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,gBAAgB,CAAC;IAEtD,MAAM,CAAC,OAAO,CAAC,EAAE,gBAAgB;CAOlC;AAcD,iBAAS,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,GAAE,gBAAqB,GAAG,GAAG,CA8E1F;AAGD,eAAO,MAAM,SAAS,0BAAoB,CAAC"}