@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.
- package/dist/BaseResponse.d.ts +10 -0
- package/dist/BaseResponse.d.ts.map +1 -0
- package/dist/BaseResponse.js +2 -0
- package/dist/BaseResponse.js.map +1 -0
- package/dist/Errors.d.ts +25 -0
- package/dist/Errors.d.ts.map +1 -0
- package/dist/Errors.js +49 -0
- package/dist/Errors.js.map +1 -0
- package/dist/EventManager.d.ts +15 -0
- package/dist/EventManager.d.ts.map +1 -0
- package/dist/EventManager.js +35 -0
- package/dist/EventManager.js.map +1 -0
- package/dist/KickClient.d.ts +46 -0
- package/dist/KickClient.d.ts.map +1 -0
- package/dist/KickClient.js +88 -0
- package/dist/KickClient.js.map +1 -0
- package/dist/OAuth.d.ts +77 -0
- package/dist/OAuth.d.ts.map +1 -0
- package/dist/OAuth.js +162 -0
- package/dist/OAuth.js.map +1 -0
- package/dist/Scope.d.ts +14 -0
- package/dist/Scope.d.ts.map +1 -0
- package/dist/Scope.js +15 -0
- package/dist/Scope.js.map +1 -0
- package/dist/Serializable.d.ts +15 -0
- package/dist/Serializable.d.ts.map +1 -0
- package/dist/Serializable.js +111 -0
- package/dist/Serializable.js.map +1 -0
- package/dist/Version.d.ts +5 -0
- package/dist/Version.d.ts.map +1 -0
- package/dist/Version.js +6 -0
- package/dist/Version.js.map +1 -0
- package/dist/index.d.ts +49 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +41 -0
- package/dist/index.js.map +1 -0
- package/dist/resources/Category.d.ts +20 -0
- package/dist/resources/Category.d.ts.map +1 -0
- package/dist/resources/Category.js +26 -0
- package/dist/resources/Category.js.map +1 -0
- package/dist/resources/Channel.d.ts +48 -0
- package/dist/resources/Channel.d.ts.map +1 -0
- package/dist/resources/Channel.js +51 -0
- package/dist/resources/Channel.js.map +1 -0
- package/dist/resources/ChannelReward.d.ts +28 -0
- package/dist/resources/ChannelReward.d.ts.map +1 -0
- package/dist/resources/ChannelReward.js +38 -0
- package/dist/resources/ChannelReward.js.map +1 -0
- package/dist/resources/ChannelRewardRedemption.d.ts +59 -0
- package/dist/resources/ChannelRewardRedemption.d.ts.map +1 -0
- package/dist/resources/ChannelRewardRedemption.js +38 -0
- package/dist/resources/ChannelRewardRedemption.js.map +1 -0
- package/dist/resources/EventSubscription.d.ts +26 -0
- package/dist/resources/EventSubscription.d.ts.map +1 -0
- package/dist/resources/EventSubscription.js +35 -0
- package/dist/resources/EventSubscription.js.map +1 -0
- package/dist/resources/Leaderboard.d.ts +22 -0
- package/dist/resources/Leaderboard.d.ts.map +1 -0
- package/dist/resources/Leaderboard.js +20 -0
- package/dist/resources/Leaderboard.js.map +1 -0
- package/dist/resources/Livestream.d.ts +38 -0
- package/dist/resources/Livestream.d.ts.map +1 -0
- package/dist/resources/Livestream.js +48 -0
- package/dist/resources/Livestream.js.map +1 -0
- package/dist/resources/Message.d.ts +14 -0
- package/dist/resources/Message.d.ts.map +1 -0
- package/dist/resources/Message.js +17 -0
- package/dist/resources/Message.js.map +1 -0
- package/dist/resources/User.d.ts +18 -0
- package/dist/resources/User.d.ts.map +1 -0
- package/dist/resources/User.js +23 -0
- package/dist/resources/User.js.map +1 -0
- package/dist/services/CategoriesService.d.ts +39 -0
- package/dist/services/CategoriesService.d.ts.map +1 -0
- package/dist/services/CategoriesService.js +73 -0
- package/dist/services/CategoriesService.js.map +1 -0
- package/dist/services/CategoriesServiceV2.d.ts +39 -0
- package/dist/services/CategoriesServiceV2.d.ts.map +1 -0
- package/dist/services/CategoriesServiceV2.js +89 -0
- package/dist/services/CategoriesServiceV2.js.map +1 -0
- package/dist/services/ChannelRewardsService.d.ts +128 -0
- package/dist/services/ChannelRewardsService.d.ts.map +1 -0
- package/dist/services/ChannelRewardsService.js +296 -0
- package/dist/services/ChannelRewardsService.js.map +1 -0
- package/dist/services/ChannelsService.d.ts +64 -0
- package/dist/services/ChannelsService.d.ts.map +1 -0
- package/dist/services/ChannelsService.js +126 -0
- package/dist/services/ChannelsService.js.map +1 -0
- package/dist/services/ChatService.d.ts +49 -0
- package/dist/services/ChatService.d.ts.map +1 -0
- package/dist/services/ChatService.js +90 -0
- package/dist/services/ChatService.js.map +1 -0
- package/dist/services/EventsService.d.ts +96 -0
- package/dist/services/EventsService.d.ts.map +1 -0
- package/dist/services/EventsService.js +145 -0
- package/dist/services/EventsService.js.map +1 -0
- package/dist/services/KICKsService.d.ts +26 -0
- package/dist/services/KICKsService.d.ts.map +1 -0
- package/dist/services/KICKsService.js +49 -0
- package/dist/services/KICKsService.js.map +1 -0
- package/dist/services/LivestreamsService.d.ts +39 -0
- package/dist/services/LivestreamsService.d.ts.map +1 -0
- package/dist/services/LivestreamsService.js +92 -0
- package/dist/services/LivestreamsService.js.map +1 -0
- package/dist/services/ModerationService.d.ts +65 -0
- package/dist/services/ModerationService.d.ts.map +1 -0
- package/dist/services/ModerationService.js +132 -0
- package/dist/services/ModerationService.js.map +1 -0
- package/dist/services/PublicKeyService.d.ts +22 -0
- package/dist/services/PublicKeyService.d.ts.map +1 -0
- package/dist/services/PublicKeyService.js +58 -0
- package/dist/services/PublicKeyService.js.map +1 -0
- package/dist/services/UsersService.d.ts +23 -0
- package/dist/services/UsersService.d.ts.map +1 -0
- package/dist/services/UsersService.js +44 -0
- package/dist/services/UsersService.js.map +1 -0
- package/dist/utils.d.ts +21 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +66 -0
- package/dist/utils.js.map +1 -0
- package/dist/webhooks/WebhookEvents.d.ts +27 -0
- package/dist/webhooks/WebhookEvents.d.ts.map +1 -0
- package/dist/webhooks/WebhookEvents.js +14 -0
- package/dist/webhooks/WebhookEvents.js.map +1 -0
- package/dist/webhooks/dispatch.d.ts +10 -0
- package/dist/webhooks/dispatch.d.ts.map +1 -0
- package/dist/webhooks/dispatch.js +16 -0
- package/dist/webhooks/dispatch.js.map +1 -0
- package/dist/webhooks/v1/Properties.d.ts +50 -0
- package/dist/webhooks/v1/Properties.d.ts.map +1 -0
- package/dist/webhooks/v1/Properties.js +2 -0
- package/dist/webhooks/v1/Properties.js.map +1 -0
- package/dist/webhooks/v1/payloads/ChannelFollowed.d.ts +6 -0
- package/dist/webhooks/v1/payloads/ChannelFollowed.d.ts.map +1 -0
- package/dist/webhooks/v1/payloads/ChannelFollowed.js +2 -0
- package/dist/webhooks/v1/payloads/ChannelFollowed.js.map +1 -0
- package/dist/webhooks/v1/payloads/ChannelRewardRedemptionUpdated.d.ts +17 -0
- package/dist/webhooks/v1/payloads/ChannelRewardRedemptionUpdated.d.ts.map +1 -0
- package/dist/webhooks/v1/payloads/ChannelRewardRedemptionUpdated.js +2 -0
- package/dist/webhooks/v1/payloads/ChannelRewardRedemptionUpdated.js.map +1 -0
- package/dist/webhooks/v1/payloads/ChannelSubscriptionGifts.d.ts +9 -0
- package/dist/webhooks/v1/payloads/ChannelSubscriptionGifts.d.ts.map +1 -0
- package/dist/webhooks/v1/payloads/ChannelSubscriptionGifts.js +2 -0
- package/dist/webhooks/v1/payloads/ChannelSubscriptionGifts.js.map +1 -0
- package/dist/webhooks/v1/payloads/ChannelSubscriptionNew.d.ts +9 -0
- package/dist/webhooks/v1/payloads/ChannelSubscriptionNew.d.ts.map +1 -0
- package/dist/webhooks/v1/payloads/ChannelSubscriptionNew.js +2 -0
- package/dist/webhooks/v1/payloads/ChannelSubscriptionNew.js.map +1 -0
- package/dist/webhooks/v1/payloads/ChannelSubscriptionRenewal.d.ts +9 -0
- package/dist/webhooks/v1/payloads/ChannelSubscriptionRenewal.d.ts.map +1 -0
- package/dist/webhooks/v1/payloads/ChannelSubscriptionRenewal.js +2 -0
- package/dist/webhooks/v1/payloads/ChannelSubscriptionRenewal.js.map +1 -0
- package/dist/webhooks/v1/payloads/ChatMessageSent.d.ts +15 -0
- package/dist/webhooks/v1/payloads/ChatMessageSent.d.ts.map +1 -0
- package/dist/webhooks/v1/payloads/ChatMessageSent.js +2 -0
- package/dist/webhooks/v1/payloads/ChatMessageSent.js.map +1 -0
- package/dist/webhooks/v1/payloads/KicksGifted.d.ts +8 -0
- package/dist/webhooks/v1/payloads/KicksGifted.d.ts.map +1 -0
- package/dist/webhooks/v1/payloads/KicksGifted.js +2 -0
- package/dist/webhooks/v1/payloads/KicksGifted.js.map +1 -0
- package/dist/webhooks/v1/payloads/LivestreamMetadataUpdated.d.ts +6 -0
- package/dist/webhooks/v1/payloads/LivestreamMetadataUpdated.d.ts.map +1 -0
- package/dist/webhooks/v1/payloads/LivestreamMetadataUpdated.js +2 -0
- package/dist/webhooks/v1/payloads/LivestreamMetadataUpdated.js.map +1 -0
- package/dist/webhooks/v1/payloads/LivestreamStatusUpdated.d.ts +9 -0
- package/dist/webhooks/v1/payloads/LivestreamStatusUpdated.d.ts.map +1 -0
- package/dist/webhooks/v1/payloads/LivestreamStatusUpdated.js +2 -0
- package/dist/webhooks/v1/payloads/LivestreamStatusUpdated.js.map +1 -0
- package/dist/webhooks/v1/payloads/ModerationBanned.d.ts +12 -0
- package/dist/webhooks/v1/payloads/ModerationBanned.d.ts.map +1 -0
- package/dist/webhooks/v1/payloads/ModerationBanned.js +2 -0
- package/dist/webhooks/v1/payloads/ModerationBanned.js.map +1 -0
- package/dist/webhooks/v1/payloads/index.d.ts +12 -0
- package/dist/webhooks/v1/payloads/index.d.ts.map +1 -0
- package/dist/webhooks/v1/payloads/index.js +2 -0
- package/dist/webhooks/v1/payloads/index.js.map +1 -0
- package/dist/webhooks/verify.d.ts +21 -0
- package/dist/webhooks/verify.d.ts.map +1 -0
- package/dist/webhooks/verify.js +15 -0
- package/dist/webhooks/verify.js.map +1 -0
- package/package.json +36 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import z from 'zod';
|
|
2
|
+
import { BaseResponse } from '../BaseResponse.js';
|
|
3
|
+
import type { KickClient } from '../KickClient.js';
|
|
4
|
+
import { Message, MessageDto } from '../resources/Message.js';
|
|
5
|
+
export declare enum ChatMessageType {
|
|
6
|
+
USER = "user",
|
|
7
|
+
BOT = "bot"
|
|
8
|
+
}
|
|
9
|
+
export declare const sendMessageSchema: z.ZodObject<{
|
|
10
|
+
broadcasterUserId: z.ZodOptional<z.ZodNumber>;
|
|
11
|
+
content: z.ZodString;
|
|
12
|
+
replyToMessageId: z.ZodOptional<z.ZodString>;
|
|
13
|
+
type: z.ZodDefault<z.ZodEnum<typeof ChatMessageType>>;
|
|
14
|
+
}, z.z.core.$strip>;
|
|
15
|
+
export type SendMessageParams = z.infer<typeof sendMessageSchema>;
|
|
16
|
+
export type SendMessageResponse = BaseResponse<MessageDto>;
|
|
17
|
+
export declare class ChatService {
|
|
18
|
+
private readonly CHAT_URL;
|
|
19
|
+
protected readonly client: KickClient;
|
|
20
|
+
constructor(client: KickClient);
|
|
21
|
+
/**
|
|
22
|
+
* Post a chat message to a channel as a user or a bot.
|
|
23
|
+
* When sending as a user, the broadcaster_user_id is required.
|
|
24
|
+
* Whereas when sending as a bot, the broadcaster_user_id is not required and is ignored.
|
|
25
|
+
* As a bot, the message will always be sent to the channel attached to your token.
|
|
26
|
+
*
|
|
27
|
+
* Required scopes:
|
|
28
|
+
* `chat:write`
|
|
29
|
+
*
|
|
30
|
+
* @param params The parameters for sending a message
|
|
31
|
+
* @param params.broadcasterUserId (Optional) The ID of the broadcaster to whom the message is sent
|
|
32
|
+
* @param params.content The content of the message (max 500 characters)
|
|
33
|
+
* @param params.replyToMessageId (Optional) The ID of the message being replied to
|
|
34
|
+
* @param params.type The type of message (user or bot)
|
|
35
|
+
* @returns The sent `Message` instance.
|
|
36
|
+
*/
|
|
37
|
+
send(params: SendMessageParams): Promise<Message>;
|
|
38
|
+
/**
|
|
39
|
+
* Delete a chat message from a channel.
|
|
40
|
+
*
|
|
41
|
+
* Required scopes:
|
|
42
|
+
* `moderation:chat_message:manage`
|
|
43
|
+
*
|
|
44
|
+
* @param messageId The ID of the message to delete
|
|
45
|
+
* @returns void
|
|
46
|
+
*/
|
|
47
|
+
delete(messageId: string): Promise<void>;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=ChatService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatService.d.ts","sourceRoot":"","sources":["../../src/services/ChatService.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,oBAAY,eAAe;IACzB,IAAI,SAAS;IACb,GAAG,QAAQ;CACZ;AAED,eAAO,MAAM,iBAAiB;;;;;mBAK5B,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAElE,MAAM,MAAM,mBAAmB,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;AAE3D,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyC;IAClE,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;gBAE1B,MAAM,EAAE,UAAU;IAI9B;;;;;;;;;;;;;;;OAeG;IACG,IAAI,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAmCvD;;;;;;;;OAQG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAgB/C"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import z from 'zod';
|
|
2
|
+
import { Message } from '../resources/Message.js';
|
|
3
|
+
import { Scope } from '../Scope.js';
|
|
4
|
+
import { constructEndpoint, handleError, parseJSON } from '../utils.js';
|
|
5
|
+
import { Version } from '../Version.js';
|
|
6
|
+
export var ChatMessageType;
|
|
7
|
+
(function (ChatMessageType) {
|
|
8
|
+
ChatMessageType["USER"] = "user";
|
|
9
|
+
ChatMessageType["BOT"] = "bot";
|
|
10
|
+
})(ChatMessageType || (ChatMessageType = {}));
|
|
11
|
+
export const sendMessageSchema = z.object({
|
|
12
|
+
broadcasterUserId: z.number().optional(),
|
|
13
|
+
content: z.string().max(500),
|
|
14
|
+
replyToMessageId: z.string().optional(),
|
|
15
|
+
type: z.enum(ChatMessageType).default(ChatMessageType.BOT),
|
|
16
|
+
});
|
|
17
|
+
export class ChatService {
|
|
18
|
+
CHAT_URL = constructEndpoint(Version.V1, 'chat');
|
|
19
|
+
client;
|
|
20
|
+
constructor(client) {
|
|
21
|
+
this.client = client;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Post a chat message to a channel as a user or a bot.
|
|
25
|
+
* When sending as a user, the broadcaster_user_id is required.
|
|
26
|
+
* Whereas when sending as a bot, the broadcaster_user_id is not required and is ignored.
|
|
27
|
+
* As a bot, the message will always be sent to the channel attached to your token.
|
|
28
|
+
*
|
|
29
|
+
* Required scopes:
|
|
30
|
+
* `chat:write`
|
|
31
|
+
*
|
|
32
|
+
* @param params The parameters for sending a message
|
|
33
|
+
* @param params.broadcasterUserId (Optional) The ID of the broadcaster to whom the message is sent
|
|
34
|
+
* @param params.content The content of the message (max 500 characters)
|
|
35
|
+
* @param params.replyToMessageId (Optional) The ID of the message being replied to
|
|
36
|
+
* @param params.type The type of message (user or bot)
|
|
37
|
+
* @returns The sent `Message` instance.
|
|
38
|
+
*/
|
|
39
|
+
async send(params) {
|
|
40
|
+
this.client.requiresScope(Scope.CHAT_WRITE);
|
|
41
|
+
const schema = sendMessageSchema.safeParse(params);
|
|
42
|
+
if (!schema.success) {
|
|
43
|
+
throw new Error(`Invalid parameters: ${schema.error.message}`);
|
|
44
|
+
}
|
|
45
|
+
const { broadcasterUserId, content, replyToMessageId, type } = schema.data;
|
|
46
|
+
const endpoint = new URL(this.CHAT_URL);
|
|
47
|
+
const response = await fetch(endpoint, {
|
|
48
|
+
method: 'POST',
|
|
49
|
+
headers: {
|
|
50
|
+
Authorization: `Bearer ${this.client.token?.access_token}`,
|
|
51
|
+
'Content-Type': 'application/json',
|
|
52
|
+
},
|
|
53
|
+
body: JSON.stringify({
|
|
54
|
+
broadcaster_user_id: broadcasterUserId,
|
|
55
|
+
content: content,
|
|
56
|
+
reply_to_message_id: replyToMessageId,
|
|
57
|
+
type: type,
|
|
58
|
+
}),
|
|
59
|
+
});
|
|
60
|
+
if (!response.ok) {
|
|
61
|
+
handleError(response);
|
|
62
|
+
}
|
|
63
|
+
const json = await parseJSON(response);
|
|
64
|
+
const message = new Message(this.client, json.data);
|
|
65
|
+
return message;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Delete a chat message from a channel.
|
|
69
|
+
*
|
|
70
|
+
* Required scopes:
|
|
71
|
+
* `moderation:chat_message:manage`
|
|
72
|
+
*
|
|
73
|
+
* @param messageId The ID of the message to delete
|
|
74
|
+
* @returns void
|
|
75
|
+
*/
|
|
76
|
+
async delete(messageId) {
|
|
77
|
+
this.client.requiresScope(Scope.MODERATION_CHAT_MESSAGE_MANAGE);
|
|
78
|
+
const endpoint = new URL(`${this.CHAT_URL}/${messageId}`);
|
|
79
|
+
const response = await fetch(endpoint, {
|
|
80
|
+
method: 'DELETE',
|
|
81
|
+
headers: {
|
|
82
|
+
Authorization: `Bearer ${this.client.token?.access_token}`,
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
if (!response.ok) {
|
|
86
|
+
handleError(response);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=ChatService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatService.js","sourceRoot":"","sources":["../../src/services/ChatService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import z from 'zod';
|
|
2
|
+
import { BaseResponse } from '../BaseResponse.js';
|
|
3
|
+
import type { KickClient } from '../KickClient.js';
|
|
4
|
+
import { EventSubscription, EventSubscriptionDto } from '../resources/EventSubscription.js';
|
|
5
|
+
export declare enum EventSubscriptionMethod {
|
|
6
|
+
WEBHOOK = "webhook"
|
|
7
|
+
}
|
|
8
|
+
export declare const eventDetailsSchema: z.ZodObject<{
|
|
9
|
+
name: z.ZodString;
|
|
10
|
+
version: z.ZodNumber;
|
|
11
|
+
}, z.z.core.$strip>;
|
|
12
|
+
export type EventDetailsDto = z.infer<typeof eventDetailsSchema>;
|
|
13
|
+
export declare const subscribeToMultipleEventsSchema: z.ZodObject<{
|
|
14
|
+
broadcasterUserId: z.ZodOptional<z.ZodNumber>;
|
|
15
|
+
events: z.ZodArray<z.ZodObject<{
|
|
16
|
+
name: z.ZodString;
|
|
17
|
+
version: z.ZodNumber;
|
|
18
|
+
}, z.z.core.$strip>>;
|
|
19
|
+
method: z.ZodOptional<z.ZodEnum<typeof EventSubscriptionMethod>>;
|
|
20
|
+
}, z.z.core.$strip>;
|
|
21
|
+
export type SubscribeToMultipleEventsParams = z.infer<typeof subscribeToMultipleEventsSchema>;
|
|
22
|
+
export declare const subscribeToSingleEventSchema: z.ZodObject<{
|
|
23
|
+
broadcasterUserId: z.ZodOptional<z.ZodNumber>;
|
|
24
|
+
event: z.ZodObject<{
|
|
25
|
+
name: z.ZodString;
|
|
26
|
+
version: z.ZodNumber;
|
|
27
|
+
}, z.z.core.$strip>;
|
|
28
|
+
method: z.ZodOptional<z.ZodEnum<typeof EventSubscriptionMethod>>;
|
|
29
|
+
}, z.z.core.$strip>;
|
|
30
|
+
export type SubscribeToSingleEventParams = z.infer<typeof subscribeToSingleEventSchema>;
|
|
31
|
+
export type PostEventSubscriptionData = {
|
|
32
|
+
error?: string;
|
|
33
|
+
name: string;
|
|
34
|
+
subscription_id?: string;
|
|
35
|
+
version: number;
|
|
36
|
+
};
|
|
37
|
+
export type EventSubscriptionResponse = BaseResponse<PostEventSubscriptionData[]>;
|
|
38
|
+
export type FetchEventsResponse = BaseResponse<EventSubscriptionDto[]>;
|
|
39
|
+
export declare class EventsService {
|
|
40
|
+
private readonly EVENTS_URL;
|
|
41
|
+
protected readonly client: KickClient;
|
|
42
|
+
constructor(client: KickClient);
|
|
43
|
+
/**
|
|
44
|
+
* Fetch all event subscriptions for the authenticated user.
|
|
45
|
+
*
|
|
46
|
+
* @returns An array of `EventSubscription` instances.
|
|
47
|
+
*/
|
|
48
|
+
fetch(): Promise<EventSubscription[]>;
|
|
49
|
+
/**
|
|
50
|
+
* Subscribe to multiple events.
|
|
51
|
+
*
|
|
52
|
+
* Required scopes:
|
|
53
|
+
* `events:subscribe`
|
|
54
|
+
*
|
|
55
|
+
* @param params The parameters for subscribing to multiple events
|
|
56
|
+
* @param params.broadcasterUserId (Optional) The ID of the broadcaster to whom the events are related
|
|
57
|
+
* @param params.events An array of event details (name and version)
|
|
58
|
+
* @param params.method (Optional) The method of subscription (default is 'webhook')
|
|
59
|
+
* @returns An array of `PostEventSubscriptionData` instances.
|
|
60
|
+
*/
|
|
61
|
+
subscribeMultiple(params: SubscribeToMultipleEventsParams): Promise<PostEventSubscriptionData[]>;
|
|
62
|
+
/**
|
|
63
|
+
* Subscribe to a single event.
|
|
64
|
+
*
|
|
65
|
+
* Required scopes:
|
|
66
|
+
* `events:subscribe`
|
|
67
|
+
*
|
|
68
|
+
* @param params The parameters for subscribing to a single event
|
|
69
|
+
* @param params.broadcasterUserId (Optional) The ID of the broadcaster to whom the event is related
|
|
70
|
+
* @param params.event The event details (name and version)
|
|
71
|
+
* @param params.method (Optional) The method of subscription (default is 'webhook')
|
|
72
|
+
* @returns The created `PostEventSubscriptionData` instance.
|
|
73
|
+
*/
|
|
74
|
+
subscribe(params: SubscribeToSingleEventParams): Promise<PostEventSubscriptionData>;
|
|
75
|
+
/**
|
|
76
|
+
* Unsubscribe from multiple events.
|
|
77
|
+
*
|
|
78
|
+
* Required scopes:
|
|
79
|
+
* `events:subscribe`
|
|
80
|
+
*
|
|
81
|
+
* @param ids Array of subscription IDs to unsubscribe from
|
|
82
|
+
* @returns void
|
|
83
|
+
*/
|
|
84
|
+
unsubscribeMultiple(ids: string[]): Promise<void>;
|
|
85
|
+
/**
|
|
86
|
+
* Unsubscribe from a single event.
|
|
87
|
+
*
|
|
88
|
+
* Required scopes:
|
|
89
|
+
* `events:subscribe`
|
|
90
|
+
*
|
|
91
|
+
* @param id The subscription ID to unsubscribe from
|
|
92
|
+
* @returns void
|
|
93
|
+
*/
|
|
94
|
+
unsubscribe(id: string): Promise<void>;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=EventsService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventsService.d.ts","sourceRoot":"","sources":["../../src/services/EventsService.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,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAK5F,oBAAY,uBAAuB;IACjC,OAAO,YAAY;CACpB;AAED,eAAO,MAAM,kBAAkB;;;mBAG7B,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEjE,eAAO,MAAM,+BAA+B;;;;;;;mBAI1C,CAAC;AACH,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAE9F,eAAO,MAAM,4BAA4B;;;;;;;mBAIvC,CAAC;AACH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAExF,MAAM,MAAM,yBAAyB,GAAG;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AACF,MAAM,MAAM,yBAAyB,GAAG,YAAY,CAAC,yBAAyB,EAAE,CAAC,CAAC;AAClF,MAAM,MAAM,mBAAmB,GAAG,YAAY,CAAC,oBAAoB,EAAE,CAAC,CAAC;AAEvE,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyD;IACpF,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;gBAE1B,MAAM,EAAE,UAAU;IAI9B;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAgB3C;;;;;;;;;;;OAWG;IACG,iBAAiB,CAAC,MAAM,EAAE,+BAA+B,GAAG,OAAO,CAAC,yBAAyB,EAAE,CAAC;IAiCtG;;;;;;;;;;;OAWG;IACG,SAAS,CAAC,MAAM,EAAE,4BAA4B,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAUzF;;;;;;;;OAQG;IACG,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBvD;;;;;;;;OAQG;IACG,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG7C"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import z from 'zod';
|
|
2
|
+
import { EventSubscription } from '../resources/EventSubscription.js';
|
|
3
|
+
import { Scope } from '../Scope.js';
|
|
4
|
+
import { constructEndpoint, handleError, parseJSON } from '../utils.js';
|
|
5
|
+
import { Version } from '../Version.js';
|
|
6
|
+
export var EventSubscriptionMethod;
|
|
7
|
+
(function (EventSubscriptionMethod) {
|
|
8
|
+
EventSubscriptionMethod["WEBHOOK"] = "webhook";
|
|
9
|
+
})(EventSubscriptionMethod || (EventSubscriptionMethod = {}));
|
|
10
|
+
export const eventDetailsSchema = z.object({
|
|
11
|
+
name: z.string(),
|
|
12
|
+
version: z.number(),
|
|
13
|
+
});
|
|
14
|
+
export const subscribeToMultipleEventsSchema = z.object({
|
|
15
|
+
broadcasterUserId: z.number().optional(),
|
|
16
|
+
events: z.array(eventDetailsSchema),
|
|
17
|
+
method: z.enum(EventSubscriptionMethod).optional(),
|
|
18
|
+
});
|
|
19
|
+
export const subscribeToSingleEventSchema = z.object({
|
|
20
|
+
broadcasterUserId: z.number().optional(),
|
|
21
|
+
event: eventDetailsSchema,
|
|
22
|
+
method: z.enum(EventSubscriptionMethod).optional(),
|
|
23
|
+
});
|
|
24
|
+
export class EventsService {
|
|
25
|
+
EVENTS_URL = constructEndpoint(Version.V1, 'events/subscriptions');
|
|
26
|
+
client;
|
|
27
|
+
constructor(client) {
|
|
28
|
+
this.client = client;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Fetch all event subscriptions for the authenticated user.
|
|
32
|
+
*
|
|
33
|
+
* @returns An array of `EventSubscription` instances.
|
|
34
|
+
*/
|
|
35
|
+
async fetch() {
|
|
36
|
+
const response = await fetch(this.EVENTS_URL, {
|
|
37
|
+
headers: {
|
|
38
|
+
Authorization: `Bearer ${this.client.token?.access_token}`,
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
if (!response.ok) {
|
|
42
|
+
handleError(response);
|
|
43
|
+
}
|
|
44
|
+
const json = await parseJSON(response);
|
|
45
|
+
const data = json.data.map((item) => new EventSubscription(this.client, item));
|
|
46
|
+
return data;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Subscribe to multiple events.
|
|
50
|
+
*
|
|
51
|
+
* Required scopes:
|
|
52
|
+
* `events:subscribe`
|
|
53
|
+
*
|
|
54
|
+
* @param params The parameters for subscribing to multiple events
|
|
55
|
+
* @param params.broadcasterUserId (Optional) The ID of the broadcaster to whom the events are related
|
|
56
|
+
* @param params.events An array of event details (name and version)
|
|
57
|
+
* @param params.method (Optional) The method of subscription (default is 'webhook')
|
|
58
|
+
* @returns An array of `PostEventSubscriptionData` instances.
|
|
59
|
+
*/
|
|
60
|
+
async subscribeMultiple(params) {
|
|
61
|
+
this.client.requiresScope(Scope.EVENTS_SUBSCRIBE);
|
|
62
|
+
const schema = subscribeToMultipleEventsSchema.safeParse(params);
|
|
63
|
+
if (!schema.success) {
|
|
64
|
+
throw new Error(`Invalid parameters: ${schema.error.message}`);
|
|
65
|
+
}
|
|
66
|
+
const { broadcasterUserId, events, method } = schema.data;
|
|
67
|
+
const endpoint = new URL(this.EVENTS_URL);
|
|
68
|
+
const response = await fetch(endpoint, {
|
|
69
|
+
method: 'POST',
|
|
70
|
+
headers: {
|
|
71
|
+
Authorization: `Bearer ${this.client.token?.access_token}`,
|
|
72
|
+
'Content-Type': 'application/json',
|
|
73
|
+
},
|
|
74
|
+
body: JSON.stringify({
|
|
75
|
+
broadcaster_user_id: broadcasterUserId,
|
|
76
|
+
events: events,
|
|
77
|
+
method: method,
|
|
78
|
+
}),
|
|
79
|
+
});
|
|
80
|
+
if (!response.ok) {
|
|
81
|
+
handleError(response);
|
|
82
|
+
}
|
|
83
|
+
const json = await parseJSON(response);
|
|
84
|
+
return json.data;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Subscribe to a single event.
|
|
88
|
+
*
|
|
89
|
+
* Required scopes:
|
|
90
|
+
* `events:subscribe`
|
|
91
|
+
*
|
|
92
|
+
* @param params The parameters for subscribing to a single event
|
|
93
|
+
* @param params.broadcasterUserId (Optional) The ID of the broadcaster to whom the event is related
|
|
94
|
+
* @param params.event The event details (name and version)
|
|
95
|
+
* @param params.method (Optional) The method of subscription (default is 'webhook')
|
|
96
|
+
* @returns The created `PostEventSubscriptionData` instance.
|
|
97
|
+
*/
|
|
98
|
+
async subscribe(params) {
|
|
99
|
+
const { broadcasterUserId, event, method } = params;
|
|
100
|
+
const results = await this.subscribeMultiple({
|
|
101
|
+
broadcasterUserId,
|
|
102
|
+
events: [event],
|
|
103
|
+
method,
|
|
104
|
+
});
|
|
105
|
+
return results[0];
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Unsubscribe from multiple events.
|
|
109
|
+
*
|
|
110
|
+
* Required scopes:
|
|
111
|
+
* `events:subscribe`
|
|
112
|
+
*
|
|
113
|
+
* @param ids Array of subscription IDs to unsubscribe from
|
|
114
|
+
* @returns void
|
|
115
|
+
*/
|
|
116
|
+
async unsubscribeMultiple(ids) {
|
|
117
|
+
this.client.requiresScope(Scope.EVENTS_SUBSCRIBE);
|
|
118
|
+
if (ids.length === 0)
|
|
119
|
+
return;
|
|
120
|
+
const endpoint = new URL(this.EVENTS_URL);
|
|
121
|
+
ids.forEach((id) => endpoint.searchParams.append('id', id));
|
|
122
|
+
const response = await fetch(endpoint, {
|
|
123
|
+
method: 'DELETE',
|
|
124
|
+
headers: {
|
|
125
|
+
Authorization: `Bearer ${this.client.token?.access_token}`,
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
if (!response.ok) {
|
|
129
|
+
handleError(response);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Unsubscribe from a single event.
|
|
134
|
+
*
|
|
135
|
+
* Required scopes:
|
|
136
|
+
* `events:subscribe`
|
|
137
|
+
*
|
|
138
|
+
* @param id The subscription ID to unsubscribe from
|
|
139
|
+
* @returns void
|
|
140
|
+
*/
|
|
141
|
+
async unsubscribe(id) {
|
|
142
|
+
return this.unsubscribeMultiple([id]);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=EventsService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventsService.js","sourceRoot":"","sources":["../../src/services/EventsService.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAIpB,OAAO,EAAE,iBAAiB,EAAwB,MAAM,mCAAmC,CAAC;AAC5F,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;AAExC,MAAM,CAAN,IAAY,uBAEX;AAFD,WAAY,uBAAuB;IACjC,8CAAmB,CAAA;AACrB,CAAC,EAFW,uBAAuB,KAAvB,uBAAuB,QAElC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACpB,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC,MAAM,CAAC;IACtD,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACxC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC;IACnC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,QAAQ,EAAE;CACnD,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACxC,KAAK,EAAE,kBAAkB;IACzB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,QAAQ,EAAE;CACnD,CAAC,CAAC;AAYH,MAAM,OAAO,aAAa;IACP,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,EAAE,EAAE,sBAAsB,CAAC,CAAC;IACjE,MAAM,CAAa;IAEtC,YAAY,MAAkB;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE;YAC5C,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,CAAsB,QAAQ,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QAC/E,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,iBAAiB,CAAC,MAAuC;QAC7D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAElD,MAAM,MAAM,GAAG,+BAA+B,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAEjE,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,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;QAC1D,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE1C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;YACrC,MAAM,EAAE,MAAM;YACd,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,mBAAmB,EAAE,iBAAiB;gBACtC,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,MAAM;aACf,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,WAAW,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,SAAS,CAA4B,QAAQ,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,SAAS,CAAC,MAAoC;QAClD,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;QACpD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC;YAC3C,iBAAiB;YACjB,MAAM,EAAE,CAAC,KAAK,CAAC;YACf,MAAM;SACP,CAAC,CAAC;QACH,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,mBAAmB,CAAC,GAAa;QACrC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAElD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAE7B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE1C,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QAE5D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;YACrC,MAAM,EAAE,QAAQ;YAChB,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;IACH,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,WAAW,CAAC,EAAU;QAC1B,OAAO,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC;CACF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import z from 'zod';
|
|
2
|
+
import { BaseResponse } from '../BaseResponse.js';
|
|
3
|
+
import type { KickClient } from '../KickClient.js';
|
|
4
|
+
import { Leaderboard, type LeaderboardDto } from '../resources/Leaderboard.js';
|
|
5
|
+
export declare const fetchLeaderboardSchema: z.ZodObject<{
|
|
6
|
+
top: z.ZodOptional<z.ZodNumber>;
|
|
7
|
+
}, z.z.core.$strip>;
|
|
8
|
+
export type FetchLeaderboardParams = z.infer<typeof fetchLeaderboardSchema>;
|
|
9
|
+
export type FetchLeaderboardResponse = BaseResponse<LeaderboardDto>;
|
|
10
|
+
export declare class KICKsService {
|
|
11
|
+
private readonly KICKS_URL;
|
|
12
|
+
protected readonly client: KickClient;
|
|
13
|
+
constructor(client: KickClient);
|
|
14
|
+
/**
|
|
15
|
+
* Gets the KICKs leaderboard for the authenticated broadcaster.
|
|
16
|
+
*
|
|
17
|
+
* Required scopes:
|
|
18
|
+
* `kicks:read`
|
|
19
|
+
*
|
|
20
|
+
* @param params Parameters for fetching leaderboard.
|
|
21
|
+
* @param params.top (Optional) The number of entries from the top of the leaderboard to return. For example, 10 will fetch the top 10 entries.
|
|
22
|
+
* @returns A `Leaderboard` instance.
|
|
23
|
+
*/
|
|
24
|
+
fetchLeaderboard(params: FetchLeaderboardParams): Promise<Leaderboard>;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=KICKsService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KICKsService.d.ts","sourceRoot":"","sources":["../../src/services/KICKsService.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,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAK/E,eAAO,MAAM,sBAAsB;;mBAEjC,CAAC;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAE5E,MAAM,MAAM,wBAAwB,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;AAEpE,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0C;IACpE,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;gBAE1B,MAAM,EAAE,UAAU;IAI9B;;;;;;;;;OASG;IACG,gBAAgB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,WAAW,CAAC;CA8B7E"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import z from 'zod';
|
|
2
|
+
import { Leaderboard } from '../resources/Leaderboard.js';
|
|
3
|
+
import { Scope } from '../Scope.js';
|
|
4
|
+
import { constructEndpoint, handleError, parseJSON } from '../utils.js';
|
|
5
|
+
import { Version } from '../Version.js';
|
|
6
|
+
export const fetchLeaderboardSchema = z.object({
|
|
7
|
+
top: z.number().int().min(1).max(100).optional(),
|
|
8
|
+
});
|
|
9
|
+
export class KICKsService {
|
|
10
|
+
KICKS_URL = constructEndpoint(Version.V1, 'kicks');
|
|
11
|
+
client;
|
|
12
|
+
constructor(client) {
|
|
13
|
+
this.client = client;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Gets the KICKs leaderboard for the authenticated broadcaster.
|
|
17
|
+
*
|
|
18
|
+
* Required scopes:
|
|
19
|
+
* `kicks:read`
|
|
20
|
+
*
|
|
21
|
+
* @param params Parameters for fetching leaderboard.
|
|
22
|
+
* @param params.top (Optional) The number of entries from the top of the leaderboard to return. For example, 10 will fetch the top 10 entries.
|
|
23
|
+
* @returns A `Leaderboard` instance.
|
|
24
|
+
*/
|
|
25
|
+
async fetchLeaderboard(params) {
|
|
26
|
+
this.client.requiresScope(Scope.KICKS_READ);
|
|
27
|
+
const schema = fetchLeaderboardSchema.safeParse(params);
|
|
28
|
+
if (!schema.success) {
|
|
29
|
+
throw new Error(`Invalid parameters: ${schema.error.message}`);
|
|
30
|
+
}
|
|
31
|
+
const { top } = schema.data;
|
|
32
|
+
const endpoint = new URL(this.KICKS_URL + '/leaderboard');
|
|
33
|
+
if (top) {
|
|
34
|
+
endpoint.searchParams.append('top', top.toString());
|
|
35
|
+
}
|
|
36
|
+
const response = await fetch(endpoint, {
|
|
37
|
+
headers: {
|
|
38
|
+
Authorization: `Bearer ${this.client.token?.access_token}`,
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
if (!response.ok) {
|
|
42
|
+
handleError(response);
|
|
43
|
+
}
|
|
44
|
+
const json = await parseJSON(response);
|
|
45
|
+
const leaderboard = new Leaderboard(this.client, json.data);
|
|
46
|
+
return leaderboard;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=KICKsService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KICKsService.js","sourceRoot":"","sources":["../../src/services/KICKsService.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAIpB,OAAO,EAAE,WAAW,EAAuB,MAAM,6BAA6B,CAAC;AAC/E,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;AAExC,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;CACjD,CAAC,CAAC;AAKH,MAAM,OAAO,YAAY;IACN,SAAS,GAAG,iBAAiB,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACjD,MAAM,CAAa;IAEtC,YAAY,MAAkB;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,gBAAgB,CAAC,MAA8B;QACnD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAE5C,MAAM,MAAM,GAAG,sBAAsB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAExD,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,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,cAAc,CAAC,CAAC;QAE1D,IAAI,GAAG,EAAE,CAAC;YACR,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtD,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,CAA2B,QAAQ,CAAC,CAAC;QACjE,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5D,OAAO,WAAW,CAAC;IACrB,CAAC;CACF"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import z from 'zod';
|
|
2
|
+
import { BaseResponse } from '../BaseResponse.js';
|
|
3
|
+
import type { KickClient } from '../KickClient.js';
|
|
4
|
+
import { Livestream, type LivestreamDto, type LivestreamStatsDto } from '../resources/Livestream.js';
|
|
5
|
+
export declare enum Sort {
|
|
6
|
+
VIEWER_COUNT = "viewer_count",
|
|
7
|
+
STARTED_AT = "started_at"
|
|
8
|
+
}
|
|
9
|
+
export declare const fetchLivestreamsSchema: z.ZodObject<{
|
|
10
|
+
broadcasterUserId: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
|
|
11
|
+
categoryId: z.ZodOptional<z.ZodNumber>;
|
|
12
|
+
language: z.ZodOptional<z.ZodString>;
|
|
13
|
+
limit: z.ZodOptional<z.ZodNumber>;
|
|
14
|
+
sort: z.ZodOptional<z.ZodEnum<typeof Sort>>;
|
|
15
|
+
}, z.z.core.$strip>;
|
|
16
|
+
export type FetchLivestreamsParams = z.infer<typeof fetchLivestreamsSchema>;
|
|
17
|
+
export type FetchLivestreamsResponse = BaseResponse<LivestreamDto[]>;
|
|
18
|
+
export type FetchLivestreamStatsResponse = BaseResponse<LivestreamStatsDto>;
|
|
19
|
+
export declare class LivestreamsService {
|
|
20
|
+
private readonly LIVESTREAMS_URL;
|
|
21
|
+
protected readonly client: KickClient;
|
|
22
|
+
constructor(client: KickClient);
|
|
23
|
+
/**
|
|
24
|
+
* Fetches livestreams from the Kick API.
|
|
25
|
+
*
|
|
26
|
+
* @param params Parameters for fetching livestreams.
|
|
27
|
+
* @param params.broadcaster_user_id (Optional) Array of broadcaster user IDs to filter by. Max: 50 IDs.
|
|
28
|
+
* @param params.category_id (Optional) Category ID to filter by.
|
|
29
|
+
* @param params.language (Optional) Language code to filter by.
|
|
30
|
+
* @param params.limit (Optional) Maximum number of results to return. Min: 1, Max: 100.
|
|
31
|
+
* @param params.sort (Optional) Sort order.
|
|
32
|
+
* @returns An array of `Livestream` instances.
|
|
33
|
+
*/
|
|
34
|
+
fetch(params: FetchLivestreamsParams): Promise<Livestream[]>;
|
|
35
|
+
fetchStats(): Promise<{
|
|
36
|
+
total_count: number;
|
|
37
|
+
}>;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=LivestreamsService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LivestreamsService.d.ts","sourceRoot":"","sources":["../../src/services/LivestreamsService.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,UAAU,EAAE,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAIrG,oBAAY,IAAI;IACd,YAAY,iBAAiB;IAC7B,UAAU,eAAe;CAC1B;AAED,eAAO,MAAM,sBAAsB;;;;;;mBAMjC,CAAC;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAE5E,MAAM,MAAM,wBAAwB,GAAG,YAAY,CAAC,aAAa,EAAE,CAAC,CAAC;AACrE,MAAM,MAAM,4BAA4B,GAAG,YAAY,CAAC,kBAAkB,CAAC,CAAC;AAE5E,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgD;IAChF,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;gBAE1B,MAAM,EAAE,UAAU;IAI9B;;;;;;;;;;OAUG;IACG,KAAK,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAqD5D,UAAU,IAAI,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CAgBrD"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import z from 'zod';
|
|
2
|
+
import { Livestream } from '../resources/Livestream.js';
|
|
3
|
+
import { constructEndpoint, handleError, parseJSON } from '../utils.js';
|
|
4
|
+
import { Version } from '../Version.js';
|
|
5
|
+
export var Sort;
|
|
6
|
+
(function (Sort) {
|
|
7
|
+
Sort["VIEWER_COUNT"] = "viewer_count";
|
|
8
|
+
Sort["STARTED_AT"] = "started_at";
|
|
9
|
+
})(Sort || (Sort = {}));
|
|
10
|
+
export const fetchLivestreamsSchema = z.object({
|
|
11
|
+
broadcasterUserId: z.array(z.number().int().positive()).optional(),
|
|
12
|
+
categoryId: z.number().int().positive().optional(),
|
|
13
|
+
language: z.string().optional(),
|
|
14
|
+
limit: z.number().int().min(1).max(100).optional(),
|
|
15
|
+
sort: z.enum(Sort).optional(),
|
|
16
|
+
});
|
|
17
|
+
export class LivestreamsService {
|
|
18
|
+
LIVESTREAMS_URL = constructEndpoint(Version.V1, 'livestreams');
|
|
19
|
+
client;
|
|
20
|
+
constructor(client) {
|
|
21
|
+
this.client = client;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Fetches livestreams from the Kick API.
|
|
25
|
+
*
|
|
26
|
+
* @param params Parameters for fetching livestreams.
|
|
27
|
+
* @param params.broadcaster_user_id (Optional) Array of broadcaster user IDs to filter by. Max: 50 IDs.
|
|
28
|
+
* @param params.category_id (Optional) Category ID to filter by.
|
|
29
|
+
* @param params.language (Optional) Language code to filter by.
|
|
30
|
+
* @param params.limit (Optional) Maximum number of results to return. Min: 1, Max: 100.
|
|
31
|
+
* @param params.sort (Optional) Sort order.
|
|
32
|
+
* @returns An array of `Livestream` instances.
|
|
33
|
+
*/
|
|
34
|
+
async fetch(params) {
|
|
35
|
+
const schema = fetchLivestreamsSchema.safeParse(params);
|
|
36
|
+
if (!schema.success) {
|
|
37
|
+
const errorMessages = schema.error.issues.map((issue) => ({
|
|
38
|
+
key: issue.path.join('.'),
|
|
39
|
+
message: issue.message,
|
|
40
|
+
}));
|
|
41
|
+
throw new Error(`Invalid parameters: ${JSON.stringify(errorMessages)}`);
|
|
42
|
+
}
|
|
43
|
+
const { broadcasterUserId, categoryId, language, limit, sort } = schema.data;
|
|
44
|
+
if (broadcasterUserId && broadcasterUserId.length > 50) {
|
|
45
|
+
throw new Error('You can only request up to 50 broadcasterUserId values at a time.');
|
|
46
|
+
}
|
|
47
|
+
if (limit && (limit < 1 || limit > 100)) {
|
|
48
|
+
throw new Error('The limit must be between 1 and 100.');
|
|
49
|
+
}
|
|
50
|
+
const endpoint = new URL(this.LIVESTREAMS_URL);
|
|
51
|
+
if (broadcasterUserId && broadcasterUserId.length > 0) {
|
|
52
|
+
broadcasterUserId.forEach((id) => endpoint.searchParams.append('broadcaster_user_id', String(id)));
|
|
53
|
+
}
|
|
54
|
+
if (categoryId) {
|
|
55
|
+
endpoint.searchParams.append('category_id', String(categoryId));
|
|
56
|
+
}
|
|
57
|
+
if (language) {
|
|
58
|
+
endpoint.searchParams.append('language', language);
|
|
59
|
+
}
|
|
60
|
+
if (limit) {
|
|
61
|
+
endpoint.searchParams.append('limit', String(limit));
|
|
62
|
+
}
|
|
63
|
+
if (sort) {
|
|
64
|
+
endpoint.searchParams.append('sort', sort);
|
|
65
|
+
}
|
|
66
|
+
const response = await fetch(endpoint, {
|
|
67
|
+
headers: {
|
|
68
|
+
Authorization: `Bearer ${this.client.token?.access_token}`,
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
if (!response.ok) {
|
|
72
|
+
handleError(response);
|
|
73
|
+
}
|
|
74
|
+
const json = await parseJSON(response);
|
|
75
|
+
const livestreams = json.data.map((livestream) => new Livestream(this.client, livestream));
|
|
76
|
+
return livestreams;
|
|
77
|
+
}
|
|
78
|
+
async fetchStats() {
|
|
79
|
+
const endpoint = new URL(this.LIVESTREAMS_URL + '/stats');
|
|
80
|
+
const response = await fetch(endpoint, {
|
|
81
|
+
headers: {
|
|
82
|
+
Authorization: `Bearer ${this.client.token?.access_token}`,
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
if (!response.ok) {
|
|
86
|
+
handleError(response);
|
|
87
|
+
}
|
|
88
|
+
const json = await parseJSON(response);
|
|
89
|
+
return json.data;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=LivestreamsService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LivestreamsService.js","sourceRoot":"","sources":["../../src/services/LivestreamsService.ts"],"names":[],"mappings":"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"}
|