@nekutima/biome-sdk 0.19.2 → 0.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/admin.model.d.ts +70 -0
- package/dist/admin/admin.model.d.ts.map +1 -1
- package/dist/admin/admin.schema.json +339 -0
- package/dist/admin/admin.service.d.ts +9 -1
- package/dist/admin/admin.service.d.ts.map +1 -1
- package/dist/admin/admin.service.js +79 -4
- package/dist/admin/admin.service.js.map +1 -1
- package/dist/agents/agent-identity.d.ts +19 -0
- package/dist/agents/agent-identity.d.ts.map +1 -0
- package/dist/agents/agent-identity.js +36 -0
- package/dist/agents/agent-identity.js.map +1 -0
- package/dist/agents/agent-resource.d.ts +0 -1
- package/dist/agents/agent-resource.d.ts.map +1 -1
- package/dist/agents/agent.model.d.ts +13 -40
- package/dist/agents/agent.model.d.ts.map +1 -1
- package/dist/agents/agent.service.d.ts +9 -3
- package/dist/agents/agent.service.d.ts.map +1 -1
- package/dist/agents/agent.service.js +37 -8
- package/dist/agents/agent.service.js.map +1 -1
- package/dist/ai/yuri.service.d.ts +39 -5
- package/dist/ai/yuri.service.d.ts.map +1 -1
- package/dist/ai/yuri.service.js +64 -34
- package/dist/ai/yuri.service.js.map +1 -1
- package/dist/alexandria/nugget.model.d.ts +77 -0
- package/dist/alexandria/nugget.model.d.ts.map +1 -0
- package/dist/alexandria/nugget.model.js +7 -0
- package/dist/alexandria/nugget.model.js.map +1 -0
- package/dist/alexandria/nugget.service.d.ts +21 -0
- package/dist/alexandria/nugget.service.d.ts.map +1 -0
- package/dist/alexandria/nugget.service.js +127 -0
- package/dist/alexandria/nugget.service.js.map +1 -0
- package/dist/alexandria/problem.model.d.ts +48 -0
- package/dist/alexandria/problem.model.d.ts.map +1 -0
- package/dist/alexandria/problem.model.js +7 -0
- package/dist/alexandria/problem.model.js.map +1 -0
- package/dist/alexandria/problem.service.d.ts +17 -0
- package/dist/alexandria/problem.service.d.ts.map +1 -0
- package/dist/alexandria/problem.service.js +98 -0
- package/dist/alexandria/problem.service.js.map +1 -0
- package/dist/alexandria/progress.model.d.ts +19 -0
- package/dist/alexandria/progress.model.d.ts.map +1 -0
- package/dist/alexandria/progress.model.js +3 -0
- package/dist/alexandria/progress.model.js.map +1 -0
- package/dist/alexandria/progress.service.d.ts +10 -0
- package/dist/alexandria/progress.service.d.ts.map +1 -0
- package/dist/alexandria/progress.service.js +38 -0
- package/dist/alexandria/progress.service.js.map +1 -0
- package/dist/api-keys/api-key.model.d.ts +30 -0
- package/dist/api-keys/api-key.model.d.ts.map +1 -0
- package/dist/api-keys/api-key.model.js +3 -0
- package/dist/api-keys/api-key.model.js.map +1 -0
- package/dist/api-keys/api-key.service.d.ts +16 -0
- package/dist/api-keys/api-key.service.d.ts.map +1 -0
- package/dist/api-keys/api-key.service.js +34 -0
- package/dist/api-keys/api-key.service.js.map +1 -0
- package/dist/auth/auth.schema.json +106 -0
- package/dist/auth/auth.service.d.ts +8 -1
- package/dist/auth/auth.service.d.ts.map +1 -1
- package/dist/auth/auth.service.js +23 -10
- package/dist/auth/auth.service.js.map +1 -1
- package/dist/chat/chat.service.d.ts.map +1 -1
- package/dist/chat/chat.service.js +60 -68
- package/dist/chat/chat.service.js.map +1 -1
- package/dist/circles/circle.model.d.ts +25 -0
- package/dist/circles/circle.model.d.ts.map +1 -0
- package/dist/circles/circle.model.js +3 -0
- package/dist/circles/circle.model.js.map +1 -0
- package/dist/circles/circle.schema.json +332 -0
- package/dist/circles/circle.service.d.ts +14 -0
- package/dist/circles/circle.service.d.ts.map +1 -0
- package/dist/circles/circle.service.js +50 -0
- package/dist/circles/circle.service.js.map +1 -0
- package/dist/communities/community.model.d.ts +72 -0
- package/dist/communities/community.model.d.ts.map +1 -0
- package/dist/communities/community.model.js +3 -0
- package/dist/communities/community.model.js.map +1 -0
- package/dist/communities/community.service.d.ts +26 -0
- package/dist/communities/community.service.d.ts.map +1 -0
- package/dist/communities/community.service.js +140 -0
- package/dist/communities/community.service.js.map +1 -0
- package/dist/contacts/contact.model.d.ts +97 -0
- package/dist/contacts/contact.model.d.ts.map +1 -0
- package/dist/contacts/contact.model.js +3 -0
- package/dist/contacts/contact.model.js.map +1 -0
- package/dist/contacts/contact.schema.json +312 -0
- package/dist/contacts/contact.service.d.ts +28 -0
- package/dist/contacts/contact.service.d.ts.map +1 -0
- package/dist/contacts/contact.service.js +109 -0
- package/dist/contacts/contact.service.js.map +1 -0
- package/dist/core/api-diagnostics.d.ts +91 -0
- package/dist/core/api-diagnostics.d.ts.map +1 -0
- package/dist/core/api-diagnostics.js +211 -0
- package/dist/core/api-diagnostics.js.map +1 -0
- package/dist/core/configuration.d.ts +12 -0
- package/dist/core/configuration.d.ts.map +1 -1
- package/dist/core/error-handler.d.ts +5 -1
- package/dist/core/error-handler.d.ts.map +1 -1
- package/dist/core/error-handler.js +45 -21
- package/dist/core/error-handler.js.map +1 -1
- package/dist/core/http-client.d.ts +33 -6
- package/dist/core/http-client.d.ts.map +1 -1
- package/dist/core/http-client.js +193 -31
- package/dist/core/http-client.js.map +1 -1
- package/dist/core/node-cookie-jar.d.ts +14 -0
- package/dist/core/node-cookie-jar.d.ts.map +1 -0
- package/dist/core/node-cookie-jar.js +58 -0
- package/dist/core/node-cookie-jar.js.map +1 -0
- package/dist/core/request-scheduler.d.ts +56 -0
- package/dist/core/request-scheduler.d.ts.map +1 -0
- package/dist/core/request-scheduler.js +176 -0
- package/dist/core/request-scheduler.js.map +1 -0
- package/dist/core/resilience.d.ts +10 -0
- package/dist/core/resilience.d.ts.map +1 -1
- package/dist/core/resilience.js +27 -0
- package/dist/core/resilience.js.map +1 -1
- package/dist/ecosystem/organization.model.d.ts +4 -4
- package/dist/ecosystem/organization.model.d.ts.map +1 -1
- package/dist/errors/error-codes.d.ts +3 -1
- package/dist/errors/error-codes.d.ts.map +1 -1
- package/dist/errors/error-codes.js +2 -0
- package/dist/errors/error-codes.js.map +1 -1
- package/dist/events/event-edition.model.d.ts +5 -0
- package/dist/events/event-edition.model.d.ts.map +1 -1
- package/dist/events/event.model.d.ts +5 -0
- package/dist/events/event.model.d.ts.map +1 -1
- package/dist/follows/follow.model.d.ts +1 -1
- package/dist/follows/follow.model.d.ts.map +1 -1
- package/dist/follows/follow.service.d.ts.map +1 -1
- package/dist/follows/follow.service.js +1 -0
- package/dist/follows/follow.service.js.map +1 -1
- package/dist/guilds/guild.model.d.ts +36 -0
- package/dist/guilds/guild.model.d.ts.map +1 -1
- package/dist/guilds/guild.service.d.ts +7 -1
- package/dist/guilds/guild.service.d.ts.map +1 -1
- package/dist/guilds/guild.service.js +52 -0
- package/dist/guilds/guild.service.js.map +1 -1
- package/dist/index.d.ts +52 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +76 -4
- package/dist/index.js.map +1 -1
- package/dist/memberships/membership.model.d.ts +34 -0
- package/dist/memberships/membership.model.d.ts.map +1 -0
- package/dist/memberships/membership.model.js +3 -0
- package/dist/memberships/membership.model.js.map +1 -0
- package/dist/memberships/membership.service.d.ts +22 -0
- package/dist/memberships/membership.service.d.ts.map +1 -0
- package/dist/memberships/membership.service.js +111 -0
- package/dist/memberships/membership.service.js.map +1 -0
- package/dist/missions/mission.model.d.ts +4 -4
- package/dist/missions/mission.model.d.ts.map +1 -1
- package/dist/missions/mission.schema.json +204 -0
- package/dist/missions/mission.service.d.ts +2 -2
- package/dist/missions/mission.service.d.ts.map +1 -1
- package/dist/missions/mission.service.js.map +1 -1
- package/dist/models/chat.model.d.ts +11 -1
- package/dist/models/chat.model.d.ts.map +1 -1
- package/dist/models/chat.model.js +4 -0
- package/dist/models/chat.model.js.map +1 -1
- package/dist/notifications/notification.service.d.ts.map +1 -1
- package/dist/notifications/notification.service.js +10 -2
- package/dist/notifications/notification.service.js.map +1 -1
- package/dist/profiles/person.model.d.ts +26 -26
- package/dist/profiles/person.model.d.ts.map +1 -1
- package/dist/profiles/profile.schema.json +269 -0
- package/dist/project/schemas.js +2 -1
- package/dist/project/schemas.js.map +1 -1
- package/dist/projects/project.service.d.ts +1 -1
- package/dist/projects/project.service.d.ts.map +1 -1
- package/dist/projects/project.service.js +2 -2
- package/dist/projects/project.service.js.map +1 -1
- package/dist/rewards/reward.model.d.ts +2 -2
- package/dist/rewards/reward.model.d.ts.map +1 -1
- package/dist/rewards/reward.service.d.ts +9 -0
- package/dist/rewards/reward.service.d.ts.map +1 -1
- package/dist/rewards/reward.service.js +32 -0
- package/dist/rewards/reward.service.js.map +1 -1
- package/dist/support/support.model.d.ts +6 -0
- package/dist/support/support.model.d.ts.map +1 -0
- package/dist/support/support.model.js +3 -0
- package/dist/support/support.model.js.map +1 -0
- package/dist/support/support.schema.json +25 -0
- package/dist/support/support.service.d.ts +11 -0
- package/dist/support/support.service.d.ts.map +1 -0
- package/dist/support/support.service.js +22 -0
- package/dist/support/support.service.js.map +1 -0
- package/dist/tasks/evaluation-rates.d.ts +10 -0
- package/dist/tasks/evaluation-rates.d.ts.map +1 -0
- package/dist/tasks/evaluation-rates.js +48 -0
- package/dist/tasks/evaluation-rates.js.map +1 -0
- package/dist/tasks/schemas.d.ts +2 -0
- package/dist/tasks/schemas.d.ts.map +1 -1
- package/dist/tasks/schemas.js +14 -7
- package/dist/tasks/schemas.js.map +1 -1
- package/dist/tasks/task-reference.model.d.ts +12 -3
- package/dist/tasks/task-reference.model.d.ts.map +1 -1
- package/dist/tasks/task-reference.model.js +18 -2
- package/dist/tasks/task-reference.model.js.map +1 -1
- package/dist/tasks/task.model.d.ts +42 -13
- package/dist/tasks/task.model.d.ts.map +1 -1
- package/dist/tasks/task.model.js +5 -2
- package/dist/tasks/task.model.js.map +1 -1
- package/dist/tasks/task.schema.json +780 -0
- package/dist/tasks/task.service.d.ts +121 -10
- package/dist/tasks/task.service.d.ts.map +1 -1
- package/dist/tasks/task.service.js +196 -47
- package/dist/tasks/task.service.js.map +1 -1
- package/dist/timezone/time.helper.d.ts +9 -0
- package/dist/timezone/time.helper.d.ts.map +1 -1
- package/dist/timezone/time.helper.js +31 -2
- package/dist/timezone/time.helper.js.map +1 -1
- package/dist/users/user.model.d.ts +2 -1
- package/dist/users/user.model.d.ts.map +1 -1
- package/dist/users/user.model.js.map +1 -1
- package/dist/users/user.schema.json +429 -0
- package/dist/users/user.service.d.ts +2 -2
- package/dist/users/user.service.d.ts.map +1 -1
- package/dist/users/user.service.js +29 -35
- package/dist/users/user.service.js.map +1 -1
- package/dist/utils/validation.utils.d.ts +0 -4
- package/dist/utils/validation.utils.d.ts.map +1 -1
- package/dist/utils/validation.utils.js +1 -11
- package/dist/utils/validation.utils.js.map +1 -1
- package/dist/wallet/wallet.model.d.ts +5 -0
- package/dist/wallet/wallet.model.d.ts.map +1 -1
- package/dist/wallet/wallet.service.d.ts +2 -1
- package/dist/wallet/wallet.service.d.ts.map +1 -1
- package/dist/wallet/wallet.service.js +9 -0
- package/dist/wallet/wallet.service.js.map +1 -1
- package/package.json +19 -6
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Structured API failure diagnostics for BiomeSDK HTTP calls.
|
|
4
|
+
* Used by BiomeHttpClient to classify failures and surface them to consumers
|
|
5
|
+
* (e.g. Angular FE) via a CustomEvent + console logging.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.BIOME_API_ERROR_EVENT = void 0;
|
|
9
|
+
exports.extractRateLimitInfo = extractRateLimitInfo;
|
|
10
|
+
exports.classifyApiFailure = classifyApiFailure;
|
|
11
|
+
exports.buildApiFailureDiagnostic = buildApiFailureDiagnostic;
|
|
12
|
+
exports.reportApiFailure = reportApiFailure;
|
|
13
|
+
exports.failureKindToErrorCode = failureKindToErrorCode;
|
|
14
|
+
exports.userMessageForTransportFailure = userMessageForTransportFailure;
|
|
15
|
+
exports.BIOME_API_ERROR_EVENT = "biome:api-error";
|
|
16
|
+
function headerValue(headers, name) {
|
|
17
|
+
if (!headers)
|
|
18
|
+
return undefined;
|
|
19
|
+
const lower = name.toLowerCase();
|
|
20
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
21
|
+
if (key.toLowerCase() === lower) {
|
|
22
|
+
if (Array.isArray(value))
|
|
23
|
+
return value[0] != null ? String(value[0]) : undefined;
|
|
24
|
+
if (value == null)
|
|
25
|
+
return undefined;
|
|
26
|
+
return String(value);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
function parsePositiveInt(value) {
|
|
32
|
+
if (value == null || value === "")
|
|
33
|
+
return undefined;
|
|
34
|
+
const n = parseInt(value, 10);
|
|
35
|
+
return Number.isFinite(n) && n >= 0 ? n : undefined;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Extract rate-limit metadata from standard RateLimit-* / Retry-After headers
|
|
39
|
+
* and optional JSON body fields.
|
|
40
|
+
*/
|
|
41
|
+
function extractRateLimitInfo(error) {
|
|
42
|
+
const headers = error.response?.headers;
|
|
43
|
+
const body = error.response?.data;
|
|
44
|
+
const limit = parsePositiveInt(headerValue(headers, "ratelimit-limit")) ??
|
|
45
|
+
parsePositiveInt(headerValue(headers, "x-ratelimit-limit"));
|
|
46
|
+
const remaining = parsePositiveInt(headerValue(headers, "ratelimit-remaining")) ??
|
|
47
|
+
parsePositiveInt(headerValue(headers, "x-ratelimit-remaining"));
|
|
48
|
+
const resetRaw = headerValue(headers, "ratelimit-reset") ??
|
|
49
|
+
headerValue(headers, "x-ratelimit-reset");
|
|
50
|
+
const retryAfterHeader = parsePositiveInt(headerValue(headers, "retry-after"));
|
|
51
|
+
const bodyRetryAfter = body?.payload?.retryAfter ??
|
|
52
|
+
body?.payload?.data?.retryAfter ??
|
|
53
|
+
body?.data?.retryAfter;
|
|
54
|
+
const retryAfterSeconds = retryAfterHeader ??
|
|
55
|
+
(typeof bodyRetryAfter === "number" && bodyRetryAfter >= 0
|
|
56
|
+
? bodyRetryAfter
|
|
57
|
+
: undefined);
|
|
58
|
+
let reset;
|
|
59
|
+
if (resetRaw) {
|
|
60
|
+
// IETF draft RateLimit-Reset can be unix seconds or seconds-until-reset depending on server
|
|
61
|
+
const asNum = parsePositiveInt(resetRaw);
|
|
62
|
+
if (asNum != null) {
|
|
63
|
+
// Prefer absolute epoch if it looks like one (> year 2001 in seconds)
|
|
64
|
+
reset =
|
|
65
|
+
asNum > 1000000000
|
|
66
|
+
? new Date(asNum * 1000).toISOString()
|
|
67
|
+
: new Date(Date.now() + asNum * 1000).toISOString();
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
reset = resetRaw;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (limit == null &&
|
|
74
|
+
remaining == null &&
|
|
75
|
+
reset == null &&
|
|
76
|
+
retryAfterSeconds == null) {
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
return { limit, remaining, reset, retryAfterSeconds };
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Classify an HTTP client failure for diagnostics and UX.
|
|
83
|
+
*/
|
|
84
|
+
function classifyApiFailure(error) {
|
|
85
|
+
const status = error.response?.status;
|
|
86
|
+
const code = (error.code || "").toUpperCase();
|
|
87
|
+
const message = (error.message || "").toLowerCase();
|
|
88
|
+
if (status === 429) {
|
|
89
|
+
return "rate_limited";
|
|
90
|
+
}
|
|
91
|
+
// Client-side RequestScheduler wait exceeded — request never left the browser.
|
|
92
|
+
// Distinct from transport timeout (axios timeout after the socket was opened).
|
|
93
|
+
if (error.isQueueTimeout === true ||
|
|
94
|
+
code === "ERR_QUEUE_TIMEOUT" ||
|
|
95
|
+
message.includes("request queue wait timed out")) {
|
|
96
|
+
return "queue_timeout";
|
|
97
|
+
}
|
|
98
|
+
if (!error.response) {
|
|
99
|
+
if (code === "ECONNABORTED" ||
|
|
100
|
+
code === "ETIMEDOUT" ||
|
|
101
|
+
message.includes("timeout")) {
|
|
102
|
+
return "timeout";
|
|
103
|
+
}
|
|
104
|
+
if (code === "ERR_NETWORK" ||
|
|
105
|
+
code === "ECONNREFUSED" ||
|
|
106
|
+
code === "ENOTFOUND" ||
|
|
107
|
+
message.includes("network error")) {
|
|
108
|
+
return "network";
|
|
109
|
+
}
|
|
110
|
+
return "unknown";
|
|
111
|
+
}
|
|
112
|
+
if (status != null && status > 0) {
|
|
113
|
+
return "http_error";
|
|
114
|
+
}
|
|
115
|
+
return "unknown";
|
|
116
|
+
}
|
|
117
|
+
function truncateMessage(msg, max = 200) {
|
|
118
|
+
if (!msg)
|
|
119
|
+
return undefined;
|
|
120
|
+
const cleaned = msg.replace(/\s+/g, " ").trim();
|
|
121
|
+
if (cleaned.length <= max)
|
|
122
|
+
return cleaned;
|
|
123
|
+
return `${cleaned.slice(0, max)}…`;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Build a structured diagnostic payload from an axios-like error.
|
|
127
|
+
*/
|
|
128
|
+
function buildApiFailureDiagnostic(error, elapsedMs) {
|
|
129
|
+
const kind = classifyApiFailure(error);
|
|
130
|
+
const start = error.config?._startTime;
|
|
131
|
+
const computedElapsed = elapsedMs ?? (typeof start === "number" ? Date.now() - start : 0);
|
|
132
|
+
const data = error.response?.data;
|
|
133
|
+
const message = truncateMessage(data?.payload?.message || data?.message || error.message);
|
|
134
|
+
const rateLimit = extractRateLimitInfo(error);
|
|
135
|
+
return {
|
|
136
|
+
tag: "[BiomeSDK]",
|
|
137
|
+
kind,
|
|
138
|
+
method: error.config?.method?.toUpperCase(),
|
|
139
|
+
url: error.config?.url,
|
|
140
|
+
status: error.response?.status,
|
|
141
|
+
code: error.code,
|
|
142
|
+
elapsedMs: computedElapsed,
|
|
143
|
+
timeoutMs: error.config?.timeout ?? error.maxWaitMs,
|
|
144
|
+
message,
|
|
145
|
+
rateLimit,
|
|
146
|
+
scheduler: error.scheduler,
|
|
147
|
+
requestPriority: error.priority ?? error.config?.biomePriority,
|
|
148
|
+
timestamp: new Date().toISOString(),
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Log a failure diagnostic and dispatch `biome:api-error` for FE consumers.
|
|
153
|
+
*/
|
|
154
|
+
function reportApiFailure(error, elapsedMs) {
|
|
155
|
+
const diagnostic = buildApiFailureDiagnostic(error, elapsedMs);
|
|
156
|
+
// Structured console log — easy to filter in browser DevTools
|
|
157
|
+
// eslint-disable-next-line no-console
|
|
158
|
+
console.error("[BiomeSDK] request failed", diagnostic);
|
|
159
|
+
if (typeof window !== "undefined" && typeof CustomEvent !== "undefined") {
|
|
160
|
+
try {
|
|
161
|
+
window.dispatchEvent(new CustomEvent(exports.BIOME_API_ERROR_EVENT, { detail: diagnostic }));
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
// Ignore environments where CustomEvent dispatch fails
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return diagnostic;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Map failure kind to stable SDK error codes used in BiomeSdkError.code.
|
|
171
|
+
*/
|
|
172
|
+
function failureKindToErrorCode(kind) {
|
|
173
|
+
switch (kind) {
|
|
174
|
+
case "timeout":
|
|
175
|
+
return "TIMEOUT";
|
|
176
|
+
case "queue_timeout":
|
|
177
|
+
return "QUEUE_TIMEOUT";
|
|
178
|
+
case "network":
|
|
179
|
+
return "NETWORK_ERROR";
|
|
180
|
+
case "rate_limited":
|
|
181
|
+
return "RATE_LIMITED";
|
|
182
|
+
default:
|
|
183
|
+
return undefined;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* User-facing message for timeout / network when the server did not respond.
|
|
188
|
+
*/
|
|
189
|
+
function userMessageForTransportFailure(kind, retryAfterSeconds) {
|
|
190
|
+
if (kind === "timeout") {
|
|
191
|
+
return "The request timed out before the server responded. Please try again.";
|
|
192
|
+
}
|
|
193
|
+
if (kind === "queue_timeout") {
|
|
194
|
+
return "Too many requests are in flight. Please wait a moment and try again.";
|
|
195
|
+
}
|
|
196
|
+
if (kind === "network") {
|
|
197
|
+
return "Network error. Check your connection and try again.";
|
|
198
|
+
}
|
|
199
|
+
if (kind === "rate_limited") {
|
|
200
|
+
if (retryAfterSeconds != null && retryAfterSeconds > 0) {
|
|
201
|
+
const minutes = Math.ceil(retryAfterSeconds / 60);
|
|
202
|
+
if (retryAfterSeconds >= 60) {
|
|
203
|
+
return `Too many requests. Please wait about ${minutes} minute${minutes === 1 ? "" : "s"} and try again.`;
|
|
204
|
+
}
|
|
205
|
+
return `Too many requests. Please wait ${retryAfterSeconds} second${retryAfterSeconds === 1 ? "" : "s"} and try again.`;
|
|
206
|
+
}
|
|
207
|
+
return "Too many requests. Please wait a moment and try again.";
|
|
208
|
+
}
|
|
209
|
+
return undefined;
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=api-diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-diagnostics.js","sourceRoot":"","sources":["../../src/core/api-diagnostics.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,12 @@ export interface BiomeConfig {
|
|
|
6
6
|
apiBaseUrl: string;
|
|
7
7
|
/** Request timeout in milliseconds (default: 30000) */
|
|
8
8
|
timeout?: number;
|
|
9
|
+
/**
|
|
10
|
+
* Max concurrent in-flight XHRs via BiomeHttpClient (default: 4).
|
|
11
|
+
* Leave headroom under the browser's ~6 connections/origin for chat SSE
|
|
12
|
+
* and Angular HttpClient traffic that shares the same origin.
|
|
13
|
+
*/
|
|
14
|
+
maxConcurrentRequests?: number;
|
|
9
15
|
/** Authentication token for API requests */
|
|
10
16
|
authToken?: string;
|
|
11
17
|
/** Additional HTTP headers */
|
|
@@ -13,6 +19,12 @@ export interface BiomeConfig {
|
|
|
13
19
|
/** HTTP configuration */
|
|
14
20
|
http?: {
|
|
15
21
|
withCredentials?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Persist `Set-Cookie` on the axios instance (JWT + CSRF).
|
|
24
|
+
* Defaults to true when `document` is undefined (Node). Browsers keep
|
|
25
|
+
* using `document.cookie` / `withCredentials`.
|
|
26
|
+
*/
|
|
27
|
+
useNodeCookieJar?: boolean;
|
|
16
28
|
interceptors?: {
|
|
17
29
|
credentials?: boolean;
|
|
18
30
|
taskNotificationRefresh?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configuration.d.ts","sourceRoot":"","sources":["../../src/core/configuration.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,gCAAgC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,yBAAyB;IACzB,IAAI,CAAC,EAAE;QACH,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,YAAY,CAAC,EAAE;YACX,WAAW,CAAC,EAAE,OAAO,CAAC;YACtB,uBAAuB,CAAC,EAAE;gBACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;gBAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;gBACrB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;aACzB,CAAC;SACL,CAAC;KACL,CAAC;IACF,oCAAoC;IACpC,IAAI,CAAC,EAAE;QACH,6CAA6C;QAC7C,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,+CAA+C;QAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,kEAAkE;QAClE,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,kEAAkE;QAClE,UAAU,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACL"}
|
|
1
|
+
{"version":3,"file":"configuration.d.ts","sourceRoot":"","sources":["../../src/core/configuration.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,gCAAgC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,yBAAyB;IACzB,IAAI,CAAC,EAAE;QACH,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B;;;;WAIG;QACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,YAAY,CAAC,EAAE;YACX,WAAW,CAAC,EAAE,OAAO,CAAC;YACtB,uBAAuB,CAAC,EAAE;gBACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;gBAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;gBACrB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;aACzB,CAAC;SACL,CAAC;KACL,CAAC;IACF,oCAAoC;IACpC,IAAI,CAAC,EAAE;QACH,6CAA6C;QAC7C,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,+CAA+C;QAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,kEAAkE;QAClE,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,kEAAkE;QAClE,UAAU,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACL"}
|
|
@@ -11,8 +11,12 @@ export interface BiomeSdkError extends Error {
|
|
|
11
11
|
userMessage?: string;
|
|
12
12
|
/** Technical error details */
|
|
13
13
|
technicalDetails?: string;
|
|
14
|
-
/** Error code from API (e.g., 'EMAIL_NOT_CONFIRMED', 'ACCOUNT_LOCKED') */
|
|
14
|
+
/** Error code from API (e.g., 'EMAIL_NOT_CONFIRMED', 'ACCOUNT_LOCKED', 'TIMEOUT', 'RATE_LIMITED') */
|
|
15
15
|
code?: string;
|
|
16
|
+
/** Seconds until retry is allowed (rate limits / circuit breakers) */
|
|
17
|
+
retryAfter?: number;
|
|
18
|
+
/** Failure kind when classifiable (timeout, rate_limited, network, http_error, unknown) */
|
|
19
|
+
kind?: string;
|
|
16
20
|
/** Timestamp when error occurred */
|
|
17
21
|
timestamp: string;
|
|
18
22
|
/** Original error */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/core/error-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/core/error-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAQ9F;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,KAAK;IAC1C,uBAAuB;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8BAA8B;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qGAAqG;IACrG,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2FAA2F;IAC3F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gDAAgD;IAChD,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC1C;AAWD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,MAAM,GACf,aAAa,GAAG,2BAA2B,CAgG7C"}
|
|
@@ -3,6 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createSdkError = createSdkError;
|
|
4
4
|
const axios_1 = require("axios");
|
|
5
5
|
const prerequisite_error_1 = require("../errors/prerequisite-error");
|
|
6
|
+
const api_diagnostics_1 = require("./api-diagnostics");
|
|
7
|
+
/**
|
|
8
|
+
* Builds a genuine `Error` instance carrying the `BiomeSdkError` fields, so
|
|
9
|
+
* `error instanceof Error` checks at call sites succeed instead of always
|
|
10
|
+
* falling through to a generic fallback message.
|
|
11
|
+
*/
|
|
12
|
+
function buildSdkError(message, fields) {
|
|
13
|
+
return Object.assign(new Error(message), { name: "BiomeSdkError", ...fields });
|
|
14
|
+
}
|
|
6
15
|
/**
|
|
7
16
|
* Create standardized error object
|
|
8
17
|
* May return BiomeSdkError or PrerequisiteValidationError for specific conflict cases
|
|
@@ -23,62 +32,75 @@ function createSdkError(error, context) {
|
|
|
23
32
|
const message = payload.message || getUserFriendlyErrorMessage(status, errorData);
|
|
24
33
|
return new prerequisite_error_1.PrerequisiteValidationError(message, payload.unmetPrerequisites);
|
|
25
34
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
35
|
+
const kind = (0, api_diagnostics_1.classifyApiFailure)(error);
|
|
36
|
+
const rateLimit = (0, api_diagnostics_1.extractRateLimitInfo)(error);
|
|
37
|
+
const retryAfter = rateLimit?.retryAfterSeconds ??
|
|
38
|
+
(typeof payload?.retryAfter === "number" ? payload.retryAfter : undefined) ??
|
|
39
|
+
(typeof errorData?.data?.retryAfter === "number"
|
|
40
|
+
? errorData.data.retryAfter
|
|
41
|
+
: undefined);
|
|
42
|
+
const transportMessage = (0, api_diagnostics_1.userMessageForTransportFailure)(kind, retryAfter);
|
|
43
|
+
const statusMessage = getUserFriendlyErrorMessage(status, errorData, retryAfter);
|
|
44
|
+
const userMessage = kind === "timeout" || kind === "network"
|
|
45
|
+
? transportMessage || statusMessage
|
|
46
|
+
: kind === "rate_limited"
|
|
47
|
+
? transportMessage || statusMessage
|
|
48
|
+
: statusMessage;
|
|
49
|
+
const kindCode = (0, api_diagnostics_1.failureKindToErrorCode)(kind);
|
|
50
|
+
const code = kindCode ||
|
|
51
|
+
errorData?.code ||
|
|
52
|
+
payload?.type ||
|
|
53
|
+
error.code;
|
|
54
|
+
return buildSdkError(error.message, {
|
|
29
55
|
status,
|
|
30
|
-
userMessage
|
|
56
|
+
userMessage,
|
|
31
57
|
technicalDetails: errorData?.message || error.message,
|
|
32
|
-
code
|
|
58
|
+
code,
|
|
59
|
+
kind,
|
|
60
|
+
retryAfter,
|
|
33
61
|
type: payload?.type || errorData?.type,
|
|
34
62
|
timestamp,
|
|
35
63
|
originalError: error,
|
|
36
64
|
unmetPrerequisites: payload?.unmetPrerequisites,
|
|
37
|
-
};
|
|
65
|
+
});
|
|
38
66
|
}
|
|
39
67
|
// Pass through PrerequisiteValidationError if already created
|
|
40
68
|
if (error instanceof prerequisite_error_1.PrerequisiteValidationError) {
|
|
41
69
|
return error;
|
|
42
70
|
}
|
|
43
71
|
if (error instanceof Error) {
|
|
44
|
-
return {
|
|
45
|
-
name: "BiomeSdkError",
|
|
46
|
-
message: error.message,
|
|
72
|
+
return buildSdkError(error.message, {
|
|
47
73
|
userMessage: context ? `${context}: ${error.message}` : error.message,
|
|
48
74
|
technicalDetails: error.message,
|
|
49
75
|
timestamp,
|
|
50
76
|
originalError: error,
|
|
51
|
-
};
|
|
77
|
+
});
|
|
52
78
|
}
|
|
53
79
|
// Handle cases where error might be null, undefined, or not an object
|
|
54
80
|
if (!error || typeof error !== "object") {
|
|
55
|
-
return {
|
|
56
|
-
name: "BiomeSdkError",
|
|
57
|
-
message: "Unknown error occurred",
|
|
81
|
+
return buildSdkError("Unknown error occurred", {
|
|
58
82
|
userMessage: context
|
|
59
83
|
? `${context}: An unexpected error occurred`
|
|
60
84
|
: "An unexpected error occurred",
|
|
61
85
|
technicalDetails: "Invalid error object received",
|
|
62
86
|
timestamp,
|
|
63
87
|
originalError: error,
|
|
64
|
-
};
|
|
88
|
+
});
|
|
65
89
|
}
|
|
66
|
-
return {
|
|
67
|
-
name: "BiomeSdkError",
|
|
68
|
-
message: "Unknown error occurred",
|
|
90
|
+
return buildSdkError("Unknown error occurred", {
|
|
69
91
|
userMessage: context
|
|
70
92
|
? `${context}: An unexpected error occurred`
|
|
71
93
|
: "An unexpected error occurred",
|
|
72
94
|
technicalDetails: "Unknown error",
|
|
73
95
|
timestamp,
|
|
74
96
|
originalError: error,
|
|
75
|
-
};
|
|
97
|
+
});
|
|
76
98
|
}
|
|
77
99
|
/**
|
|
78
100
|
* Get user-friendly error message based on HTTP status
|
|
79
101
|
*/
|
|
80
102
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
81
|
-
function getUserFriendlyErrorMessage(status, errorData) {
|
|
103
|
+
function getUserFriendlyErrorMessage(status, errorData, retryAfterSeconds) {
|
|
82
104
|
// Handle nested error structure (common in some APIs)
|
|
83
105
|
const nestedError = errorData?.error;
|
|
84
106
|
const directMessage = errorData?.message;
|
|
@@ -144,8 +166,10 @@ function getUserFriendlyErrorMessage(status, errorData) {
|
|
|
144
166
|
directMessage ||
|
|
145
167
|
nestedMessage ||
|
|
146
168
|
"The submitted data is invalid. Please check your input.");
|
|
147
|
-
case 429:
|
|
148
|
-
|
|
169
|
+
case 429: {
|
|
170
|
+
const rateLimited = (0, api_diagnostics_1.userMessageForTransportFailure)("rate_limited", retryAfterSeconds);
|
|
171
|
+
return payloadMessage || rateLimited || "Too many requests. Please wait a moment and try again.";
|
|
172
|
+
}
|
|
149
173
|
case 500:
|
|
150
174
|
case 502:
|
|
151
175
|
case 503:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/core/error-handler.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/core/error-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,29 @@
|
|
|
1
1
|
import { AxiosRequestConfig } from "axios";
|
|
2
2
|
import { BiomeConfig } from "./configuration";
|
|
3
|
+
import { RequestPriority } from "./request-scheduler";
|
|
4
|
+
/** Extended axios config for Biome request scheduling. */
|
|
5
|
+
export interface BiomeRequestConfig extends AxiosRequestConfig {
|
|
6
|
+
/** Scheduling priority (default normal). Mutations should use high; background polls low. */
|
|
7
|
+
biomePriority?: RequestPriority;
|
|
8
|
+
/** Max ms to wait in the client queue before failing (default 30s; low priority often shorter). */
|
|
9
|
+
biomeQueueWaitMs?: number;
|
|
10
|
+
/** Internal: slot was acquired from RequestScheduler */
|
|
11
|
+
_biomeSlotHeld?: boolean;
|
|
12
|
+
}
|
|
3
13
|
/**
|
|
4
14
|
* Framework-agnostic HTTP client using Axios
|
|
5
15
|
*/
|
|
6
16
|
export declare class BiomeHttpClient {
|
|
17
|
+
#private;
|
|
7
18
|
private config;
|
|
8
19
|
private readonly axiosInstance;
|
|
20
|
+
private readonly scheduler;
|
|
21
|
+
private readonly nodeCookieJar;
|
|
9
22
|
private _csrfToken;
|
|
10
23
|
private _csrfInitialized;
|
|
24
|
+
/** Debounce handle for task → notification badge refresh (mutations only). */
|
|
25
|
+
private _taskNotifRefreshTimer;
|
|
26
|
+
private _taskNotifBroadcast;
|
|
11
27
|
/**
|
|
12
28
|
* Get the base URL configured for this client
|
|
13
29
|
*/
|
|
@@ -22,7 +38,18 @@ export declare class BiomeHttpClient {
|
|
|
22
38
|
*/
|
|
23
39
|
fetchCsrfToken(url: string): Promise<string>;
|
|
24
40
|
/**
|
|
25
|
-
* Get CSRF token
|
|
41
|
+
* Get the current CSRF token.
|
|
42
|
+
*
|
|
43
|
+
* Browser context (no node cookie jar): always reads document.cookie live rather than
|
|
44
|
+
* serving a cached value. A cached value would go stale across a same-tab
|
|
45
|
+
* logout->login cycle, since the server rotates the CSRF cookie on login but nothing
|
|
46
|
+
* else would invalidate this client's in-memory copy - the first mutating request
|
|
47
|
+
* after re-login would then send a stale header, get a 403 CSRF_TOKEN_INVALID, and be
|
|
48
|
+
* misread as "session expired" even though the new session is perfectly valid.
|
|
49
|
+
*
|
|
50
|
+
* Node cookie jar context: no live document.cookie to read (or the caller explicitly
|
|
51
|
+
* opted into the node cookie jar via config), so the value ingested by
|
|
52
|
+
* #ingestCookies() from the most recent Set-Cookie response header is served instead.
|
|
26
53
|
*/
|
|
27
54
|
getCsrfToken(): string | null;
|
|
28
55
|
/**
|
|
@@ -40,23 +67,23 @@ export declare class BiomeHttpClient {
|
|
|
40
67
|
/**
|
|
41
68
|
* Perform GET request
|
|
42
69
|
*/
|
|
43
|
-
get<T>(url: string, config?:
|
|
70
|
+
get<T>(url: string, config?: BiomeRequestConfig): Promise<T>;
|
|
44
71
|
/**
|
|
45
72
|
* Perform POST request
|
|
46
73
|
*/
|
|
47
|
-
post<T>(url: string, data?: unknown, config?:
|
|
74
|
+
post<T>(url: string, data?: unknown, config?: BiomeRequestConfig): Promise<T>;
|
|
48
75
|
/**
|
|
49
76
|
* Perform PUT request
|
|
50
77
|
*/
|
|
51
|
-
put<T>(url: string, data?: unknown, config?:
|
|
78
|
+
put<T>(url: string, data?: unknown, config?: BiomeRequestConfig): Promise<T>;
|
|
52
79
|
/**
|
|
53
80
|
* Perform PATCH request
|
|
54
81
|
*/
|
|
55
|
-
patch<T>(url: string, data?: unknown, config?:
|
|
82
|
+
patch<T>(url: string, data?: unknown, config?: BiomeRequestConfig): Promise<T>;
|
|
56
83
|
/**
|
|
57
84
|
* Perform DELETE request
|
|
58
85
|
*/
|
|
59
|
-
delete<T = void>(url: string, config?:
|
|
86
|
+
delete<T = void>(url: string, config?: BiomeRequestConfig): Promise<T>;
|
|
60
87
|
/**
|
|
61
88
|
* Set authentication token for subsequent requests
|
|
62
89
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../src/core/http-client.ts"],"names":[],"mappings":"AAAA,OAAc,EAAiB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../src/core/http-client.ts"],"names":[],"mappings":"AAAA,OAAc,EAAiB,kBAAkB,EAA6C,MAAM,OAAO,CAAC;AAC5G,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9C,OAAO,EAEL,eAAe,EAEhB,MAAM,qBAAqB,CAAC;AAW7B,0DAA0D;AAC1D,MAAM,WAAW,kBAAmB,SAAQ,kBAAkB;IAC5D,6FAA6F;IAC7F,aAAa,CAAC,EAAE,eAAe,CAAC;IAChC,mGAAmG;IACnG,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wDAAwD;IACxD,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,qBAAa,eAAe;;IAiBd,OAAO,CAAC,MAAM;IAhB1B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmB;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAuB;IACrD,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,gBAAgB,CAAS;IACjC,8EAA8E;IAC9E,OAAO,CAAC,sBAAsB,CAA8C;IAC5E,OAAO,CAAC,mBAAmB,CAAiC;IAE5D;;OAEG;IACH,IAAI,OAAO,IAAI,MAAM,CAEpB;gBAEmB,MAAM,EAAE,WAAW;IAoFvC;;OAEG;YACW,QAAQ;IAYtB;;OAEG;IACG,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAelD;;;;;;;;;;;;;OAaG;IACH,YAAY,IAAI,MAAM,GAAG,IAAI;IAwB7B;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIjC;;OAEG;IACH,cAAc,IAAI,IAAI;IAItB;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAKlE;;OAEG;IACG,IAAI,CAAC,CAAC,EACV,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,CAAC,CAAC;IAKb;;OAEG;IACG,GAAG,CAAC,CAAC,EACT,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,CAAC,CAAC;IAKb;;OAEG;IACG,KAAK,CAAC,CAAC,EACX,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,CAAC,CAAC;IAKb;;OAEG;IACG,MAAM,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAyB5E;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMjC;;OAEG;IACH,cAAc,IAAI,IAAI;IAKtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;CA4I1B"}
|