@valoranchi/riot-client 0.3.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/LICENSE +21 -0
- package/README.md +644 -0
- package/dist/RiotClient.d.ts +36 -0
- package/dist/RiotClient.d.ts.map +1 -0
- package/dist/RiotClient.js +115 -0
- package/dist/RiotClient.js.map +1 -0
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +4 -0
- package/dist/bin.js.map +1 -0
- package/dist/catalogue/Catalogue.d.ts +69 -0
- package/dist/catalogue/Catalogue.d.ts.map +1 -0
- package/dist/catalogue/Catalogue.js +206 -0
- package/dist/catalogue/Catalogue.js.map +1 -0
- package/dist/catalogue/CatalogueStore.d.ts +14 -0
- package/dist/catalogue/CatalogueStore.d.ts.map +1 -0
- package/dist/catalogue/CatalogueStore.js +38 -0
- package/dist/catalogue/CatalogueStore.js.map +1 -0
- package/dist/catalogue/ValorantApi.d.ts +26 -0
- package/dist/catalogue/ValorantApi.d.ts.map +1 -0
- package/dist/catalogue/ValorantApi.js +126 -0
- package/dist/catalogue/ValorantApi.js.map +1 -0
- package/dist/catalogue/types.d.ts +173 -0
- package/dist/catalogue/types.d.ts.map +1 -0
- package/dist/catalogue/types.js +2 -0
- package/dist/catalogue/types.js.map +1 -0
- package/dist/cli.d.ts +18 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +912 -0
- package/dist/cli.js.map +1 -0
- package/dist/client/AccountService.d.ts +61 -0
- package/dist/client/AccountService.d.ts.map +1 -0
- package/dist/client/AccountService.js +319 -0
- package/dist/client/AccountService.js.map +1 -0
- package/dist/client/AccountValidator.d.ts +15 -0
- package/dist/client/AccountValidator.d.ts.map +1 -0
- package/dist/client/AccountValidator.js +49 -0
- package/dist/client/AccountValidator.js.map +1 -0
- package/dist/client/ChatValidator.d.ts +40 -0
- package/dist/client/ChatValidator.d.ts.map +1 -0
- package/dist/client/ChatValidator.js +154 -0
- package/dist/client/ChatValidator.js.map +1 -0
- package/dist/client/ClientContext.d.ts +16 -0
- package/dist/client/ClientContext.d.ts.map +1 -0
- package/dist/client/ClientContext.js +12 -0
- package/dist/client/ClientContext.js.map +1 -0
- package/dist/client/EventsService.d.ts +11 -0
- package/dist/client/EventsService.d.ts.map +1 -0
- package/dist/client/EventsService.js +54 -0
- package/dist/client/EventsService.js.map +1 -0
- package/dist/client/LiveMatchService.d.ts +18 -0
- package/dist/client/LiveMatchService.d.ts.map +1 -0
- package/dist/client/LiveMatchService.js +84 -0
- package/dist/client/LiveMatchService.js.map +1 -0
- package/dist/client/LoadoutValidator.d.ts +28 -0
- package/dist/client/LoadoutValidator.d.ts.map +1 -0
- package/dist/client/LoadoutValidator.js +330 -0
- package/dist/client/LoadoutValidator.js.map +1 -0
- package/dist/client/MatchService.d.ts +80 -0
- package/dist/client/MatchService.d.ts.map +1 -0
- package/dist/client/MatchService.js +199 -0
- package/dist/client/MatchService.js.map +1 -0
- package/dist/client/MatchValidator.d.ts +29 -0
- package/dist/client/MatchValidator.d.ts.map +1 -0
- package/dist/client/MatchValidator.js +81 -0
- package/dist/client/MatchValidator.js.map +1 -0
- package/dist/client/PartyService.d.ts +111 -0
- package/dist/client/PartyService.d.ts.map +1 -0
- package/dist/client/PartyService.js +460 -0
- package/dist/client/PartyService.js.map +1 -0
- package/dist/client/PartyValidator.d.ts +93 -0
- package/dist/client/PartyValidator.d.ts.map +1 -0
- package/dist/client/PartyValidator.js +390 -0
- package/dist/client/PartyValidator.js.map +1 -0
- package/dist/client/SessionManager.d.ts +28 -0
- package/dist/client/SessionManager.d.ts.map +1 -0
- package/dist/client/SessionManager.js +104 -0
- package/dist/client/SessionManager.js.map +1 -0
- package/dist/client/SocialService.d.ts +63 -0
- package/dist/client/SocialService.d.ts.map +1 -0
- package/dist/client/SocialService.js +185 -0
- package/dist/client/SocialService.js.map +1 -0
- package/dist/client/StoreService.d.ts +25 -0
- package/dist/client/StoreService.d.ts.map +1 -0
- package/dist/client/StoreService.js +88 -0
- package/dist/client/StoreService.js.map +1 -0
- package/dist/client/StoreValidator.d.ts +32 -0
- package/dist/client/StoreValidator.d.ts.map +1 -0
- package/dist/client/StoreValidator.js +111 -0
- package/dist/client/StoreValidator.js.map +1 -0
- package/dist/client/api.d.ts +323 -0
- package/dist/client/api.d.ts.map +1 -0
- package/dist/client/api.js +2 -0
- package/dist/client/api.js.map +1 -0
- package/dist/collection/AccountProgressionBuilder.d.ts +12 -0
- package/dist/collection/AccountProgressionBuilder.d.ts.map +1 -0
- package/dist/collection/AccountProgressionBuilder.js +132 -0
- package/dist/collection/AccountProgressionBuilder.js.map +1 -0
- package/dist/collection/CollectionBuilder.d.ts +19 -0
- package/dist/collection/CollectionBuilder.d.ts.map +1 -0
- package/dist/collection/CollectionBuilder.js +199 -0
- package/dist/collection/CollectionBuilder.js.map +1 -0
- package/dist/collection/ContentBuilder.d.ts +6 -0
- package/dist/collection/ContentBuilder.d.ts.map +1 -0
- package/dist/collection/ContentBuilder.js +36 -0
- package/dist/collection/ContentBuilder.js.map +1 -0
- package/dist/collection/CustomGameConfigsBuilder.d.ts +9 -0
- package/dist/collection/CustomGameConfigsBuilder.d.ts.map +1 -0
- package/dist/collection/CustomGameConfigsBuilder.js +49 -0
- package/dist/collection/CustomGameConfigsBuilder.js.map +1 -0
- package/dist/collection/FriendsBuilder.d.ts +12 -0
- package/dist/collection/FriendsBuilder.d.ts.map +1 -0
- package/dist/collection/FriendsBuilder.js +89 -0
- package/dist/collection/FriendsBuilder.js.map +1 -0
- package/dist/collection/GameSessionBuilder.d.ts +6 -0
- package/dist/collection/GameSessionBuilder.d.ts.map +1 -0
- package/dist/collection/GameSessionBuilder.js +11 -0
- package/dist/collection/GameSessionBuilder.js.map +1 -0
- package/dist/collection/LeaderboardBuilder.d.ts +9 -0
- package/dist/collection/LeaderboardBuilder.d.ts.map +1 -0
- package/dist/collection/LeaderboardBuilder.js +31 -0
- package/dist/collection/LeaderboardBuilder.js.map +1 -0
- package/dist/collection/LiveMatchBuilder.d.ts +22 -0
- package/dist/collection/LiveMatchBuilder.d.ts.map +1 -0
- package/dist/collection/LiveMatchBuilder.js +154 -0
- package/dist/collection/LiveMatchBuilder.js.map +1 -0
- package/dist/collection/LoadoutBuilder.d.ts +12 -0
- package/dist/collection/LoadoutBuilder.d.ts.map +1 -0
- package/dist/collection/LoadoutBuilder.js +126 -0
- package/dist/collection/LoadoutBuilder.js.map +1 -0
- package/dist/collection/LoadoutWriter.d.ts +32 -0
- package/dist/collection/LoadoutWriter.d.ts.map +1 -0
- package/dist/collection/LoadoutWriter.js +48 -0
- package/dist/collection/LoadoutWriter.js.map +1 -0
- package/dist/collection/MatchBuilder.d.ts +22 -0
- package/dist/collection/MatchBuilder.d.ts.map +1 -0
- package/dist/collection/MatchBuilder.js +209 -0
- package/dist/collection/MatchBuilder.js.map +1 -0
- package/dist/collection/MessagesBuilder.d.ts +11 -0
- package/dist/collection/MessagesBuilder.d.ts.map +1 -0
- package/dist/collection/MessagesBuilder.js +89 -0
- package/dist/collection/MessagesBuilder.js.map +1 -0
- package/dist/collection/MmrBuilder.d.ts +16 -0
- package/dist/collection/MmrBuilder.d.ts.map +1 -0
- package/dist/collection/MmrBuilder.js +134 -0
- package/dist/collection/MmrBuilder.js.map +1 -0
- package/dist/collection/PartyBuilder.d.ts +14 -0
- package/dist/collection/PartyBuilder.d.ts.map +1 -0
- package/dist/collection/PartyBuilder.js +37 -0
- package/dist/collection/PartyBuilder.js.map +1 -0
- package/dist/collection/PlayerSettingsBuilder.d.ts +6 -0
- package/dist/collection/PlayerSettingsBuilder.d.ts.map +1 -0
- package/dist/collection/PlayerSettingsBuilder.js +41 -0
- package/dist/collection/PlayerSettingsBuilder.js.map +1 -0
- package/dist/collection/QueueConfigBuilder.d.ts +6 -0
- package/dist/collection/QueueConfigBuilder.d.ts.map +1 -0
- package/dist/collection/QueueConfigBuilder.js +14 -0
- package/dist/collection/QueueConfigBuilder.js.map +1 -0
- package/dist/collection/RankResolver.d.ts +18 -0
- package/dist/collection/RankResolver.d.ts.map +1 -0
- package/dist/collection/RankResolver.js +91 -0
- package/dist/collection/RankResolver.js.map +1 -0
- package/dist/collection/StoreBuilder.d.ts +20 -0
- package/dist/collection/StoreBuilder.d.ts.map +1 -0
- package/dist/collection/StoreBuilder.js +153 -0
- package/dist/collection/StoreBuilder.js.map +1 -0
- package/dist/collection/StoreItemResolver.d.ts +14 -0
- package/dist/collection/StoreItemResolver.d.ts.map +1 -0
- package/dist/collection/StoreItemResolver.js +138 -0
- package/dist/collection/StoreItemResolver.js.map +1 -0
- package/dist/collection/StoreOffersBuilder.d.ts +12 -0
- package/dist/collection/StoreOffersBuilder.d.ts.map +1 -0
- package/dist/collection/StoreOffersBuilder.js +46 -0
- package/dist/collection/StoreOffersBuilder.js.map +1 -0
- package/dist/errors.d.ts +27 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +52 -0
- package/dist/errors.js.map +1 -0
- package/dist/events/RiotEvents.d.ts +78 -0
- package/dist/events/RiotEvents.d.ts.map +1 -0
- package/dist/events/RiotEvents.js +284 -0
- package/dist/events/RiotEvents.js.map +1 -0
- package/dist/events/TypedEmitter.d.ts +10 -0
- package/dist/events/TypedEmitter.d.ts.map +1 -0
- package/dist/events/TypedEmitter.js +30 -0
- package/dist/events/TypedEmitter.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/local/ChatApi.d.ts +21 -0
- package/dist/local/ChatApi.d.ts.map +1 -0
- package/dist/local/ChatApi.js +89 -0
- package/dist/local/ChatApi.js.map +1 -0
- package/dist/local/Lockfile.d.ts +10 -0
- package/dist/local/Lockfile.d.ts.map +1 -0
- package/dist/local/Lockfile.js +37 -0
- package/dist/local/Lockfile.js.map +1 -0
- package/dist/local/Presence.d.ts +4 -0
- package/dist/local/Presence.d.ts.map +1 -0
- package/dist/local/Presence.js +118 -0
- package/dist/local/Presence.js.map +1 -0
- package/dist/local/RegionResolver.d.ts +12 -0
- package/dist/local/RegionResolver.d.ts.map +1 -0
- package/dist/local/RegionResolver.js +51 -0
- package/dist/local/RegionResolver.js.map +1 -0
- package/dist/local/RiotClientLocalApi.d.ts +48 -0
- package/dist/local/RiotClientLocalApi.d.ts.map +1 -0
- package/dist/local/RiotClientLocalApi.js +218 -0
- package/dist/local/RiotClientLocalApi.js.map +1 -0
- package/dist/local/RiotSocket.d.ts +56 -0
- package/dist/local/RiotSocket.d.ts.map +1 -0
- package/dist/local/RiotSocket.js +196 -0
- package/dist/local/RiotSocket.js.map +1 -0
- package/dist/local/chatTypes.d.ts +115 -0
- package/dist/local/chatTypes.d.ts.map +1 -0
- package/dist/local/chatTypes.js +2 -0
- package/dist/local/chatTypes.js.map +1 -0
- package/dist/model/index.d.ts +756 -0
- package/dist/model/index.d.ts.map +1 -0
- package/dist/model/index.js +2 -0
- package/dist/model/index.js.map +1 -0
- package/dist/raw.d.ts +25 -0
- package/dist/raw.d.ts.map +1 -0
- package/dist/raw.js +24 -0
- package/dist/raw.js.map +1 -0
- package/dist/riot/HttpGateway.d.ts +14 -0
- package/dist/riot/HttpGateway.d.ts.map +1 -0
- package/dist/riot/HttpGateway.js +87 -0
- package/dist/riot/HttpGateway.js.map +1 -0
- package/dist/riot/ResponseCache.d.ts +15 -0
- package/dist/riot/ResponseCache.d.ts.map +1 -0
- package/dist/riot/ResponseCache.js +75 -0
- package/dist/riot/ResponseCache.js.map +1 -0
- package/dist/riot/RiotApi.d.ts +87 -0
- package/dist/riot/RiotApi.d.ts.map +1 -0
- package/dist/riot/RiotApi.js +305 -0
- package/dist/riot/RiotApi.js.map +1 -0
- package/dist/riot/Session.d.ts +24 -0
- package/dist/riot/Session.d.ts.map +1 -0
- package/dist/riot/Session.js +41 -0
- package/dist/riot/Session.js.map +1 -0
- package/dist/riot/types.d.ts +676 -0
- package/dist/riot/types.d.ts.map +1 -0
- package/dist/riot/types.js +17 -0
- package/dist/riot/types.js.map +1 -0
- package/package.json +68 -0
- package/schema/AccountXp.json +86 -0
- package/schema/BlockedPlayer.json +22 -0
- package/schema/ClientInfo.json +41 -0
- package/schema/Content.json +83 -0
- package/schema/ContractProgress.json +69 -0
- package/schema/Conversation.json +49 -0
- package/schema/CustomGameConfigs.json +64 -0
- package/schema/CustomGameSettings.json +46 -0
- package/schema/Favourite.json +22 -0
- package/schema/Friend.json +215 -0
- package/schema/FriendRequest.json +26 -0
- package/schema/GameSession.json +25 -0
- package/schema/Leaderboard.json +103 -0
- package/schema/LeaderboardEntry.json +75 -0
- package/schema/LiveMatch.json +354 -0
- package/schema/Loadout.json +241 -0
- package/schema/Match.json +494 -0
- package/schema/MatchSummary.json +38 -0
- package/schema/Message.json +48 -0
- package/schema/Mission.json +31 -0
- package/schema/Mmr.json +172 -0
- package/schema/Offer.json +163 -0
- package/schema/Order.json +177 -0
- package/schema/OwnedItems.json +308 -0
- package/schema/Participant.json +50 -0
- package/schema/Party.json +185 -0
- package/schema/PartyInvite.json +45 -0
- package/schema/PartyRequest.json +42 -0
- package/schema/Penalty.json +22 -0
- package/schema/Player.json +31 -0
- package/schema/PlayerSettings.json +76 -0
- package/schema/Premier.json +19 -0
- package/schema/QueueConfig.json +34 -0
- package/schema/RankChange.json +89 -0
- package/schema/Store.json +455 -0
- package/schema/Wallet.json +22 -0
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { ValidationError } from "../errors.js";
|
|
2
|
+
export class ChatValidator {
|
|
3
|
+
static validateMessageText(text) {
|
|
4
|
+
const trimmed = text.trim();
|
|
5
|
+
if (!trimmed) {
|
|
6
|
+
throw new ValidationError("empty-message", "Message text cannot be empty");
|
|
7
|
+
}
|
|
8
|
+
if (text.length > 1000) {
|
|
9
|
+
throw new ValidationError("message-too-long", "Message text cannot exceed 1000 characters");
|
|
10
|
+
}
|
|
11
|
+
return text;
|
|
12
|
+
}
|
|
13
|
+
static validateMessageTarget(to, friends, conversations) {
|
|
14
|
+
if ("riotId" in to) {
|
|
15
|
+
const { gameName, gameTag } = ChatValidator.parseRiotId(to.riotId);
|
|
16
|
+
const friend = friends.find((f) => f.game_name.toLowerCase() === gameName.toLowerCase() &&
|
|
17
|
+
f.game_tag.toLowerCase() === gameTag.toLowerCase());
|
|
18
|
+
if (!friend) {
|
|
19
|
+
throw new ValidationError("not-a-friend", `Player ${to.riotId} is not a friend`, {
|
|
20
|
+
riotId: to.riotId,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
return {
|
|
24
|
+
cid: `${friend.puuid}@${friend.region}.pvp.net`,
|
|
25
|
+
type: "chat",
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
if ("puuid" in to) {
|
|
29
|
+
const friend = friends.find((f) => f.puuid === to.puuid);
|
|
30
|
+
if (!friend) {
|
|
31
|
+
throw new ValidationError("not-a-friend", `Player ${to.puuid} is not a friend`, {
|
|
32
|
+
puuid: to.puuid,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
cid: `${friend.puuid}@${friend.region}.pvp.net`,
|
|
37
|
+
type: "chat",
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
if ("conversationId" in to) {
|
|
41
|
+
const conv = conversations.find((c) => c.id === to.conversationId);
|
|
42
|
+
if (!conv) {
|
|
43
|
+
throw new ValidationError("unknown-conversation", `Conversation ${to.conversationId} not found`, { conversationId: to.conversationId });
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
cid: to.conversationId,
|
|
47
|
+
type: conv.kind === "whisper" ? "chat" : "groupchat",
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
throw new ValidationError("invalid-target", "Target must specify puuid, conversationId, or riotId");
|
|
51
|
+
}
|
|
52
|
+
static parseRiotId(riotId) {
|
|
53
|
+
const hashIndex = riotId.indexOf("#");
|
|
54
|
+
if (hashIndex <= 0 || hashIndex >= riotId.length - 1) {
|
|
55
|
+
throw new ValidationError("invalid-riot-id", "Expected name#tag format", { riotId });
|
|
56
|
+
}
|
|
57
|
+
const gameName = riotId.slice(0, hashIndex).trim();
|
|
58
|
+
const gameTag = riotId.slice(hashIndex + 1).trim();
|
|
59
|
+
if (!gameName || !gameTag) {
|
|
60
|
+
throw new ValidationError("invalid-riot-id", "Expected name#tag format", { riotId });
|
|
61
|
+
}
|
|
62
|
+
return { gameName, gameTag };
|
|
63
|
+
}
|
|
64
|
+
static validateFriendRequest(riotId, self, friends, requests) {
|
|
65
|
+
const { gameName, gameTag } = this.parseRiotId(riotId);
|
|
66
|
+
const lowerName = gameName.toLowerCase();
|
|
67
|
+
const lowerTag = gameTag.toLowerCase();
|
|
68
|
+
if (self.gameName?.toLowerCase() === lowerName &&
|
|
69
|
+
self.tagLine?.toLowerCase() === lowerTag) {
|
|
70
|
+
throw new ValidationError("cannot-target-self", "Cannot send friend request to yourself");
|
|
71
|
+
}
|
|
72
|
+
const alreadyFriend = friends.some((f) => f.gameName.toLowerCase() === lowerName && f.tagLine.toLowerCase() === lowerTag);
|
|
73
|
+
if (alreadyFriend) {
|
|
74
|
+
throw new ValidationError("already-friends", "Player is already a friend", {
|
|
75
|
+
gameName,
|
|
76
|
+
gameTag,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
const alreadyRequested = requests.some((r) => r.gameName.toLowerCase() === lowerName && r.tagLine.toLowerCase() === lowerTag);
|
|
80
|
+
if (alreadyRequested) {
|
|
81
|
+
throw new ValidationError("already-requested", "Friend request already sent or pending", {
|
|
82
|
+
gameName,
|
|
83
|
+
gameTag,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
return { gameName, gameTag };
|
|
87
|
+
}
|
|
88
|
+
static validateAcceptFriendRequest(puuid, requests) {
|
|
89
|
+
const req = requests.find((r) => r.puuid === puuid && r.subscription === "pending_in");
|
|
90
|
+
if (!req) {
|
|
91
|
+
throw new ValidationError("no-incoming-request", "No incoming friend request from this player", {
|
|
92
|
+
puuid,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
return { gameName: req.game_name, gameTag: req.game_tag };
|
|
96
|
+
}
|
|
97
|
+
static validateDeclineFriendRequest(puuid, requests) {
|
|
98
|
+
const req = requests.find((r) => r.puuid === puuid && r.subscription === "pending_in");
|
|
99
|
+
if (!req) {
|
|
100
|
+
throw new ValidationError("no-incoming-request", "No incoming friend request from this player", {
|
|
101
|
+
puuid,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
static validateCancelFriendRequest(puuid, requests) {
|
|
106
|
+
const req = requests.find((r) => r.puuid === puuid && r.subscription === "pending_out");
|
|
107
|
+
if (!req) {
|
|
108
|
+
throw new ValidationError("no-outgoing-request", "No outgoing friend request to this player", {
|
|
109
|
+
puuid,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
static validateRemoveFriend(puuid, friends) {
|
|
114
|
+
const friend = friends.find((f) => f.puuid === puuid);
|
|
115
|
+
if (!friend) {
|
|
116
|
+
throw new ValidationError("not-a-friend", "Player is not in friends list", { puuid });
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
static validateBlockPlayer(target, self, blocked, friends, requests) {
|
|
120
|
+
let targetPuuid = target;
|
|
121
|
+
if (target.includes("#")) {
|
|
122
|
+
const { gameName, gameTag } = this.parseRiotId(target);
|
|
123
|
+
const lowerName = gameName.toLowerCase();
|
|
124
|
+
const lowerTag = gameTag.toLowerCase();
|
|
125
|
+
if (self.gameName?.toLowerCase() === lowerName &&
|
|
126
|
+
self.tagLine?.toLowerCase() === lowerTag) {
|
|
127
|
+
throw new ValidationError("cannot-target-self", "Cannot block yourself");
|
|
128
|
+
}
|
|
129
|
+
const match = friends.find((f) => f.gameName.toLowerCase() === lowerName && f.tagLine.toLowerCase() === lowerTag) ??
|
|
130
|
+
requests.find((r) => r.gameName.toLowerCase() === lowerName && r.tagLine.toLowerCase() === lowerTag);
|
|
131
|
+
if (!match) {
|
|
132
|
+
throw new ValidationError("unknown-player", `Cannot resolve player ${target}`, { target });
|
|
133
|
+
}
|
|
134
|
+
targetPuuid = match.puuid;
|
|
135
|
+
}
|
|
136
|
+
if (self.puuid && targetPuuid === self.puuid) {
|
|
137
|
+
throw new ValidationError("cannot-target-self", "Cannot block yourself");
|
|
138
|
+
}
|
|
139
|
+
const alreadyBlocked = blocked.some((b) => b.puuid === targetPuuid);
|
|
140
|
+
if (alreadyBlocked) {
|
|
141
|
+
throw new ValidationError("already-blocked", "Player is already blocked", {
|
|
142
|
+
puuid: targetPuuid,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
return targetPuuid;
|
|
146
|
+
}
|
|
147
|
+
static validateUnblockPlayer(puuid, blocked) {
|
|
148
|
+
const isBlocked = blocked.some((b) => b.puuid === puuid);
|
|
149
|
+
if (!isBlocked) {
|
|
150
|
+
throw new ValidationError("not-blocked", "Player is not currently blocked", { puuid });
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=ChatValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatValidator.js","sourceRoot":"","sources":["../../src/client/ChatValidator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Catalogue } from "../catalogue/Catalogue.js";
|
|
2
|
+
import type { ValorantApi } from "../catalogue/ValorantApi.js";
|
|
3
|
+
import type { Player } from "../model/index.js";
|
|
4
|
+
import type { RiotApi } from "../riot/RiotApi.js";
|
|
5
|
+
import type { Session } from "../riot/Session.js";
|
|
6
|
+
import type { SessionManager } from "./SessionManager.js";
|
|
7
|
+
export interface ClientContext {
|
|
8
|
+
language: string;
|
|
9
|
+
sessions: SessionManager;
|
|
10
|
+
valorantApi: ValorantApi;
|
|
11
|
+
api(session: Session): RiotApi;
|
|
12
|
+
catalogue(language?: string): Promise<Catalogue>;
|
|
13
|
+
player(session: Session): Promise<Player>;
|
|
14
|
+
}
|
|
15
|
+
export declare function createPlayer(api: RiotApi, session: Session): Promise<Player>;
|
|
16
|
+
//# sourceMappingURL=ClientContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClientContext.d.ts","sourceRoot":"","sources":["../../src/client/ClientContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,cAAc,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;IAC/B,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACjD,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC3C;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAUlF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export async function createPlayer(api, session) {
|
|
2
|
+
const [names, accountXp] = await Promise.all([api.names([session.puuid]), api.accountXp()]);
|
|
3
|
+
return {
|
|
4
|
+
puuid: session.puuid,
|
|
5
|
+
gameName: names[0]?.GameName ?? "",
|
|
6
|
+
tagLine: names[0]?.TagLine ?? "",
|
|
7
|
+
region: session.region,
|
|
8
|
+
shard: session.shard,
|
|
9
|
+
accountLevel: accountXp.Progress?.Level ?? 0,
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=ClientContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClientContext.js","sourceRoot":"","sources":["../../src/client/ClientContext.ts"],"names":[],"mappings":"AAgBA,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAY,EAAE,OAAgB;IAC/D,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC5F,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,EAAE;QAClC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,EAAE;QAChC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,YAAY,EAAE,SAAS,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC;KAC7C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { RiotEvents } from "../events/RiotEvents.js";
|
|
2
|
+
import type { ClientContext } from "./ClientContext.js";
|
|
3
|
+
export declare class EventsService {
|
|
4
|
+
private readonly context;
|
|
5
|
+
private cachedEvents;
|
|
6
|
+
constructor(context: ClientContext);
|
|
7
|
+
events(): RiotEvents;
|
|
8
|
+
close(): void;
|
|
9
|
+
private resolveEventPuuid;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=EventsService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventsService.d.ts","sourceRoot":"","sources":["../../src/client/EventsService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAIrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,qBAAa,aAAa;IAGZ,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,YAAY,CAA2B;gBAElB,OAAO,EAAE,aAAa;IAEnD,MAAM,IAAI,UAAU;IA0BpB,KAAK,IAAI,IAAI;YAOC,iBAAiB;CAYhC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { RiotEvents } from "../events/RiotEvents.js";
|
|
2
|
+
import { ChatApi } from "../local/ChatApi.js";
|
|
3
|
+
import { RiotSocket } from "../local/RiotSocket.js";
|
|
4
|
+
export class EventsService {
|
|
5
|
+
context;
|
|
6
|
+
cachedEvents = null;
|
|
7
|
+
constructor(context) {
|
|
8
|
+
this.context = context;
|
|
9
|
+
}
|
|
10
|
+
events() {
|
|
11
|
+
if (this.cachedEvents) {
|
|
12
|
+
return this.cachedEvents;
|
|
13
|
+
}
|
|
14
|
+
const socket = new RiotSocket(() => this.context.sessions.credentials());
|
|
15
|
+
const dynamicLocalApi = {
|
|
16
|
+
get: (path) => {
|
|
17
|
+
try {
|
|
18
|
+
return this.context.sessions.localApi().get(path);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return Promise.resolve(null);
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
const chatApi = new ChatApi(dynamicLocalApi);
|
|
26
|
+
const catalogueLoader = () => this.context.catalogue();
|
|
27
|
+
const puuidResolver = () => this.resolveEventPuuid(chatApi);
|
|
28
|
+
this.cachedEvents = new RiotEvents(socket, chatApi, catalogueLoader, puuidResolver);
|
|
29
|
+
this.cachedEvents.start();
|
|
30
|
+
return this.cachedEvents;
|
|
31
|
+
}
|
|
32
|
+
close() {
|
|
33
|
+
if (this.cachedEvents) {
|
|
34
|
+
this.cachedEvents.stop();
|
|
35
|
+
this.cachedEvents = null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async resolveEventPuuid(chatApi) {
|
|
39
|
+
try {
|
|
40
|
+
const session = await chatApi.session();
|
|
41
|
+
if (session?.puuid)
|
|
42
|
+
return session.puuid;
|
|
43
|
+
}
|
|
44
|
+
catch { }
|
|
45
|
+
try {
|
|
46
|
+
const session = await this.context.sessions.session();
|
|
47
|
+
return session.puuid;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=EventsService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventsService.js","sourceRoot":"","sources":["../../src/client/EventsService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGpD,MAAM,OAAO,aAAa;IAGK;IAFrB,YAAY,GAAsB,IAAI,CAAC;IAE/C,YAA6B,OAAsB;QAAtB,YAAO,GAAP,OAAO,CAAe;IAAG,CAAC;IAEvD,MAAM;QACJ,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,YAAY,CAAC;QAC3B,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QAEzE,MAAM,eAAe,GAAG;YACtB,GAAG,EAAE,CAAI,IAAY,EAAE,EAAE;gBACvB,IAAI,CAAC;oBACH,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAI,IAAI,CAAC,CAAC;gBACvD,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;SAC+B,CAAC;QAEnC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;QAC7C,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QACvD,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAE5D,IAAI,CAAC,YAAY,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,CAAC,CAAC;QACpF,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;YACzB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,OAAgB;QAC9C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;YACxC,IAAI,OAAO,EAAE,KAAK;gBAAE,OAAO,OAAO,CAAC,KAAK,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtD,OAAO,OAAO,CAAC,KAAK,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { LiveMatch } from "../model/index.js";
|
|
2
|
+
import type { RiotApi } from "../riot/RiotApi.js";
|
|
3
|
+
import type { ClientContext } from "./ClientContext.js";
|
|
4
|
+
export declare function resolveLobbyNames(api: RiotApi, puuids: string[]): Promise<Map<string, {
|
|
5
|
+
gameName: string;
|
|
6
|
+
tagLine: string;
|
|
7
|
+
}>>;
|
|
8
|
+
export declare class LiveMatchService {
|
|
9
|
+
private readonly context;
|
|
10
|
+
private readonly liveRankCache;
|
|
11
|
+
constructor(context: ClientContext);
|
|
12
|
+
liveMatch(options?: {
|
|
13
|
+
ranks?: boolean;
|
|
14
|
+
loadouts?: boolean;
|
|
15
|
+
}): Promise<LiveMatch>;
|
|
16
|
+
private resolveLobbyRanks;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=LiveMatchService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiveMatchService.d.ts","sourceRoot":"","sources":["../../src/client/LiveMatchService.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAQ,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAW7D;AAED,qBAAa,gBAAgB;IAGf,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkC;gBAEnC,OAAO,EAAE,aAAa;IAE7C,SAAS,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,CAAC;YAuCxE,iBAAiB;CA8BhC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { LiveMatchBuilder } from "../collection/LiveMatchBuilder.js";
|
|
2
|
+
import { MmrBuilder } from "../collection/MmrBuilder.js";
|
|
3
|
+
export async function resolveLobbyNames(api, puuids) {
|
|
4
|
+
const map = new Map();
|
|
5
|
+
const unique = Array.from(new Set(puuids.filter(Boolean)));
|
|
6
|
+
if (unique.length === 0)
|
|
7
|
+
return map;
|
|
8
|
+
try {
|
|
9
|
+
const list = await api.names(unique);
|
|
10
|
+
for (const item of list) {
|
|
11
|
+
map.set(item.Subject, { gameName: item.GameName, tagLine: item.TagLine });
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
catch { }
|
|
15
|
+
return map;
|
|
16
|
+
}
|
|
17
|
+
export class LiveMatchService {
|
|
18
|
+
context;
|
|
19
|
+
liveRankCache = new Map();
|
|
20
|
+
constructor(context) {
|
|
21
|
+
this.context = context;
|
|
22
|
+
}
|
|
23
|
+
async liveMatch(options) {
|
|
24
|
+
const session = await this.context.sessions.session();
|
|
25
|
+
const api = this.context.api(session);
|
|
26
|
+
const catalogue = await this.context.catalogue();
|
|
27
|
+
const builder = new LiveMatchBuilder(catalogue);
|
|
28
|
+
const pregame = await api.pregamePlayer();
|
|
29
|
+
if (pregame?.MatchID) {
|
|
30
|
+
const match = await api.pregameMatch(pregame.MatchID);
|
|
31
|
+
const puuids = [
|
|
32
|
+
...(match.AllyTeam?.Players ?? []).map((p) => p.Subject),
|
|
33
|
+
...(match.EnemyTeam?.Players ?? []).map((p) => p.Subject),
|
|
34
|
+
];
|
|
35
|
+
const names = await resolveLobbyNames(api, puuids);
|
|
36
|
+
const ranks = options?.ranks
|
|
37
|
+
? await this.resolveLobbyRanks(api, puuids, catalogue)
|
|
38
|
+
: new Map();
|
|
39
|
+
return builder.buildPregame(match, names, ranks, session.puuid);
|
|
40
|
+
}
|
|
41
|
+
const core = await api.coreGamePlayer();
|
|
42
|
+
if (core?.MatchID) {
|
|
43
|
+
const match = await api.coreGameMatch(core.MatchID);
|
|
44
|
+
if (match.ProvisioningFlow === "ShootingRange") {
|
|
45
|
+
return { phase: "range", matchId: match.MatchID };
|
|
46
|
+
}
|
|
47
|
+
const puuids = (match.Players ?? []).map((p) => p.Subject);
|
|
48
|
+
const names = await resolveLobbyNames(api, puuids);
|
|
49
|
+
const rawLoadouts = options?.loadouts !== false ? await api.coreGameLoadouts(core.MatchID) : null;
|
|
50
|
+
const ranks = options?.ranks
|
|
51
|
+
? await this.resolveLobbyRanks(api, puuids, catalogue)
|
|
52
|
+
: new Map();
|
|
53
|
+
return builder.buildCoreGame(match, rawLoadouts, names, ranks, session.puuid);
|
|
54
|
+
}
|
|
55
|
+
return { phase: "none" };
|
|
56
|
+
}
|
|
57
|
+
async resolveLobbyRanks(api, puuids, catalogue) {
|
|
58
|
+
const ranks = new Map();
|
|
59
|
+
const mmrBuilder = new MmrBuilder(catalogue);
|
|
60
|
+
const unique = Array.from(new Set(puuids.filter(Boolean)));
|
|
61
|
+
for (let i = 0; i < unique.length; i++) {
|
|
62
|
+
const puuid = unique[i];
|
|
63
|
+
if (this.liveRankCache.has(puuid)) {
|
|
64
|
+
ranks.set(puuid, this.liveRankCache.get(puuid));
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
if (i > 0) {
|
|
68
|
+
await new Promise((r) => setTimeout(r, 250));
|
|
69
|
+
}
|
|
70
|
+
try {
|
|
71
|
+
const raw = await api.mmr(puuid);
|
|
72
|
+
const mmr = mmrBuilder.buildMmr(raw);
|
|
73
|
+
this.liveRankCache.set(puuid, mmr.current);
|
|
74
|
+
ranks.set(puuid, mmr.current);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
this.liveRankCache.set(puuid, null);
|
|
78
|
+
ranks.set(puuid, null);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return ranks;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=LiveMatchService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiveMatchService.js","sourceRoot":"","sources":["../../src/client/LiveMatchService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Catalogue } from "../catalogue/Catalogue.js";
|
|
2
|
+
import type { OwnedItems } from "../model/index.js";
|
|
3
|
+
import { type RiotEntitlementsResponse, type RiotLoadoutResponse } from "../riot/types.js";
|
|
4
|
+
export interface LoadoutGunChange {
|
|
5
|
+
weapon: string;
|
|
6
|
+
skin?: string;
|
|
7
|
+
level?: string;
|
|
8
|
+
chroma?: string;
|
|
9
|
+
buddy?: string | null;
|
|
10
|
+
}
|
|
11
|
+
export interface LoadoutChange {
|
|
12
|
+
guns?: LoadoutGunChange[];
|
|
13
|
+
sprays?: Array<string | null | undefined>;
|
|
14
|
+
flex?: string | null;
|
|
15
|
+
card?: string;
|
|
16
|
+
title?: string;
|
|
17
|
+
levelBorder?: string;
|
|
18
|
+
incognito?: boolean;
|
|
19
|
+
hideAccountLevel?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare class LoadoutValidator {
|
|
22
|
+
static validate(currentRaw: RiotLoadoutResponse, ownedItems: OwnedItems, catalogue: Catalogue, rawEntitlements: RiotEntitlementsResponse, change: LoadoutChange): RiotLoadoutResponse;
|
|
23
|
+
private static validateGuns;
|
|
24
|
+
private static resolveLevel;
|
|
25
|
+
private static resolveChroma;
|
|
26
|
+
private static getBuddyInstances;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=LoadoutValidator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoadoutValidator.d.ts","sourceRoot":"","sources":["../../src/client/LoadoutValidator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAE3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAGL,KAAK,wBAAwB,EAE7B,KAAK,mBAAmB,EACzB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IAC1C,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,qBAAa,gBAAgB;IAC3B,MAAM,CAAC,QAAQ,CACb,UAAU,EAAE,mBAAmB,EAC/B,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,wBAAwB,EACzC,MAAM,EAAE,aAAa,GACpB,mBAAmB;IAgKtB,OAAO,CAAC,MAAM,CAAC,YAAY;IA8J3B,OAAO,CAAC,MAAM,CAAC,YAAY;IA+C3B,OAAO,CAAC,MAAM,CAAC,aAAa;IAuC5B,OAAO,CAAC,MAAM,CAAC,iBAAiB;CAuBjC"}
|