@wavezfm/api 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/README.md +338 -0
  2. package/dist/core/ApiError.d.ts +14 -0
  3. package/dist/core/ApiError.js +20 -0
  4. package/dist/core/ApiError.js.map +1 -0
  5. package/dist/core/api.d.ts +27 -0
  6. package/dist/core/api.js +327 -0
  7. package/dist/core/api.js.map +1 -0
  8. package/dist/core/i18n.d.ts +3 -0
  9. package/dist/core/i18n.js +97 -0
  10. package/dist/core/i18n.js.map +1 -0
  11. package/dist/index.d.ts +379 -0
  12. package/dist/index.js +47 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/realtime/roomBot.d.ts +2 -0
  15. package/dist/realtime/roomBot.js +215 -0
  16. package/dist/realtime/roomBot.js.map +1 -0
  17. package/dist/resources/auth.d.ts +35 -0
  18. package/dist/resources/auth.js +30 -0
  19. package/dist/resources/auth.js.map +1 -0
  20. package/dist/resources/billing.d.ts +45 -0
  21. package/dist/resources/billing.js +29 -0
  22. package/dist/resources/billing.js.map +1 -0
  23. package/dist/resources/chat.d.ts +27 -0
  24. package/dist/resources/chat.js +38 -0
  25. package/dist/resources/chat.js.map +1 -0
  26. package/dist/resources/friend.d.ts +23 -0
  27. package/dist/resources/friend.js +35 -0
  28. package/dist/resources/friend.js.map +1 -0
  29. package/dist/resources/playlist.d.ts +64 -0
  30. package/dist/resources/playlist.js +61 -0
  31. package/dist/resources/playlist.js.map +1 -0
  32. package/dist/resources/room.d.ts +50 -0
  33. package/dist/resources/room.js +152 -0
  34. package/dist/resources/room.js.map +1 -0
  35. package/dist/resources/roomBot.d.ts +45 -0
  36. package/dist/resources/roomBot.js +75 -0
  37. package/dist/resources/roomBot.js.map +1 -0
  38. package/dist/resources/settings.d.ts +43 -0
  39. package/dist/resources/settings.js +38 -0
  40. package/dist/resources/settings.js.map +1 -0
  41. package/dist/resources/shop.d.ts +11 -0
  42. package/dist/resources/shop.js +22 -0
  43. package/dist/resources/shop.js.map +1 -0
  44. package/dist/resources/source.d.ts +14 -0
  45. package/dist/resources/source.js +50 -0
  46. package/dist/resources/source.js.map +1 -0
  47. package/dist/resources/system.d.ts +6 -0
  48. package/dist/resources/system.js +20 -0
  49. package/dist/resources/system.js.map +1 -0
  50. package/dist/resources/user.d.ts +7 -0
  51. package/dist/resources/user.js +19 -0
  52. package/dist/resources/user.js.map +1 -0
  53. package/dist/types.d.ts +374 -0
  54. package/dist/types.js +2 -0
  55. package/dist/types.js.map +1 -0
  56. package/package.json +97 -0
