@newyorkcompute/kalshi-core 0.1.1 → 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/dist/cache.d.ts +71 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +96 -0
- package/dist/cache.js.map +1 -0
- package/dist/cache.test.d.ts +5 -0
- package/dist/cache.test.d.ts.map +1 -0
- package/dist/cache.test.js +108 -0
- package/dist/cache.test.js.map +1 -0
- package/dist/config.d.ts +61 -6
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +56 -5
- package/dist/config.js.map +1 -1
- package/dist/config.test.d.ts +2 -0
- package/dist/config.test.d.ts.map +1 -0
- package/dist/config.test.js +94 -0
- package/dist/config.test.js.map +1 -0
- package/dist/format.d.ts +110 -2
- package/dist/format.d.ts.map +1 -1
- package/dist/format.js +151 -2
- package/dist/format.js.map +1 -1
- package/dist/format.test.js +107 -2
- package/dist/format.test.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/rate-limiter.d.ts +80 -0
- package/dist/rate-limiter.d.ts.map +1 -0
- package/dist/rate-limiter.js +180 -0
- package/dist/rate-limiter.js.map +1 -0
- package/dist/rate-limiter.test.d.ts +5 -0
- package/dist/rate-limiter.test.d.ts.map +1 -0
- package/dist/rate-limiter.test.js +175 -0
- package/dist/rate-limiter.test.js.map +1 -0
- package/dist/websocket/auth.d.ts +28 -0
- package/dist/websocket/auth.d.ts.map +1 -0
- package/dist/websocket/auth.js +55 -0
- package/dist/websocket/auth.js.map +1 -0
- package/dist/websocket/auth.test.d.ts +2 -0
- package/dist/websocket/auth.test.d.ts.map +1 -0
- package/dist/websocket/auth.test.js +56 -0
- package/dist/websocket/auth.test.js.map +1 -0
- package/dist/websocket/client.d.ts +95 -0
- package/dist/websocket/client.d.ts.map +1 -0
- package/dist/websocket/client.js +352 -0
- package/dist/websocket/client.js.map +1 -0
- package/dist/websocket/index.d.ts +9 -0
- package/dist/websocket/index.d.ts.map +1 -0
- package/dist/websocket/index.js +9 -0
- package/dist/websocket/index.js.map +1 -0
- package/dist/websocket/types.d.ts +160 -0
- package/dist/websocket/types.d.ts.map +1 -0
- package/dist/websocket/types.js +12 -0
- package/dist/websocket/types.js.map +1 -0
- package/dist/websocket/types.test.d.ts +2 -0
- package/dist/websocket/types.test.d.ts.map +1 -0
- package/dist/websocket/types.test.js +17 -0
- package/dist/websocket/types.test.js.map +1 -0
- package/package.json +8 -4
package/dist/format.d.ts
CHANGED
|
@@ -5,34 +5,142 @@
|
|
|
5
5
|
*/
|
|
6
6
|
/**
|
|
7
7
|
* Format a price in cents to a display string (e.g., 45 -> "45¢")
|
|
8
|
+
*
|
|
9
|
+
* @param cents - Price in cents (0-100 for Kalshi markets)
|
|
10
|
+
* @returns Formatted price string with cent symbol, or "—" if null/undefined
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* formatPrice(45) // "45¢"
|
|
15
|
+
* formatPrice(null) // "—"
|
|
16
|
+
* ```
|
|
8
17
|
*/
|
|
9
18
|
export declare function formatPrice(cents: number | undefined | null): string;
|
|
10
19
|
/**
|
|
11
20
|
* Format a price in cents to dollars (e.g., 4500 -> "$45.00")
|
|
21
|
+
*
|
|
22
|
+
* @param cents - Amount in cents
|
|
23
|
+
* @returns Formatted dollar string with currency symbol, or "—" if null/undefined
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```ts
|
|
27
|
+
* formatCurrency(4500) // "$45.00"
|
|
28
|
+
* formatCurrency(50) // "$0.50"
|
|
29
|
+
* ```
|
|
12
30
|
*/
|
|
13
31
|
export declare function formatCurrency(cents: number | undefined | null): string;
|
|
14
32
|
/**
|
|
15
33
|
* Format a number as a percentage (e.g., 0.45 -> "45%")
|
|
34
|
+
*
|
|
35
|
+
* @param value - Decimal value between 0 and 1
|
|
36
|
+
* @returns Formatted percentage string, or "—" if null/undefined
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* formatPercent(0.45) // "45%"
|
|
41
|
+
* formatPercent(1.0) // "100%"
|
|
42
|
+
* ```
|
|
16
43
|
*/
|
|
17
44
|
export declare function formatPercent(value: number | undefined | null): string;
|
|
18
45
|
/**
|
|
19
|
-
* Format a price change with indicator
|
|
46
|
+
* Format a price change with visual indicator
|
|
47
|
+
*
|
|
48
|
+
* @param change - Price change in cents (positive, negative, or zero)
|
|
49
|
+
* @returns Formatted string with arrow indicator
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```ts
|
|
53
|
+
* formatPriceChange(2) // "▲ +2"
|
|
54
|
+
* formatPriceChange(-3) // "▼ -3"
|
|
55
|
+
* formatPriceChange(0) // "━ 0"
|
|
56
|
+
* ```
|
|
20
57
|
*/
|
|
21
58
|
export declare function formatPriceChange(change: number): string;
|
|
22
59
|
/**
|
|
23
|
-
* Format a large number with abbreviations
|
|
60
|
+
* Format a large number with K/M abbreviations
|
|
61
|
+
*
|
|
62
|
+
* @param value - Number to format
|
|
63
|
+
* @returns Compact string with K (thousands) or M (millions) suffix
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```ts
|
|
67
|
+
* formatCompactNumber(1500000) // "1.5M"
|
|
68
|
+
* formatCompactNumber(2500) // "2.5K"
|
|
69
|
+
* formatCompactNumber(500) // "500"
|
|
70
|
+
* ```
|
|
24
71
|
*/
|
|
25
72
|
export declare function formatCompactNumber(value: number | undefined | null): string;
|
|
26
73
|
/**
|
|
27
74
|
* Format a timestamp to a relative time string
|
|
75
|
+
*
|
|
76
|
+
* @param timestamp - Date string or Date object
|
|
77
|
+
* @returns Relative time string (e.g., "2d ago", "in 3h")
|
|
28
78
|
*/
|
|
29
79
|
export declare function formatRelativeTime(timestamp: string | Date): string;
|
|
80
|
+
/**
|
|
81
|
+
* Format market close time as expiry string
|
|
82
|
+
*
|
|
83
|
+
* Handles various time ranges:
|
|
84
|
+
* - Minutes: "45m"
|
|
85
|
+
* - Hours: "3h 45m"
|
|
86
|
+
* - Days: "2d 14h" or "45d" (for >30 days)
|
|
87
|
+
* - Years: "2y 3mo" or "2y"
|
|
88
|
+
* - Very distant (>10y): "distant"
|
|
89
|
+
* - Past: "CLOSED"
|
|
90
|
+
*
|
|
91
|
+
* @param closeTime - ISO date string for market close time
|
|
92
|
+
* @returns Formatted expiry string
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* ```ts
|
|
96
|
+
* formatExpiry('2025-12-31T23:59:59Z') // "1y 2mo"
|
|
97
|
+
* formatExpiry('2099-01-01T00:00:00Z') // "distant"
|
|
98
|
+
* formatExpiry('2024-01-01T00:00:00Z') // "CLOSED" (if past)
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
export declare function formatExpiry(closeTime?: string): string;
|
|
102
|
+
/**
|
|
103
|
+
* Calculate spread between best bid and best ask
|
|
104
|
+
*
|
|
105
|
+
* @param bestBid - Best (highest) bid price
|
|
106
|
+
* @param bestAsk - Best (lowest) ask price
|
|
107
|
+
* @returns Spread in cents, or null if either price is missing
|
|
108
|
+
*
|
|
109
|
+
* @example
|
|
110
|
+
* ```ts
|
|
111
|
+
* calculateSpread(48, 52) // 4
|
|
112
|
+
* calculateSpread(null, 52) // null
|
|
113
|
+
* ```
|
|
114
|
+
*/
|
|
115
|
+
export declare function calculateSpread(bestBid: number | null | undefined, bestAsk: number | null | undefined): number | null;
|
|
30
116
|
/**
|
|
31
117
|
* Truncate a string to a maximum length with ellipsis
|
|
118
|
+
*
|
|
119
|
+
* @param str - String to truncate
|
|
120
|
+
* @param maxLength - Maximum length including ellipsis
|
|
121
|
+
* @returns Truncated string with "…" if needed
|
|
122
|
+
*
|
|
123
|
+
* @example
|
|
124
|
+
* ```ts
|
|
125
|
+
* truncate("Hello World", 8) // "Hello W…"
|
|
126
|
+
* truncate("Hi", 8) // "Hi"
|
|
127
|
+
* ```
|
|
32
128
|
*/
|
|
33
129
|
export declare function truncate(str: string, maxLength: number): string;
|
|
34
130
|
/**
|
|
35
131
|
* Pad a string to a fixed width (left or right aligned)
|
|
132
|
+
*
|
|
133
|
+
* @param str - String to pad
|
|
134
|
+
* @param width - Target width
|
|
135
|
+
* @param align - Alignment direction ("left" adds padding right, "right" adds padding left)
|
|
136
|
+
* @returns Padded string, truncated if longer than width
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```ts
|
|
140
|
+
* padString("Hi", 5, "left") // "Hi "
|
|
141
|
+
* padString("Hi", 5, "right") // " Hi"
|
|
142
|
+
* padString("Hello World", 5) // "Hello"
|
|
143
|
+
* ```
|
|
36
144
|
*/
|
|
37
145
|
export declare function padString(str: string, width: number, align?: "left" | "right"): string;
|
|
38
146
|
//# sourceMappingURL=format.d.ts.map
|
package/dist/format.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAKpE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAMvE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAKtE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAOxD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAY5E;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAuBnE;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CA4CvD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAClC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACjC,MAAM,GAAG,IAAI,CAGf;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAK/D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CACvB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAAM,GAAG,OAAgB,GAC/B,MAAM,CAMR"}
|
package/dist/format.js
CHANGED
|
@@ -5,6 +5,15 @@
|
|
|
5
5
|
*/
|
|
6
6
|
/**
|
|
7
7
|
* Format a price in cents to a display string (e.g., 45 -> "45¢")
|
|
8
|
+
*
|
|
9
|
+
* @param cents - Price in cents (0-100 for Kalshi markets)
|
|
10
|
+
* @returns Formatted price string with cent symbol, or "—" if null/undefined
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* formatPrice(45) // "45¢"
|
|
15
|
+
* formatPrice(null) // "—"
|
|
16
|
+
* ```
|
|
8
17
|
*/
|
|
9
18
|
export function formatPrice(cents) {
|
|
10
19
|
if (cents === undefined || cents === null) {
|
|
@@ -14,6 +23,15 @@ export function formatPrice(cents) {
|
|
|
14
23
|
}
|
|
15
24
|
/**
|
|
16
25
|
* Format a price in cents to dollars (e.g., 4500 -> "$45.00")
|
|
26
|
+
*
|
|
27
|
+
* @param cents - Amount in cents
|
|
28
|
+
* @returns Formatted dollar string with currency symbol, or "—" if null/undefined
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```ts
|
|
32
|
+
* formatCurrency(4500) // "$45.00"
|
|
33
|
+
* formatCurrency(50) // "$0.50"
|
|
34
|
+
* ```
|
|
17
35
|
*/
|
|
18
36
|
export function formatCurrency(cents) {
|
|
19
37
|
if (cents === undefined || cents === null) {
|
|
@@ -24,6 +42,15 @@ export function formatCurrency(cents) {
|
|
|
24
42
|
}
|
|
25
43
|
/**
|
|
26
44
|
* Format a number as a percentage (e.g., 0.45 -> "45%")
|
|
45
|
+
*
|
|
46
|
+
* @param value - Decimal value between 0 and 1
|
|
47
|
+
* @returns Formatted percentage string, or "—" if null/undefined
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```ts
|
|
51
|
+
* formatPercent(0.45) // "45%"
|
|
52
|
+
* formatPercent(1.0) // "100%"
|
|
53
|
+
* ```
|
|
27
54
|
*/
|
|
28
55
|
export function formatPercent(value) {
|
|
29
56
|
if (value === undefined || value === null) {
|
|
@@ -32,7 +59,17 @@ export function formatPercent(value) {
|
|
|
32
59
|
return `${Math.round(value * 100)}%`;
|
|
33
60
|
}
|
|
34
61
|
/**
|
|
35
|
-
* Format a price change with indicator
|
|
62
|
+
* Format a price change with visual indicator
|
|
63
|
+
*
|
|
64
|
+
* @param change - Price change in cents (positive, negative, or zero)
|
|
65
|
+
* @returns Formatted string with arrow indicator
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```ts
|
|
69
|
+
* formatPriceChange(2) // "▲ +2"
|
|
70
|
+
* formatPriceChange(-3) // "▼ -3"
|
|
71
|
+
* formatPriceChange(0) // "━ 0"
|
|
72
|
+
* ```
|
|
36
73
|
*/
|
|
37
74
|
export function formatPriceChange(change) {
|
|
38
75
|
if (change > 0) {
|
|
@@ -44,7 +81,17 @@ export function formatPriceChange(change) {
|
|
|
44
81
|
return "━ 0";
|
|
45
82
|
}
|
|
46
83
|
/**
|
|
47
|
-
* Format a large number with abbreviations
|
|
84
|
+
* Format a large number with K/M abbreviations
|
|
85
|
+
*
|
|
86
|
+
* @param value - Number to format
|
|
87
|
+
* @returns Compact string with K (thousands) or M (millions) suffix
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```ts
|
|
91
|
+
* formatCompactNumber(1500000) // "1.5M"
|
|
92
|
+
* formatCompactNumber(2500) // "2.5K"
|
|
93
|
+
* formatCompactNumber(500) // "500"
|
|
94
|
+
* ```
|
|
48
95
|
*/
|
|
49
96
|
export function formatCompactNumber(value) {
|
|
50
97
|
if (value === undefined || value === null) {
|
|
@@ -60,6 +107,9 @@ export function formatCompactNumber(value) {
|
|
|
60
107
|
}
|
|
61
108
|
/**
|
|
62
109
|
* Format a timestamp to a relative time string
|
|
110
|
+
*
|
|
111
|
+
* @param timestamp - Date string or Date object
|
|
112
|
+
* @returns Relative time string (e.g., "2d ago", "in 3h")
|
|
63
113
|
*/
|
|
64
114
|
export function formatRelativeTime(timestamp) {
|
|
65
115
|
const date = typeof timestamp === "string" ? new Date(timestamp) : timestamp;
|
|
@@ -83,8 +133,95 @@ export function formatRelativeTime(timestamp) {
|
|
|
83
133
|
}
|
|
84
134
|
return "now";
|
|
85
135
|
}
|
|
136
|
+
/**
|
|
137
|
+
* Format market close time as expiry string
|
|
138
|
+
*
|
|
139
|
+
* Handles various time ranges:
|
|
140
|
+
* - Minutes: "45m"
|
|
141
|
+
* - Hours: "3h 45m"
|
|
142
|
+
* - Days: "2d 14h" or "45d" (for >30 days)
|
|
143
|
+
* - Years: "2y 3mo" or "2y"
|
|
144
|
+
* - Very distant (>10y): "distant"
|
|
145
|
+
* - Past: "CLOSED"
|
|
146
|
+
*
|
|
147
|
+
* @param closeTime - ISO date string for market close time
|
|
148
|
+
* @returns Formatted expiry string
|
|
149
|
+
*
|
|
150
|
+
* @example
|
|
151
|
+
* ```ts
|
|
152
|
+
* formatExpiry('2025-12-31T23:59:59Z') // "1y 2mo"
|
|
153
|
+
* formatExpiry('2099-01-01T00:00:00Z') // "distant"
|
|
154
|
+
* formatExpiry('2024-01-01T00:00:00Z') // "CLOSED" (if past)
|
|
155
|
+
* ```
|
|
156
|
+
*/
|
|
157
|
+
export function formatExpiry(closeTime) {
|
|
158
|
+
if (!closeTime)
|
|
159
|
+
return '';
|
|
160
|
+
const now = new Date();
|
|
161
|
+
const close = new Date(closeTime);
|
|
162
|
+
const diffMs = close.getTime() - now.getTime();
|
|
163
|
+
if (diffMs <= 0)
|
|
164
|
+
return 'CLOSED';
|
|
165
|
+
const diffMins = Math.floor(diffMs / (1000 * 60));
|
|
166
|
+
const diffHours = Math.floor(diffMs / (1000 * 60 * 60));
|
|
167
|
+
const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));
|
|
168
|
+
const diffYears = Math.floor(diffDays / 365);
|
|
169
|
+
// For very distant dates, show "distant"
|
|
170
|
+
if (diffYears > 10) {
|
|
171
|
+
return 'distant';
|
|
172
|
+
}
|
|
173
|
+
// For dates > 1 year, show years and months
|
|
174
|
+
if (diffYears >= 1) {
|
|
175
|
+
const remainingMonths = Math.floor((diffDays % 365) / 30);
|
|
176
|
+
return remainingMonths > 0 ? `${diffYears}y ${remainingMonths}mo` : `${diffYears}y`;
|
|
177
|
+
}
|
|
178
|
+
// For dates > 30 days, show just days
|
|
179
|
+
if (diffDays > 30) {
|
|
180
|
+
return `${diffDays}d`;
|
|
181
|
+
}
|
|
182
|
+
// For dates with days remaining, show days and hours
|
|
183
|
+
if (diffDays > 0) {
|
|
184
|
+
const remainingHours = diffHours % 24;
|
|
185
|
+
return `${diffDays}d ${remainingHours}h`;
|
|
186
|
+
}
|
|
187
|
+
// For dates with hours remaining, show hours and minutes
|
|
188
|
+
if (diffHours > 0) {
|
|
189
|
+
const remainingMins = diffMins % 60;
|
|
190
|
+
return `${diffHours}h ${remainingMins}m`;
|
|
191
|
+
}
|
|
192
|
+
// Just minutes
|
|
193
|
+
return `${diffMins}m`;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Calculate spread between best bid and best ask
|
|
197
|
+
*
|
|
198
|
+
* @param bestBid - Best (highest) bid price
|
|
199
|
+
* @param bestAsk - Best (lowest) ask price
|
|
200
|
+
* @returns Spread in cents, or null if either price is missing
|
|
201
|
+
*
|
|
202
|
+
* @example
|
|
203
|
+
* ```ts
|
|
204
|
+
* calculateSpread(48, 52) // 4
|
|
205
|
+
* calculateSpread(null, 52) // null
|
|
206
|
+
* ```
|
|
207
|
+
*/
|
|
208
|
+
export function calculateSpread(bestBid, bestAsk) {
|
|
209
|
+
if (bestBid == null || bestAsk == null)
|
|
210
|
+
return null;
|
|
211
|
+
return bestAsk - bestBid;
|
|
212
|
+
}
|
|
86
213
|
/**
|
|
87
214
|
* Truncate a string to a maximum length with ellipsis
|
|
215
|
+
*
|
|
216
|
+
* @param str - String to truncate
|
|
217
|
+
* @param maxLength - Maximum length including ellipsis
|
|
218
|
+
* @returns Truncated string with "…" if needed
|
|
219
|
+
*
|
|
220
|
+
* @example
|
|
221
|
+
* ```ts
|
|
222
|
+
* truncate("Hello World", 8) // "Hello W…"
|
|
223
|
+
* truncate("Hi", 8) // "Hi"
|
|
224
|
+
* ```
|
|
88
225
|
*/
|
|
89
226
|
export function truncate(str, maxLength) {
|
|
90
227
|
if (str.length <= maxLength) {
|
|
@@ -94,6 +231,18 @@ export function truncate(str, maxLength) {
|
|
|
94
231
|
}
|
|
95
232
|
/**
|
|
96
233
|
* Pad a string to a fixed width (left or right aligned)
|
|
234
|
+
*
|
|
235
|
+
* @param str - String to pad
|
|
236
|
+
* @param width - Target width
|
|
237
|
+
* @param align - Alignment direction ("left" adds padding right, "right" adds padding left)
|
|
238
|
+
* @returns Padded string, truncated if longer than width
|
|
239
|
+
*
|
|
240
|
+
* @example
|
|
241
|
+
* ```ts
|
|
242
|
+
* padString("Hi", 5, "left") // "Hi "
|
|
243
|
+
* padString("Hi", 5, "right") // " Hi"
|
|
244
|
+
* padString("Hello World", 5) // "Hello"
|
|
245
|
+
* ```
|
|
97
246
|
*/
|
|
98
247
|
export function padString(str, width, align = "left") {
|
|
99
248
|
if (str.length >= width) {
|
package/dist/format.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"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"}
|
package/dist/format.test.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { describe, it, expect } from "vitest";
|
|
2
|
-
import { formatPrice, formatCurrency, formatPercent, formatPriceChange, formatCompactNumber, truncate, padString, } from "./format.js";
|
|
1
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
2
|
+
import { formatPrice, formatCurrency, formatPercent, formatPriceChange, formatCompactNumber, formatRelativeTime, formatExpiry, calculateSpread, truncate, padString, } from "./format.js";
|
|
3
3
|
describe("formatPrice", () => {
|
|
4
4
|
it("formats cents with cent symbol", () => {
|
|
5
5
|
expect(formatPrice(45)).toBe("45¢");
|
|
@@ -87,4 +87,109 @@ describe("padString", () => {
|
|
|
87
87
|
expect(padString("Hello World", 5)).toBe("Hello");
|
|
88
88
|
});
|
|
89
89
|
});
|
|
90
|
+
describe("formatRelativeTime", () => {
|
|
91
|
+
beforeEach(() => {
|
|
92
|
+
vi.useFakeTimers();
|
|
93
|
+
vi.setSystemTime(new Date('2025-06-15T12:00:00Z'));
|
|
94
|
+
});
|
|
95
|
+
afterEach(() => {
|
|
96
|
+
vi.useRealTimers();
|
|
97
|
+
});
|
|
98
|
+
it("returns 'now' for current time", () => {
|
|
99
|
+
expect(formatRelativeTime('2025-06-15T12:00:00Z')).toBe('now');
|
|
100
|
+
expect(formatRelativeTime(new Date('2025-06-15T12:00:30Z'))).toBe('now');
|
|
101
|
+
});
|
|
102
|
+
it("formats past minutes", () => {
|
|
103
|
+
expect(formatRelativeTime('2025-06-15T11:30:00Z')).toBe('30m ago');
|
|
104
|
+
expect(formatRelativeTime('2025-06-15T11:45:00Z')).toBe('15m ago');
|
|
105
|
+
});
|
|
106
|
+
it("formats past hours", () => {
|
|
107
|
+
expect(formatRelativeTime('2025-06-15T09:00:00Z')).toBe('3h ago');
|
|
108
|
+
expect(formatRelativeTime('2025-06-15T06:00:00Z')).toBe('6h ago');
|
|
109
|
+
});
|
|
110
|
+
it("formats past days", () => {
|
|
111
|
+
expect(formatRelativeTime('2025-06-13T12:00:00Z')).toBe('2d ago');
|
|
112
|
+
expect(formatRelativeTime('2025-06-10T12:00:00Z')).toBe('5d ago');
|
|
113
|
+
});
|
|
114
|
+
it("formats future minutes", () => {
|
|
115
|
+
expect(formatRelativeTime('2025-06-15T12:30:00Z')).toBe('in 30m');
|
|
116
|
+
expect(formatRelativeTime('2025-06-15T12:15:00Z')).toBe('in 15m');
|
|
117
|
+
});
|
|
118
|
+
it("formats future hours", () => {
|
|
119
|
+
expect(formatRelativeTime('2025-06-15T15:00:00Z')).toBe('in 3h');
|
|
120
|
+
expect(formatRelativeTime('2025-06-15T18:00:00Z')).toBe('in 6h');
|
|
121
|
+
});
|
|
122
|
+
it("formats future days", () => {
|
|
123
|
+
expect(formatRelativeTime('2025-06-17T12:00:00Z')).toBe('in 2d');
|
|
124
|
+
expect(formatRelativeTime('2025-06-20T12:00:00Z')).toBe('in 5d');
|
|
125
|
+
});
|
|
126
|
+
it("accepts Date objects", () => {
|
|
127
|
+
expect(formatRelativeTime(new Date('2025-06-15T11:00:00Z'))).toBe('1h ago');
|
|
128
|
+
expect(formatRelativeTime(new Date('2025-06-16T12:00:00Z'))).toBe('in 1d');
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
describe("formatExpiry", () => {
|
|
132
|
+
beforeEach(() => {
|
|
133
|
+
vi.useFakeTimers();
|
|
134
|
+
vi.setSystemTime(new Date('2025-06-15T12:00:00Z'));
|
|
135
|
+
});
|
|
136
|
+
afterEach(() => {
|
|
137
|
+
vi.useRealTimers();
|
|
138
|
+
});
|
|
139
|
+
it("returns empty string for undefined", () => {
|
|
140
|
+
expect(formatExpiry(undefined)).toBe('');
|
|
141
|
+
});
|
|
142
|
+
it("returns CLOSED for past dates", () => {
|
|
143
|
+
expect(formatExpiry('2025-06-14T12:00:00Z')).toBe('CLOSED');
|
|
144
|
+
expect(formatExpiry('2020-01-01T00:00:00Z')).toBe('CLOSED');
|
|
145
|
+
});
|
|
146
|
+
it("formats minutes", () => {
|
|
147
|
+
expect(formatExpiry('2025-06-15T12:30:00Z')).toBe('30m');
|
|
148
|
+
expect(formatExpiry('2025-06-15T12:45:00Z')).toBe('45m');
|
|
149
|
+
});
|
|
150
|
+
it("formats hours and minutes", () => {
|
|
151
|
+
expect(formatExpiry('2025-06-15T15:30:00Z')).toBe('3h 30m');
|
|
152
|
+
expect(formatExpiry('2025-06-15T20:00:00Z')).toBe('8h 0m');
|
|
153
|
+
});
|
|
154
|
+
it("formats days and hours", () => {
|
|
155
|
+
expect(formatExpiry('2025-06-17T12:00:00Z')).toBe('2d 0h');
|
|
156
|
+
expect(formatExpiry('2025-06-20T18:00:00Z')).toBe('5d 6h');
|
|
157
|
+
});
|
|
158
|
+
it("formats just days for >30 days", () => {
|
|
159
|
+
expect(formatExpiry('2025-08-15T12:00:00Z')).toBe('61d');
|
|
160
|
+
expect(formatExpiry('2025-10-15T12:00:00Z')).toBe('122d');
|
|
161
|
+
});
|
|
162
|
+
it("formats years and months", () => {
|
|
163
|
+
expect(formatExpiry('2026-06-15T12:00:00Z')).toBe('1y');
|
|
164
|
+
expect(formatExpiry('2027-09-15T12:00:00Z')).toBe('2y 3mo');
|
|
165
|
+
});
|
|
166
|
+
it("returns distant for >10 years", () => {
|
|
167
|
+
expect(formatExpiry('2036-06-15T12:00:00Z')).toBe('distant');
|
|
168
|
+
expect(formatExpiry('2099-01-01T00:00:00Z')).toBe('distant');
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
describe("calculateSpread", () => {
|
|
172
|
+
it("calculates spread correctly", () => {
|
|
173
|
+
expect(calculateSpread(48, 52)).toBe(4);
|
|
174
|
+
expect(calculateSpread(45, 55)).toBe(10);
|
|
175
|
+
expect(calculateSpread(50, 51)).toBe(1);
|
|
176
|
+
});
|
|
177
|
+
it("returns null for null bid", () => {
|
|
178
|
+
expect(calculateSpread(null, 52)).toBeNull();
|
|
179
|
+
});
|
|
180
|
+
it("returns null for null ask", () => {
|
|
181
|
+
expect(calculateSpread(48, null)).toBeNull();
|
|
182
|
+
});
|
|
183
|
+
it("returns null for undefined values", () => {
|
|
184
|
+
expect(calculateSpread(undefined, 52)).toBeNull();
|
|
185
|
+
expect(calculateSpread(48, undefined)).toBeNull();
|
|
186
|
+
expect(calculateSpread(undefined, undefined)).toBeNull();
|
|
187
|
+
});
|
|
188
|
+
it("handles zero spread", () => {
|
|
189
|
+
expect(calculateSpread(50, 50)).toBe(0);
|
|
190
|
+
});
|
|
191
|
+
it("handles negative spread (crossed market)", () => {
|
|
192
|
+
expect(calculateSpread(52, 48)).toBe(-4);
|
|
193
|
+
});
|
|
194
|
+
});
|
|
90
195
|
//# sourceMappingURL=format.test.js.map
|
package/dist/format.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.test.js","sourceRoot":"","sources":["../src/format.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"format.test.js","sourceRoot":"","sources":["../src/format.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,8 +4,11 @@
|
|
|
4
4
|
* Shared utilities for Kalshi prediction market tools.
|
|
5
5
|
*/
|
|
6
6
|
export { type KalshiConfig, DEFAULT_BASE_PATH, DEMO_BASE_PATH, getKalshiConfig, createSdkConfig, createMarketApi, createPortfolioApi, createOrdersApi, createEventsApi, } from "./config.js";
|
|
7
|
-
export { formatPrice, formatCurrency, formatPercent, formatPriceChange, formatCompactNumber, formatRelativeTime, truncate, padString, } from "./format.js";
|
|
7
|
+
export { formatPrice, formatCurrency, formatPercent, formatPriceChange, formatCompactNumber, formatRelativeTime, formatExpiry, calculateSpread, truncate, padString, } from "./format.js";
|
|
8
|
+
export { getCached, setCache, clearCache, clearAllCache, getCacheStats, CACHE_TTL, } from "./cache.js";
|
|
9
|
+
export { createRateLimiter, isRateLimitError, type RateLimiter, type RateLimiterConfig, type RateLimiterState, } from "./rate-limiter.js";
|
|
8
10
|
export * from "./types.js";
|
|
9
11
|
export { withTimeout, TimeoutError } from "./with-timeout.js";
|
|
10
12
|
export { validateOrder, type OrderValidationInput, type OrderValidationResult, } from "./validate-order.js";
|
|
13
|
+
export { KalshiWsClient, generateWsAuthHeaders, generateSignedWsUrl, type KalshiWsConfig, type KalshiWsEventHandlers, type SubscriptionChannel, type ConnectionState, type ActiveSubscriptions, type OrderbookDeltaMessage, type TickerMessage, type TradeMessage, type FillMessage, type WsMessage, WS_ENDPOINTS, } from "./websocket/index.js";
|
|
11
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,KAAK,YAAY,EACjB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,eAAe,GAChB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,WAAW,EACX,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,QAAQ,EACR,SAAS,GACV,MAAM,aAAa,CAAC;AAGrB,cAAc,YAAY,CAAC;AAG3B,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAG9D,OAAO,EACL,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,GAC3B,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,KAAK,YAAY,EACjB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,eAAe,GAChB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,WAAW,EACX,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,SAAS,GACV,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,SAAS,EACT,QAAQ,EACR,UAAU,EACV,aAAa,EACb,aAAa,EACb,SAAS,GACV,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,mBAAmB,CAAC;AAG3B,cAAc,YAAY,CAAC;AAG3B,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAG9D,OAAO,EACL,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,GAC3B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,YAAY,GACb,MAAM,sBAAsB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,11 +6,17 @@
|
|
|
6
6
|
// Configuration
|
|
7
7
|
export { DEFAULT_BASE_PATH, DEMO_BASE_PATH, getKalshiConfig, createSdkConfig, createMarketApi, createPortfolioApi, createOrdersApi, createEventsApi, } from "./config.js";
|
|
8
8
|
// Formatting utilities
|
|
9
|
-
export { formatPrice, formatCurrency, formatPercent, formatPriceChange, formatCompactNumber, formatRelativeTime, truncate, padString, } from "./format.js";
|
|
9
|
+
export { formatPrice, formatCurrency, formatPercent, formatPriceChange, formatCompactNumber, formatRelativeTime, formatExpiry, calculateSpread, truncate, padString, } from "./format.js";
|
|
10
|
+
// Cache utilities
|
|
11
|
+
export { getCached, setCache, clearCache, clearAllCache, getCacheStats, CACHE_TTL, } from "./cache.js";
|
|
12
|
+
// Rate limiting
|
|
13
|
+
export { createRateLimiter, isRateLimitError, } from "./rate-limiter.js";
|
|
10
14
|
// Types
|
|
11
15
|
export * from "./types.js";
|
|
12
16
|
// Utilities
|
|
13
17
|
export { withTimeout, TimeoutError } from "./with-timeout.js";
|
|
14
18
|
// Validation
|
|
15
19
|
export { validateOrder, } from "./validate-order.js";
|
|
20
|
+
// WebSocket (real-time data)
|
|
21
|
+
export { KalshiWsClient, generateWsAuthHeaders, generateSignedWsUrl, WS_ENDPOINTS, } from "./websocket/index.js";
|
|
16
22
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,gBAAgB;AAChB,OAAO,EAEL,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,uBAAuB;AACvB,OAAO,EACL,WAAW,EACX,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,QAAQ,EACR,SAAS,GACV,MAAM,aAAa,CAAC;AAErB,QAAQ;AACR,cAAc,YAAY,CAAC;AAE3B,YAAY;AACZ,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE9D,aAAa;AACb,OAAO,EACL,aAAa,GAGd,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,gBAAgB;AAChB,OAAO,EAEL,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,uBAAuB;AACvB,OAAO,EACL,WAAW,EACX,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,SAAS,GACV,MAAM,aAAa,CAAC;AAErB,kBAAkB;AAClB,OAAO,EACL,SAAS,EACT,QAAQ,EACR,UAAU,EACV,aAAa,EACb,aAAa,EACb,SAAS,GACV,MAAM,YAAY,CAAC;AAEpB,gBAAgB;AAChB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,GAIjB,MAAM,mBAAmB,CAAC;AAE3B,QAAQ;AACR,cAAc,YAAY,CAAC;AAE3B,YAAY;AACZ,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE9D,aAAa;AACb,OAAO,EACL,aAAa,GAGd,MAAM,qBAAqB,CAAC;AAE7B,6BAA6B;AAC7B,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EAWnB,YAAY,GACb,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rate Limiter
|
|
3
|
+
*
|
|
4
|
+
* Implements exponential backoff and circuit breaker patterns
|
|
5
|
+
* for handling API rate limits gracefully.
|
|
6
|
+
*/
|
|
7
|
+
export interface RateLimiterConfig {
|
|
8
|
+
/** Minimum interval between requests in ms (default: 1000) */
|
|
9
|
+
minInterval: number;
|
|
10
|
+
/** Maximum interval between requests in ms (default: 60000) */
|
|
11
|
+
maxInterval: number;
|
|
12
|
+
/** Multiplier for exponential backoff (default: 2) */
|
|
13
|
+
backoffMultiplier: number;
|
|
14
|
+
/** Number of consecutive failures before circuit opens (default: 5) */
|
|
15
|
+
circuitBreakerThreshold: number;
|
|
16
|
+
/** Time to wait before attempting to close circuit in ms (default: 30000) */
|
|
17
|
+
circuitResetTimeout: number;
|
|
18
|
+
}
|
|
19
|
+
export interface RateLimiterState {
|
|
20
|
+
/** Current interval between requests */
|
|
21
|
+
currentInterval: number;
|
|
22
|
+
/** Number of consecutive failures */
|
|
23
|
+
consecutiveFailures: number;
|
|
24
|
+
/** Whether the circuit breaker is open (blocking requests) */
|
|
25
|
+
isCircuitOpen: boolean;
|
|
26
|
+
/** Whether rate limiting is active */
|
|
27
|
+
isRateLimited: boolean;
|
|
28
|
+
/** Timestamp of last successful request */
|
|
29
|
+
lastSuccessTime: number;
|
|
30
|
+
/** Timestamp of last failure */
|
|
31
|
+
lastFailureTime: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Create a rate limiter instance
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```ts
|
|
38
|
+
* const limiter = createRateLimiter();
|
|
39
|
+
*
|
|
40
|
+
* async function fetchData() {
|
|
41
|
+
* if (limiter.shouldBlock()) {
|
|
42
|
+
* return; // Skip request
|
|
43
|
+
* }
|
|
44
|
+
*
|
|
45
|
+
* try {
|
|
46
|
+
* const data = await api.getData();
|
|
47
|
+
* limiter.recordSuccess();
|
|
48
|
+
* return data;
|
|
49
|
+
* } catch (err) {
|
|
50
|
+
* if (isRateLimitError(err)) {
|
|
51
|
+
* limiter.recordRateLimitError();
|
|
52
|
+
* } else {
|
|
53
|
+
* limiter.recordFailure();
|
|
54
|
+
* }
|
|
55
|
+
* throw err;
|
|
56
|
+
* }
|
|
57
|
+
* }
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export declare function createRateLimiter(config?: Partial<RateLimiterConfig>): {
|
|
61
|
+
shouldBlock: () => boolean;
|
|
62
|
+
getCurrentInterval: () => number;
|
|
63
|
+
getState: () => Readonly<RateLimiterState>;
|
|
64
|
+
recordSuccess: () => void;
|
|
65
|
+
recordRateLimitError: () => void;
|
|
66
|
+
recordFailure: () => void;
|
|
67
|
+
reset: () => void;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Type for the rate limiter instance
|
|
71
|
+
*/
|
|
72
|
+
export type RateLimiter = ReturnType<typeof createRateLimiter>;
|
|
73
|
+
/**
|
|
74
|
+
* Check if an error is a rate limit error (HTTP 429)
|
|
75
|
+
*
|
|
76
|
+
* @param error - Error to check
|
|
77
|
+
* @returns true if the error is a rate limit error
|
|
78
|
+
*/
|
|
79
|
+
export declare function isRateLimitError(error: unknown): boolean;
|
|
80
|
+
//# sourceMappingURL=rate-limiter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../src/rate-limiter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,iBAAiB;IAChC,8DAA8D;IAC9D,WAAW,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uEAAuE;IACvE,uBAAuB,EAAE,MAAM,CAAC;IAChC,6EAA6E;IAC7E,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,wCAAwC;IACxC,eAAe,EAAE,MAAM,CAAC;IACxB,qCAAqC;IACrC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,8DAA8D;IAC9D,aAAa,EAAE,OAAO,CAAC;IACvB,sCAAsC;IACtC,aAAa,EAAE,OAAO,CAAC;IACvB,2CAA2C;IAC3C,eAAe,EAAE,MAAM,CAAC;IACxB,gCAAgC;IAChC,eAAe,EAAE,MAAM,CAAC;CACzB;AAUD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,GAAE,OAAO,CAAC,iBAAiB,CAAM;uBAiB/C,OAAO;8BAOA,MAAM;oBAOhB,QAAQ,CAAC,gBAAgB,CAAC;yBAOrB,IAAI;gCAmBG,IAAI;yBAoBX,IAAI;iBA8BZ,IAAI;EAyBvB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE/D;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAmBxD"}
|