@cyberdrk/onchain 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.
- package/LICENSE +21 -0
- package/README.md +135 -0
- package/dist/cli/program.d.ts +4 -0
- package/dist/cli/program.d.ts.map +1 -0
- package/dist/cli/program.js +43 -0
- package/dist/cli/program.js.map +1 -0
- package/dist/cli/setup-wizard.d.ts +7 -0
- package/dist/cli/setup-wizard.d.ts.map +1 -0
- package/dist/cli/setup-wizard.js +96 -0
- package/dist/cli/setup-wizard.js.map +1 -0
- package/dist/cli/shared.d.ts +35 -0
- package/dist/cli/shared.d.ts.map +1 -0
- package/dist/cli/shared.js +120 -0
- package/dist/cli/shared.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +10 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/balance.d.ts +4 -0
- package/dist/commands/balance.d.ts.map +1 -0
- package/dist/commands/balance.js +141 -0
- package/dist/commands/balance.js.map +1 -0
- package/dist/commands/binance.d.ts +4 -0
- package/dist/commands/binance.d.ts.map +1 -0
- package/dist/commands/binance.js +129 -0
- package/dist/commands/binance.js.map +1 -0
- package/dist/commands/coinbase.d.ts +4 -0
- package/dist/commands/coinbase.d.ts.map +1 -0
- package/dist/commands/coinbase.js +122 -0
- package/dist/commands/coinbase.js.map +1 -0
- package/dist/commands/config.d.ts +4 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +90 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/history.d.ts +4 -0
- package/dist/commands/history.d.ts.map +1 -0
- package/dist/commands/history.js +124 -0
- package/dist/commands/history.js.map +1 -0
- package/dist/commands/markets.d.ts +4 -0
- package/dist/commands/markets.d.ts.map +1 -0
- package/dist/commands/markets.js +59 -0
- package/dist/commands/markets.js.map +1 -0
- package/dist/commands/polymarket.d.ts +4 -0
- package/dist/commands/polymarket.d.ts.map +1 -0
- package/dist/commands/polymarket.js +180 -0
- package/dist/commands/polymarket.js.map +1 -0
- package/dist/commands/portfolio.d.ts +4 -0
- package/dist/commands/portfolio.d.ts.map +1 -0
- package/dist/commands/portfolio.js +162 -0
- package/dist/commands/portfolio.js.map +1 -0
- package/dist/commands/price.d.ts +4 -0
- package/dist/commands/price.d.ts.map +1 -0
- package/dist/commands/price.js +95 -0
- package/dist/commands/price.js.map +1 -0
- package/dist/commands/setup.d.ts +4 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +47 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/test.d.ts +4 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +198 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/browser-scraper.d.ts +39 -0
- package/dist/lib/browser-scraper.d.ts.map +1 -0
- package/dist/lib/browser-scraper.js +214 -0
- package/dist/lib/browser-scraper.js.map +1 -0
- package/dist/lib/config.d.ts +19 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +52 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/credentials.d.ts +23 -0
- package/dist/lib/credentials.d.ts.map +1 -0
- package/dist/lib/credentials.js +49 -0
- package/dist/lib/credentials.js.map +1 -0
- package/dist/lib/mixins/binance.d.ts +12 -0
- package/dist/lib/mixins/binance.d.ts.map +1 -0
- package/dist/lib/mixins/binance.js +167 -0
- package/dist/lib/mixins/binance.js.map +1 -0
- package/dist/lib/mixins/coinbase.d.ts +11 -0
- package/dist/lib/mixins/coinbase.d.ts.map +1 -0
- package/dist/lib/mixins/coinbase.js +266 -0
- package/dist/lib/mixins/coinbase.js.map +1 -0
- package/dist/lib/mixins/coingecko.d.ts +10 -0
- package/dist/lib/mixins/coingecko.d.ts.map +1 -0
- package/dist/lib/mixins/coingecko.js +217 -0
- package/dist/lib/mixins/coingecko.js.map +1 -0
- package/dist/lib/mixins/coinmarketcap.d.ts +9 -0
- package/dist/lib/mixins/coinmarketcap.d.ts.map +1 -0
- package/dist/lib/mixins/coinmarketcap.js +142 -0
- package/dist/lib/mixins/coinmarketcap.js.map +1 -0
- package/dist/lib/mixins/debank.d.ts +21 -0
- package/dist/lib/mixins/debank.d.ts.map +1 -0
- package/dist/lib/mixins/debank.js +280 -0
- package/dist/lib/mixins/debank.js.map +1 -0
- package/dist/lib/mixins/helius.d.ts +12 -0
- package/dist/lib/mixins/helius.d.ts.map +1 -0
- package/dist/lib/mixins/helius.js +281 -0
- package/dist/lib/mixins/helius.js.map +1 -0
- package/dist/lib/mixins/polymarket.d.ts +13 -0
- package/dist/lib/mixins/polymarket.d.ts.map +1 -0
- package/dist/lib/mixins/polymarket.js +186 -0
- package/dist/lib/mixins/polymarket.js.map +1 -0
- package/dist/lib/onchain-client-base.d.ts +20 -0
- package/dist/lib/onchain-client-base.d.ts.map +1 -0
- package/dist/lib/onchain-client-base.js +45 -0
- package/dist/lib/onchain-client-base.js.map +1 -0
- package/dist/lib/onchain-client-types.d.ts +228 -0
- package/dist/lib/onchain-client-types.d.ts.map +1 -0
- package/dist/lib/onchain-client-types.js +2 -0
- package/dist/lib/onchain-client-types.js.map +1 -0
- package/dist/lib/onchain-client.d.ts +15 -0
- package/dist/lib/onchain-client.d.ts.map +1 -0
- package/dist/lib/onchain-client.js +13 -0
- package/dist/lib/onchain-client.js.map +1 -0
- package/dist/lib/output.d.ts +28 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +94 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/utils/address.d.ts +26 -0
- package/dist/lib/utils/address.d.ts.map +1 -0
- package/dist/lib/utils/address.js +61 -0
- package/dist/lib/utils/address.js.map +1 -0
- package/dist/lib/utils/formatters.d.ts +42 -0
- package/dist/lib/utils/formatters.d.ts.map +1 -0
- package/dist/lib/utils/formatters.js +173 -0
- package/dist/lib/utils/formatters.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
export type ChainType = 'evm' | 'solana';
|
|
2
|
+
export type EvmChain = 'eth' | 'bsc' | 'polygon' | 'arb' | 'op' | 'avax' | 'base' | 'zksync' | 'linea' | 'scroll' | 'blast' | 'mantle' | 'manta' | 'mode' | 'gnosis' | 'fantom' | 'celo' | 'aurora' | 'moonbeam' | 'moonriver' | 'cronos' | 'harmony' | 'metis' | 'boba' | 'kcc' | 'okc' | 'heco';
|
|
3
|
+
export type SupportedChain = EvmChain | 'solana';
|
|
4
|
+
export interface TokenBalance {
|
|
5
|
+
symbol: string;
|
|
6
|
+
name: string;
|
|
7
|
+
chain: SupportedChain;
|
|
8
|
+
contractAddress?: string;
|
|
9
|
+
balanceRaw: string;
|
|
10
|
+
balanceFormatted: number;
|
|
11
|
+
decimals: number;
|
|
12
|
+
priceUsd: number | null;
|
|
13
|
+
valueUsd: number | null;
|
|
14
|
+
logoUrl?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface NftAsset {
|
|
17
|
+
id: string;
|
|
18
|
+
name: string;
|
|
19
|
+
collection: string;
|
|
20
|
+
chain: SupportedChain;
|
|
21
|
+
contractAddress: string;
|
|
22
|
+
tokenId: string;
|
|
23
|
+
imageUrl?: string;
|
|
24
|
+
floorPriceUsd?: number;
|
|
25
|
+
}
|
|
26
|
+
export interface DefiPosition {
|
|
27
|
+
protocol: string;
|
|
28
|
+
protocolLogoUrl?: string;
|
|
29
|
+
chain: SupportedChain;
|
|
30
|
+
type: 'lending' | 'staking' | 'liquidity' | 'farming' | 'vesting' | 'other';
|
|
31
|
+
assets: Array<{
|
|
32
|
+
symbol: string;
|
|
33
|
+
amount: number;
|
|
34
|
+
valueUsd: number | null;
|
|
35
|
+
}>;
|
|
36
|
+
totalValueUsd: number | null;
|
|
37
|
+
healthFactor?: number;
|
|
38
|
+
}
|
|
39
|
+
export interface Transaction {
|
|
40
|
+
id: string;
|
|
41
|
+
hash: string;
|
|
42
|
+
chain: SupportedChain;
|
|
43
|
+
timestamp: number;
|
|
44
|
+
type: 'send' | 'receive' | 'swap' | 'approve' | 'contract' | 'other';
|
|
45
|
+
status: 'success' | 'failed' | 'pending';
|
|
46
|
+
from: string;
|
|
47
|
+
to: string;
|
|
48
|
+
valueUsd?: number;
|
|
49
|
+
fee?: {
|
|
50
|
+
amount: number;
|
|
51
|
+
symbol: string;
|
|
52
|
+
valueUsd?: number;
|
|
53
|
+
};
|
|
54
|
+
tokens?: Array<{
|
|
55
|
+
symbol: string;
|
|
56
|
+
amount: number;
|
|
57
|
+
direction: 'in' | 'out';
|
|
58
|
+
valueUsd?: number;
|
|
59
|
+
}>;
|
|
60
|
+
}
|
|
61
|
+
export interface TokenPrice {
|
|
62
|
+
id: string;
|
|
63
|
+
symbol: string;
|
|
64
|
+
name: string;
|
|
65
|
+
priceUsd: number;
|
|
66
|
+
priceChange1h?: number;
|
|
67
|
+
priceChange24h?: number;
|
|
68
|
+
priceChange7d?: number;
|
|
69
|
+
priceChange30d?: number;
|
|
70
|
+
marketCap?: number;
|
|
71
|
+
marketCapRank?: number;
|
|
72
|
+
volume24h?: number;
|
|
73
|
+
circulatingSupply?: number;
|
|
74
|
+
totalSupply?: number;
|
|
75
|
+
maxSupply?: number;
|
|
76
|
+
ath?: number;
|
|
77
|
+
athDate?: string;
|
|
78
|
+
athChangePercent?: number;
|
|
79
|
+
atl?: number;
|
|
80
|
+
atlDate?: string;
|
|
81
|
+
atlChangePercent?: number;
|
|
82
|
+
lastUpdated?: string;
|
|
83
|
+
logoUrl?: string;
|
|
84
|
+
}
|
|
85
|
+
export interface MarketOverview {
|
|
86
|
+
totalMarketCap: number;
|
|
87
|
+
totalVolume24h: number;
|
|
88
|
+
btcDominance: number;
|
|
89
|
+
ethDominance?: number;
|
|
90
|
+
marketCapChange24h?: number;
|
|
91
|
+
trending?: Array<{
|
|
92
|
+
id: string;
|
|
93
|
+
symbol: string;
|
|
94
|
+
name: string;
|
|
95
|
+
priceChange24h?: number;
|
|
96
|
+
marketCapRank?: number;
|
|
97
|
+
}>;
|
|
98
|
+
}
|
|
99
|
+
export interface CexBalance {
|
|
100
|
+
exchange: 'coinbase' | 'binance';
|
|
101
|
+
asset: string;
|
|
102
|
+
free: number;
|
|
103
|
+
locked: number;
|
|
104
|
+
total: number;
|
|
105
|
+
valueUsd?: number;
|
|
106
|
+
}
|
|
107
|
+
export interface CexTrade {
|
|
108
|
+
exchange: 'coinbase' | 'binance';
|
|
109
|
+
id: string;
|
|
110
|
+
symbol: string;
|
|
111
|
+
side: 'buy' | 'sell';
|
|
112
|
+
price: number;
|
|
113
|
+
quantity: number;
|
|
114
|
+
total: number;
|
|
115
|
+
fee?: number;
|
|
116
|
+
feeAsset?: string;
|
|
117
|
+
timestamp: number;
|
|
118
|
+
orderId?: string;
|
|
119
|
+
}
|
|
120
|
+
export interface PolymarketMarket {
|
|
121
|
+
id: string;
|
|
122
|
+
question: string;
|
|
123
|
+
description?: string;
|
|
124
|
+
endDate?: string;
|
|
125
|
+
volume: number;
|
|
126
|
+
liquidity: number;
|
|
127
|
+
outcomes: Array<{
|
|
128
|
+
name: string;
|
|
129
|
+
price: number;
|
|
130
|
+
}>;
|
|
131
|
+
category?: string;
|
|
132
|
+
slug?: string;
|
|
133
|
+
}
|
|
134
|
+
export type BalanceResult = {
|
|
135
|
+
success: true;
|
|
136
|
+
balances: TokenBalance[];
|
|
137
|
+
totalValueUsd: number;
|
|
138
|
+
} | {
|
|
139
|
+
success: false;
|
|
140
|
+
error: string;
|
|
141
|
+
};
|
|
142
|
+
export type NftResult = {
|
|
143
|
+
success: true;
|
|
144
|
+
nfts: NftAsset[];
|
|
145
|
+
totalEstimatedValueUsd?: number;
|
|
146
|
+
} | {
|
|
147
|
+
success: false;
|
|
148
|
+
error: string;
|
|
149
|
+
};
|
|
150
|
+
export type DefiResult = {
|
|
151
|
+
success: true;
|
|
152
|
+
positions: DefiPosition[];
|
|
153
|
+
totalValueUsd: number;
|
|
154
|
+
} | {
|
|
155
|
+
success: false;
|
|
156
|
+
error: string;
|
|
157
|
+
};
|
|
158
|
+
export type HistoryResult = {
|
|
159
|
+
success: true;
|
|
160
|
+
transactions: Transaction[];
|
|
161
|
+
nextCursor?: string;
|
|
162
|
+
} | {
|
|
163
|
+
success: false;
|
|
164
|
+
error: string;
|
|
165
|
+
};
|
|
166
|
+
export type PriceResult = {
|
|
167
|
+
success: true;
|
|
168
|
+
token: TokenPrice;
|
|
169
|
+
} | {
|
|
170
|
+
success: false;
|
|
171
|
+
error: string;
|
|
172
|
+
};
|
|
173
|
+
export type PricesResult = {
|
|
174
|
+
success: true;
|
|
175
|
+
tokens: TokenPrice[];
|
|
176
|
+
} | {
|
|
177
|
+
success: false;
|
|
178
|
+
error: string;
|
|
179
|
+
};
|
|
180
|
+
export type MarketResult = {
|
|
181
|
+
success: true;
|
|
182
|
+
market: MarketOverview;
|
|
183
|
+
} | {
|
|
184
|
+
success: false;
|
|
185
|
+
error: string;
|
|
186
|
+
};
|
|
187
|
+
export type CexBalanceResult = {
|
|
188
|
+
success: true;
|
|
189
|
+
balances: CexBalance[];
|
|
190
|
+
totalValueUsd: number;
|
|
191
|
+
} | {
|
|
192
|
+
success: false;
|
|
193
|
+
error: string;
|
|
194
|
+
};
|
|
195
|
+
export type CexHistoryResult = {
|
|
196
|
+
success: true;
|
|
197
|
+
trades: CexTrade[];
|
|
198
|
+
nextCursor?: string;
|
|
199
|
+
} | {
|
|
200
|
+
success: false;
|
|
201
|
+
error: string;
|
|
202
|
+
};
|
|
203
|
+
export type PolymarketResult = {
|
|
204
|
+
success: true;
|
|
205
|
+
markets: PolymarketMarket[];
|
|
206
|
+
} | {
|
|
207
|
+
success: false;
|
|
208
|
+
error: string;
|
|
209
|
+
};
|
|
210
|
+
export type PolymarketDetailResult = {
|
|
211
|
+
success: true;
|
|
212
|
+
market: PolymarketMarket;
|
|
213
|
+
} | {
|
|
214
|
+
success: false;
|
|
215
|
+
error: string;
|
|
216
|
+
};
|
|
217
|
+
export interface OnchainClientOptions {
|
|
218
|
+
debankApiKey?: string;
|
|
219
|
+
heliusApiKey?: string;
|
|
220
|
+
coinbaseApiKeyId?: string;
|
|
221
|
+
coinbaseApiKeySecret?: string;
|
|
222
|
+
binanceApiKey?: string;
|
|
223
|
+
binanceApiSecret?: string;
|
|
224
|
+
coingeckoApiKey?: string;
|
|
225
|
+
coinmarketcapApiKey?: string;
|
|
226
|
+
timeoutMs?: number;
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=onchain-client-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onchain-client-types.d.ts","sourceRoot":"","sources":["../../src/lib/onchain-client-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onchain-client-types.js","sourceRoot":"","sources":["../../src/lib/onchain-client-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type BinanceMethods } from './mixins/binance.js';
|
|
2
|
+
import { type CoinbaseMethods } from './mixins/coinbase.js';
|
|
3
|
+
import { type CoinGeckoMethods } from './mixins/coingecko.js';
|
|
4
|
+
import { type CoinMarketCapMethods } from './mixins/coinmarketcap.js';
|
|
5
|
+
import { type DeBankMethods } from './mixins/debank.js';
|
|
6
|
+
import { type HeliusMethods } from './mixins/helius.js';
|
|
7
|
+
import { type PolymarketMethods } from './mixins/polymarket.js';
|
|
8
|
+
import type { AbstractConstructor } from './onchain-client-base.js';
|
|
9
|
+
import { OnchainClientBase } from './onchain-client-base.js';
|
|
10
|
+
type OnchainClientInstance = OnchainClientBase & CoinGeckoMethods & CoinMarketCapMethods & DeBankMethods & HeliusMethods & CoinbaseMethods & BinanceMethods & PolymarketMethods;
|
|
11
|
+
declare const MixedOnchainClient: AbstractConstructor<OnchainClientInstance>;
|
|
12
|
+
export declare class OnchainClient extends MixedOnchainClient {
|
|
13
|
+
}
|
|
14
|
+
export type { BalanceResult, CexBalance, CexBalanceResult, CexHistoryResult, CexTrade, ChainType, DefiPosition, DefiResult, EvmChain, HistoryResult, MarketOverview, MarketResult, NftAsset, NftResult, OnchainClientOptions, PolymarketDetailResult, PolymarketMarket, PolymarketResult, PriceResult, PricesResult, SupportedChain, TokenBalance, TokenPrice, Transaction, } from './onchain-client-types.js';
|
|
15
|
+
//# sourceMappingURL=onchain-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onchain-client.d.ts","sourceRoot":"","sources":["../../src/lib/onchain-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAe,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,KAAK,eAAe,EAAgB,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,KAAK,gBAAgB,EAAiB,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,KAAK,oBAAoB,EAAqB,MAAM,2BAA2B,CAAC;AACzF,OAAO,EAAE,KAAK,aAAa,EAAc,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,KAAK,aAAa,EAAc,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,KAAK,iBAAiB,EAAkB,MAAM,wBAAwB,CAAC;AAChF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,KAAK,qBAAqB,GAAG,iBAAiB,GAC5C,gBAAgB,GAChB,oBAAoB,GACpB,aAAa,GACb,aAAa,GACb,eAAe,GACf,cAAc,GACd,iBAAiB,CAAC;AAGpB,QAAA,MAAM,kBAAkB,EAEnB,mBAAmB,CAAC,qBAAqB,CAAC,CAAC;AAEhD,qBAAa,aAAc,SAAQ,kBAAkB;CAAG;AAGxD,YAAY,EACV,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,aAAa,EACb,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,UAAU,EACV,WAAW,GACZ,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { withBinance } from './mixins/binance.js';
|
|
2
|
+
import { withCoinbase } from './mixins/coinbase.js';
|
|
3
|
+
import { withCoinGecko } from './mixins/coingecko.js';
|
|
4
|
+
import { withCoinMarketCap } from './mixins/coinmarketcap.js';
|
|
5
|
+
import { withDeBank } from './mixins/debank.js';
|
|
6
|
+
import { withHelius } from './mixins/helius.js';
|
|
7
|
+
import { withPolymarket } from './mixins/polymarket.js';
|
|
8
|
+
import { OnchainClientBase } from './onchain-client-base.js';
|
|
9
|
+
// Compose all mixins
|
|
10
|
+
const MixedOnchainClient = withPolymarket(withBinance(withCoinbase(withHelius(withDeBank(withCoinMarketCap(withCoinGecko(OnchainClientBase)))))));
|
|
11
|
+
export class OnchainClient extends MixedOnchainClient {
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=onchain-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onchain-client.js","sourceRoot":"","sources":["../../src/lib/onchain-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAwB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAyB,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAA6B,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACzF,OAAO,EAAsB,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAsB,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAA0B,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAEhF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAW7D,qBAAqB;AACrB,MAAM,kBAAkB,GAAG,cAAc,CACvC,WAAW,CAAC,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,iBAAiB,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACzD,CAAC;AAEhD,MAAM,OAAO,aAAc,SAAQ,kBAAkB;CAAG"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export type OutputConfig = {
|
|
2
|
+
plain: boolean;
|
|
3
|
+
emoji: boolean;
|
|
4
|
+
color: boolean;
|
|
5
|
+
hyperlinks: boolean;
|
|
6
|
+
json: boolean;
|
|
7
|
+
};
|
|
8
|
+
export type StatusKind = 'ok' | 'warn' | 'err' | 'info' | 'hint';
|
|
9
|
+
export type LabelKind = 'url' | 'date' | 'wallet' | 'chain' | 'token' | 'price' | 'value' | 'change' | 'balance' | 'position' | 'exchange';
|
|
10
|
+
export declare function resolveOutputConfigFromArgv(argv: string[], env: NodeJS.ProcessEnv, isTty: boolean): OutputConfig;
|
|
11
|
+
export declare function resolveOutputConfigFromCommander(opts: {
|
|
12
|
+
plain?: boolean;
|
|
13
|
+
emoji?: boolean;
|
|
14
|
+
color?: boolean;
|
|
15
|
+
json?: boolean;
|
|
16
|
+
}, env: NodeJS.ProcessEnv, isTty: boolean): OutputConfig;
|
|
17
|
+
export declare function statusPrefix(kind: StatusKind, cfg: OutputConfig): string;
|
|
18
|
+
export declare function labelPrefix(kind: LabelKind, cfg: OutputConfig): string;
|
|
19
|
+
/**
|
|
20
|
+
* Wraps a URL in OSC 8 escape sequences to make it clickable in supported terminals.
|
|
21
|
+
* Falls back to plain text when not in a TTY or when hyperlinks are disabled.
|
|
22
|
+
*/
|
|
23
|
+
export declare function hyperlink(url: string, text?: string, cfg?: OutputConfig): string;
|
|
24
|
+
/**
|
|
25
|
+
* Format blockchain explorer URL
|
|
26
|
+
*/
|
|
27
|
+
export declare function getExplorerUrl(chain: string, type: 'address' | 'tx', value: string): string;
|
|
28
|
+
//# sourceMappingURL=output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AACjE,MAAM,MAAM,SAAS,GACjB,KAAK,GACL,MAAM,GACN,QAAQ,GACR,OAAO,GACP,OAAO,GACP,OAAO,GACP,OAAO,GACP,QAAQ,GACR,SAAS,GACT,UAAU,GACV,UAAU,CAAC;AAwBf,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,GAAG,YAAY,CAWhH;AAED,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,EAC3E,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,KAAK,EAAE,OAAO,GACb,YAAY,CAWd;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,GAAG,MAAM,CAQxE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,YAAY,GAAG,MAAM,CAQtE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,YAAY,GAAG,MAAM,CAQhF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAoB3F"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
const STATUS = {
|
|
2
|
+
ok: { emoji: '\u2705', text: 'OK:', plain: '[ok]' },
|
|
3
|
+
warn: { emoji: '\u26a0\ufe0f', text: 'Warning:', plain: '[warn]' },
|
|
4
|
+
err: { emoji: '\u274c', text: 'Error:', plain: '[err]' },
|
|
5
|
+
info: { emoji: '\u2139\ufe0f', text: 'Info:', plain: '[info]' },
|
|
6
|
+
hint: { emoji: '\u2139\ufe0f', text: 'Hint:', plain: '[hint]' },
|
|
7
|
+
};
|
|
8
|
+
const LABELS = {
|
|
9
|
+
url: { emoji: '\ud83d\udd17', text: 'URL:', plain: 'url:' },
|
|
10
|
+
date: { emoji: '\ud83d\udcc5', text: 'Date:', plain: 'date:' },
|
|
11
|
+
wallet: { emoji: '\ud83d\udc5b', text: 'Wallet:', plain: 'wallet:' },
|
|
12
|
+
chain: { emoji: '\u26d3\ufe0f', text: 'Chain:', plain: 'chain:' },
|
|
13
|
+
token: { emoji: '\ud83e\ude99', text: 'Token:', plain: 'token:' },
|
|
14
|
+
price: { emoji: '\ud83d\udcb2', text: 'Price:', plain: 'price:' },
|
|
15
|
+
value: { emoji: '\ud83d\udcb0', text: 'Value:', plain: 'value:' },
|
|
16
|
+
change: { emoji: '\ud83d\udcc8', text: 'Change:', plain: 'change:' },
|
|
17
|
+
balance: { emoji: '\ud83d\udcca', text: 'Balance:', plain: 'balance:' },
|
|
18
|
+
position: { emoji: '\ud83c\udfaf', text: 'Position:', plain: 'position:' },
|
|
19
|
+
exchange: { emoji: '\ud83c\udfdb\ufe0f', text: 'Exchange:', plain: 'exchange:' },
|
|
20
|
+
};
|
|
21
|
+
export function resolveOutputConfigFromArgv(argv, env, isTty) {
|
|
22
|
+
const hasNoColorEnv = Object.hasOwn(env, 'NO_COLOR') || env.TERM === 'dumb';
|
|
23
|
+
const defaultColor = isTty && !hasNoColorEnv;
|
|
24
|
+
const plain = argv.includes('--plain');
|
|
25
|
+
const json = argv.includes('--json');
|
|
26
|
+
const emoji = !plain && !json && !argv.includes('--no-emoji');
|
|
27
|
+
const color = !plain && !json && !argv.includes('--no-color') && defaultColor;
|
|
28
|
+
const hyperlinks = !plain && !json && isTty;
|
|
29
|
+
return { plain, emoji, color, hyperlinks, json };
|
|
30
|
+
}
|
|
31
|
+
export function resolveOutputConfigFromCommander(opts, env, isTty) {
|
|
32
|
+
const hasNoColorEnv = Object.hasOwn(env, 'NO_COLOR') || env.TERM === 'dumb';
|
|
33
|
+
const defaultColor = isTty && !hasNoColorEnv;
|
|
34
|
+
const plain = Boolean(opts.plain);
|
|
35
|
+
const json = Boolean(opts.json);
|
|
36
|
+
const emoji = !plain && !json && (opts.emoji ?? true);
|
|
37
|
+
const color = !plain && !json && (opts.color ?? true) && defaultColor;
|
|
38
|
+
const hyperlinks = !plain && !json && isTty;
|
|
39
|
+
return { plain, emoji, color, hyperlinks, json };
|
|
40
|
+
}
|
|
41
|
+
export function statusPrefix(kind, cfg) {
|
|
42
|
+
if (cfg.plain) {
|
|
43
|
+
return `${STATUS[kind].plain} `;
|
|
44
|
+
}
|
|
45
|
+
if (cfg.emoji) {
|
|
46
|
+
return `${STATUS[kind].emoji} `;
|
|
47
|
+
}
|
|
48
|
+
return `${STATUS[kind].text} `;
|
|
49
|
+
}
|
|
50
|
+
export function labelPrefix(kind, cfg) {
|
|
51
|
+
if (cfg.plain) {
|
|
52
|
+
return `${LABELS[kind].plain} `;
|
|
53
|
+
}
|
|
54
|
+
if (cfg.emoji) {
|
|
55
|
+
return `${LABELS[kind].emoji} `;
|
|
56
|
+
}
|
|
57
|
+
return `${LABELS[kind].text} `;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Wraps a URL in OSC 8 escape sequences to make it clickable in supported terminals.
|
|
61
|
+
* Falls back to plain text when not in a TTY or when hyperlinks are disabled.
|
|
62
|
+
*/
|
|
63
|
+
export function hyperlink(url, text, cfg) {
|
|
64
|
+
const displayText = text ?? url;
|
|
65
|
+
if (!cfg?.hyperlinks) {
|
|
66
|
+
return displayText;
|
|
67
|
+
}
|
|
68
|
+
const safeUrl = url.replaceAll('\x1b', '').replaceAll('\x07', '');
|
|
69
|
+
const safeText = displayText.replaceAll('\x1b', '').replaceAll('\x07', '');
|
|
70
|
+
return `\x1b]8;;${safeUrl}\x07${safeText}\x1b]8;;\x07`;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Format blockchain explorer URL
|
|
74
|
+
*/
|
|
75
|
+
export function getExplorerUrl(chain, type, value) {
|
|
76
|
+
const explorers = {
|
|
77
|
+
eth: 'https://etherscan.io',
|
|
78
|
+
bsc: 'https://bscscan.com',
|
|
79
|
+
polygon: 'https://polygonscan.com',
|
|
80
|
+
arb: 'https://arbiscan.io',
|
|
81
|
+
op: 'https://optimistic.etherscan.io',
|
|
82
|
+
avax: 'https://snowtrace.io',
|
|
83
|
+
base: 'https://basescan.org',
|
|
84
|
+
zksync: 'https://era.zksync.network',
|
|
85
|
+
linea: 'https://lineascan.build',
|
|
86
|
+
scroll: 'https://scrollscan.com',
|
|
87
|
+
blast: 'https://blastscan.io',
|
|
88
|
+
solana: 'https://solscan.io',
|
|
89
|
+
};
|
|
90
|
+
const baseUrl = explorers[chain] ?? explorers.eth;
|
|
91
|
+
const path = type === 'address' ? (chain === 'solana' ? 'account' : 'address') : 'tx';
|
|
92
|
+
return `${baseUrl}/${path}/${value}`;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ChainType } from '../onchain-client-types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Check if the address is a valid EVM address (0x prefixed, 40 hex chars)
|
|
4
|
+
*/
|
|
5
|
+
export declare function isEvmAddress(address: string): boolean;
|
|
6
|
+
/**
|
|
7
|
+
* Check if the address is a valid Solana address (base58, 32-44 chars)
|
|
8
|
+
*/
|
|
9
|
+
export declare function isSolanaAddress(address: string): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Detect the chain type based on address format
|
|
12
|
+
*/
|
|
13
|
+
export declare function detectChainType(address: string): ChainType | null;
|
|
14
|
+
/**
|
|
15
|
+
* Validate an address for a specific chain type
|
|
16
|
+
*/
|
|
17
|
+
export declare function validateAddress(address: string, chainType: ChainType): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Normalize EVM address to checksum format (lowercase for now)
|
|
20
|
+
*/
|
|
21
|
+
export declare function normalizeEvmAddress(address: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* Truncate address for display (0x1234...5678)
|
|
24
|
+
*/
|
|
25
|
+
export declare function truncateAddress(address: string, prefixLen?: number, suffixLen?: number): string;
|
|
26
|
+
//# sourceMappingURL=address.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/address.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAK5D;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAMxD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAQjE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAQ9E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAK3D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,SAAI,EAAE,SAAS,SAAI,GAAG,MAAM,CAKrF"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
const EVM_ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/;
|
|
2
|
+
const SOLANA_ADDRESS_REGEX = /^[1-9A-HJ-NP-Za-km-z]{32,44}$/;
|
|
3
|
+
/**
|
|
4
|
+
* Check if the address is a valid EVM address (0x prefixed, 40 hex chars)
|
|
5
|
+
*/
|
|
6
|
+
export function isEvmAddress(address) {
|
|
7
|
+
return EVM_ADDRESS_REGEX.test(address);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Check if the address is a valid Solana address (base58, 32-44 chars)
|
|
11
|
+
*/
|
|
12
|
+
export function isSolanaAddress(address) {
|
|
13
|
+
// Exclude EVM addresses that might match the pattern
|
|
14
|
+
if (address.startsWith('0x')) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
return SOLANA_ADDRESS_REGEX.test(address);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Detect the chain type based on address format
|
|
21
|
+
*/
|
|
22
|
+
export function detectChainType(address) {
|
|
23
|
+
if (isEvmAddress(address)) {
|
|
24
|
+
return 'evm';
|
|
25
|
+
}
|
|
26
|
+
if (isSolanaAddress(address)) {
|
|
27
|
+
return 'solana';
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Validate an address for a specific chain type
|
|
33
|
+
*/
|
|
34
|
+
export function validateAddress(address, chainType) {
|
|
35
|
+
if (chainType === 'evm') {
|
|
36
|
+
return isEvmAddress(address);
|
|
37
|
+
}
|
|
38
|
+
if (chainType === 'solana') {
|
|
39
|
+
return isSolanaAddress(address);
|
|
40
|
+
}
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Normalize EVM address to checksum format (lowercase for now)
|
|
45
|
+
*/
|
|
46
|
+
export function normalizeEvmAddress(address) {
|
|
47
|
+
if (!isEvmAddress(address)) {
|
|
48
|
+
return address;
|
|
49
|
+
}
|
|
50
|
+
return address.toLowerCase();
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Truncate address for display (0x1234...5678)
|
|
54
|
+
*/
|
|
55
|
+
export function truncateAddress(address, prefixLen = 6, suffixLen = 4) {
|
|
56
|
+
if (address.length <= prefixLen + suffixLen + 3) {
|
|
57
|
+
return address;
|
|
58
|
+
}
|
|
59
|
+
return `${address.slice(0, prefixLen)}...${address.slice(-suffixLen)}`;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=address.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"address.js","sourceRoot":"","sources":["../../../src/lib/utils/address.ts"],"names":[],"mappings":"AAEA,MAAM,iBAAiB,GAAG,qBAAqB,CAAC;AAChD,MAAM,oBAAoB,GAAG,+BAA+B,CAAC;AAE7D;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,OAAO,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,qDAAqD;IACrD,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,SAAoB;IACnE,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QACxB,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC;IAC3E,IAAI,OAAO,CAAC,MAAM,IAAI,SAAS,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC;QAChD,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format a USD value for display
|
|
3
|
+
*/
|
|
4
|
+
export declare function formatUsd(value: number | null | undefined, options?: {
|
|
5
|
+
compact?: boolean;
|
|
6
|
+
}): string;
|
|
7
|
+
/**
|
|
8
|
+
* Format a large USD value compactly (e.g., $1.2B, $500M, $12.5K)
|
|
9
|
+
*/
|
|
10
|
+
export declare function formatCompactUsd(value: number): string;
|
|
11
|
+
/**
|
|
12
|
+
* Format a percentage value for display
|
|
13
|
+
*/
|
|
14
|
+
export declare function formatPercent(value: number | null | undefined, options?: {
|
|
15
|
+
showSign?: boolean;
|
|
16
|
+
}): string;
|
|
17
|
+
/**
|
|
18
|
+
* Format a token amount for display
|
|
19
|
+
*/
|
|
20
|
+
export declare function formatTokenAmount(amount: number, options?: {
|
|
21
|
+
decimals?: number;
|
|
22
|
+
compact?: boolean;
|
|
23
|
+
}): string;
|
|
24
|
+
/**
|
|
25
|
+
* Format a large number compactly (e.g., 1.2B, 500M, 12.5K)
|
|
26
|
+
*/
|
|
27
|
+
export declare function formatCompactNumber(value: number): string;
|
|
28
|
+
/**
|
|
29
|
+
* Format a timestamp for display
|
|
30
|
+
*/
|
|
31
|
+
export declare function formatTimestamp(timestamp: number, options?: {
|
|
32
|
+
includeTime?: boolean;
|
|
33
|
+
}): string;
|
|
34
|
+
/**
|
|
35
|
+
* Format a relative time (e.g., "2 hours ago", "3 days ago")
|
|
36
|
+
*/
|
|
37
|
+
export declare function formatRelativeTime(timestamp: number): string;
|
|
38
|
+
/**
|
|
39
|
+
* Format chain name for display
|
|
40
|
+
*/
|
|
41
|
+
export declare function formatChainName(chain: string): string;
|
|
42
|
+
//# sourceMappingURL=formatters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/formatters.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAmBnG;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAkBtD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAOxG;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAuB5G;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAkBzD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAkB9F;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAqB5D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAiCrD"}
|