hischool.js 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -0
- package/lib/cjs/Client.d.ts +166 -0
- package/lib/cjs/Client.d.ts.map +1 -0
- package/lib/cjs/Client.js +221 -0
- package/lib/cjs/api/baseURL.d.ts +2 -0
- package/lib/cjs/api/baseURL.d.ts.map +1 -0
- package/lib/cjs/api/baseURL.js +5 -0
- package/lib/cjs/api/index.d.ts +177 -0
- package/lib/cjs/api/index.d.ts.map +1 -0
- package/lib/cjs/api/index.js +150 -0
- package/lib/cjs/api/params.d.ts +285 -0
- package/lib/cjs/api/params.d.ts.map +1 -0
- package/lib/cjs/api/params.js +194 -0
- package/lib/cjs/api/routes.d.ts +1089 -0
- package/lib/cjs/api/routes.d.ts.map +1 -0
- package/lib/cjs/api/routes.js +2 -0
- package/lib/cjs/api/schema.d.ts +4705 -0
- package/lib/cjs/api/schema.d.ts.map +1 -0
- package/lib/cjs/api/schema.js +2 -0
- package/lib/cjs/api/types.d.ts +131 -0
- package/lib/cjs/api/types.d.ts.map +1 -0
- package/lib/cjs/api/types.js +2 -0
- package/lib/cjs/classes/BannedUser.d.ts +18 -0
- package/lib/cjs/classes/BannedUser.d.ts.map +1 -0
- package/lib/cjs/classes/BannedUser.js +21 -0
- package/lib/cjs/classes/Bot.d.ts +82 -0
- package/lib/cjs/classes/Bot.d.ts.map +1 -0
- package/lib/cjs/classes/Bot.js +145 -0
- package/lib/cjs/classes/Channel.d.ts +465 -0
- package/lib/cjs/classes/Channel.d.ts.map +1 -0
- package/lib/cjs/classes/Channel.js +599 -0
- package/lib/cjs/classes/ChannelUnread.d.ts +27 -0
- package/lib/cjs/classes/ChannelUnread.d.ts.map +1 -0
- package/lib/cjs/classes/ChannelUnread.js +50 -0
- package/lib/cjs/classes/ChannelWebhook.d.ts +53 -0
- package/lib/cjs/classes/ChannelWebhook.d.ts.map +1 -0
- package/lib/cjs/classes/ChannelWebhook.js +113 -0
- package/lib/cjs/classes/Emoji.d.ts +57 -0
- package/lib/cjs/classes/Emoji.d.ts.map +1 -0
- package/lib/cjs/classes/Emoji.js +104 -0
- package/lib/cjs/classes/File.d.ts +67 -0
- package/lib/cjs/classes/File.d.ts.map +1 -0
- package/lib/cjs/classes/File.js +102 -0
- package/lib/cjs/classes/Invite.d.ts +60 -0
- package/lib/cjs/classes/Invite.d.ts.map +1 -0
- package/lib/cjs/classes/Invite.js +91 -0
- package/lib/cjs/classes/MFA.d.ts +83 -0
- package/lib/cjs/classes/MFA.d.ts.map +1 -0
- package/lib/cjs/classes/MFA.js +196 -0
- package/lib/cjs/classes/Message.d.ts +484 -0
- package/lib/cjs/classes/Message.d.ts.map +1 -0
- package/lib/cjs/classes/Message.js +341 -0
- package/lib/cjs/classes/MessageEmbed.d.ts +122 -0
- package/lib/cjs/classes/MessageEmbed.d.ts.map +1 -0
- package/lib/cjs/classes/MessageEmbed.js +181 -0
- package/lib/cjs/classes/PublicBot.d.ts +28 -0
- package/lib/cjs/classes/PublicBot.d.ts.map +1 -0
- package/lib/cjs/classes/PublicBot.js +60 -0
- package/lib/cjs/classes/PublicInvite.d.ts +57 -0
- package/lib/cjs/classes/PublicInvite.d.ts.map +1 -0
- package/lib/cjs/classes/PublicInvite.js +104 -0
- package/lib/cjs/classes/Server.d.ts +473 -0
- package/lib/cjs/classes/Server.d.ts.map +1 -0
- package/lib/cjs/classes/Server.js +585 -0
- package/lib/cjs/classes/ServerBan.d.ts +26 -0
- package/lib/cjs/classes/ServerBan.d.ts.map +1 -0
- package/lib/cjs/classes/ServerBan.js +44 -0
- package/lib/cjs/classes/ServerMember.d.ts +138 -0
- package/lib/cjs/classes/ServerMember.d.ts.map +1 -0
- package/lib/cjs/classes/ServerMember.js +234 -0
- package/lib/cjs/classes/Session.d.ts +45 -0
- package/lib/cjs/classes/Session.d.ts.map +1 -0
- package/lib/cjs/classes/Session.js +94 -0
- package/lib/cjs/classes/SystemMessage.d.ts +127 -0
- package/lib/cjs/classes/SystemMessage.d.ts.map +1 -0
- package/lib/cjs/classes/SystemMessage.js +172 -0
- package/lib/cjs/classes/User.d.ts +203 -0
- package/lib/cjs/classes/User.d.ts.map +1 -0
- package/lib/cjs/classes/User.js +299 -0
- package/lib/cjs/classes/UserProfile.d.ts +23 -0
- package/lib/cjs/classes/UserProfile.d.ts.map +1 -0
- package/lib/cjs/classes/UserProfile.js +35 -0
- package/lib/cjs/classes/index.d.ts +21 -0
- package/lib/cjs/classes/index.d.ts.map +1 -0
- package/lib/cjs/classes/index.js +36 -0
- package/lib/cjs/collections/AccountCollection.d.ts +91 -0
- package/lib/cjs/collections/AccountCollection.d.ts.map +1 -0
- package/lib/cjs/collections/AccountCollection.js +150 -0
- package/lib/cjs/collections/BotCollection.d.ts +39 -0
- package/lib/cjs/collections/BotCollection.d.ts.map +1 -0
- package/lib/cjs/collections/BotCollection.js +89 -0
- package/lib/cjs/collections/ChannelCollection.d.ts +39 -0
- package/lib/cjs/collections/ChannelCollection.d.ts.map +1 -0
- package/lib/cjs/collections/ChannelCollection.js +93 -0
- package/lib/cjs/collections/ChannelUnreadCollection.d.ts +24 -0
- package/lib/cjs/collections/ChannelUnreadCollection.d.ts.map +1 -0
- package/lib/cjs/collections/ChannelUnreadCollection.js +56 -0
- package/lib/cjs/collections/ChannelWebhookCollection.d.ts +29 -0
- package/lib/cjs/collections/ChannelWebhookCollection.d.ts.map +1 -0
- package/lib/cjs/collections/ChannelWebhookCollection.js +69 -0
- package/lib/cjs/collections/Collection.d.ts +153 -0
- package/lib/cjs/collections/Collection.d.ts.map +1 -0
- package/lib/cjs/collections/Collection.js +170 -0
- package/lib/cjs/collections/EmojiCollection.d.ts +27 -0
- package/lib/cjs/collections/EmojiCollection.d.ts.map +1 -0
- package/lib/cjs/collections/EmojiCollection.js +67 -0
- package/lib/cjs/collections/MessageCollection.d.ts +28 -0
- package/lib/cjs/collections/MessageCollection.d.ts.map +1 -0
- package/lib/cjs/collections/MessageCollection.js +69 -0
- package/lib/cjs/collections/ServerCollection.d.ts +36 -0
- package/lib/cjs/collections/ServerCollection.d.ts.map +1 -0
- package/lib/cjs/collections/ServerCollection.js +96 -0
- package/lib/cjs/collections/ServerMemberCollection.d.ts +45 -0
- package/lib/cjs/collections/ServerMemberCollection.d.ts.map +1 -0
- package/lib/cjs/collections/ServerMemberCollection.js +95 -0
- package/lib/cjs/collections/SessionCollection.d.ts +27 -0
- package/lib/cjs/collections/SessionCollection.d.ts.map +1 -0
- package/lib/cjs/collections/SessionCollection.js +63 -0
- package/lib/cjs/collections/UserCollection.d.ts +31 -0
- package/lib/cjs/collections/UserCollection.d.ts.map +1 -0
- package/lib/cjs/collections/UserCollection.js +81 -0
- package/lib/cjs/collections/index.d.ts +12 -0
- package/lib/cjs/collections/index.d.ts.map +1 -0
- package/lib/cjs/collections/index.js +38 -0
- package/lib/cjs/events/EventClient.d.ts +89 -0
- package/lib/cjs/events/EventClient.d.ts.map +1 -0
- package/lib/cjs/events/EventClient.js +186 -0
- package/lib/cjs/events/index.d.ts +18 -0
- package/lib/cjs/events/index.d.ts.map +1 -0
- package/lib/cjs/events/index.js +20 -0
- package/lib/cjs/events/v1.d.ts +214 -0
- package/lib/cjs/events/v1.d.ts.map +1 -0
- package/lib/cjs/events/v1.js +502 -0
- package/lib/cjs/hydration/bot.d.ts +21 -0
- package/lib/cjs/hydration/bot.d.ts.map +1 -0
- package/lib/cjs/hydration/bot.js +31 -0
- package/lib/cjs/hydration/channel.d.ts +25 -0
- package/lib/cjs/hydration/channel.d.ts.map +1 -0
- package/lib/cjs/hydration/channel.js +40 -0
- package/lib/cjs/hydration/channelUnread.d.ts +11 -0
- package/lib/cjs/hydration/channelUnread.d.ts.map +1 -0
- package/lib/cjs/hydration/channelUnread.js +19 -0
- package/lib/cjs/hydration/channelWebhook.d.ts +12 -0
- package/lib/cjs/hydration/channelWebhook.d.ts.map +1 -0
- package/lib/cjs/hydration/channelWebhook.js +21 -0
- package/lib/cjs/hydration/emoji.d.ts +13 -0
- package/lib/cjs/hydration/emoji.d.ts.map +1 -0
- package/lib/cjs/hydration/emoji.js +18 -0
- package/lib/cjs/hydration/index.d.ts +1404 -0
- package/lib/cjs/hydration/index.d.ts.map +1 -0
- package/lib/cjs/hydration/index.js +68 -0
- package/lib/cjs/hydration/message.d.ts +25 -0
- package/lib/cjs/hydration/message.d.ts.map +1 -0
- package/lib/cjs/hydration/message.js +48 -0
- package/lib/cjs/hydration/server.d.ts +31 -0
- package/lib/cjs/hydration/server.d.ts.map +1 -0
- package/lib/cjs/hydration/server.js +44 -0
- package/lib/cjs/hydration/serverMember.d.ts +14 -0
- package/lib/cjs/hydration/serverMember.d.ts.map +1 -0
- package/lib/cjs/hydration/serverMember.js +21 -0
- package/lib/cjs/hydration/session.d.ts +8 -0
- package/lib/cjs/hydration/session.d.ts.map +1 -0
- package/lib/cjs/hydration/session.js +13 -0
- package/lib/cjs/hydration/user.d.ts +43 -0
- package/lib/cjs/hydration/user.d.ts.map +1 -0
- package/lib/cjs/hydration/user.js +53 -0
- package/lib/cjs/index.d.ts +9 -0
- package/lib/cjs/index.d.ts.map +1 -0
- package/lib/cjs/index.js +43 -0
- package/lib/cjs/lib/merge.d.ts +15 -0
- package/lib/cjs/lib/merge.d.ts.map +1 -0
- package/lib/cjs/lib/merge.js +2 -0
- package/lib/cjs/lib/regex.d.ts +13 -0
- package/lib/cjs/lib/regex.d.ts.map +1 -0
- package/lib/cjs/lib/regex.js +15 -0
- package/lib/cjs/permissions/calculator.d.ts +19 -0
- package/lib/cjs/permissions/calculator.d.ts.map +1 -0
- package/lib/cjs/permissions/calculator.js +136 -0
- package/lib/cjs/permissions/definitions.d.ts +73 -0
- package/lib/cjs/permissions/definitions.d.ts.map +1 -0
- package/lib/cjs/permissions/definitions.js +124 -0
- package/lib/cjs/storage/ObjectStorage.d.ts +28 -0
- package/lib/cjs/storage/ObjectStorage.d.ts.map +1 -0
- package/lib/cjs/storage/ObjectStorage.js +41 -0
- package/lib/esm/Client.d.ts +166 -0
- package/lib/esm/Client.d.ts.map +1 -0
- package/lib/esm/Client.js +214 -0
- package/lib/esm/api/baseURL.d.ts +2 -0
- package/lib/esm/api/baseURL.d.ts.map +1 -0
- package/lib/esm/api/baseURL.js +2 -0
- package/lib/esm/api/index.d.ts +177 -0
- package/lib/esm/api/index.d.ts.map +1 -0
- package/lib/esm/api/index.js +139 -0
- package/lib/esm/api/params.d.ts +285 -0
- package/lib/esm/api/params.d.ts.map +1 -0
- package/lib/esm/api/params.js +191 -0
- package/lib/esm/api/routes.d.ts +1089 -0
- package/lib/esm/api/routes.d.ts.map +1 -0
- package/lib/esm/api/routes.js +1 -0
- package/lib/esm/api/schema.d.ts +4705 -0
- package/lib/esm/api/schema.d.ts.map +1 -0
- package/lib/esm/api/schema.js +1 -0
- package/lib/esm/api/types.d.ts +131 -0
- package/lib/esm/api/types.d.ts.map +1 -0
- package/lib/esm/api/types.js +1 -0
- package/lib/esm/classes/BannedUser.d.ts +18 -0
- package/lib/esm/classes/BannedUser.d.ts.map +1 -0
- package/lib/esm/classes/BannedUser.js +21 -0
- package/lib/esm/classes/Bot.d.ts +82 -0
- package/lib/esm/classes/Bot.d.ts.map +1 -0
- package/lib/esm/classes/Bot.js +116 -0
- package/lib/esm/classes/Channel.d.ts +465 -0
- package/lib/esm/classes/Channel.d.ts.map +1 -0
- package/lib/esm/classes/Channel.js +529 -0
- package/lib/esm/classes/ChannelUnread.d.ts +27 -0
- package/lib/esm/classes/ChannelUnread.d.ts.map +1 -0
- package/lib/esm/classes/ChannelUnread.js +34 -0
- package/lib/esm/classes/ChannelWebhook.d.ts +53 -0
- package/lib/esm/classes/ChannelWebhook.d.ts.map +1 -0
- package/lib/esm/classes/ChannelWebhook.js +83 -0
- package/lib/esm/classes/Emoji.d.ts +57 -0
- package/lib/esm/classes/Emoji.d.ts.map +1 -0
- package/lib/esm/classes/Emoji.js +77 -0
- package/lib/esm/classes/File.d.ts +67 -0
- package/lib/esm/classes/File.d.ts.map +1 -0
- package/lib/esm/classes/File.js +105 -0
- package/lib/esm/classes/Invite.d.ts +60 -0
- package/lib/esm/classes/Invite.d.ts.map +1 -0
- package/lib/esm/classes/Invite.js +80 -0
- package/lib/esm/classes/MFA.d.ts +83 -0
- package/lib/esm/classes/MFA.d.ts.map +1 -0
- package/lib/esm/classes/MFA.js +165 -0
- package/lib/esm/classes/Message.d.ts +484 -0
- package/lib/esm/classes/Message.d.ts.map +1 -0
- package/lib/esm/classes/Message.js +300 -0
- package/lib/esm/classes/MessageEmbed.d.ts +122 -0
- package/lib/esm/classes/MessageEmbed.d.ts.map +1 -0
- package/lib/esm/classes/MessageEmbed.js +192 -0
- package/lib/esm/classes/PublicBot.d.ts +28 -0
- package/lib/esm/classes/PublicBot.d.ts.map +1 -0
- package/lib/esm/classes/PublicBot.js +47 -0
- package/lib/esm/classes/PublicInvite.d.ts +57 -0
- package/lib/esm/classes/PublicInvite.d.ts.map +1 -0
- package/lib/esm/classes/PublicInvite.js +100 -0
- package/lib/esm/classes/Server.d.ts +473 -0
- package/lib/esm/classes/Server.d.ts.map +1 -0
- package/lib/esm/classes/Server.js +522 -0
- package/lib/esm/classes/ServerBan.d.ts +26 -0
- package/lib/esm/classes/ServerBan.d.ts.map +1 -0
- package/lib/esm/classes/ServerBan.js +33 -0
- package/lib/esm/classes/ServerMember.d.ts +138 -0
- package/lib/esm/classes/ServerMember.d.ts.map +1 -0
- package/lib/esm/classes/ServerMember.js +199 -0
- package/lib/esm/classes/Session.d.ts +45 -0
- package/lib/esm/classes/Session.d.ts.map +1 -0
- package/lib/esm/classes/Session.js +65 -0
- package/lib/esm/classes/SystemMessage.d.ts +127 -0
- package/lib/esm/classes/SystemMessage.d.ts.map +1 -0
- package/lib/esm/classes/SystemMessage.js +171 -0
- package/lib/esm/classes/User.d.ts +203 -0
- package/lib/esm/classes/User.d.ts.map +1 -0
- package/lib/esm/classes/User.js +252 -0
- package/lib/esm/classes/UserProfile.d.ts +23 -0
- package/lib/esm/classes/UserProfile.d.ts.map +1 -0
- package/lib/esm/classes/UserProfile.js +31 -0
- package/lib/esm/classes/index.d.ts +21 -0
- package/lib/esm/classes/index.d.ts.map +1 -0
- package/lib/esm/classes/index.js +20 -0
- package/lib/esm/collections/AccountCollection.d.ts +91 -0
- package/lib/esm/collections/AccountCollection.d.ts.map +1 -0
- package/lib/esm/collections/AccountCollection.js +139 -0
- package/lib/esm/collections/BotCollection.d.ts +39 -0
- package/lib/esm/collections/BotCollection.d.ts.map +1 -0
- package/lib/esm/collections/BotCollection.js +68 -0
- package/lib/esm/collections/ChannelCollection.d.ts +39 -0
- package/lib/esm/collections/ChannelCollection.d.ts.map +1 -0
- package/lib/esm/collections/ChannelCollection.js +75 -0
- package/lib/esm/collections/ChannelUnreadCollection.d.ts +24 -0
- package/lib/esm/collections/ChannelUnreadCollection.d.ts.map +1 -0
- package/lib/esm/collections/ChannelUnreadCollection.js +41 -0
- package/lib/esm/collections/ChannelWebhookCollection.d.ts +29 -0
- package/lib/esm/collections/ChannelWebhookCollection.d.ts.map +1 -0
- package/lib/esm/collections/ChannelWebhookCollection.js +52 -0
- package/lib/esm/collections/Collection.d.ts +153 -0
- package/lib/esm/collections/Collection.d.ts.map +1 -0
- package/lib/esm/collections/Collection.js +160 -0
- package/lib/esm/collections/EmojiCollection.d.ts +27 -0
- package/lib/esm/collections/EmojiCollection.d.ts.map +1 -0
- package/lib/esm/collections/EmojiCollection.js +52 -0
- package/lib/esm/collections/MessageCollection.d.ts +28 -0
- package/lib/esm/collections/MessageCollection.d.ts.map +1 -0
- package/lib/esm/collections/MessageCollection.js +54 -0
- package/lib/esm/collections/ServerCollection.d.ts +36 -0
- package/lib/esm/collections/ServerCollection.d.ts.map +1 -0
- package/lib/esm/collections/ServerCollection.js +79 -0
- package/lib/esm/collections/ServerMemberCollection.d.ts +45 -0
- package/lib/esm/collections/ServerMemberCollection.d.ts.map +1 -0
- package/lib/esm/collections/ServerMemberCollection.js +80 -0
- package/lib/esm/collections/SessionCollection.d.ts +27 -0
- package/lib/esm/collections/SessionCollection.d.ts.map +1 -0
- package/lib/esm/collections/SessionCollection.js +46 -0
- package/lib/esm/collections/UserCollection.d.ts +31 -0
- package/lib/esm/collections/UserCollection.d.ts.map +1 -0
- package/lib/esm/collections/UserCollection.js +66 -0
- package/lib/esm/collections/index.d.ts +12 -0
- package/lib/esm/collections/index.d.ts.map +1 -0
- package/lib/esm/collections/index.js +11 -0
- package/lib/esm/events/EventClient.d.ts +89 -0
- package/lib/esm/events/EventClient.d.ts.map +1 -0
- package/lib/esm/events/EventClient.js +175 -0
- package/lib/esm/events/index.d.ts +18 -0
- package/lib/esm/events/index.d.ts.map +1 -0
- package/lib/esm/events/index.js +2 -0
- package/lib/esm/events/v1.d.ts +214 -0
- package/lib/esm/events/v1.d.ts.map +1 -0
- package/lib/esm/events/v1.js +514 -0
- package/lib/esm/hydration/bot.d.ts +21 -0
- package/lib/esm/hydration/bot.d.ts.map +1 -0
- package/lib/esm/hydration/bot.js +28 -0
- package/lib/esm/hydration/channel.d.ts +25 -0
- package/lib/esm/hydration/channel.d.ts.map +1 -0
- package/lib/esm/hydration/channel.js +37 -0
- package/lib/esm/hydration/channelUnread.d.ts +11 -0
- package/lib/esm/hydration/channelUnread.d.ts.map +1 -0
- package/lib/esm/hydration/channelUnread.js +16 -0
- package/lib/esm/hydration/channelWebhook.d.ts +12 -0
- package/lib/esm/hydration/channelWebhook.d.ts.map +1 -0
- package/lib/esm/hydration/channelWebhook.js +18 -0
- package/lib/esm/hydration/emoji.d.ts +13 -0
- package/lib/esm/hydration/emoji.d.ts.map +1 -0
- package/lib/esm/hydration/emoji.js +15 -0
- package/lib/esm/hydration/index.d.ts +1404 -0
- package/lib/esm/hydration/index.d.ts.map +1 -0
- package/lib/esm/hydration/index.js +65 -0
- package/lib/esm/hydration/message.d.ts +25 -0
- package/lib/esm/hydration/message.d.ts.map +1 -0
- package/lib/esm/hydration/message.js +45 -0
- package/lib/esm/hydration/server.d.ts +31 -0
- package/lib/esm/hydration/server.d.ts.map +1 -0
- package/lib/esm/hydration/server.js +41 -0
- package/lib/esm/hydration/serverMember.d.ts +14 -0
- package/lib/esm/hydration/serverMember.d.ts.map +1 -0
- package/lib/esm/hydration/serverMember.js +18 -0
- package/lib/esm/hydration/session.d.ts +8 -0
- package/lib/esm/hydration/session.d.ts.map +1 -0
- package/lib/esm/hydration/session.js +10 -0
- package/lib/esm/hydration/user.d.ts +43 -0
- package/lib/esm/hydration/user.d.ts.map +1 -0
- package/lib/esm/hydration/user.js +50 -0
- package/lib/esm/index.d.ts +9 -0
- package/lib/esm/index.d.ts.map +1 -0
- package/lib/esm/index.js +8 -0
- package/lib/esm/lib/merge.d.ts +15 -0
- package/lib/esm/lib/merge.d.ts.map +1 -0
- package/lib/esm/lib/merge.js +1 -0
- package/lib/esm/lib/regex.d.ts +13 -0
- package/lib/esm/lib/regex.d.ts.map +1 -0
- package/lib/esm/lib/regex.js +12 -0
- package/lib/esm/package.json +3 -0
- package/lib/esm/permissions/calculator.d.ts +19 -0
- package/lib/esm/permissions/calculator.d.ts.map +1 -0
- package/lib/esm/permissions/calculator.js +129 -0
- package/lib/esm/permissions/definitions.d.ts +73 -0
- package/lib/esm/permissions/definitions.d.ts.map +1 -0
- package/lib/esm/permissions/definitions.js +121 -0
- package/lib/esm/storage/ObjectStorage.d.ts +28 -0
- package/lib/esm/storage/ObjectStorage.d.ts.map +1 -0
- package/lib/esm/storage/ObjectStorage.js +39 -0
- package/package.json +59 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { ServerMember } from "../index.js";
|
|
2
|
+
import { ClassCollection } from "./index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Collection of Server Members
|
|
5
|
+
*/
|
|
6
|
+
export class ServerMemberCollection extends ClassCollection {
|
|
7
|
+
/**
|
|
8
|
+
* Check if member exists by composite key
|
|
9
|
+
* @param id Id
|
|
10
|
+
* @returns Whether it exists
|
|
11
|
+
*/
|
|
12
|
+
hasByKey(id) {
|
|
13
|
+
return super.has(id.server + id.user);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Get member by composite key
|
|
17
|
+
* @param id Id
|
|
18
|
+
* @returns Member
|
|
19
|
+
*/
|
|
20
|
+
getByKey(id) {
|
|
21
|
+
return super.get(id.server + id.user);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* check partial status by composite key
|
|
25
|
+
* @param id Id
|
|
26
|
+
* @returns Member
|
|
27
|
+
*/
|
|
28
|
+
isPartialByKey(id) {
|
|
29
|
+
return super.isPartial(id.server + id.user);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Fetch server member by Id
|
|
33
|
+
* @param serverId Server Id
|
|
34
|
+
* @param userId User Id
|
|
35
|
+
* @returns Message
|
|
36
|
+
*/
|
|
37
|
+
async fetch(serverId, userId) {
|
|
38
|
+
const member = this.get(serverId + userId);
|
|
39
|
+
if (member && !this.isPartial(serverId + userId))
|
|
40
|
+
return member;
|
|
41
|
+
const data = (await this.client.api.get(`/servers/${serverId}/members/${userId}`, {
|
|
42
|
+
roles: false,
|
|
43
|
+
}
|
|
44
|
+
// TODO: fix typings in ./api
|
|
45
|
+
));
|
|
46
|
+
return this.getOrCreate(data._id, data);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get or create
|
|
50
|
+
* @param id Id
|
|
51
|
+
* @param data Data
|
|
52
|
+
*/
|
|
53
|
+
getOrCreate(id, data) {
|
|
54
|
+
if (this.hasByKey(id) && !this.isPartialByKey(id)) {
|
|
55
|
+
return this.getByKey(id);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
const instance = new ServerMember(this, id);
|
|
59
|
+
this.create(id.server + id.user, "serverMember", instance, this.client, data);
|
|
60
|
+
return instance;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get or return partial
|
|
65
|
+
* @param id Id
|
|
66
|
+
*/
|
|
67
|
+
getOrPartial(id) {
|
|
68
|
+
if (this.hasByKey(id)) {
|
|
69
|
+
return this.getByKey(id);
|
|
70
|
+
}
|
|
71
|
+
else if (this.client.options.partials) {
|
|
72
|
+
const instance = new ServerMember(this, id);
|
|
73
|
+
this.create(id.server + id.user, "serverMember", instance, this.client, {
|
|
74
|
+
id,
|
|
75
|
+
partial: true,
|
|
76
|
+
});
|
|
77
|
+
return instance;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Session } from "../classes/index.js";
|
|
2
|
+
import { HydratedSession } from "../hydration/session.js";
|
|
3
|
+
import { API } from "../index.js";
|
|
4
|
+
import { ClassCollection } from "./index.js";
|
|
5
|
+
/**
|
|
6
|
+
* Collection of Sessions
|
|
7
|
+
*/
|
|
8
|
+
export declare class SessionCollection extends ClassCollection<Session, HydratedSession> {
|
|
9
|
+
/**
|
|
10
|
+
* Fetch active sessions
|
|
11
|
+
* @returns List of sessions
|
|
12
|
+
*/
|
|
13
|
+
fetch(): Promise<Session[]>;
|
|
14
|
+
/**
|
|
15
|
+
* Delete all sessions, optionally including self
|
|
16
|
+
* @param revokeSelf Whether to remove current session too
|
|
17
|
+
*/
|
|
18
|
+
deleteAll(revokeSelf?: boolean): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Get or create
|
|
21
|
+
* @param id Id
|
|
22
|
+
* @param data Data
|
|
23
|
+
* @returns Session
|
|
24
|
+
*/
|
|
25
|
+
getOrCreate(id: string, data: API.SessionInfo): Session;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=SessionCollection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionCollection.d.ts","sourceRoot":"","sources":["../../../src/collections/SessionCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG7C;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,eAAe,CACpD,OAAO,EACP,eAAe,CAChB;IACC;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAOjC;;;OAGG;IACG,SAAS,CAAC,UAAU,UAAQ;IAWlC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,WAAW;CAS9C"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Session } from "../classes/index.js";
|
|
2
|
+
import { ClassCollection } from "./index.js";
|
|
3
|
+
import { batch } from "solid-js";
|
|
4
|
+
/**
|
|
5
|
+
* Collection of Sessions
|
|
6
|
+
*/
|
|
7
|
+
export class SessionCollection extends ClassCollection {
|
|
8
|
+
/**
|
|
9
|
+
* Fetch active sessions
|
|
10
|
+
* @returns List of sessions
|
|
11
|
+
*/
|
|
12
|
+
async fetch() {
|
|
13
|
+
const data = await this.client.api.get("/auth/session/all");
|
|
14
|
+
return batch(() => data.map((session) => this.getOrCreate(session._id, session)));
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Delete all sessions, optionally including self
|
|
18
|
+
* @param revokeSelf Whether to remove current session too
|
|
19
|
+
*/
|
|
20
|
+
async deleteAll(revokeSelf = false) {
|
|
21
|
+
await this.client.api.delete("/auth/session/all", {
|
|
22
|
+
revoke_self: revokeSelf,
|
|
23
|
+
});
|
|
24
|
+
for (const entry of this.toList()) {
|
|
25
|
+
if (!revokeSelf && entry.current)
|
|
26
|
+
continue;
|
|
27
|
+
this.delete(entry.id);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get or create
|
|
32
|
+
* @param id Id
|
|
33
|
+
* @param data Data
|
|
34
|
+
* @returns Session
|
|
35
|
+
*/
|
|
36
|
+
getOrCreate(id, data) {
|
|
37
|
+
if (this.has(id)) {
|
|
38
|
+
return this.get(id);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
const instance = new Session(this, id);
|
|
42
|
+
this.create(id, "session", instance, this.client, data);
|
|
43
|
+
return instance;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { HydratedUser } from "../hydration/index.js";
|
|
2
|
+
import { API, Client, User } from "../index.js";
|
|
3
|
+
import { ClassCollection } from "./index.js";
|
|
4
|
+
/**
|
|
5
|
+
* Collection of Users
|
|
6
|
+
*/
|
|
7
|
+
export declare class UserCollection extends ClassCollection<User, HydratedUser> {
|
|
8
|
+
/**
|
|
9
|
+
* Construct User collection
|
|
10
|
+
*/
|
|
11
|
+
constructor(client: Client);
|
|
12
|
+
/**
|
|
13
|
+
* Fetch user by ID
|
|
14
|
+
* @param id Id
|
|
15
|
+
* @returns User
|
|
16
|
+
*/
|
|
17
|
+
fetch(id: string): Promise<User>;
|
|
18
|
+
/**
|
|
19
|
+
* Get or create
|
|
20
|
+
* @param id Id
|
|
21
|
+
* @param data Data
|
|
22
|
+
* @param isNew Whether this object is new
|
|
23
|
+
*/
|
|
24
|
+
getOrCreate(id: string, data: API.User): User;
|
|
25
|
+
/**
|
|
26
|
+
* Get or return partial
|
|
27
|
+
* @param id Id
|
|
28
|
+
*/
|
|
29
|
+
getOrPartial(id: string): User | undefined;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=UserCollection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserCollection.d.ts","sourceRoot":"","sources":["../../../src/collections/UserCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C;;GAEG;AACH,qBAAa,cAAe,SAAQ,eAAe,CAAC,IAAI,EAAE,YAAY,CAAC;IACrE;;OAEG;gBACS,MAAM,EAAE,MAAM;IAa1B;;;;OAIG;IACG,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOtC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI;IAUtC;;;OAGG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM;CAYxB"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { User } from "../index.js";
|
|
2
|
+
import { ClassCollection } from "./index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Collection of Users
|
|
5
|
+
*/
|
|
6
|
+
export class UserCollection extends ClassCollection {
|
|
7
|
+
/**
|
|
8
|
+
* Construct User collection
|
|
9
|
+
*/
|
|
10
|
+
constructor(client) {
|
|
11
|
+
super(client);
|
|
12
|
+
const SYSTEM_ID = "0".repeat(26);
|
|
13
|
+
this.getOrCreate(SYSTEM_ID, {
|
|
14
|
+
_id: SYSTEM_ID,
|
|
15
|
+
username: "Hischool",
|
|
16
|
+
discriminator: "0000",
|
|
17
|
+
online: true,
|
|
18
|
+
relationship: "None",
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Fetch user by ID
|
|
23
|
+
* @param id Id
|
|
24
|
+
* @returns User
|
|
25
|
+
*/
|
|
26
|
+
async fetch(id) {
|
|
27
|
+
const user = this.get(id);
|
|
28
|
+
if (user && !this.isPartial(id))
|
|
29
|
+
return user;
|
|
30
|
+
const data = await this.client.api.get(`/users/${id}`);
|
|
31
|
+
return this.getOrCreate(data._id, data);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Get or create
|
|
35
|
+
* @param id Id
|
|
36
|
+
* @param data Data
|
|
37
|
+
* @param isNew Whether this object is new
|
|
38
|
+
*/
|
|
39
|
+
getOrCreate(id, data) {
|
|
40
|
+
if (this.has(id) && !this.isPartial(id)) {
|
|
41
|
+
return this.get(id);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
const instance = new User(this, id);
|
|
45
|
+
this.create(id, "user", instance, this.client, data);
|
|
46
|
+
return instance;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get or return partial
|
|
51
|
+
* @param id Id
|
|
52
|
+
*/
|
|
53
|
+
getOrPartial(id) {
|
|
54
|
+
if (this.has(id)) {
|
|
55
|
+
return this.get(id);
|
|
56
|
+
}
|
|
57
|
+
else if (this.client.options.partials) {
|
|
58
|
+
const instance = new User(this, id);
|
|
59
|
+
this.create(id, "user", instance, this.client, {
|
|
60
|
+
id,
|
|
61
|
+
partial: true,
|
|
62
|
+
});
|
|
63
|
+
return instance;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export * from "./Collection.js";
|
|
2
|
+
export { BotCollection } from "./BotCollection.js";
|
|
3
|
+
export { ChannelCollection } from "./ChannelCollection.js";
|
|
4
|
+
export { ChannelUnreadCollection } from "./ChannelUnreadCollection.js";
|
|
5
|
+
export { ChannelWebhookCollection } from "./ChannelWebhookCollection.js";
|
|
6
|
+
export { EmojiCollection } from "./EmojiCollection.js";
|
|
7
|
+
export { MessageCollection } from "./MessageCollection.js";
|
|
8
|
+
export { ServerCollection } from "./ServerCollection.js";
|
|
9
|
+
export { ServerMemberCollection } from "./ServerMemberCollection.js";
|
|
10
|
+
export { SessionCollection } from "./SessionCollection.js";
|
|
11
|
+
export { UserCollection } from "./UserCollection.js";
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/collections/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAEhC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from "./Collection.js";
|
|
2
|
+
export { BotCollection } from "./BotCollection.js";
|
|
3
|
+
export { ChannelCollection } from "./ChannelCollection.js";
|
|
4
|
+
export { ChannelUnreadCollection } from "./ChannelUnreadCollection.js";
|
|
5
|
+
export { ChannelWebhookCollection } from "./ChannelWebhookCollection.js";
|
|
6
|
+
export { EmojiCollection } from "./EmojiCollection.js";
|
|
7
|
+
export { MessageCollection } from "./MessageCollection.js";
|
|
8
|
+
export { ServerCollection } from "./ServerCollection.js";
|
|
9
|
+
export { ServerMemberCollection } from "./ServerMemberCollection.js";
|
|
10
|
+
export { SessionCollection } from "./SessionCollection.js";
|
|
11
|
+
export { UserCollection } from "./UserCollection.js";
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { AvailableProtocols, EventProtocol } from "./index.js";
|
|
2
|
+
import EventEmitter from "eventemitter3";
|
|
3
|
+
import { Accessor } from "solid-js";
|
|
4
|
+
/**
|
|
5
|
+
* All possible event client states.
|
|
6
|
+
*/
|
|
7
|
+
export declare enum ConnectionState {
|
|
8
|
+
Idle = 0,
|
|
9
|
+
Connecting = 1,
|
|
10
|
+
Connected = 2,
|
|
11
|
+
Disconnected = 3
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Event client options object
|
|
15
|
+
*/
|
|
16
|
+
export interface EventClientOptions {
|
|
17
|
+
/**
|
|
18
|
+
* Whether to log events
|
|
19
|
+
* @default false
|
|
20
|
+
*/
|
|
21
|
+
debug: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Time in seconds between Ping packets sent to the server
|
|
24
|
+
* @default 30
|
|
25
|
+
*/
|
|
26
|
+
heartbeatInterval: number;
|
|
27
|
+
/**
|
|
28
|
+
* Maximum time in seconds between Ping and corresponding Pong
|
|
29
|
+
* @default 10
|
|
30
|
+
*/
|
|
31
|
+
pongTimeout: number;
|
|
32
|
+
/**
|
|
33
|
+
* Maximum time in seconds between init and first message
|
|
34
|
+
* @default 10
|
|
35
|
+
*/
|
|
36
|
+
connectTimeout: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Events provided by the client.
|
|
40
|
+
*/
|
|
41
|
+
type Events<T extends AvailableProtocols, P extends EventProtocol<T>> = {
|
|
42
|
+
error: (error: Error) => void;
|
|
43
|
+
event: (event: P["server"]) => void;
|
|
44
|
+
state: (state: ConnectionState) => void;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Simple wrapper around the Hischool websocket service.
|
|
48
|
+
*/
|
|
49
|
+
export declare class EventClient<T extends AvailableProtocols> extends EventEmitter<Events<T, EventProtocol<T>>> {
|
|
50
|
+
#private;
|
|
51
|
+
readonly options: EventClientOptions;
|
|
52
|
+
readonly ping: Accessor<number>;
|
|
53
|
+
readonly state: Accessor<ConnectionState>;
|
|
54
|
+
/**
|
|
55
|
+
* Create a new event client.
|
|
56
|
+
* @param protocolVersion Target protocol version
|
|
57
|
+
* @param transportFormat Communication format
|
|
58
|
+
* @param options Configuration options
|
|
59
|
+
*/
|
|
60
|
+
constructor(protocolVersion: T, transportFormat?: "json", options?: Partial<EventClientOptions>);
|
|
61
|
+
/**
|
|
62
|
+
* Set the current state
|
|
63
|
+
* @param state state
|
|
64
|
+
*/
|
|
65
|
+
private setState;
|
|
66
|
+
/**
|
|
67
|
+
* Connect to the websocket service.
|
|
68
|
+
* @param uri WebSocket URI
|
|
69
|
+
* @param token Authentication token
|
|
70
|
+
*/
|
|
71
|
+
connect(uri: string, token: string): void;
|
|
72
|
+
/**
|
|
73
|
+
* Disconnect the websocket client.
|
|
74
|
+
*/
|
|
75
|
+
disconnect(): void;
|
|
76
|
+
/**
|
|
77
|
+
* Send an event to the server.
|
|
78
|
+
* @param event Event
|
|
79
|
+
*/
|
|
80
|
+
send(event: EventProtocol<T>["client"]): void;
|
|
81
|
+
/**
|
|
82
|
+
* Handle events intended for client before passing them along.
|
|
83
|
+
* @param event Event
|
|
84
|
+
*/
|
|
85
|
+
handle(event: EventProtocol<T>["server"]): void;
|
|
86
|
+
get lastError(): any;
|
|
87
|
+
}
|
|
88
|
+
export {};
|
|
89
|
+
//# sourceMappingURL=EventClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventClient.d.ts","sourceRoot":"","sources":["../../../src/events/EventClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,YAAY,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAwB,MAAM,UAAU,CAAC;AAE1D;;GAEG;AACH,oBAAY,eAAe;IACzB,IAAI,IAAA;IACJ,UAAU,IAAA;IACV,SAAS,IAAA;IACT,YAAY,IAAA;CACb;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,KAAK,EAAE,OAAO,CAAC;IAEf;;;OAGG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,KAAK,MAAM,CAAC,CAAC,SAAS,kBAAkB,EAAE,CAAC,SAAS,aAAa,CAAC,CAAC,CAAC,IAAI;IACtE,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC9B,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;IACpC,KAAK,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;CACzC,CAAC;AAEF;;GAEG;AACH,qBAAa,WAAW,CAAC,CAAC,SAAS,kBAAkB,CAAE,SAAQ,YAAY,CACzE,MAAM,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAC5B;;IACC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IAKrC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAGhC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IAU1C;;;;;OAKG;gBAED,eAAe,EAAE,CAAC,EAClB,eAAe,GAAE,MAAe,EAChC,OAAO,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC;IA0BvC;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAKhB;;;;OAIG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAkDlC;;OAEG;IACH,UAAU;IAUV;;;OAGG;IACH,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAMtC;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IA6CxC,IAAI,SAAS,QAEZ;CACF"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import EventEmitter from "eventemitter3";
|
|
2
|
+
import WebSocket from "isomorphic-ws";
|
|
3
|
+
import { createSignal } from "solid-js";
|
|
4
|
+
/**
|
|
5
|
+
* All possible event client states.
|
|
6
|
+
*/
|
|
7
|
+
export var ConnectionState;
|
|
8
|
+
(function (ConnectionState) {
|
|
9
|
+
ConnectionState[ConnectionState["Idle"] = 0] = "Idle";
|
|
10
|
+
ConnectionState[ConnectionState["Connecting"] = 1] = "Connecting";
|
|
11
|
+
ConnectionState[ConnectionState["Connected"] = 2] = "Connected";
|
|
12
|
+
ConnectionState[ConnectionState["Disconnected"] = 3] = "Disconnected";
|
|
13
|
+
})(ConnectionState || (ConnectionState = {}));
|
|
14
|
+
/**
|
|
15
|
+
* Simple wrapper around the Hischool websocket service.
|
|
16
|
+
*/
|
|
17
|
+
export class EventClient extends EventEmitter {
|
|
18
|
+
options;
|
|
19
|
+
#protocolVersion;
|
|
20
|
+
#transportFormat;
|
|
21
|
+
ping;
|
|
22
|
+
#setPing;
|
|
23
|
+
state;
|
|
24
|
+
#setStateSetter;
|
|
25
|
+
#socket;
|
|
26
|
+
#heartbeatIntervalReference;
|
|
27
|
+
#pongTimeoutReference;
|
|
28
|
+
#connectTimeoutReference;
|
|
29
|
+
#lastError;
|
|
30
|
+
/**
|
|
31
|
+
* Create a new event client.
|
|
32
|
+
* @param protocolVersion Target protocol version
|
|
33
|
+
* @param transportFormat Communication format
|
|
34
|
+
* @param options Configuration options
|
|
35
|
+
*/
|
|
36
|
+
constructor(protocolVersion, transportFormat = "json", options) {
|
|
37
|
+
super();
|
|
38
|
+
this.#protocolVersion = protocolVersion;
|
|
39
|
+
this.#transportFormat = transportFormat;
|
|
40
|
+
this.options = {
|
|
41
|
+
heartbeatInterval: 30,
|
|
42
|
+
pongTimeout: 10,
|
|
43
|
+
connectTimeout: 10,
|
|
44
|
+
debug: false,
|
|
45
|
+
...options,
|
|
46
|
+
};
|
|
47
|
+
const [state, setState] = createSignal(ConnectionState.Idle);
|
|
48
|
+
this.state = state;
|
|
49
|
+
this.#setStateSetter = setState;
|
|
50
|
+
const [ping, setPing] = createSignal(-1);
|
|
51
|
+
this.ping = ping;
|
|
52
|
+
this.#setPing = setPing;
|
|
53
|
+
this.disconnect = this.disconnect.bind(this);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Set the current state
|
|
57
|
+
* @param state state
|
|
58
|
+
*/
|
|
59
|
+
setState(state) {
|
|
60
|
+
this.#setStateSetter(state);
|
|
61
|
+
this.emit("state", state);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Connect to the websocket service.
|
|
65
|
+
* @param uri WebSocket URI
|
|
66
|
+
* @param token Authentication token
|
|
67
|
+
*/
|
|
68
|
+
connect(uri, token) {
|
|
69
|
+
this.disconnect();
|
|
70
|
+
this.#lastError = undefined;
|
|
71
|
+
this.setState(ConnectionState.Connecting);
|
|
72
|
+
this.#connectTimeoutReference = setTimeout(() => this.disconnect(), this.options.pongTimeout * 1e3);
|
|
73
|
+
this.#socket = new WebSocket(`${uri}?version=${this.#protocolVersion}&format=${this.#transportFormat}&token=${token}`);
|
|
74
|
+
this.#socket.onopen = () => {
|
|
75
|
+
this.#heartbeatIntervalReference = setInterval(() => {
|
|
76
|
+
this.send({ type: "Ping", data: +new Date() });
|
|
77
|
+
this.#pongTimeoutReference = setTimeout(() => this.disconnect(), this.options.pongTimeout * 1e3);
|
|
78
|
+
}, this.options.heartbeatInterval * 1e3);
|
|
79
|
+
};
|
|
80
|
+
this.#socket.onerror = (error) => {
|
|
81
|
+
this.#lastError = error;
|
|
82
|
+
this.emit("error", error);
|
|
83
|
+
};
|
|
84
|
+
this.#socket.onmessage = (event) => {
|
|
85
|
+
clearInterval(this.#connectTimeoutReference);
|
|
86
|
+
if (this.#transportFormat === "json") {
|
|
87
|
+
if (typeof event.data === "string") {
|
|
88
|
+
this.handle(JSON.parse(event.data));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
let closed = false;
|
|
93
|
+
this.#socket.onclose = () => {
|
|
94
|
+
if (closed)
|
|
95
|
+
return;
|
|
96
|
+
closed = true;
|
|
97
|
+
this.setState(ConnectionState.Disconnected);
|
|
98
|
+
this.disconnect();
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Disconnect the websocket client.
|
|
103
|
+
*/
|
|
104
|
+
disconnect() {
|
|
105
|
+
if (!this.#socket)
|
|
106
|
+
return;
|
|
107
|
+
clearInterval(this.#heartbeatIntervalReference);
|
|
108
|
+
clearInterval(this.#connectTimeoutReference);
|
|
109
|
+
clearInterval(this.#pongTimeoutReference);
|
|
110
|
+
const socket = this.#socket;
|
|
111
|
+
this.#socket = undefined;
|
|
112
|
+
socket.close();
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Send an event to the server.
|
|
116
|
+
* @param event Event
|
|
117
|
+
*/
|
|
118
|
+
send(event) {
|
|
119
|
+
this.options.debug && console.debug("[C->S]", event);
|
|
120
|
+
if (!this.#socket)
|
|
121
|
+
throw "Socket closed, trying to send.";
|
|
122
|
+
this.#socket.send(JSON.stringify(event));
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Handle events intended for client before passing them along.
|
|
126
|
+
* @param event Event
|
|
127
|
+
*/
|
|
128
|
+
handle(event) {
|
|
129
|
+
this.options.debug && console.debug("[S->C]", event);
|
|
130
|
+
switch (event.type) {
|
|
131
|
+
case "Ping":
|
|
132
|
+
this.send({
|
|
133
|
+
type: "Pong",
|
|
134
|
+
data: event.data,
|
|
135
|
+
});
|
|
136
|
+
return;
|
|
137
|
+
case "Pong":
|
|
138
|
+
clearTimeout(this.#pongTimeoutReference);
|
|
139
|
+
this.#setPing(+new Date() - event.data);
|
|
140
|
+
this.options.debug && console.debug(`[ping] ${this.ping()}ms`);
|
|
141
|
+
return;
|
|
142
|
+
case "Error":
|
|
143
|
+
this.emit("error", event);
|
|
144
|
+
this.disconnect();
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
switch (this.state()) {
|
|
148
|
+
case ConnectionState.Connecting:
|
|
149
|
+
if (event.type === "Authenticated") {
|
|
150
|
+
// no-op
|
|
151
|
+
}
|
|
152
|
+
else if (event.type === "Ready") {
|
|
153
|
+
this.emit("event", event);
|
|
154
|
+
this.setState(ConnectionState.Connected);
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
throw `Unreachable code. Received ${event.type} in Connecting state.`;
|
|
158
|
+
}
|
|
159
|
+
break;
|
|
160
|
+
case ConnectionState.Connected:
|
|
161
|
+
if (event.type === "Authenticated" || event.type === "Ready") {
|
|
162
|
+
throw `Unreachable code. Received ${event.type} in Connected state.`;
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
this.emit("event", event);
|
|
166
|
+
}
|
|
167
|
+
break;
|
|
168
|
+
default:
|
|
169
|
+
throw `Unreachable code. Received ${event.type} in state ${this.state()}.`;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
get lastError() {
|
|
173
|
+
return this.#lastError;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ProtocolV1 } from "./v1.js";
|
|
2
|
+
export { handleEvent as handleEventV1 } from "./v1.js";
|
|
3
|
+
export * from "./EventClient.js";
|
|
4
|
+
/**
|
|
5
|
+
* Available protocols to connect with
|
|
6
|
+
*/
|
|
7
|
+
export type AvailableProtocols = 1;
|
|
8
|
+
/**
|
|
9
|
+
* Protocol mapping
|
|
10
|
+
*/
|
|
11
|
+
type Protocols = {
|
|
12
|
+
1: ProtocolV1;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Select a protocol by its key
|
|
16
|
+
*/
|
|
17
|
+
export type EventProtocol<T extends AvailableProtocols> = Protocols[T];
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/events/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,OAAO,EAAE,WAAW,IAAI,aAAa,EAAE,MAAM,SAAS,CAAC;AAEvD,cAAc,kBAAkB,CAAC;AAEjC;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAEnC;;GAEG;AACH,KAAK,SAAS,GAAG;IACf,CAAC,EAAE,UAAU,CAAC;CACf,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,kBAAkB,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC"}
|