@@ -0,0 +1,327 @@
1
+ import { ApiError } from "./ApiError";
2
+ import { createSdkMessageFormatter, resolveSdkErrorMessage } from "./i18n";
3
+ const DEFAULT_TIMEOUT_MS = 30_000;
4
+ function ensureFetchImplementation(candidate, formatMessage) {
5
+ const resolved = candidate ?? globalThis.fetch;
6
+ if (typeof resolved !== "function") {
7
+ throw new Error(formatMessage?.("fetchUnavailable") ??
8
+ "Fetch API is unavailable. Provide `fetch` to createApi(...) or use a runtime with native fetch.");
9
+ }
10
+ return resolved;
11
+ }
12
+ function normalizeApiBaseURL(baseURL, formatMessage) {
13
+ const trimmed = baseURL.trim();
14
+ if (!trimmed) {
15
+ throw new Error(formatMessage?.("baseUrlRequired") ??
16
+ "`baseURL` is required to create the client.");
17
+ }
18
+ const url = new URL(trimmed);
19
+ const normalizedPathname = url.pathname.replace(/\/+$/, "");
20
+ url.pathname =
21
+ normalizedPathname.length === 0
22
+ ? resolveDefaultApiBasePath(url)
23
+ : normalizedPathname;
24
+ url.search = "";
25
+ url.hash = "";
26
+ return url.toString().replace(/\/$/, "");
27
+ }
28
+ function resolveDefaultApiBasePath(url) {
29
+ const hostname = url.hostname.trim().toLowerCase();
30
+ const isLocalDevelopmentHost = hostname === "localhost" ||
31
+ hostname === "127.0.0.1" ||
32
+ hostname === "::1" ||
33
+ hostname.endsWith(".localhost");
34
+ const isDedicatedApiHost = hostname === "api" || hostname.startsWith("api.");
35
+ const isCommonApiPort = url.port === "3001";
36
+ if (isLocalDevelopmentHost || isDedicatedApiHost || isCommonApiPort) {
37
+ return "/";
38
+ }
39
+ return "/api";
40
+ }
41
+ function buildRequestUrl(baseURL, path, query) {
42
+ const rawPath = path.trim();
43
+ const base = /^https?:\/\//i.test(rawPath)
44
+ ? new URL(rawPath)
45
+ : new URL(`${baseURL}${rawPath.startsWith("/") ? rawPath : `/${rawPath}`}`);
46
+ if (query) {
47
+ for (const [key, value] of Object.entries(query)) {
48
+ appendQueryValue(base.searchParams, key, value);
49
+ }
50
+ }
51
+ return base.toString();
52
+ }
53
+ function appendQueryValue(searchParams, key, value) {
54
+ if (value === undefined) {
55
+ return;
56
+ }
57
+ if (Array.isArray(value)) {
58
+ for (const entry of value) {
59
+ if (entry !== undefined) {
60
+ searchParams.append(key, stringifyQueryValue(entry));
61
+ }
62
+ }
63
+ return;
64
+ }
65
+ searchParams.set(key, stringifyQueryValue(value));
66
+ }
67
+ function stringifyQueryValue(value) {
68
+ if (value === null) {
69
+ return "null";
70
+ }
71
+ return String(value);
72
+ }
73
+ function isFormData(value) {
74
+ return typeof FormData !== "undefined" && value instanceof FormData;
75
+ }
76
+ function isUrlSearchParams(value) {
77
+ return value instanceof URLSearchParams;
78
+ }
79
+ function isBlobLike(value) {
80
+ return typeof Blob !== "undefined" && value instanceof Blob;
81
+ }
82
+ function isArrayBufferLike(value) {
83
+ return value instanceof ArrayBuffer;
84
+ }
85
+ function hasJsonContentType(contentType) {
86
+ return contentType?.includes("application/json") ?? false;
87
+ }
88
+ function createTimeoutSignal(timeoutMs, signal) {
89
+ const controller = new AbortController();
90
+ const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
91
+ if (signal) {
92
+ if (signal.aborted) {
93
+ controller.abort();
94
+ }
95
+ else {
96
+ signal.addEventListener("abort", () => {
97
+ controller.abort();
98
+ }, { once: true });
99
+ }
100
+ }
101
+ return {
102
+ signal: controller.signal,
103
+ cleanup() {
104
+ clearTimeout(timeoutId);
105
+ },
106
+ };
107
+ }
108
+ function extractErrorMessage(payload, fallback) {
109
+ if (typeof payload === "string" && payload.trim()) {
110
+ return payload;
111
+ }
112
+ if (payload && typeof payload === "object") {
113
+ const record = payload;
114
+ if (typeof record.error === "string" && record.error.trim()) {
115
+ return record.error;
116
+ }
117
+ if (typeof record.message === "string" && record.message.trim()) {
118
+ return record.message;
119
+ }
120
+ }
121
+ return fallback;
122
+ }
123
+ function extractErrorCode(payload) {
124
+ if (!payload || typeof payload !== "object") {
125
+ return null;
126
+ }
127
+ const record = payload;
128
+ return typeof record.code === "string" && record.code.trim()
129
+ ? record.code
130
+ : null;
131
+ }
132
+ export class WavezApi {
133
+ baseURL;
134
+ defaultHeaders;
135
+ timeout;
136
+ credentials;
137
+ fetchImpl;
138
+ logging;
139
+ messageFormatter;
140
+ authToken;
141
+ roomBotToken;
142
+ constructor(config) {
143
+ this.messageFormatter = createSdkMessageFormatter(config.locale, config.messages);
144
+ this.baseURL = normalizeApiBaseURL(config.baseURL, this.messageFormatter);
145
+ this.defaultHeaders = new Headers(config.headers);
146
+ this.timeout = config.timeout ?? DEFAULT_TIMEOUT_MS;
147
+ this.credentials = config.credentials ?? "include";
148
+ this.fetchImpl = ensureFetchImplementation(config.fetch, this.messageFormatter);
149
+ this.logging = config.logging ?? false;
150
+ this.authToken =
151
+ typeof config.authToken === "string" ? config.authToken : null;
152
+ this.roomBotToken =
153
+ typeof config.roomBotToken === "string"
154
+ ? config.roomBotToken
155
+ : null;
156
+ }
157
+ getBaseURL() {
158
+ return this.baseURL;
159
+ }
160
+ getSiteURL(path = "/") {
161
+ const url = new URL(this.baseURL);
162
+ return new URL(path, `${url.origin}/`).toString();
163
+ }
164
+ formatMessage(key, values) {
165
+ return this.messageFormatter(key, values);
166
+ }
167
+ setAuthToken(token) {
168
+ this.authToken = token && token.trim().length > 0 ? token : null;
169
+ }
170
+ getAuthToken() {
171
+ return this.authToken;
172
+ }
173
+ setRoomBotToken(token) {
174
+ this.roomBotToken = token && token.trim().length > 0 ? token : null;
175
+ }
176
+ getRoomBotToken() {
177
+ return this.roomBotToken;
178
+ }
179
+ async request(options) {
180
+ const method = options.method ?? "GET";
181
+ const url = buildRequestUrl(this.baseURL, options.path, options.query);
182
+ const headers = new Headers(this.defaultHeaders);
183
+ if (options.headers) {
184
+ const additionalHeaders = new Headers(options.headers);
185
+ additionalHeaders.forEach((value, key) => {
186
+ headers.set(key, value);
187
+ });
188
+ }
189
+ const authMode = options.authMode ?? "session";
190
+ if (authMode === "auth-token" &&
191
+ this.authToken &&
192
+ !headers.has("Authorization")) {
193
+ headers.set("Authorization", `Bearer ${this.authToken}`);
194
+ }
195
+ if (authMode === "room-bot" &&
196
+ this.roomBotToken &&
197
+ !headers.has("X-Wavez-Bot-Token")) {
198
+ headers.set("X-Wavez-Bot-Token", this.roomBotToken);
199
+ }
200
+ let body;
201
+ if (options.body !== undefined) {
202
+ if (typeof options.body === "string" ||
203
+ isFormData(options.body) ||
204
+ isUrlSearchParams(options.body) ||
205
+ isBlobLike(options.body) ||
206
+ isArrayBufferLike(options.body)) {
207
+ body = options.body;
208
+ }
209
+ else {
210
+ if (!headers.has("Content-Type")) {
211
+ headers.set("Content-Type", "application/json");
212
+ }
213
+ body = JSON.stringify(options.body);
214
+ }
215
+ }
216
+ const timeout = createTimeoutSignal(this.timeout, options.signal);
217
+ const startedAt = Date.now();
218
+ if (this.logging) {
219
+ console.info(`[Wavez API] ${method} ${url}`);
220
+ }
221
+ try {
222
+ const response = await this.fetchImpl(url, {
223
+ method,
224
+ headers,
225
+ body,
226
+ credentials: options.credentials ?? this.credentials,
227
+ cache: options.cache,
228
+ signal: timeout.signal,
229
+ });
230
+ const completedAt = Date.now() - startedAt;
231
+ const parseAs = options.parseAs ?? "json";
232
+ const contentType = response.headers.get("content-type");
233
+ let payload = undefined;
234
+ if (parseAs === "text") {
235
+ payload = await response.text();
236
+ }
237
+ else if (parseAs === "json") {
238
+ if (response.status !== 204 && hasJsonContentType(contentType)) {
239
+ payload = await response.json();
240
+ }
241
+ else if (response.status !== 204) {
242
+ const text = await response.text();
243
+ payload = text.length > 0 ? text : undefined;
244
+ }
245
+ }
246
+ if (!response.ok) {
247
+ const errorCode = extractErrorCode(payload);
248
+ const fallbackMessage = extractErrorMessage(payload, `Request failed with status ${response.status}.`);
249
+ throw new ApiError(resolveSdkErrorMessage(errorCode, fallbackMessage, this.messageFormatter), {
250
+ status: response.status,
251
+ statusText: response.statusText,
252
+ code: errorCode,
253
+ response: payload,
254
+ headers: response.headers,
255
+ });
256
+ }
257
+ if (this.logging) {
258
+ console.info(`[Wavez API] ${method} ${url} -> ${response.status} (${completedAt}ms)`);
259
+ }
260
+ return {
261
+ data: parseAs === "void"
262
+ ? undefined
263
+ : (payload ?? undefined),
264
+ status: response.status,
265
+ headers: response.headers,
266
+ };
267
+ }
268
+ catch (error) {
269
+ if (error instanceof ApiError) {
270
+ throw error;
271
+ }
272
+ if (error instanceof Error && error.name === "AbortError") {
273
+ throw new ApiError(this.messageFormatter("requestTimedOut"), {
274
+ status: 408,
275
+ statusText: "Request Timeout",
276
+ code: "REQUEST_TIMEOUT",
277
+ });
278
+ }
279
+ throw error;
280
+ }
281
+ finally {
282
+ timeout.cleanup();
283
+ }
284
+ }
285
+ get(path, options) {
286
+ return this.request({
287
+ ...options,
288
+ path,
289
+ method: "GET",
290
+ });
291
+ }
292
+ post(path, body, options) {
293
+ return this.request({
294
+ ...options,
295
+ path,
296
+ method: "POST",
297
+ body,
298
+ });
299
+ }
300
+ put(path, body, options) {
301
+ return this.request({
302
+ ...options,
303
+ path,
304
+ method: "PUT",
305
+ body,
306
+ });
307
+ }
308
+ patch(path, body, options) {
309
+ return this.request({
310
+ ...options,
311
+ path,
312
+ method: "PATCH",
313
+ body,
314
+ });
315
+ }
316
+ delete(path, options) {
317
+ return this.request({
318
+ ...options,
319
+ path,
320
+ method: "DELETE",
321
+ });
322
+ }
323
+ }
324
+ export function createApi(config) {
325
+ return new WavezApi(config);
326
+ }
327
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/core/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { WavezApiLocale, WavezApiMessageKey, WavezApiMessages, WavezApiMessageValues } from "../types";
2
+ export declare function createSdkMessageFormatter(locale?: WavezApiLocale, overrides?: WavezApiMessages): (key: WavezApiMessageKey, values?: WavezApiMessageValues) => string;
3
+ export declare function resolveSdkErrorMessage(code: string | null, fallback: string, formatMessage: (key: WavezApiMessageKey, values?: WavezApiMessageValues) => string): string;
@@ -0,0 +1,97 @@
1
+ const DEFAULT_LOCALE = "en";
2
+ const DEFAULT_MESSAGES = {
3
+ en: {
4
+ fetchUnavailable: "Fetch API is unavailable. Provide `fetch` to createApi(...) or use a runtime with native fetch.",
5
+ baseUrlRequired: "`baseURL` is required to create the client.",
6
+ requestTimedOut: "Request timed out.",
7
+ roomPermissionManageRoom: "You cannot manage this room.",
8
+ roomNotFound: "Room not found.",
9
+ roomBotInvalid: "Invalid room bot token.",
10
+ roomBotScopeMismatch: "This room bot token is not valid for the requested room.",
11
+ roomBotOwnerMissing: "The room bot owner no longer exists.",
12
+ roomBotOwnerBanned: "The room bot owner is suspended from Wavez.",
13
+ roomBotPermissionDenied: "This room bot token does not include the required permission.",
14
+ roomBotForbidden: "This room bot token is not allowed to perform this action.",
15
+ roomBotTokenRequired: "Room bot token is required.",
16
+ roomBotMuted: "The room bot owner is muted in this room.",
17
+ roomBotWebsocketFactoryRequired: "WebSocket is unavailable. Provide `websocketFactory` when creating the realtime client.",
18
+ roomBotWebsocketListenerUnsupported: "The provided WebSocket implementation does not support listeners.",
19
+ roomBotWebsocketNotConnected: "WebSocket is not connected.",
20
+ roomBotWebsocketCreateFailed: "Failed to create the room bot WebSocket.",
21
+ roomBotWebsocketConnectFailed: "Failed to connect the room bot WebSocket.",
22
+ roomBotCreateNameLengthInvalid: "Bot name must be between 2 and 40 characters.",
23
+ roomBotCreateAvatarUrlInvalid: "Bot avatar URL is invalid.",
24
+ roomBotCreateAvatarUrlDirectImageRequired: "Bot avatar URL must point directly to an image or GIF.",
25
+ roomBotCreatePermissionsArrayRequired: "Room bot permissions must be an array.",
26
+ roomBotCreatePermissionInvalid: "Invalid room bot permission.",
27
+ roomBotCreatePermissionRequired: "At least one room bot permission is required.",
28
+ roomBotCreatePrefixLengthInvalid: "Bot prefix must be between 1 and 12 characters.",
29
+ roomBotCreatePrefixWhitespaceInvalid: "Bot prefix cannot contain whitespace.",
30
+ roomBotCreateExpiryNumberInvalid: "Room bot expiration must be a valid number of hours.",
31
+ roomBotCreateExpiryRangeInvalid: "Room bot expiration must be between 1 and 720 hours.",
32
+ },
33
+ "pt-BR": {
34
+ fetchUnavailable: "A Fetch API não está disponível. Informe `fetch` em createApi(...) ou use um runtime com fetch nativo.",
35
+ baseUrlRequired: "`baseURL` é obrigatório para criar o client.",
36
+ requestTimedOut: "A requisição expirou.",
37
+ roomPermissionManageRoom: "Você não pode gerenciar esta sala.",
38
+ roomNotFound: "Sala não encontrada.",
39
+ roomBotInvalid: "Token de room bot inválido.",
40
+ roomBotScopeMismatch: "Este token de room bot não é válido para a sala solicitada.",
41
+ roomBotOwnerMissing: "O dono do room bot não existe mais.",
42
+ roomBotOwnerBanned: "O dono do room bot está suspenso do Wavez.",
43
+ roomBotPermissionDenied: "Este token de room bot não inclui a permissão necessária.",
44
+ roomBotForbidden: "Este token de room bot não pode executar esta ação.",
45
+ roomBotTokenRequired: "O token do room bot é obrigatório.",
46
+ roomBotMuted: "O dono do room bot está mutado nesta sala.",
47
+ roomBotWebsocketFactoryRequired: "WebSocket indisponível. Informe `websocketFactory` ao criar o realtime client.",
48
+ roomBotWebsocketListenerUnsupported: "A implementação de WebSocket informada não suporta listeners.",
49
+ roomBotWebsocketNotConnected: "WebSocket não conectado.",
50
+ roomBotWebsocketCreateFailed: "Falha ao criar o WebSocket do room bot.",
51
+ roomBotWebsocketConnectFailed: "Falha ao conectar o WebSocket do room bot.",
52
+ roomBotCreateNameLengthInvalid: "O nome do bot precisa ter entre 2 e 40 caracteres.",
53
+ roomBotCreateAvatarUrlInvalid: "A URL do avatar do bot é inválida.",
54
+ roomBotCreateAvatarUrlDirectImageRequired: "A URL do avatar do bot precisa apontar diretamente para uma imagem ou GIF.",
55
+ roomBotCreatePermissionsArrayRequired: "As permissões do room bot precisam ser um array.",
56
+ roomBotCreatePermissionInvalid: "Permissão de room bot inválida.",
57
+ roomBotCreatePermissionRequired: "Pelo menos uma permissão de room bot é obrigatória.",
58
+ roomBotCreatePrefixLengthInvalid: "O prefixo do bot precisa ter entre 1 e 12 caracteres.",
59
+ roomBotCreatePrefixWhitespaceInvalid: "O prefixo do bot não pode conter espaços.",
60
+ roomBotCreateExpiryNumberInvalid: "A expiração do room bot precisa ser um número válido de horas.",
61
+ roomBotCreateExpiryRangeInvalid: "A expiração do room bot precisa ficar entre 1 e 720 horas.",
62
+ },
63
+ };
64
+ const ERROR_CODE_MESSAGE_MAP = {
65
+ ROOM_PERMISSION_MANAGE_ROOM: "roomPermissionManageRoom",
66
+ ROOM_NOT_FOUND: "roomNotFound",
67
+ ROOM_BOT_INVALID: "roomBotInvalid",
68
+ ROOM_BOT_SCOPE_MISMATCH: "roomBotScopeMismatch",
69
+ ROOM_BOT_OWNER_MISSING: "roomBotOwnerMissing",
70
+ ROOM_BOT_OWNER_BANNED: "roomBotOwnerBanned",
71
+ ROOM_BOT_PERMISSION_DENIED: "roomBotPermissionDenied",
72
+ ROOM_BOT_FORBIDDEN: "roomBotForbidden",
73
+ ROOM_BOT_TOKEN_REQUIRED: "roomBotTokenRequired",
74
+ ROOM_BOT_MUTED: "roomBotMuted",
75
+ };
76
+ function interpolateMessage(template, values) {
77
+ if (!values) {
78
+ return template;
79
+ }
80
+ return template.replace(/\{(\w+)\}/g, (_, key) => {
81
+ const value = values[key];
82
+ return value == null ? `{${key}}` : String(value);
83
+ });
84
+ }
85
+ export function createSdkMessageFormatter(locale = DEFAULT_LOCALE, overrides = {}) {
86
+ const dictionary = {
87
+ ...DEFAULT_MESSAGES.en,
88
+ ...(DEFAULT_MESSAGES[locale] ?? DEFAULT_MESSAGES.en),
89
+ ...overrides,
90
+ };
91
+ return (key, values) => interpolateMessage(dictionary[key], values);
92
+ }
93
+ export function resolveSdkErrorMessage(code, fallback, formatMessage) {
94
+ const messageKey = code ? ERROR_CODE_MESSAGE_MAP[code] : null;
95
+ return messageKey ? formatMessage(messageKey) : fallback;
96
+ }
97
+ //# sourceMappingURL=i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/core/i18n.ts"],"names":[],"mappings":"AAOA,MAAM,cAAc,GAAmB,IAAI,CAAC;AAE5C,MAAM,gBAAgB,GAGlB;IACA,EAAE,EAAE;QACA,gBAAgB,EACZ,iGAAiG;QACrG,eAAe,EAAE,6CAA6C;QAC9D,eAAe,EAAE,oBAAoB;QACrC,wBAAwB,EAAE,8BAA8B;QACxD,YAAY,EAAE,iBAAiB;QAC/B,cAAc,EAAE,yBAAyB;QACzC,oBAAoB,EAChB,0DAA0D;QAC9D,mBAAmB,EAAE,sCAAsC;QAC3D,kBAAkB,EAAE,6CAA6C;QACjE,uBAAuB,EACnB,+DAA+D;QACnE,gBAAgB,EACZ,4DAA4D;QAChE,oBAAoB,EAAE,6BAA6B;QACnD,YAAY,EAAE,2CAA2C;QACzD,+BAA+B,EAC3B,yFAAyF;QAC7F,mCAAmC,EAC/B,mEAAmE;QACvE,4BAA4B,EAAE,6BAA6B;QAC3D,4BAA4B,EACxB,0CAA0C;QAC9C,6BAA6B,EACzB,2CAA2C;QAC/C,8BAA8B,EAC1B,+CAA+C;QACnD,6BAA6B,EAAE,4BAA4B;QAC3D,yCAAyC,EACrC,wDAAwD;QAC5D,qCAAqC,EACjC,wCAAwC;QAC5C,8BAA8B,EAAE,8BAA8B;QAC9D,+BAA+B,EAC3B,+CAA+C;QACnD,gCAAgC,EAC5B,iDAAiD;QACrD,oCAAoC,EAChC,uCAAuC;QAC3C,gCAAgC,EAC5B,sDAAsD;QAC1D,+BAA+B,EAC3B,sDAAsD;KAC7D;IACD,OAAO,EAAE;QACL,gBAAgB,EACZ,wGAAwG;QAC5G,eAAe,EAAE,8CAA8C;QAC/D,eAAe,EAAE,uBAAuB;QACxC,wBAAwB,EAAE,oCAAoC;QAC9D,YAAY,EAAE,sBAAsB;QACpC,cAAc,EAAE,6BAA6B;QAC7C,oBAAoB,EAChB,6DAA6D;QACjE,mBAAmB,EAAE,qCAAqC;QAC1D,kBAAkB,EACd,4CAA4C;QAChD,uBAAuB,EACnB,2DAA2D;QAC/D,gBAAgB,EACZ,qDAAqD;QACzD,oBAAoB,EAAE,oCAAoC;QAC1D,YAAY,EAAE,4CAA4C;QAC1D,+BAA+B,EAC3B,gFAAgF;QACpF,mCAAmC,EAC/B,+DAA+D;QACnE,4BAA4B,EAAE,0BAA0B;QACxD,4BAA4B,EACxB,yCAAyC;QAC7C,6BAA6B,EACzB,4CAA4C;QAChD,8BAA8B,EAC1B,oDAAoD;QACxD,6BAA6B,EAAE,oCAAoC;QACnE,yCAAyC,EACrC,4EAA4E;QAChF,qCAAqC,EACjC,kDAAkD;QACtD,8BAA8B,EAAE,iCAAiC;QACjE,+BAA+B,EAC3B,qDAAqD;QACzD,gCAAgC,EAC5B,uDAAuD;QAC3D,oCAAoC,EAChC,2CAA2C;QAC/C,gCAAgC,EAC5B,gEAAgE;QACpE,+BAA+B,EAC3B,4DAA4D;KACnE;CACJ,CAAC;AAEF,MAAM,sBAAsB,GAExB;IACA,2BAA2B,EAAE,0BAA0B;IACvD,cAAc,EAAE,cAAc;IAC9B,gBAAgB,EAAE,gBAAgB;IAClC,uBAAuB,EAAE,sBAAsB;IAC/C,sBAAsB,EAAE,qBAAqB;IAC7C,qBAAqB,EAAE,oBAAoB;IAC3C,0BAA0B,EAAE,yBAAyB;IACrD,kBAAkB,EAAE,kBAAkB;IACtC,uBAAuB,EAAE,sBAAsB;IAC/C,cAAc,EAAE,cAAc;CACjC,CAAC;AAEF,SAAS,kBAAkB,CACvB,QAAgB,EAChB,MAA8B;IAE9B,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,OAAO,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,GAAW,EAAE,EAAE;QACrD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,OAAO,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,yBAAyB,CACrC,SAAyB,cAAc,EACvC,YAA8B,EAAE;IAEhC,MAAM,UAAU,GAAG;QACf,GAAG,gBAAgB,CAAC,EAAE;QACtB,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,EAAE,CAAC;QACpD,GAAG,SAAS;KACf,CAAC;IAEF,OAAO,CACH,GAAuB,EACvB,MAA8B,EAChC,EAAE,CAAC,kBAAkB,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAClC,IAAmB,EACnB,QAAgB,EAChB,aAGW;IAEX,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,OAAO,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC7D,CAAC"}