@flarenetwork/multichain-wallet-connector 0.0.1-rc.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.
@@ -0,0 +1,974 @@
1
+ import { Account, Address, EIP1193Provider, PublicClient, RpcError, WalletClient } from "viem";
2
+ import { Client, SubmittableTransaction } from "xrpl";
3
+ import Xrp from "@ledgerhq/hw-app-xrp";
4
+ import UniversalProvider from "@walletconnect/universal-provider";
5
+ import { Xumm } from "xumm";
6
+ import * as _xstate_store0 from "@xstate/store";
7
+ import { ExtractEvents, Subscription } from "@xstate/store";
8
+ import { createBrowserInspector } from "@statelyai/inspect";
9
+
10
+ //#region src/core/shared/type-utils.d.ts
11
+ type NonEmptyArray<T> = [T, ...T[]];
12
+ //#endregion
13
+ //#region src/core/chains/chain.constants.d.ts
14
+ declare const CAIP2_NAMESPACES: {
15
+ readonly eip155: "eip155";
16
+ readonly xrpl: "xrpl";
17
+ readonly bip122: "bip122";
18
+ };
19
+ declare const CAIP2: {
20
+ readonly eip155: {
21
+ readonly "1": "Ethereum Mainnet";
22
+ readonly "11155111": "Ethereum Sepolia";
23
+ readonly "14": "Flare Mainnet";
24
+ readonly "16": "Flare Testnet Coston";
25
+ readonly "114": "Flare Testnet Coston2";
26
+ readonly "19": "Songbird Canary-Network";
27
+ };
28
+ readonly xrpl: {
29
+ readonly "0": "XRP Ledger Mainnet";
30
+ readonly "1": "XRP Ledger Testnet";
31
+ };
32
+ readonly bip122: {
33
+ readonly "1a91e3dace36e2be3bf030a65679fe821": "Dogecoin Mainnet";
34
+ };
35
+ };
36
+ //#endregion
37
+ //#region src/core/chains/chain.types.d.ts
38
+ type InferCaip2FromReferences<T> = { [N in keyof T]: { [R in keyof T[N]]: `${N & string}:${R & string}` }[keyof T[N]] }[keyof T];
39
+ type Caip2 = InferCaip2FromReferences<typeof CAIP2>;
40
+ type Caip2Namespace = keyof typeof CAIP2_NAMESPACES;
41
+ type ExtractNamespace<C extends Caip2> = C extends `${infer N}:${string}` ? N : never;
42
+ type GetChainName<C extends Caip2> = C extends `${infer N}:${infer R}` ? N extends keyof typeof CAIP2 ? R extends keyof (typeof CAIP2)[N] ? (typeof CAIP2)[N][R] : never : never : never;
43
+ interface BaseChain<C extends Caip2 = Caip2> {
44
+ caip2: C;
45
+ name: GetChainName<C>;
46
+ namespace: ExtractNamespace<C>;
47
+ nativeCurrency: {
48
+ name: string;
49
+ symbol: string;
50
+ decimals: number;
51
+ };
52
+ rpcUrls: NonEmptyArray<string>;
53
+ isEvm: boolean;
54
+ blockExplorerUrls: NonEmptyArray<string>;
55
+ ledgerHrp?: string;
56
+ bip44Part: number;
57
+ testnet: boolean;
58
+ }
59
+ type EvmChain<ID = string, HEX = string> = BaseChain<Extract<Caip2, `eip155:${string}`>> & {
60
+ evmChain: {
61
+ id: ID;
62
+ hex: HEX;
63
+ };
64
+ isEvm: true;
65
+ };
66
+ type NonEvmChain = BaseChain<Exclude<Caip2, `eip155:${string}`>> & {
67
+ isEvm: false;
68
+ };
69
+ type XrplChain = BaseChain<XRPlCaip2> & {
70
+ isEvm: false;
71
+ };
72
+ type Chain = EvmChain | NonEvmChain;
73
+ type ChainConfig = { [K in Caip2]: K extends `eip155:${string}` ? EvmChain & {
74
+ caip2: K;
75
+ } : NonEvmChain & {
76
+ caip2: K;
77
+ } };
78
+ type NamespaceFilter<T, NAMESPACE extends string> = T extends `${NAMESPACE}:${string}` ? T : never;
79
+ type Eip155Caip2 = NamespaceFilter<Caip2, "eip155">;
80
+ type XRPlCaip2 = NamespaceFilter<Caip2, "xrpl">;
81
+ //#endregion
82
+ //#region src/core/wallets/wallet-registry.d.ts
83
+ declare const walletRegistry: {
84
+ readonly metamask: {
85
+ readonly label: "MetaMask";
86
+ readonly chains: Eip155Caip2[];
87
+ readonly canConnect: "single-at-once";
88
+ };
89
+ readonly "wallet-connect": {
90
+ readonly label: "WalletConnect";
91
+ readonly chains: readonly [...Eip155Caip2[], "xrpl:0", "xrpl:1"];
92
+ readonly canConnect: "all-at-once";
93
+ };
94
+ readonly ledger: {
95
+ readonly label: "Ledger";
96
+ readonly chains: readonly ["eip155:1", "eip155:11155111", "eip155:14", "eip155:16", "eip155:114", "eip155:19", "xrpl:0", "xrpl:1"];
97
+ readonly canConnect: "single-at-once";
98
+ };
99
+ readonly xaman: {
100
+ readonly label: "Xaman";
101
+ readonly chains: readonly ["xrpl:0", "xrpl:1"];
102
+ readonly canConnect: "single-at-once";
103
+ };
104
+ readonly dcent: {
105
+ readonly label: "D'CENT";
106
+ readonly chains: readonly ["xrpl:0", "xrpl:1"];
107
+ readonly canConnect: "single-at-once";
108
+ };
109
+ };
110
+ //#endregion
111
+ //#region src/core/wallets/wallet.types.d.ts
112
+ type WalletType = keyof typeof walletRegistry;
113
+ type WalletSupportForChain = { [K in WalletType]: {
114
+ chains: (typeof walletRegistry)[K]["chains"];
115
+ canConnect: (typeof walletRegistry)[K]["canConnect"];
116
+ } };
117
+ type WalletSupportedChainMap = WalletSupportForChain;
118
+ type SupportedWalletChains<TYPE extends WalletType> = WalletSupportedChainMap[TYPE]["chains"] extends readonly (infer Item)[] ? NonEmptyArray<Item> : never;
119
+ type ValidWalletsForChain<T extends Caip2> = { [K in WalletType]: T extends SupportedWalletChains<K>[number] ? K : never }[WalletType];
120
+ //#endregion
121
+ //#region src/core/stores/wallet-store/wallet-store.d.ts
122
+ type WalletConnectionState = "disconnected" | "connecting" | "connected" | "disconnecting" | "error";
123
+ interface WalletErrorState {
124
+ code: number | string;
125
+ message: string;
126
+ }
127
+ type WalletAddressState<T extends WalletType = WalletType> = Extract<{ [K in WalletType]: {
128
+ type: K;
129
+ address: string;
130
+ } & {
131
+ isEvm: boolean;
132
+ caip2: Caip2;
133
+ } }[WalletType], {
134
+ type: T;
135
+ }>;
136
+ interface WalletState {
137
+ connectionState: WalletConnectionState;
138
+ activeAddress: string | undefined;
139
+ availableAddresses: Array<WalletAddressState>;
140
+ caip2: Caip2 | undefined;
141
+ error: WalletErrorState | undefined;
142
+ }
143
+ type WalletStoreEvents = {
144
+ startConnecting: Record<never, never>;
145
+ connectionEstablished: {
146
+ activeAddress: string;
147
+ availableAddresses: Array<WalletAddressState>;
148
+ caip2: Caip2;
149
+ };
150
+ connectionRestored: {
151
+ activeAddress: string;
152
+ availableAddresses: Array<WalletAddressState>;
153
+ caip2: Caip2;
154
+ };
155
+ error: {
156
+ error: WalletErrorState;
157
+ };
158
+ startDisconnecting: Record<never, never>;
159
+ disconnected: Record<never, never>;
160
+ chainChanged: {
161
+ caip2: Caip2;
162
+ };
163
+ addressChanged: {
164
+ activeAddress: string;
165
+ availableAddresses: Array<WalletAddressState>;
166
+ };
167
+ };
168
+ type WalletStoreEmittedEvents = {
169
+ walletConnected: {
170
+ activeAddress: string;
171
+ availableAddresses: Array<WalletAddressState>;
172
+ caip2: Caip2;
173
+ walletType: WalletType;
174
+ isReconnect: boolean;
175
+ };
176
+ walletDisconnected: {
177
+ walletType: WalletType;
178
+ };
179
+ walletError: {
180
+ error: WalletErrorState;
181
+ walletType: WalletType;
182
+ };
183
+ walletChainChanged: {
184
+ caip2: Caip2;
185
+ walletType: WalletType;
186
+ };
187
+ walletAddressChanged: {
188
+ activeAddress: string;
189
+ walletType: WalletType;
190
+ };
191
+ };
192
+ type WalletEmittedEvent = ExtractEvents<WalletStoreEmittedEvents>;
193
+ declare const createWalletStore: (walletType: WalletType) => _xstate_store0.Store<WalletState, WalletStoreEvents, ExtractEvents<WalletStoreEmittedEvents>>;
194
+ type WalletStore = ReturnType<typeof createWalletStore>;
195
+ //#endregion
196
+ //#region src/core/config/config-types.d.ts
197
+ interface ChainOverride {
198
+ rpcUrls?: string[];
199
+ blockExplorerUrls?: string[];
200
+ }
201
+ interface ResolvedWalletConfig<W extends WalletType = WalletType> {
202
+ readonly walletType: W;
203
+ readonly chains: Readonly<ChainConfig>;
204
+ readonly evmHexMap: ReadonlyMap<string, Eip155Caip2>;
205
+ getChain<C extends Caip2>(caip2: C): ChainConfig[C];
206
+ getEvmChain(caip2: Eip155Caip2): EvmChain;
207
+ getXrplChain(caip2: XRPlCaip2): XrplChain;
208
+ getRpcUrl(caip2: Caip2): string;
209
+ getSupportedChains(): Caip2[];
210
+ }
211
+ interface WalletMetadata {
212
+ name: string;
213
+ url: string;
214
+ description?: string;
215
+ icons?: string[];
216
+ }
217
+ interface WalletOptions {
218
+ metadata?: WalletMetadata;
219
+ chainOverrides?: Partial<Record<Caip2, ChainOverride>>;
220
+ }
221
+ interface MetaMaskWalletOptions extends WalletOptions {}
222
+ interface WalletConnectWalletOptions extends WalletOptions {
223
+ projectId: string;
224
+ }
225
+ interface LedgerWalletOptions extends WalletOptions {}
226
+ interface XamanWalletOptions extends WalletOptions {
227
+ apiKey: string;
228
+ }
229
+ interface DcentWalletOptions extends WalletOptions {}
230
+ interface WalletOptionsMap {
231
+ metamask: MetaMaskWalletOptions;
232
+ "wallet-connect": WalletConnectWalletOptions;
233
+ ledger: LedgerWalletOptions;
234
+ xaman: XamanWalletOptions;
235
+ dcent: DcentWalletOptions;
236
+ }
237
+ interface ConnectEvent {
238
+ walletType: WalletType;
239
+ caip2: Caip2;
240
+ address: string;
241
+ availableAddresses: WalletAddressState[];
242
+ isReconnect: boolean;
243
+ }
244
+ interface DisconnectEvent {
245
+ walletType: WalletType;
246
+ }
247
+ interface ChainChangedEvent {
248
+ walletType: WalletType;
249
+ caip2: Caip2;
250
+ }
251
+ interface AccountChangedEvent {
252
+ walletType: WalletType;
253
+ address: string;
254
+ }
255
+ interface ErrorEvent {
256
+ walletType: WalletType;
257
+ error: Error;
258
+ }
259
+ interface MultiChainEvents {
260
+ onConnect?: (event: ConnectEvent) => void;
261
+ onDisconnect?: (event: DisconnectEvent) => void;
262
+ onChainChanged?: (event: ChainChangedEvent) => void;
263
+ onAccountChanged?: (event: AccountChangedEvent) => void;
264
+ onError?: (event: ErrorEvent) => void;
265
+ }
266
+ interface MultiChainOptions {
267
+ chainOverrides?: Partial<Record<Caip2, ChainOverride>>;
268
+ wallets: { [W in WalletType]?: WalletOptionsMap[W] };
269
+ events?: MultiChainEvents;
270
+ }
271
+ //#endregion
272
+ //#region src/core/shared/bip44.d.ts
273
+ declare class Bip44 {
274
+ private readonly _purpose;
275
+ private readonly _coinType;
276
+ private readonly _account;
277
+ private readonly _change;
278
+ private readonly _addressIndex;
279
+ constructor(path: LedgerDerivationPath | LedgerDerivationPathNoMaster);
280
+ get purpose(): number;
281
+ get coinType(): number;
282
+ get account(): number;
283
+ get change(): 0 | 1;
284
+ get addressIndex(): number;
285
+ /**
286
+ * Generate paginated BIP44 paths.
287
+ * - bip44 standard: m/44'/coin'/0'/0/i — increments address index
288
+ * - Ledger Live: m/44'/coin'/i'/0/0 — increments account
289
+ */
290
+ static getPaginatedBip44s({
291
+ from,
292
+ to,
293
+ ledgerHDStandard,
294
+ caip2
295
+ }: {
296
+ from: number;
297
+ to: number;
298
+ ledgerHDStandard: LedgerHDStandard;
299
+ caip2: Caip2;
300
+ }): LedgerPaginatedBip44;
301
+ static fromCaip2ToCoinType(caip2: Caip2): number;
302
+ static fromCaip2(caip2: Caip2, account?: number, change?: 0 | 1, addressIndex?: number): Bip44;
303
+ static fromCoin(coinType: number, account?: number, change?: 0 | 1, addressIndex?: number): Bip44;
304
+ static bitcoin(account?: number, change?: 0 | 1, addressIndex?: number): Bip44;
305
+ static ethereum(account?: number, change?: 0 | 1, addressIndex?: number): Bip44;
306
+ static ledgerLiveEthereum(accountIndex?: number): Bip44;
307
+ getIndexForStandard(standard: LedgerHDStandard): number;
308
+ isChangeAddress(): boolean;
309
+ isReceivingAddress(): boolean;
310
+ getFullPath(): LedgerDerivationPath;
311
+ getPathWithoutMaster(): LedgerDerivationPathNoMaster;
312
+ toPathArray(): number[];
313
+ deriveFromAddressIndex(newAddressIndex: number): Bip44;
314
+ nextAddress(standard?: LedgerHDStandard): Bip44;
315
+ toReceivingAddress(addressIndex?: number): Bip44;
316
+ toChangeAddress(addressIndex?: number): Bip44;
317
+ deriveAccount(accountIndex: number): Bip44;
318
+ toString(): string;
319
+ getNextPaginatedBip44s(caip2: Caip2, ledgerHDStandard: LedgerHDStandard): LedgerPaginatedBip44;
320
+ isValidCaip2(caip2: Caip2): boolean;
321
+ private parseComponent;
322
+ private hardenedValue;
323
+ }
324
+ //#endregion
325
+ //#region src/core/connectors/ledger/ledger.types.d.ts
326
+ /** Chain type for Ledger-supported chains */
327
+ type LedgerCaip2 = SupportedWalletChains<"ledger">[number];
328
+ type LedgerDerivationPathNoMaster = `44'/${number}'/${number}'/${0 | 1}/${number}`;
329
+ type LedgerDerivationPath = `m/${LedgerDerivationPathNoMaster}`;
330
+ type LedgerHDStandard = "bip44" | "ledgerLive";
331
+ interface LedgerPaginatedBip44 {
332
+ paths: Array<Bip44>;
333
+ from: number;
334
+ to: number;
335
+ ledgerHDStandard: LedgerHDStandard;
336
+ }
337
+ interface CreateLedgerClientArgs {
338
+ app: LedgerApp;
339
+ caip2: LedgerCaip2;
340
+ bip44: Bip44;
341
+ }
342
+ interface LedgerConnectOptions {
343
+ bip44: Bip44;
344
+ ledgerHDStandard: LedgerHDStandard;
345
+ }
346
+ interface LedgerComputedAddress {
347
+ address: string;
348
+ publicKey?: string;
349
+ bip44: Bip44;
350
+ }
351
+ //#endregion
352
+ //#region src/core/connectors/ledger/apps/ledger-app.d.ts
353
+ interface LedgerApp {
354
+ getComputedAddress: (bip44: Bip44, hrp?: string) => Promise<LedgerComputedAddress>;
355
+ getComputedAddresses: (bip44: Array<Bip44>, hrp?: string) => Promise<Array<LedgerComputedAddress>>;
356
+ }
357
+ //#endregion
358
+ //#region src/core/clients/client-types.d.ts
359
+ interface ChainClient {
360
+ getBalance: (address: string) => Promise<bigint | number>;
361
+ onDestroy: () => Promise<void>;
362
+ getCaip2: () => Promise<Caip2>;
363
+ }
364
+ interface LedgerClient<APP extends LedgerApp = LedgerApp> extends ChainClient {
365
+ getLedgerApp: () => APP;
366
+ }
367
+ //#endregion
368
+ //#region src/core/clients/base-evm-client.d.ts
369
+ declare abstract class BaseEvmClient implements ChainClient {
370
+ protected readonly chainConfig: Chain;
371
+ constructor(chainConfig: Chain);
372
+ getCaip2(): Promise<Caip2>;
373
+ abstract getBalance(address: string): Promise<bigint | number>;
374
+ onDestroy(): Promise<void>;
375
+ }
376
+ //#endregion
377
+ //#region src/core/clients/evm/evm-client.d.ts
378
+ /**
379
+ * EVM chain client.
380
+ * Provides Viem public and wallet clients for EVM chain interactions.
381
+ */
382
+ declare class EvmClient extends BaseEvmClient {
383
+ private readonly publicClient;
384
+ private readonly walletClient;
385
+ constructor(chainConfig: EvmChain, publicClient: PublicClient, walletClient: WalletClient);
386
+ /**
387
+ * Create an EVM client from chain config and provider.
388
+ */
389
+ static create(chainConfig: EvmChain, provider: EIP1193Provider): EvmClient;
390
+ /**
391
+ * Create an EVM client with HTTP transport (for read-only operations).
392
+ */
393
+ static createReadOnly(chainConfig: EvmChain): EvmClient;
394
+ getPublicClient(): PublicClient;
395
+ getWalletClient(): WalletClient;
396
+ getAccount(): Promise<Account | Address>;
397
+ /**
398
+ * Get balance for an address in wei.
399
+ */
400
+ getBalance(address: string): Promise<bigint>;
401
+ /**
402
+ * Get the EVM chain config.
403
+ */
404
+ get evmChainConfig(): EvmChain;
405
+ }
406
+ //#endregion
407
+ //#region src/core/connectors/dcent/dcent.types.d.ts
408
+ interface DcentWalletInfo {
409
+ name: string;
410
+ icon: string;
411
+ version: string;
412
+ chainId: string;
413
+ }
414
+ interface DcentXrplProvider {
415
+ getWalletInfo(): Promise<DcentWalletInfo>;
416
+ request<T>(args: {
417
+ method: string;
418
+ params?: unknown[] | object;
419
+ }): Promise<T>;
420
+ }
421
+ declare global {
422
+ interface Window {
423
+ xrpl?: DcentXrplProvider;
424
+ }
425
+ } //# sourceMappingURL=dcent.types.d.ts.map
426
+ //#endregion
427
+ //#region src/core/connectors/connector-events.d.ts
428
+ interface ConnectedEventData {
429
+ address: string;
430
+ addresses: string[] | WalletAddressState[];
431
+ caip2: Caip2;
432
+ }
433
+ interface AddressChangedEventData {
434
+ address: string;
435
+ addresses: string[] | WalletAddressState[];
436
+ caip2: Caip2;
437
+ }
438
+ declare class ConnectorEventEmitter {
439
+ private readonly store;
440
+ private readonly walletType;
441
+ constructor(store: WalletStore, walletType: WalletType);
442
+ startConnecting(): void;
443
+ connected(data: ConnectedEventData): void;
444
+ reconnected(data: ConnectedEventData): void;
445
+ startDisconnecting(): void;
446
+ disconnected(): void;
447
+ chainChanged(caip2: Caip2): void;
448
+ addressChanged(data: AddressChangedEventData): void;
449
+ error(error: WalletErrorState): void;
450
+ private resolveAddresses;
451
+ }
452
+ //#endregion
453
+ //#region src/core/connectors/base-connector.d.ts
454
+ declare abstract class BaseConnector<W extends WalletType, TClient, TProvider extends Provider<W> = Provider<W>> implements Connector<W, TClient, TProvider> {
455
+ readonly walletType: W;
456
+ protected readonly events: ConnectorEventEmitter;
457
+ protected readonly store: WalletStore;
458
+ protected readonly config: ConnectorConfig<W>;
459
+ protected readonly resolvedConfig: ResolvedWalletConfig;
460
+ private initPromise;
461
+ private initResolved;
462
+ constructor(store: WalletStore, config: ConnectorConfig<W>);
463
+ get initialized(): boolean;
464
+ initialize(): Promise<void>;
465
+ /**
466
+ * Reset init state so next operation re-initializes the SDK.
467
+ * Required for MetaMask/Xaman (SDK terminates on disconnect).
468
+ * WalletConnect should NOT call this — its provider survives disconnect.
469
+ */
470
+ protected resetInitialization(): void;
471
+ protected abstract onInitialize(): Promise<void>;
472
+ protected emitError(error: unknown): void;
473
+ private wrapAsync;
474
+ abstract connect(...args: never[]): Promise<void>;
475
+ abstract disconnect(): Promise<void>;
476
+ abstract restoreConnection(): Promise<void>;
477
+ abstract switchChain(caip2: SupportedWalletChains<W>[number]): Promise<void>;
478
+ abstract getClient(): TClient;
479
+ abstract getProvider(): TProvider;
480
+ }
481
+ //#endregion
482
+ //#region src/core/clients/xrp/xrp-client.d.ts
483
+ interface XrpClient extends ChainClient {
484
+ sendTx: (tx: SubmittableTransaction) => Promise<string>;
485
+ }
486
+ //#endregion
487
+ //#region src/core/connectors/dcent/dcent-xrpl-client.d.ts
488
+ declare class DcentXrpClient implements XrpClient {
489
+ private readonly provider;
490
+ private readonly resolvedConfig;
491
+ constructor(provider: DcentXrplProvider, resolvedConfig: ResolvedWalletConfig);
492
+ sendTx(tx: SubmittableTransaction): Promise<string>;
493
+ getBalance(address: string): Promise<number>;
494
+ getCaip2(): Promise<XRPlCaip2>;
495
+ onDestroy(): Promise<void>;
496
+ }
497
+ //#endregion
498
+ //#region src/core/connectors/dcent/dcent-connector.d.ts
499
+ type DcentProvider$1 = DcentXrplProvider;
500
+ declare class DcentConnector extends BaseConnector<"dcent", DcentXrpClient, DcentProvider$1> {
501
+ private client;
502
+ private provider;
503
+ constructor(store: WalletStore, config: ConnectorConfig<"dcent">);
504
+ static isAvailable(): boolean;
505
+ static getDynamicLink(targetUrl: string, caip2: XRPlCaip2): string;
506
+ protected onInitialize(): Promise<void>;
507
+ connect(_chains?: SupportedWalletChains<"dcent">): Promise<void>;
508
+ disconnect(): Promise<void>;
509
+ restoreConnection(): Promise<void>;
510
+ switchChain(caip2: SupportedWalletChains<"dcent">[number]): Promise<void>;
511
+ getClient(): DcentXrpClient;
512
+ getProvider(): DcentProvider$1;
513
+ private get connectionState();
514
+ }
515
+ //#endregion
516
+ //#region src/core/connectors/ledger/clients/ledger-evm-client.d.ts
517
+ declare class LedgerEvmClient extends EvmClient implements LedgerClient {
518
+ private readonly _app;
519
+ constructor(chain: EvmChain, publicClient: PublicClient, walletClient: WalletClient, app: LedgerApp);
520
+ static createForLedger(args: CreateLedgerClientArgs, chain: EvmChain, account: Account): LedgerEvmClient;
521
+ getLedgerApp(): LedgerApp;
522
+ }
523
+ //#endregion
524
+ //#region src/core/connectors/ledger/apps/xrp/xrp-ledger-app.d.ts
525
+ declare class XrpLedgerApp extends Xrp implements LedgerApp {
526
+ getComputedAddress(bip44: Bip44, _hrp?: string): Promise<LedgerComputedAddress>;
527
+ getComputedAddresses(bip44s: Array<Bip44>, hrp?: string): Promise<Array<LedgerComputedAddress>>;
528
+ }
529
+ //#endregion
530
+ //#region src/core/clients/xrp/base-xrpl-client.d.ts
531
+ declare class BaseXrplClient extends Client {
532
+ onDestroy(): Promise<void>;
533
+ ensureConnected(): Promise<void>;
534
+ getBalance(address: string): Promise<number>;
535
+ }
536
+ //#endregion
537
+ //#region src/core/clients/xrp/xrpl-client.d.ts
538
+ declare class XrplClient extends BaseXrplClient {
539
+ private readonly chain;
540
+ constructor(chain: XrplChain);
541
+ getCaip2(): Promise<XRPlCaip2>;
542
+ onDestroy(): Promise<void>;
543
+ }
544
+ //#endregion
545
+ //#region src/core/connectors/ledger/clients/ledger-xrp-client.d.ts
546
+ declare class LedgerXrpClient extends XrplClient implements LedgerClient<XrpLedgerApp>, XrpClient {
547
+ private readonly args;
548
+ constructor(chain: XrplChain, args: CreateLedgerClientArgs);
549
+ getLedgerApp(): XrpLedgerApp;
550
+ private getAddressInfo;
551
+ sendTx(tx: SubmittableTransaction): Promise<string>;
552
+ }
553
+ //#endregion
554
+ //#region src/core/connectors/ledger/internal/ledger-session-manager.d.ts
555
+ interface LedgerSession {
556
+ caip2: LedgerCaip2;
557
+ bip44: Bip44;
558
+ hdStandard: LedgerHDStandard;
559
+ account: LedgerComputedAddress;
560
+ }
561
+ //#endregion
562
+ //#region src/core/connectors/ledger/ledger-connector.d.ts
563
+ declare class LedgerConnector extends BaseConnector<"ledger", LedgerClient, LedgerProvider> {
564
+ private readonly transportManager;
565
+ private readonly sessionManager;
566
+ private readonly clientFactory;
567
+ private readonly mutex;
568
+ private client;
569
+ constructor(store: WalletStore, config: ConnectorConfig<"ledger">);
570
+ protected onInitialize(): Promise<void>;
571
+ connect(chain: LedgerCaip2, options?: LedgerConnectOptions): Promise<void>;
572
+ disconnect(): Promise<void>;
573
+ restoreConnection(): Promise<void>;
574
+ switchChain(chain: LedgerCaip2): Promise<void>;
575
+ getSession(): LedgerSession | null;
576
+ getClient(): LedgerClient;
577
+ getProvider(): LedgerProvider;
578
+ fetchAddressesForSelection(chain: LedgerCaip2, paths: Bip44[]): Promise<LedgerComputedAddress[]>;
579
+ private performConnect;
580
+ private performRestore;
581
+ private establishConnection;
582
+ private handleDisconnect;
583
+ private requireApp;
584
+ }
585
+ //#endregion
586
+ //#region src/core/connectors/metamask/metamask-connector.d.ts
587
+ declare class MetaMaskConnector extends BaseConnector<"metamask", EvmClient, MetaMaskProvider> {
588
+ private sdk;
589
+ private provider;
590
+ private client;
591
+ protected onInitialize(): Promise<void>;
592
+ connect(chain: SupportedWalletChains<"metamask">[number]): Promise<void>;
593
+ disconnect(): Promise<void>;
594
+ restoreConnection(): Promise<void>;
595
+ switchChain(caip2: Eip155Caip2): Promise<void>;
596
+ getClient(): EvmClient;
597
+ getProvider(): MetaMaskProvider;
598
+ private onAccountsChanged;
599
+ private onChainChanged;
600
+ private createClient;
601
+ private addChain;
602
+ private getConnectionState;
603
+ private getCurrentCaip2;
604
+ }
605
+ //#endregion
606
+ //#region src/core/connectors/wallet-connect/clients/wallet-connect-xrpl-client.d.ts
607
+ declare class WalletConnectXrpClient extends XrplClient implements XrpClient {
608
+ provider: UniversalProvider;
609
+ constructor(chain: XrplChain, provider: UniversalProvider);
610
+ sendTx(tx: SubmittableTransaction): Promise<string>;
611
+ }
612
+ //#endregion
613
+ //#region src/core/connectors/wallet-connect/wallet-connect-connector.d.ts
614
+ /**
615
+ * WalletConnect connector using Reown AppKit for QR modal.
616
+ *
617
+ * - connect() opens AppKit first (spinner), then provider.connect() emits display_uri
618
+ * which auto-populates the QR in the modal. The empty display_uri handler is required.
619
+ * - disconnect() cleans up the WC session, but provider and AppKit survive —
620
+ * no re-initialization needed (unlike MetaMask/Xaman).
621
+ * - Only EVM chains are registered with AppKit (ChainNamespace doesn't include "xrpl").
622
+ * XRPL sessions still work fine without AppKit awareness.
623
+ */
624
+ declare class WalletConnectConnector extends BaseConnector<"wallet-connect", ChainClient, WalletConnectProvider> {
625
+ protected readonly config: WalletConnectConnectorConfig;
626
+ private provider;
627
+ private sessionManager;
628
+ private clientFactory;
629
+ private appKit;
630
+ private client;
631
+ constructor(store: WalletStore, config: WalletConnectConnectorConfig);
632
+ protected onInitialize(): Promise<void>;
633
+ connect(chains?: SupportedWalletChains<"wallet-connect"> | readonly Caip2[]): Promise<void>;
634
+ disconnect(): Promise<void>;
635
+ restoreConnection(): Promise<void>;
636
+ switchChain(caip2: SupportedWalletChains<"wallet-connect">[number]): Promise<void>;
637
+ getClient(): ChainClient;
638
+ getProvider(): WalletConnectProvider;
639
+ private registerProviderEvents;
640
+ private registerModalCloseHandler;
641
+ private onSessionCreated;
642
+ private onConnectionFailed;
643
+ private onProposalExpire;
644
+ private onAccountsChanged;
645
+ private onChainChanged;
646
+ private onDisconnect;
647
+ private buildAppKitNetworks;
648
+ private buildCustomRpcUrls;
649
+ private get connectionState();
650
+ private get storedCaip2();
651
+ }
652
+ //#endregion
653
+ //#region src/core/connectors/xaman/xaman-types.d.ts
654
+ interface XamanConfig {
655
+ apiKey: string;
656
+ }
657
+ //#endregion
658
+ //#region src/core/connectors/xaman/xaman-xrpl-client.d.ts
659
+ declare class XamanClient extends Xumm implements XrpClient {
660
+ private static readonly NETWORK_KEYS;
661
+ private readonly resolvedConfig;
662
+ constructor(config: XamanConfig, resolvedConfig: ResolvedWalletConfig);
663
+ sendTx(tx: SubmittableTransaction): Promise<string>;
664
+ getCaip2(): Promise<XRPlCaip2>;
665
+ onDestroy(): Promise<void>;
666
+ getBalance(address: string): Promise<number>;
667
+ getSimpleClient(): Promise<XrplClient>;
668
+ toCaip2Network(networkId: number | string): XRPlCaip2;
669
+ }
670
+ //#endregion
671
+ //#region src/core/connectors/xaman/xaman-connector.d.ts
672
+ declare class XamanConnector extends BaseConnector<"xaman", XamanClient, XamanProvider> {
673
+ protected readonly config: XamanConnectorConfig;
674
+ private client;
675
+ constructor(store: WalletStore, config: XamanConnectorConfig);
676
+ protected onInitialize(): Promise<void>;
677
+ /**
678
+ * Xaman doesn't support session restoration — authorize() is fire-and-forget,
679
+ * with state changes arriving via SDK events (ready, success, error, logout).
680
+ */
681
+ restoreConnection(): Promise<void>;
682
+ connect(_chains?: SupportedWalletChains<"xaman"> | readonly Caip2[]): Promise<void>;
683
+ disconnect(): Promise<void>;
684
+ switchChain(_caip2: SupportedWalletChains<"xaman">[number]): Promise<void>;
685
+ getClient(): XamanClient;
686
+ getProvider(): XamanProvider;
687
+ private onReady;
688
+ private onSuccess;
689
+ private onError;
690
+ private onLogout;
691
+ private onNetworkSwitch;
692
+ private isLoggedIn;
693
+ private get connectionState();
694
+ private get storedCaip2();
695
+ }
696
+ //#endregion
697
+ //#region src/core/connectors/connector-types.d.ts
698
+ type MetaMaskProvider = EIP1193Provider;
699
+ type WalletConnectProvider = UniversalProvider;
700
+ type XamanProvider = Xumm;
701
+ type LedgerProvider = "ledger-provider";
702
+ type DcentProvider = DcentXrplProvider;
703
+ interface ProviderMap {
704
+ metamask: MetaMaskProvider;
705
+ "wallet-connect": WalletConnectProvider;
706
+ ledger: LedgerProvider;
707
+ xaman: XamanProvider;
708
+ dcent: DcentProvider;
709
+ }
710
+ type Provider<W extends WalletType> = ProviderMap[W];
711
+ interface ClientMap {
712
+ metamask: EvmClient;
713
+ "wallet-connect": EvmClient | WalletConnectXrpClient;
714
+ ledger: LedgerEvmClient | LedgerXrpClient;
715
+ xaman: XamanClient;
716
+ dcent: DcentXrpClient;
717
+ }
718
+ type Client$1<W extends WalletType> = ClientMap[W];
719
+ interface Connector<W extends WalletType, TClient, TProvider = Provider<W>> {
720
+ readonly walletType: W;
721
+ initialize(): Promise<void>;
722
+ connect(...args: never[]): Promise<void>;
723
+ disconnect(): Promise<void>;
724
+ restoreConnection(): Promise<void>;
725
+ switchChain(caip2: SupportedWalletChains<W>[number]): Promise<void>;
726
+ getClient(): TClient;
727
+ getProvider(): TProvider;
728
+ }
729
+ interface ConnectorConfig<W extends WalletType = WalletType> {
730
+ walletType: W;
731
+ metadata: WalletMetadata;
732
+ resolvedConfig: ResolvedWalletConfig;
733
+ }
734
+ interface WalletConnectConnectorConfig extends ConnectorConfig<"wallet-connect"> {
735
+ projectId: string;
736
+ }
737
+ interface XamanConnectorConfig extends ConnectorConfig<"xaman"> {
738
+ apiKey: string;
739
+ }
740
+ type ConnectorTypeMap<W extends WalletType = WalletType> = Connector<W, Client$1<W>, Provider<W>>;
741
+ /**
742
+ * Maps wallet types to their concrete connector classes.
743
+ * Use this when you need the full connector API with specific connect signatures.
744
+ */
745
+ interface ConcreteConnectorMap {
746
+ metamask: MetaMaskConnector;
747
+ "wallet-connect": WalletConnectConnector;
748
+ ledger: LedgerConnector;
749
+ xaman: XamanConnector;
750
+ dcent: DcentConnector;
751
+ }
752
+ type ConcreteConnector<W extends WalletType> = ConcreteConnectorMap[W];
753
+ type ConnectWalletArgs = {
754
+ wallet: "wallet-connect";
755
+ chains: SupportedWalletChains<"wallet-connect">;
756
+ } | {
757
+ wallet: "metamask";
758
+ chain: Eip155Caip2;
759
+ } | {
760
+ wallet: "ledger";
761
+ chain: LedgerCaip2;
762
+ options?: LedgerConnectOptions;
763
+ } | {
764
+ wallet: "xaman";
765
+ } | {
766
+ wallet: "dcent";
767
+ };
768
+ type ChainSelectionMode = "single" | "multi" | null;
769
+ //#endregion
770
+ //#region src/core/stores/wallet-store/aggregate-wallet-store.d.ts
771
+ type AggregateWalletState<T extends WalletType = WalletType> = {
772
+ wallets: Record<T, WalletState>;
773
+ };
774
+ type AggregateWalletEvents = {
775
+ walletUpdated: {
776
+ walletType: WalletType;
777
+ context: WalletState;
778
+ };
779
+ };
780
+ declare const createAggregateWalletStore: <T extends WalletType>(stores: Map<T, WalletStore>) => _xstate_store0.Store<AggregateWalletState<T>, AggregateWalletEvents, never>;
781
+ type AggregateWalletStore<T extends WalletType = WalletType> = ReturnType<typeof createAggregateWalletStore<T>>;
782
+ //#endregion
783
+ //#region src/core/config/config-resolver.d.ts
784
+ declare class ConfigResolver {
785
+ private readonly globalOverrides;
786
+ private readonly walletOverrides;
787
+ private readonly walletOptions;
788
+ constructor(options: MultiChainOptions);
789
+ getWalletOptions<W extends WalletType>(walletType: W): WalletOptions | undefined;
790
+ resolveForWallet<W extends WalletType>(walletType: W): ResolvedWalletConfig<W>;
791
+ private resolveChain;
792
+ private static createResolvedConfig;
793
+ }
794
+ //#endregion
795
+ //#region src/core/multichain/multichain.d.ts
796
+ declare class MultiChain {
797
+ private readonly stores;
798
+ private readonly connectors;
799
+ private readonly aggregateStore;
800
+ private readonly configResolver;
801
+ private readonly events;
802
+ private subscriptions;
803
+ private mounted;
804
+ constructor(options: MultiChainOptions, inspector?: ReturnType<typeof createBrowserInspector>);
805
+ mount(): Promise<void>;
806
+ disconnect(walletType: WalletType): Promise<void>;
807
+ disconnectAll(): Promise<void>;
808
+ /**
809
+ * Connect a wallet with type-safe discriminated union arguments.
810
+ *
811
+ * Each wallet type has its own connection signature:
812
+ * - wallet-connect: { wallet: "wallet-connect", chains: [...] }
813
+ * - metamask: { wallet: "metamask", chain: "eip155:..." }
814
+ * - ledger: { wallet: "ledger", chain: "...", options?: {...} }
815
+ * - xaman: { wallet: "xaman" }
816
+ * - dcent: { wallet: "dcent" }
817
+ */
818
+ connect(args: ConnectWalletArgs): Promise<void>;
819
+ getAggregateStore(): AggregateWalletStore;
820
+ getWalletTypes(): WalletType[];
821
+ getConnector<W extends WalletType>(walletType: W): ConcreteConnector<W>;
822
+ onWalletEvent<K extends WalletEmittedEvent["type"]>(walletType: WalletType, eventType: K, callback: (event: WalletEmittedEvent & {
823
+ type: K;
824
+ }) => void): Subscription | undefined;
825
+ getConfigResolver(): ConfigResolver;
826
+ /** Check if any wallet is currently connected to a specific chain. */
827
+ isConnectedByCaip2(caip2: Caip2): boolean;
828
+ private registerGlobalListeners;
829
+ private registerAggregateSync;
830
+ }
831
+ //#endregion
832
+ //#region src/core/chains/chain.utils.d.ts
833
+ declare class ChainGuards {
834
+ static isRpcError(error: unknown): error is RpcError;
835
+ static isEvmCaip2(caip2: Caip2): caip2 is Eip155Caip2;
836
+ static isXrplCaip2(caip2: Caip2): caip2 is XRPlCaip2;
837
+ static isEvmChain(chain: BaseChain): chain is EvmChain;
838
+ static isXrplChain(chain: BaseChain): chain is BaseChain<NamespaceFilter<Caip2, "xrpl">>;
839
+ static isEvmNamespace: (namespace: Caip2Namespace) => namespace is "eip155";
840
+ }
841
+ //#endregion
842
+ //#region src/core/errors/error-codes.d.ts
843
+ /**
844
+ * Error codes for all connectors.
845
+ * Numbers as keys = duplicates impossible.
846
+ *
847
+ * Ranges:
848
+ * - 4000-4099: Common (all connectors)
849
+ * - 4100-4199: MetaMask
850
+ * - 4200-4299: Ledger
851
+ * - 4300-4399: WalletConnect
852
+ * - 4400-4499: Xaman
853
+ * - 4500-4599: D'CENT
854
+ */
855
+ declare const errorCodeMap: {
856
+ readonly 4001: "COMMON_USER_REJECTED";
857
+ readonly 4002: "COMMON_NOT_CONNECTED";
858
+ readonly 4003: "COMMON_CHAIN_NOT_CONFIGURED";
859
+ readonly 4004: "COMMON_CHAIN_NOT_SUPPORTED";
860
+ readonly 4005: "COMMON_FEATURE_NOT_SUPPORTED";
861
+ readonly 4006: "COMMON_CONNECTION_FAILED";
862
+ readonly 4007: "COMMON_UNKNOWN_CHAIN_ID";
863
+ readonly 4008: "COMMON_NO_ACCOUNTS";
864
+ readonly 4009: "COMMON_PROVIDER_ERROR";
865
+ readonly 4010: "COMMON_CONNECTION_IN_PROGRESS";
866
+ readonly 4100: "METAMASK_PROVIDER_NOT_FOUND";
867
+ readonly 4101: "METAMASK_CHAIN_NOT_ADDED";
868
+ readonly 4102: "METAMASK_NOT_INSTALLED";
869
+ readonly 4200: "LEDGER_DEVICE_LOCKED";
870
+ readonly 4201: "LEDGER_APP_NOT_OPEN";
871
+ readonly 4202: "LEDGER_WRONG_APP";
872
+ readonly 4203: "LEDGER_TRANSPORT_ERROR";
873
+ readonly 4204: "LEDGER_CONNECTION_FAILED";
874
+ readonly 4205: "LEDGER_TX_REJECTED";
875
+ readonly 4300: "WALLET_CONNECT_SESSION_EXPIRED";
876
+ readonly 4301: "WALLET_CONNECT_PAIRING_FAILED";
877
+ readonly 4302: "WALLET_CONNECT_SESSION_NOT_FOUND";
878
+ readonly 4303: "WALLET_CONNECT_PROVIDER_NOT_INITIALIZED";
879
+ readonly 4400: "XAMAN_SIGN_REJECTED";
880
+ readonly 4401: "XAMAN_QR_TIMEOUT";
881
+ readonly 4402: "XAMAN_SDK_NOT_READY";
882
+ readonly 4403: "XAMAN_AUTHORIZATION_FAILED";
883
+ readonly 4500: "DCENT_NOT_IN_BROWSER";
884
+ readonly 4501: "DCENT_SIGN_REJECTED";
885
+ };
886
+ type ErrorCodeMap = typeof errorCodeMap;
887
+ type CodeNumber = keyof ErrorCodeMap;
888
+ type CodeName = ErrorCodeMap[CodeNumber];
889
+ type ReverseErrorCodeMap = { readonly [K in CodeName]: CodeNumber };
890
+ declare const ErrorCode: ReverseErrorCodeMap;
891
+ type ErrorCodeKey = keyof typeof ErrorCode;
892
+ type CommonCode = Extract<ErrorCodeKey, `COMMON_${string}`>;
893
+ type MetaMaskCode = Extract<ErrorCodeKey, `METAMASK_${string}`>;
894
+ type LedgerCode = Extract<ErrorCodeKey, `LEDGER_${string}`>;
895
+ type WalletConnectCode = Extract<ErrorCodeKey, `WALLET_CONNECT_${string}`>;
896
+ type XamanCode = Extract<ErrorCodeKey, `XAMAN_${string}`>;
897
+ type DcentCode = Extract<ErrorCodeKey, `DCENT_${string}`>;
898
+ type MetaMaskErrorCode = CommonCode | MetaMaskCode;
899
+ type LedgerErrorCode = CommonCode | LedgerCode;
900
+ type WalletConnectErrorCode = CommonCode | WalletConnectCode;
901
+ type XamanErrorCode = CommonCode | XamanCode;
902
+ type DcentErrorCode = CommonCode | DcentCode;
903
+ //#endregion
904
+ //#region src/core/errors/wallet-error.d.ts
905
+ declare class WalletError extends Error {
906
+ readonly code: number;
907
+ readonly codeKey: ErrorCodeKey;
908
+ readonly walletType: WalletType;
909
+ readonly cause?: unknown;
910
+ constructor(walletType: WalletType, codeKey: ErrorCodeKey, cause?: unknown);
911
+ }
912
+ //#endregion
913
+ //#region src/core/connectors/dcent/dcent-error.d.ts
914
+ declare class DcentError extends WalletError {
915
+ readonly name = "DcentError";
916
+ constructor(code: DcentErrorCode, cause?: unknown);
917
+ static fromError(_error: unknown): DcentError | null;
918
+ }
919
+ //#endregion
920
+ //#region src/core/connectors/ledger/ledger-error.d.ts
921
+ declare class LedgerError extends WalletError {
922
+ readonly name = "LedgerError";
923
+ private static readonly TRANSPORT_MAPPINGS;
924
+ constructor(code: LedgerErrorCode, cause?: unknown);
925
+ /** Maps raw @ledgerhq transport errors to LedgerError. Returns null for unknown errors. */
926
+ static fromError(error: unknown): LedgerError | null;
927
+ }
928
+ //#endregion
929
+ //#region src/core/connectors/metamask/metamask-error.d.ts
930
+ declare class MetaMaskError extends WalletError {
931
+ readonly name = "MetaMaskError";
932
+ constructor(code: MetaMaskErrorCode, cause?: unknown);
933
+ static fromError(error: unknown): MetaMaskError | null;
934
+ }
935
+ //#endregion
936
+ //#region src/core/connectors/wallet-connect/wallet-connect-error.d.ts
937
+ declare class WalletConnectError extends WalletError {
938
+ readonly name = "WalletConnectError";
939
+ constructor(code: WalletConnectErrorCode, cause?: unknown);
940
+ static fromError(error: unknown): WalletConnectError | null;
941
+ }
942
+ //#endregion
943
+ //#region src/core/connectors/xaman/xaman-error.d.ts
944
+ declare class XamanError extends WalletError {
945
+ readonly name = "XamanError";
946
+ constructor(code: XamanErrorCode, cause?: unknown);
947
+ static fromError(_error: unknown): XamanError | null;
948
+ }
949
+ //#endregion
950
+ //#region src/core/errors/wallet-error-helper.d.ts
951
+ declare class WalletErrorHelper {
952
+ static isWalletError(error: unknown): error is WalletError;
953
+ static from(error: unknown, walletType: WalletType): WalletError | null;
954
+ }
955
+ //#endregion
956
+ //#region src/core/utils/utils.d.ts
957
+ /**
958
+ * Shortens an address for display (e.g., "0x1234...abcd").
959
+ * @param address - The full address string
960
+ * @param prefixLength - Number of characters to show at start (default: 6)
961
+ * @param suffixLength - Number of characters to show at end (default: 4)
962
+ */
963
+ declare function shortenAddress(address: string, prefixLength?: number, suffixLength?: number): string;
964
+ /** Type-safe `Object.keys()` that preserves key types. */
965
+ declare function objectKeys<T extends object>(obj: T): Array<keyof T>;
966
+ /** Type-safe `Object.values()` that preserves value types. */
967
+ declare function objectValues<T extends object>(obj: T): Array<T[keyof T]>;
968
+ /** Type-safe `Object.entries()` that preserves key and value types. */
969
+ declare function objectEntries<T extends object>(obj: T): Array<[keyof T, T[keyof T]]>;
970
+ /** Type-safe `Object.fromEntries()` that preserves key and value types. */
971
+ declare function objectFromEntries<K extends string, V>(entries: Array<[K, V]>): Record<K, V>;
972
+ //#endregion
973
+ export { ValidWalletsForChain as $, LedgerConnectOptions as A, ErrorEvent as B, LedgerSession as C, ChainClient as D, EvmClient as E, ChainChangedEvent as F, ResolvedWalletConfig as G, MetaMaskWalletOptions as H, ChainOverride as I, WalletOptions as J, WalletConnectWalletOptions as K, ConnectEvent as L, LedgerPaginatedBip44 as M, Bip44 as N, LedgerCaip2 as O, AccountChangedEvent as P, SupportedWalletChains as Q, DcentWalletOptions as R, ConnectorTypeMap as S, XrpClient as T, MultiChainEvents as U, LedgerWalletOptions as V, MultiChainOptions as W, WalletAddressState as X, XamanWalletOptions as Y, WalletState as Z, ConfigResolver as _, shortenAddress as a, EvmChain as at, ConnectWalletArgs as b, WalletConnectError as c, XrplChain as ct, DcentError as d, WalletType as et, WalletError as f, MultiChain as g, ChainGuards as h, objectValues as i, Eip155Caip2 as it, LedgerHDStandard as j, LedgerComputedAddress as k, MetaMaskError as l, ErrorCodeKey as m, objectFromEntries as n, Caip2 as nt, WalletErrorHelper as o, NonEvmChain as ot, ErrorCode as p, WalletMetadata as q, objectKeys as r, Chain as rt, XamanError as s, XRPlCaip2 as st, objectEntries as t, BaseChain as tt, LedgerError as u, ChainSelectionMode as v, DcentConnector as w, Connector as x, ConcreteConnector as y, DisconnectEvent as z };
974
+ //# sourceMappingURL=utils-C64Z4fWz.d.mts.map