@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,128 @@
1
+ import z from 'zod';
2
+ import { BaseResponse, BaseResponseWithPagination } from '../BaseResponse.js';
3
+ import type { KickClient } from '../KickClient.js';
4
+ import { ChannelReward, ChannelRewardDto } from '../resources/ChannelReward.js';
5
+ import { ChannelRewardAcceptRedemptionDto, ChannelRewardRedemption, ChannelRewardRedemptionDto, ChannelRewardRedemptionStatus, ChannelRewardRejectRedemptionDto } from '../resources/ChannelRewardRedemption.js';
6
+ export type FetchChannelRewardsResponse = BaseResponse<ChannelRewardDto[]>;
7
+ export type CreateChannelRewardResponse = BaseResponse<ChannelRewardDto>;
8
+ export type GetChannelRewardRedemptionsResponse = BaseResponseWithPagination<ChannelRewardRedemptionDto[]>;
9
+ export type AcceptRedemptionsResponse = BaseResponse<ChannelRewardAcceptRedemptionDto[]>;
10
+ export type RejectRedemptionsResponse = BaseResponse<ChannelRewardRejectRedemptionDto[]>;
11
+ export declare const createChannelRewardSchema: z.ZodObject<{
12
+ backgroundColor: z.ZodOptional<z.ZodString>;
13
+ cost: z.ZodNumber;
14
+ description: z.ZodOptional<z.ZodString>;
15
+ isEnabled: z.ZodOptional<z.ZodBoolean>;
16
+ isUserInputRequired: z.ZodOptional<z.ZodBoolean>;
17
+ shouldRedemptionsSkipRequestQueue: z.ZodOptional<z.ZodBoolean>;
18
+ title: z.ZodString;
19
+ }, z.z.core.$strip>;
20
+ export type CreateChannelRewardParams = z.infer<typeof createChannelRewardSchema>;
21
+ export declare const updateChannelRewardSchema: z.ZodObject<{
22
+ backgroundColor: z.ZodOptional<z.ZodString>;
23
+ cost: z.ZodOptional<z.ZodNumber>;
24
+ description: z.ZodOptional<z.ZodString>;
25
+ isEnabled: z.ZodOptional<z.ZodBoolean>;
26
+ isPaused: z.ZodOptional<z.ZodBoolean>;
27
+ isUserInputRequired: z.ZodOptional<z.ZodBoolean>;
28
+ shouldRedemptionsSkipRequestQueue: z.ZodOptional<z.ZodBoolean>;
29
+ title: z.ZodOptional<z.ZodString>;
30
+ }, z.z.core.$strip>;
31
+ export type UpdateChannelRewardParams = z.infer<typeof updateChannelRewardSchema>;
32
+ export declare const getChannelRewardRedemptionsSchema: z.ZodObject<{
33
+ rewardId: z.ZodOptional<z.ZodString>;
34
+ status: z.ZodOptional<z.ZodEnum<typeof ChannelRewardRedemptionStatus>>;
35
+ id: z.ZodOptional<z.ZodArray<z.ZodString>>;
36
+ cursor: z.ZodOptional<z.ZodString>;
37
+ }, z.z.core.$strip>;
38
+ export type GetChannelRewardRedemptionsParams = z.infer<typeof getChannelRewardRedemptionsSchema>;
39
+ export declare const acceptRedemptionsSchema: z.ZodObject<{
40
+ ids: z.ZodArray<z.ZodString>;
41
+ }, z.z.core.$strip>;
42
+ export type AcceptRedemptionsParams = z.infer<typeof acceptRedemptionsSchema>;
43
+ export declare const rejectRedemptionsSchema: z.ZodObject<{
44
+ ids: z.ZodArray<z.ZodString>;
45
+ }, z.z.core.$strip>;
46
+ export type RejectRedemptionsParams = z.infer<typeof rejectRedemptionsSchema>;
47
+ export declare class ChannelRewardsService {
48
+ private readonly CHANNEL_REWARDS_URL;
49
+ protected readonly client: KickClient;
50
+ constructor(client: KickClient);
51
+ /**
52
+ * Get channel rewards for a broadcaster's channel.
53
+ * Channels may have up to 15 rewards, including both enabled and disabled rewards.
54
+ *
55
+ * Required scopes:
56
+ * `channel:rewards:read`
57
+ *
58
+ * @returns An array of `ChannelReward` instances.
59
+ */
60
+ fetch(): Promise<ChannelReward[]>;
61
+ /**
62
+ * Creates a channel reward in the broadcaster's channel.
63
+ * A maximum of 15 rewards can be created, including both enabled and disabled rewards.
64
+ *
65
+ * Required scopes:
66
+ * `channel:rewards:write`
67
+ *
68
+ * @returns The created `ChannelReward` instance.
69
+ */
70
+ create({ backgroundColor, cost, description, isEnabled, isUserInputRequired, shouldRedemptionsSkipRequestQueue, title, }: CreateChannelRewardParams): Promise<ChannelReward>;
71
+ /**
72
+ * Deletes a channel reward in the broadcaster's channel. Note that only the app that created the reward can delete it.
73
+ *
74
+ * Required scopes:
75
+ * `channel:rewards:write`
76
+ *
77
+ * @param rewardId The ID of the reward to delete
78
+ */
79
+ delete(rewardId: string): Promise<void>;
80
+ /**
81
+ * Updates a channel reward in the broadcaster's channel. Note that only the app that created the reward can update it.
82
+ *
83
+ * Required scopes:
84
+ * `channel:rewards:write`
85
+ *
86
+ * @param rewardId The ID of the reward to update
87
+ * @param data The data to update the reward with
88
+ * @returns The updated `ChannelReward` instance.
89
+ */
90
+ update(rewardId: string, data: UpdateChannelRewardParams): Promise<ChannelReward>;
91
+ /**
92
+ * Get channel reward redemptions for a broadcaster's channel.
93
+ *
94
+ * Required scopes:
95
+ * `channel:rewards:write`
96
+ *
97
+ * @param params The parameters for fetching redemptions
98
+ * @param params.rewardId (Optional) Optionally provide a reward ID to list redemptions for that specific reward.
99
+ * @param params.status (Optional) Optionally provide a specific status to filter by. Defaults to `pending`.
100
+ * @param params.id (Optional) Optionally provide a list of redemption IDs to filter by. You cannot provide any other filters if you filter by redemption IDs.
101
+ * @param params.cursor (Optional) Optionally provide a cursor to paginate through the results.
102
+ * @returns An array of `ChannelRewardRedemption` instances.
103
+ */
104
+ getRedemptions(params: GetChannelRewardRedemptionsParams): Promise<ChannelRewardRedemption[]>;
105
+ /**
106
+ * Accept channel reward redemptions for a broadcaster's channel. The response will only include data for redemptions that failed to be accepted.
107
+ *
108
+ * Required scopes:
109
+ * `channel:rewards:write`
110
+ *
111
+ * @param params The parameters for accepting redemptions
112
+ * @param params.ids List of redemption IDs to accept. A maximum of 25 redemptions can be accepted per request. IDs must be unique.
113
+ * @returns An array of `ChannelRewardAcceptRedemptionDto` instances for redemptions that failed to be accepted.
114
+ */
115
+ acceptRedemptions({ ids }: AcceptRedemptionsParams): Promise<ChannelRewardAcceptRedemptionDto[]>;
116
+ /**
117
+ * Reject channel reward redemptions for a broadcaster's channel. The response will only include data for redemptions that failed to be rejected.
118
+ *
119
+ * Required scopes:
120
+ * `channel:rewards:write`
121
+ *
122
+ * @param params The parameters for rejecting redemptions
123
+ * @param params.ids List of redemption IDs to reject. A maximum of 25 redemptions can be rejected per request. IDs must be unique.
124
+ * @returns An array of `ChannelRewardRejectRedemptionDto` instances for redemptions that failed to be rejected.
125
+ */
126
+ rejectRedemptions({ ids }: RejectRedemptionsParams): Promise<ChannelRewardRejectRedemptionDto[]>;
127
+ }
128
+ //# sourceMappingURL=ChannelRewardsService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChannelRewardsService.d.ts","sourceRoot":"","sources":["../../src/services/ChannelRewardsService.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,OAAO,EAAE,YAAY,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EACL,gCAAgC,EAChC,uBAAuB,EACvB,0BAA0B,EAC1B,6BAA6B,EAC7B,gCAAgC,EACjC,MAAM,yCAAyC,CAAC;AAMjD,MAAM,MAAM,2BAA2B,GAAG,YAAY,CAAC,gBAAgB,EAAE,CAAC,CAAC;AAC3E,MAAM,MAAM,2BAA2B,GAAG,YAAY,CAAC,gBAAgB,CAAC,CAAC;AACzE,MAAM,MAAM,mCAAmC,GAAG,0BAA0B,CAAC,0BAA0B,EAAE,CAAC,CAAC;AAC3G,MAAM,MAAM,yBAAyB,GAAG,YAAY,CAAC,gCAAgC,EAAE,CAAC,CAAC;AACzF,MAAM,MAAM,yBAAyB,GAAG,YAAY,CAAC,gCAAgC,EAAE,CAAC,CAAC;AAGzF,eAAO,MAAM,yBAAyB;;;;;;;;mBAQpC,CAAC;AACH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAElF,eAAO,MAAM,yBAAyB;;;;;;;;;mBASpC,CAAC;AACH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAElF,eAAO,MAAM,iCAAiC;;;;;mBAM5C,CAAC;AACH,MAAM,MAAM,iCAAiC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAC;AAElG,eAAO,MAAM,uBAAuB;;mBAElC,CAAC;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE9E,eAAO,MAAM,uBAAuB;;mBAA0B,CAAC;AAC/D,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAG9E,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAqD;IACzF,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;gBAE1B,MAAM,EAAE,UAAU;IAI9B;;;;;;;;OAQG;IACG,KAAK,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAoBvC;;;;;;;;OAQG;IACG,MAAM,CAAC,EACX,eAAe,EACf,IAAI,EACJ,WAAW,EACX,SAAS,EACT,mBAAmB,EACnB,iCAAiC,EACjC,KAAK,GACN,EAAE,yBAAyB,GAAG,OAAO,CAAC,aAAa,CAAC;IA6CrD;;;;;;;OAOG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB7C;;;;;;;;;OASG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,aAAa,CAAC;IAsCvF;;;;;;;;;;;;OAYG;IACG,cAAc,CAAC,MAAM,EAAE,iCAAiC,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC;IA+CnG;;;;;;;;;OASG;IACG,iBAAiB,CAAC,EAAE,GAAG,EAAE,EAAE,uBAAuB,GAAG,OAAO,CAAC,gCAAgC,EAAE,CAAC;IA8BtG;;;;;;;;;OASG;IACG,iBAAiB,CAAC,EAAE,GAAG,EAAE,EAAE,uBAAuB,GAAG,OAAO,CAAC,gCAAgC,EAAE,CAAC;CA6BvG"}
@@ -0,0 +1,296 @@
1
+ import z from 'zod';
2
+ import { ChannelReward } from '../resources/ChannelReward.js';
3
+ import { ChannelRewardRedemption, ChannelRewardRedemptionStatus, } from '../resources/ChannelRewardRedemption.js';
4
+ import { Scope } from '../Scope.js';
5
+ import { constructEndpoint, handleError, parseJSON } from '../utils.js';
6
+ import { Version } from '../Version.js';
7
+ // Schemas
8
+ export const createChannelRewardSchema = z.object({
9
+ backgroundColor: z.string().optional(),
10
+ cost: z.number().min(1),
11
+ description: z.string().max(200).optional(),
12
+ isEnabled: z.boolean().optional(),
13
+ isUserInputRequired: z.boolean().optional(),
14
+ shouldRedemptionsSkipRequestQueue: z.boolean().optional(),
15
+ title: z.string().max(50),
16
+ });
17
+ export const updateChannelRewardSchema = z.object({
18
+ backgroundColor: z.string().optional(),
19
+ cost: z.number().min(1).optional(),
20
+ description: z.string().max(200).optional(),
21
+ isEnabled: z.boolean().optional(),
22
+ isPaused: z.boolean().optional(),
23
+ isUserInputRequired: z.boolean().optional(),
24
+ shouldRedemptionsSkipRequestQueue: z.boolean().optional(),
25
+ title: z.string().max(50).optional(),
26
+ });
27
+ export const getChannelRewardRedemptionsSchema = z.object({
28
+ rewardId: z.string().optional(),
29
+ status: z.enum(ChannelRewardRedemptionStatus).optional(),
30
+ // Cannot provide any other filters if filtering by redemption IDs
31
+ id: z.array(z.string()).max(50).optional(),
32
+ cursor: z.string().optional(),
33
+ });
34
+ export const acceptRedemptionsSchema = z.object({
35
+ ids: z.array(z.string()).min(1).max(25),
36
+ });
37
+ export const rejectRedemptionsSchema = acceptRedemptionsSchema;
38
+ // Service
39
+ export class ChannelRewardsService {
40
+ CHANNEL_REWARDS_URL = constructEndpoint(Version.V1, 'channels/rewards');
41
+ client;
42
+ constructor(client) {
43
+ this.client = client;
44
+ }
45
+ /**
46
+ * Get channel rewards for a broadcaster's channel.
47
+ * Channels may have up to 15 rewards, including both enabled and disabled rewards.
48
+ *
49
+ * Required scopes:
50
+ * `channel:rewards:read`
51
+ *
52
+ * @returns An array of `ChannelReward` instances.
53
+ */
54
+ async fetch() {
55
+ this.client.requiresScope(Scope.CHANNEL_REWARDS_READ);
56
+ const endpoint = new URL(this.CHANNEL_REWARDS_URL);
57
+ const response = await fetch(endpoint, {
58
+ headers: {
59
+ Authorization: `Bearer ${this.client.token?.access_token}`,
60
+ },
61
+ });
62
+ if (!response.ok) {
63
+ handleError(response);
64
+ }
65
+ const json = await parseJSON(response);
66
+ const rewards = json.data.map((reward) => new ChannelReward(this.client, reward));
67
+ return rewards;
68
+ }
69
+ /**
70
+ * Creates a channel reward in the broadcaster's channel.
71
+ * A maximum of 15 rewards can be created, including both enabled and disabled rewards.
72
+ *
73
+ * Required scopes:
74
+ * `channel:rewards:write`
75
+ *
76
+ * @returns The created `ChannelReward` instance.
77
+ */
78
+ async create({ backgroundColor, cost, description, isEnabled, isUserInputRequired, shouldRedemptionsSkipRequestQueue, title, }) {
79
+ this.client.requiresScope(Scope.CHANNEL_REWARDS_WRITE);
80
+ const schema = createChannelRewardSchema.safeParse({
81
+ backgroundColor,
82
+ cost,
83
+ description,
84
+ isEnabled,
85
+ isUserInputRequired,
86
+ shouldRedemptionsSkipRequestQueue,
87
+ title,
88
+ });
89
+ if (!schema.success) {
90
+ throw new Error(`Invalid data: ${schema.error.message}`);
91
+ }
92
+ const endpoint = new URL(this.CHANNEL_REWARDS_URL);
93
+ const response = await fetch(endpoint, {
94
+ method: 'POST',
95
+ headers: {
96
+ Authorization: `Bearer ${this.client.token?.access_token}`,
97
+ 'Content-Type': 'application/json',
98
+ },
99
+ body: JSON.stringify({
100
+ background_color: schema.data.backgroundColor,
101
+ cost: schema.data.cost,
102
+ description: schema.data.description,
103
+ is_enabled: schema.data.isEnabled,
104
+ is_user_input_required: schema.data.isUserInputRequired,
105
+ should_redemptions_skip_request_queue: schema.data.shouldRedemptionsSkipRequestQueue,
106
+ title: schema.data.title,
107
+ }),
108
+ });
109
+ if (!response.ok) {
110
+ handleError(response);
111
+ }
112
+ const json = await parseJSON(response);
113
+ const reward = new ChannelReward(this.client, json.data);
114
+ return reward;
115
+ }
116
+ /**
117
+ * Deletes a channel reward in the broadcaster's channel. Note that only the app that created the reward can delete it.
118
+ *
119
+ * Required scopes:
120
+ * `channel:rewards:write`
121
+ *
122
+ * @param rewardId The ID of the reward to delete
123
+ */
124
+ async delete(rewardId) {
125
+ this.client.requiresScope(Scope.CHANNEL_REWARDS_WRITE);
126
+ const endpoint = new URL(`${this.CHANNEL_REWARDS_URL}/${rewardId}`);
127
+ const response = await fetch(endpoint, {
128
+ method: 'DELETE',
129
+ headers: {
130
+ Authorization: `Bearer ${this.client.token?.access_token}`,
131
+ },
132
+ });
133
+ if (!response.ok) {
134
+ handleError(response);
135
+ }
136
+ }
137
+ /**
138
+ * Updates a channel reward in the broadcaster's channel. Note that only the app that created the reward can update it.
139
+ *
140
+ * Required scopes:
141
+ * `channel:rewards:write`
142
+ *
143
+ * @param rewardId The ID of the reward to update
144
+ * @param data The data to update the reward with
145
+ * @returns The updated `ChannelReward` instance.
146
+ */
147
+ async update(rewardId, data) {
148
+ this.client.requiresScope(Scope.CHANNEL_REWARDS_WRITE);
149
+ const schema = updateChannelRewardSchema.safeParse(data);
150
+ if (!schema.success) {
151
+ throw new Error(`Invalid data: ${schema.error.message}`);
152
+ }
153
+ const endpoint = new URL(`${this.CHANNEL_REWARDS_URL}/${rewardId}`);
154
+ const response = await fetch(endpoint, {
155
+ method: 'PATCH',
156
+ headers: {
157
+ Authorization: `Bearer ${this.client.token?.access_token}`,
158
+ 'Content-Type': 'application/json',
159
+ },
160
+ body: JSON.stringify({
161
+ background_color: schema.data.backgroundColor,
162
+ cost: schema.data.cost,
163
+ description: schema.data.description,
164
+ is_enabled: schema.data.isEnabled,
165
+ is_paused: schema.data.isPaused,
166
+ is_user_input_required: schema.data.isUserInputRequired,
167
+ should_redemptions_skip_request_queue: schema.data.shouldRedemptionsSkipRequestQueue,
168
+ title: schema.data.title,
169
+ }),
170
+ });
171
+ if (!response.ok) {
172
+ handleError(response);
173
+ }
174
+ const json = await parseJSON(response);
175
+ const reward = new ChannelReward(this.client, json.data);
176
+ return reward;
177
+ }
178
+ /**
179
+ * Get channel reward redemptions for a broadcaster's channel.
180
+ *
181
+ * Required scopes:
182
+ * `channel:rewards:write`
183
+ *
184
+ * @param params The parameters for fetching redemptions
185
+ * @param params.rewardId (Optional) Optionally provide a reward ID to list redemptions for that specific reward.
186
+ * @param params.status (Optional) Optionally provide a specific status to filter by. Defaults to `pending`.
187
+ * @param params.id (Optional) Optionally provide a list of redemption IDs to filter by. You cannot provide any other filters if you filter by redemption IDs.
188
+ * @param params.cursor (Optional) Optionally provide a cursor to paginate through the results.
189
+ * @returns An array of `ChannelRewardRedemption` instances.
190
+ */
191
+ async getRedemptions(params) {
192
+ const schema = getChannelRewardRedemptionsSchema.safeParse(params);
193
+ if (!schema.success) {
194
+ throw new Error(`Invalid data: ${schema.error.message}`);
195
+ }
196
+ this.client.requiresScope(Scope.CHANNEL_REWARDS_WRITE);
197
+ const { rewardId, status, id, cursor } = schema.data;
198
+ const endpoint = new URL(`${this.CHANNEL_REWARDS_URL}/redemptions`);
199
+ // cannot provide any other filters if filtering by redemption IDs
200
+ if (id && id.length > 0 && (rewardId || status || cursor)) {
201
+ throw new Error('You cannot provide any other filters if you filter by redemption IDs.');
202
+ }
203
+ if (rewardId) {
204
+ endpoint.searchParams.append('reward_id', rewardId);
205
+ }
206
+ if (status) {
207
+ endpoint.searchParams.append('status', status);
208
+ }
209
+ if (id) {
210
+ for (const redemptionId of id) {
211
+ endpoint.searchParams.append('id', redemptionId);
212
+ }
213
+ }
214
+ if (cursor) {
215
+ endpoint.searchParams.append('cursor', cursor);
216
+ }
217
+ const response = await fetch(endpoint, {
218
+ headers: {
219
+ Authorization: `Bearer ${this.client.token?.access_token}`,
220
+ },
221
+ });
222
+ if (!response.ok) {
223
+ handleError(response);
224
+ }
225
+ const json = await parseJSON(response);
226
+ const redemptions = json.data.map((redemption) => new ChannelRewardRedemption(this.client, redemption));
227
+ return redemptions;
228
+ }
229
+ /**
230
+ * Accept channel reward redemptions for a broadcaster's channel. The response will only include data for redemptions that failed to be accepted.
231
+ *
232
+ * Required scopes:
233
+ * `channel:rewards:write`
234
+ *
235
+ * @param params The parameters for accepting redemptions
236
+ * @param params.ids List of redemption IDs to accept. A maximum of 25 redemptions can be accepted per request. IDs must be unique.
237
+ * @returns An array of `ChannelRewardAcceptRedemptionDto` instances for redemptions that failed to be accepted.
238
+ */
239
+ async acceptRedemptions({ ids }) {
240
+ this.client.requiresScope(Scope.CHANNEL_REWARDS_WRITE);
241
+ const schema = acceptRedemptionsSchema.safeParse({ ids });
242
+ if (!schema.success) {
243
+ throw new Error(`Invalid data: ${schema.error.message}`);
244
+ }
245
+ const endpoint = new URL(`${this.CHANNEL_REWARDS_URL}/redemptions/accept`);
246
+ const response = await fetch(endpoint, {
247
+ method: 'POST',
248
+ headers: {
249
+ Authorization: `Bearer ${this.client.token?.access_token}`,
250
+ 'Content-Type': 'application/json',
251
+ },
252
+ body: JSON.stringify({
253
+ ids: schema.data.ids,
254
+ }),
255
+ });
256
+ if (!response.ok) {
257
+ handleError(response);
258
+ }
259
+ const json = await parseJSON(response);
260
+ return json.data;
261
+ }
262
+ /**
263
+ * Reject channel reward redemptions for a broadcaster's channel. The response will only include data for redemptions that failed to be rejected.
264
+ *
265
+ * Required scopes:
266
+ * `channel:rewards:write`
267
+ *
268
+ * @param params The parameters for rejecting redemptions
269
+ * @param params.ids List of redemption IDs to reject. A maximum of 25 redemptions can be rejected per request. IDs must be unique.
270
+ * @returns An array of `ChannelRewardRejectRedemptionDto` instances for redemptions that failed to be rejected.
271
+ */
272
+ async rejectRedemptions({ ids }) {
273
+ this.client.requiresScope(Scope.CHANNEL_REWARDS_WRITE);
274
+ const schema = rejectRedemptionsSchema.safeParse({ ids });
275
+ if (!schema.success) {
276
+ throw new Error(`Invalid data: ${schema.error.message}`);
277
+ }
278
+ const endpoint = new URL(`${this.CHANNEL_REWARDS_URL}/redemptions/reject`);
279
+ const response = await fetch(endpoint, {
280
+ method: 'POST',
281
+ headers: {
282
+ Authorization: `Bearer ${this.client.token?.access_token}`,
283
+ 'Content-Type': 'application/json',
284
+ },
285
+ body: JSON.stringify({
286
+ ids: schema.data.ids,
287
+ }),
288
+ });
289
+ if (!response.ok) {
290
+ handleError(response);
291
+ }
292
+ const json = await parseJSON(response);
293
+ return json.data;
294
+ }
295
+ }
296
+ //# sourceMappingURL=ChannelRewardsService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChannelRewardsService.js","sourceRoot":"","sources":["../../src/services/ChannelRewardsService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import z from 'zod';
2
+ import { BaseResponse } from '../BaseResponse.js';
3
+ import type { KickClient } from '../KickClient.js';
4
+ import { Channel, ChannelDto } from '../resources/Channel.js';
5
+ export type FetchChannelsResponse = BaseResponse<ChannelDto[]>;
6
+ export declare const updateChannelSchema: z.ZodObject<{
7
+ categoryId: z.ZodOptional<z.ZodNumber>;
8
+ customTags: z.ZodOptional<z.ZodArray<z.ZodString>>;
9
+ streamTitle: z.ZodOptional<z.ZodString>;
10
+ }, z.z.core.$strip>;
11
+ export type UpdateChannelParams = z.infer<typeof updateChannelSchema>;
12
+ export declare const fetchChannelParamsSchema: z.ZodObject<{
13
+ broadcasterUserId: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
14
+ slug: z.ZodOptional<z.ZodArray<z.ZodString>>;
15
+ }, z.z.core.$strip>;
16
+ export type FetchChannelParamsDto = z.infer<typeof fetchChannelParamsSchema>;
17
+ export declare class ChannelsService {
18
+ private readonly CHANNELS_URL;
19
+ protected readonly client: KickClient;
20
+ constructor(client: KickClient);
21
+ /**
22
+ * Retrieve channel information based on provided broadcaster user IDs or channel slugs. You can either:
23
+ * 1. Provide no parameters (returns information for the currently authenticated user)
24
+ * 2. Provide only `broadcasterUserId` parameters (up to 50)
25
+ * 3. Provide only `slug` parameters (up to 50, each max 25 characters) Note: You cannot mix `broadcasterUserId` and `slug` parameters in the same request.
26
+ *
27
+ * Required scopes:
28
+ * `channel:read`
29
+ *
30
+ * @param params The parameters for fetching the channel
31
+ * @param params.broadcasterUserId (Optional) Array of broadcaster user IDs (up to 50)
32
+ * @param params.slug (Optional) Array of channel slugs (up to 50, each max 25 characters)
33
+ * @returns An array of `Channel` instances.
34
+ */
35
+ fetch(params: FetchChannelParamsDto): Promise<Channel[]>;
36
+ /**
37
+ * Fetch a channel by its ID.
38
+ *
39
+ * @param id The ID of the channel to fetch
40
+ * @returns The `Channel` instance.
41
+ */
42
+ fetchById(id: number): Promise<Channel>;
43
+ /**
44
+ * Fetch a channel by its slug.
45
+ *
46
+ * @param slug The slug of the channel to fetch
47
+ * @returns The `Channel` instance.
48
+ */
49
+ fetchBySlug(slug: string): Promise<Channel>;
50
+ /**
51
+ * Update the authenticated user's channel information.
52
+ *
53
+ * Required scopes:
54
+ * `channel:write`
55
+ *
56
+ * @param params The parameters for updating the channel
57
+ * @param params.categoryId (Optional) The ID of the category to set for the channel
58
+ * @param params.customTags (Optional) An array of custom tags to set for the channel
59
+ * @param params.streamTitle (Optional) The title of the stream
60
+ * @returns void
61
+ */
62
+ update(params: UpdateChannelParams): Promise<void>;
63
+ }
64
+ //# sourceMappingURL=ChannelsService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChannelsService.d.ts","sourceRoot":"","sources":["../../src/services/ChannelsService.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAK9D,MAAM,MAAM,qBAAqB,GAAG,YAAY,CAAC,UAAU,EAAE,CAAC,CAAC;AAE/D,eAAO,MAAM,mBAAmB;;;;mBAI9B,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEtE,eAAO,MAAM,wBAAwB;;;mBAgBlC,CAAC;AACJ,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE7E,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6C;IAC1E,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;gBAE1B,MAAM,EAAE,UAAU;IAI9B;;;;;;;;;;;;;OAaG;IACG,KAAK,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAkC9D;;;;;OAKG;IACG,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI7C;;;;;OAKG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIjD;;;;;;;;;;;OAWG;IACG,MAAM,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;CA6BzD"}
@@ -0,0 +1,126 @@
1
+ import z from 'zod';
2
+ import { Channel } from '../resources/Channel.js';
3
+ import { Scope } from '../Scope.js';
4
+ import { constructEndpoint, handleError, parseJSON } from '../utils.js';
5
+ import { Version } from '../Version.js';
6
+ export const updateChannelSchema = z.object({
7
+ categoryId: z.number().optional(),
8
+ customTags: z.array(z.string()).optional(),
9
+ streamTitle: z.string().optional(),
10
+ });
11
+ export const fetchChannelParamsSchema = z
12
+ .object({
13
+ broadcasterUserId: z.array(z.number()).max(50).optional(),
14
+ slug: z.array(z.string().max(25)).max(50).optional(),
15
+ })
16
+ .refine((data) => {
17
+ // Cannot mix broadcasterUserId and slug
18
+ if (data.broadcasterUserId && data.slug) {
19
+ return false;
20
+ }
21
+ return true;
22
+ }, {
23
+ message: 'Cannot mix broadcasterUserId and slug parameters',
24
+ });
25
+ export class ChannelsService {
26
+ CHANNELS_URL = constructEndpoint(Version.V1, 'channels');
27
+ client;
28
+ constructor(client) {
29
+ this.client = client;
30
+ }
31
+ /**
32
+ * Retrieve channel information based on provided broadcaster user IDs or channel slugs. You can either:
33
+ * 1. Provide no parameters (returns information for the currently authenticated user)
34
+ * 2. Provide only `broadcasterUserId` parameters (up to 50)
35
+ * 3. Provide only `slug` parameters (up to 50, each max 25 characters) Note: You cannot mix `broadcasterUserId` and `slug` parameters in the same request.
36
+ *
37
+ * Required scopes:
38
+ * `channel:read`
39
+ *
40
+ * @param params The parameters for fetching the channel
41
+ * @param params.broadcasterUserId (Optional) Array of broadcaster user IDs (up to 50)
42
+ * @param params.slug (Optional) Array of channel slugs (up to 50, each max 25 characters)
43
+ * @returns An array of `Channel` instances.
44
+ */
45
+ async fetch(params) {
46
+ this.client.requiresScope(Scope.CHANNEL_READ);
47
+ const schema = fetchChannelParamsSchema.safeParse(params);
48
+ if (!schema.success) {
49
+ throw new Error(`Invalid parameters: ${schema.error.message}`);
50
+ }
51
+ const { broadcasterUserId, slug } = schema.data;
52
+ const endpoint = new URL(this.CHANNELS_URL);
53
+ if (broadcasterUserId && broadcasterUserId.length > 0) {
54
+ endpoint.searchParams.append('broadcaster_user_id', broadcasterUserId.join(' '));
55
+ }
56
+ if (slug && slug.length > 0) {
57
+ slug.forEach((s) => endpoint.searchParams.append('slug', s));
58
+ }
59
+ const response = await fetch(endpoint, {
60
+ headers: {
61
+ Authorization: `Bearer ${this.client.token?.access_token}`,
62
+ },
63
+ });
64
+ if (!response.ok) {
65
+ handleError(response);
66
+ }
67
+ const json = await parseJSON(response);
68
+ const channels = json.data.map((channel) => new Channel(this.client, channel));
69
+ return channels;
70
+ }
71
+ /**
72
+ * Fetch a channel by its ID.
73
+ *
74
+ * @param id The ID of the channel to fetch
75
+ * @returns The `Channel` instance.
76
+ */
77
+ async fetchById(id) {
78
+ return (await this.fetch({ broadcasterUserId: [id] }))[0];
79
+ }
80
+ /**
81
+ * Fetch a channel by its slug.
82
+ *
83
+ * @param slug The slug of the channel to fetch
84
+ * @returns The `Channel` instance.
85
+ */
86
+ async fetchBySlug(slug) {
87
+ return (await this.fetch({ slug: [slug] }))[0];
88
+ }
89
+ /**
90
+ * Update the authenticated user's channel information.
91
+ *
92
+ * Required scopes:
93
+ * `channel:write`
94
+ *
95
+ * @param params The parameters for updating the channel
96
+ * @param params.categoryId (Optional) The ID of the category to set for the channel
97
+ * @param params.customTags (Optional) An array of custom tags to set for the channel
98
+ * @param params.streamTitle (Optional) The title of the stream
99
+ * @returns void
100
+ */
101
+ async update(params) {
102
+ this.client.requiresScope(Scope.CHANNEL_WRITE);
103
+ const schema = updateChannelSchema.safeParse(params);
104
+ if (!schema.success) {
105
+ throw new Error(`Invalid parameters: ${schema.error.message}`);
106
+ }
107
+ const { categoryId, customTags, streamTitle } = schema.data;
108
+ const endpoint = new URL(this.CHANNELS_URL);
109
+ const response = await fetch(endpoint, {
110
+ method: 'PATCH',
111
+ headers: {
112
+ Authorization: `Bearer ${this.client.token?.access_token}`,
113
+ 'Content-Type': 'application/json',
114
+ },
115
+ body: JSON.stringify({
116
+ category_id: categoryId,
117
+ custom_tags: customTags,
118
+ stream_title: streamTitle,
119
+ }),
120
+ });
121
+ if (!response.ok) {
122
+ handleError(response);
123
+ }
124
+ }
125
+ }
126
+ //# sourceMappingURL=ChannelsService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChannelsService.js","sourceRoot":"","sources":["../../src/services/ChannelsService.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAIpB,OAAO,EAAE,OAAO,EAAc,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAIxC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC1C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC;KACtC,MAAM,CAAC;IACN,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IACzD,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;CACrD,CAAC;KACD,MAAM,CACL,CAAC,IAAI,EAAE,EAAE;IACP,wCAAwC;IACxC,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,EACD;IACE,OAAO,EAAE,kDAAkD;CAC5D,CACF,CAAC;AAGJ,MAAM,OAAO,eAAe;IACT,YAAY,GAAG,iBAAiB,CAAC,OAAO,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IACvD,MAAM,CAAa;IAEtC,YAAY,MAAkB;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,KAAK,CAAC,MAA6B;QACvC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAE9C,MAAM,MAAM,GAAG,wBAAwB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAE1D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,uBAAuB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;QAChD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAE5C,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtD,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,qBAAqB,EAAE,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACnF,CAAC;QACD,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;YACrC,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE;aAC3D;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,WAAW,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,SAAS,CAAwB,QAAQ,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAC/E,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,SAAS,CAAC,EAAU;QACxB,OAAO,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,WAAW,CAAC,IAAY;QAC5B,OAAO,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,MAAM,CAAC,MAA2B;QACtC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAE/C,MAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAErD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,uBAAuB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;QAC5D,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAE5C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;YACrC,MAAM,EAAE,OAAO;YACf,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE;gBAC1D,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,WAAW,EAAE,UAAU;gBACvB,WAAW,EAAE,UAAU;gBACvB,YAAY,EAAE,WAAW;aAC1B,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,WAAW,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;CACF"}