@reclack/walletkit 0.0.0-stage → 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 +341 -2
- package/assets/backpack.webp +0 -0
- package/assets/berasig.webp +0 -0
- package/assets/bestwallet.webp +0 -0
- package/assets/bifrostwallet.webp +0 -0
- package/assets/binance.webp +0 -0
- package/assets/bitcoincom.webp +0 -0
- package/assets/bitget.webp +0 -0
- package/assets/bitpay.webp +0 -0
- package/assets/bitski.webp +0 -0
- package/assets/bitverse.webp +0 -0
- package/assets/blockchaincom.webp +0 -0
- package/assets/brave.webp +0 -0
- package/assets/bybit.webp +0 -0
- package/assets/clv.webp +0 -0
- package/assets/coin98.webp +0 -0
- package/assets/coinbase.webp +0 -0
- package/assets/compass.webp +0 -0
- package/assets/core.webp +0 -0
- package/assets/crypto_com.webp +0 -0
- package/assets/ctrl.webp +0 -0
- package/assets/dawn.webp +0 -0
- package/assets/desig.webp +0 -0
- package/assets/enkrypt.webp +0 -0
- package/assets/exodus.webp +0 -0
- package/assets/foxwallet.webp +0 -0
- package/assets/frame.webp +0 -0
- package/assets/frontier.webp +0 -0
- package/assets/gate.webp +0 -0
- package/assets/gemini.webp +0 -0
- package/assets/imtoken.webp +0 -0
- package/assets/iopay.webp +0 -0
- package/assets/kaia.webp +0 -0
- package/assets/kaikas.webp +0 -0
- package/assets/kraken.webp +0 -0
- package/assets/kresuswallet.webp +0 -0
- package/assets/ledger.webp +0 -0
- package/assets/magiceden.webp +0 -0
- package/assets/meco.webp +0 -0
- package/assets/metamask.webp +0 -0
- package/assets/mew.webp +0 -0
- package/assets/nest.webp +0 -0
- package/assets/nova.webp +0 -0
- package/assets/okto.webp +0 -0
- package/assets/okx.webp +0 -0
- package/assets/oneinch.webp +0 -0
- package/assets/onekey.webp +0 -0
- package/assets/phantom.webp +0 -0
- package/assets/rabby.webp +0 -0
- package/assets/rainbow.webp +0 -0
- package/assets/ramper.webp +0 -0
- package/assets/ready.webp +0 -0
- package/assets/ronin.webp +0 -0
- package/assets/safe.webp +0 -0
- package/assets/safepal.webp +0 -0
- package/assets/solflare.webp +0 -0
- package/assets/subwallet.webp +0 -0
- package/assets/taho.webp +0 -0
- package/assets/talisman.webp +0 -0
- package/assets/tokenary.webp +0 -0
- package/assets/tokenpocket.webp +0 -0
- package/assets/trust-wallet.webp +0 -0
- package/assets/uniswap.webp +0 -0
- package/assets/universalprofiles.webp +0 -0
- package/assets/valora.webp +0 -0
- package/assets/wigwam.webp +0 -0
- package/assets/xportal.webp +0 -0
- package/assets/zeal.webp +0 -0
- package/assets/zerion.webp +0 -0
- package/custom-elements.json +207 -0
- package/dist/abi.d.ts +21 -0
- package/dist/abi.d.ts.map +1 -0
- package/dist/abi.js +50 -0
- package/dist/abi.js.map +1 -0
- package/dist/address.d.ts +15 -0
- package/dist/address.d.ts.map +1 -0
- package/dist/address.js +25 -0
- package/dist/address.js.map +1 -0
- package/dist/balance.d.ts +78 -0
- package/dist/balance.d.ts.map +1 -0
- package/dist/balance.js +146 -0
- package/dist/balance.js.map +1 -0
- package/dist/base58.d.ts +15 -0
- package/dist/base58.d.ts.map +1 -0
- package/dist/base58.js +52 -0
- package/dist/base58.js.map +1 -0
- package/dist/catalog-fetch.d.ts +18 -0
- package/dist/catalog-fetch.d.ts.map +1 -0
- package/dist/catalog-fetch.js +85 -0
- package/dist/catalog-fetch.js.map +1 -0
- package/dist/catalog.d.ts +57 -0
- package/dist/catalog.d.ts.map +1 -0
- package/dist/catalog.js +80 -0
- package/dist/catalog.js.map +1 -0
- package/dist/chains.d.ts +32 -0
- package/dist/chains.d.ts.map +1 -0
- package/dist/chains.js +103 -0
- package/dist/chains.js.map +1 -0
- package/dist/config.d.ts +40 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +44 -0
- package/dist/config.js.map +1 -0
- package/dist/deep-links.d.ts +22 -0
- package/dist/deep-links.d.ts.map +1 -0
- package/dist/deep-links.js +201 -0
- package/dist/deep-links.js.map +1 -0
- package/dist/device.d.ts +23 -0
- package/dist/device.d.ts.map +1 -0
- package/dist/device.js +59 -0
- package/dist/device.js.map +1 -0
- package/dist/element/attributes.d.ts +48 -0
- package/dist/element/element.d.ts +92 -0
- package/dist/element/index.d.ts +4 -0
- package/dist/element/props.d.ts +67 -0
- package/dist/element/ui/app.d.ts +22 -0
- package/dist/element/ui/assets.d.ts +7 -0
- package/dist/element/ui/qr.d.ts +16 -0
- package/dist/element/ui/use-handheld.d.ts +8 -0
- package/dist/element/ui/wallet-connect-panel.d.ts +26 -0
- package/dist/element/ui/wallet-dialog.d.ts +37 -0
- package/dist/element/ui/wallet-list.d.ts +26 -0
- package/dist/element/ui/wallet-mark.d.ts +15 -0
- package/dist/element.js +2079 -0
- package/dist/errors.d.ts +34 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +64 -0
- package/dist/errors.js.map +1 -0
- package/dist/evm.d.ts +49 -0
- package/dist/evm.d.ts.map +1 -0
- package/dist/evm.js +217 -0
- package/dist/evm.js.map +1 -0
- package/dist/icons.d.ts +22 -0
- package/dist/icons.d.ts.map +1 -0
- package/dist/icons.js +98 -0
- package/dist/icons.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/intent.d.ts +60 -0
- package/dist/intent.d.ts.map +1 -0
- package/dist/intent.js +2 -0
- package/dist/intent.js.map +1 -0
- package/dist/kit.d.ts +124 -0
- package/dist/kit.d.ts.map +1 -0
- package/dist/kit.js +362 -0
- package/dist/kit.js.map +1 -0
- package/dist/svm.d.ts +45 -0
- package/dist/svm.d.ts.map +1 -0
- package/dist/svm.js +201 -0
- package/dist/svm.js.map +1 -0
- package/dist/theme.d.ts +101 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +217 -0
- package/dist/theme.js.map +1 -0
- package/dist/types.d.ts +144 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/wallet-standard.d.ts +77 -0
- package/dist/wallet-standard.d.ts.map +1 -0
- package/dist/wallet-standard.js +89 -0
- package/dist/wallet-standard.js.map +1 -0
- package/dist/walletconnect.d.ts +74 -0
- package/dist/walletconnect.d.ts.map +1 -0
- package/dist/walletconnect.js +133 -0
- package/dist/walletconnect.js.map +1 -0
- package/package.json +71 -3
- package/vscode.html-custom-data.json +55 -0
package/dist/intent.d.ts
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { Asset, Balance } from './balance.js';
|
|
2
|
+
import type { ChainFamily, Eip1193Provider } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* What the caller wants out of connecting a wallet.
|
|
5
|
+
*
|
|
6
|
+
* A list rather than a mode, because these are not alternatives: a page may
|
|
7
|
+
* want an address and a balance from one connection, and a later one will
|
|
8
|
+
* want an authorization signed in the same breath. Each member says what the
|
|
9
|
+
* result must carry, and the picker itself is identical for all of them.
|
|
10
|
+
*
|
|
11
|
+
* `address` is the by-product of connecting at all, so it is always obtained;
|
|
12
|
+
* asking for it only says the caller wants it handed back.
|
|
13
|
+
*
|
|
14
|
+
* `balance` needs an asset to be a balance of. Asking for it without one is a
|
|
15
|
+
* programming error, not a runtime condition.
|
|
16
|
+
*
|
|
17
|
+
* `authorize` is the embedded checkout's signing step. Reserved here so the
|
|
18
|
+
* shape does not have to change when it arrives.
|
|
19
|
+
*/
|
|
20
|
+
export type Intent = 'address' | 'balance' | 'authorize';
|
|
21
|
+
export interface ConnectRequest {
|
|
22
|
+
intent: Intent[];
|
|
23
|
+
/**
|
|
24
|
+
* Which family of wallets to offer. Omitted means both, which is right
|
|
25
|
+
* for a checkout that settles on either and wrong for a form whose
|
|
26
|
+
* address has to be one format.
|
|
27
|
+
*/
|
|
28
|
+
family?: ChainFamily;
|
|
29
|
+
/**
|
|
30
|
+
* The EVM chain the wallet must end up on.
|
|
31
|
+
*
|
|
32
|
+
* Enforced only when given. A page collecting an address should leave it
|
|
33
|
+
* out: the same address receives on every EVM chain, and asking somebody
|
|
34
|
+
* to switch networks in their wallet to read an address back is theatre.
|
|
35
|
+
*/
|
|
36
|
+
chainId?: number;
|
|
37
|
+
/** What to read a balance of. Required when `intent` includes 'balance'. */
|
|
38
|
+
assets?: Asset[];
|
|
39
|
+
/**
|
|
40
|
+
* Hold the connection open after the result is handed back, following
|
|
41
|
+
* account and chain changes.
|
|
42
|
+
*
|
|
43
|
+
* True for a checkout, which signs later. False for a form, which wanted
|
|
44
|
+
* a value and is done.
|
|
45
|
+
*/
|
|
46
|
+
keepAlive?: boolean;
|
|
47
|
+
}
|
|
48
|
+
export interface ConnectResult {
|
|
49
|
+
walletId: string;
|
|
50
|
+
name: string;
|
|
51
|
+
icon?: string;
|
|
52
|
+
family: ChainFamily;
|
|
53
|
+
address: string;
|
|
54
|
+
/** The chain the wallet was on. EVM only; Solana has nothing to be on. */
|
|
55
|
+
chainId?: number;
|
|
56
|
+
/** Present when 'balance' was asked for, in the order the assets were given. */
|
|
57
|
+
balances?: Balance[];
|
|
58
|
+
/** Present only when `keepAlive` was set. */
|
|
59
|
+
provider?: Eip1193Provider;
|
|
60
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intent.d.ts","sourceRoot":"","sources":["../src/intent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAE9D;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,CAAA;AAExD,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB;;;;OAIG;IACH,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,KAAK,EAAE,CAAA;IAChB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,aAAa;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,WAAW,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;IACpB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,eAAe,CAAA;CAC1B"}
|
package/dist/intent.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intent.js","sourceRoot":"","sources":["../src/intent.ts"],"names":[],"mappings":""}
|
package/dist/kit.d.ts
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { type Asset, type Balance } from './balance.js';
|
|
2
|
+
import type { WalletEntry } from './catalog.js';
|
|
3
|
+
import { type ColorScheme, type WalletKitTheme } from './theme.js';
|
|
4
|
+
import type { ConnectRequest, ConnectResult } from './intent.js';
|
|
5
|
+
import type { ChainFamily, ConnectedEvmWallet, ConnectedSvmWallet, DetectedEvmWallet, DetectedSvmWallet } from './types.js';
|
|
6
|
+
import { type WalletConnectOptions } from './walletconnect.js';
|
|
7
|
+
export interface EvmState {
|
|
8
|
+
available: DetectedEvmWallet[];
|
|
9
|
+
connected?: ConnectedEvmWallet;
|
|
10
|
+
connecting: boolean;
|
|
11
|
+
switchingChain: boolean;
|
|
12
|
+
error: string;
|
|
13
|
+
}
|
|
14
|
+
export interface SvmState {
|
|
15
|
+
available: DetectedSvmWallet[];
|
|
16
|
+
connected?: ConnectedSvmWallet;
|
|
17
|
+
connecting: boolean;
|
|
18
|
+
error: string;
|
|
19
|
+
}
|
|
20
|
+
export interface WalletKitState {
|
|
21
|
+
catalog: WalletEntry[];
|
|
22
|
+
/** False until the catalogue has been asked for and answered, or failed. */
|
|
23
|
+
catalogLoaded: boolean;
|
|
24
|
+
handheld: boolean;
|
|
25
|
+
/** Where the wallet artwork is served from. */
|
|
26
|
+
assetBase: string;
|
|
27
|
+
/**
|
|
28
|
+
* The theme as the host set it, not as it resolved.
|
|
29
|
+
*
|
|
30
|
+
* Carried so a picker that was given no theme of its own can wear the
|
|
31
|
+
* one the page is wearing. A branded checkout sets it once, on the kit,
|
|
32
|
+
* and every picker on the page follows.
|
|
33
|
+
*/
|
|
34
|
+
theme?: WalletKitTheme;
|
|
35
|
+
/** What the theme's mode resolved to, following the system when it says so. */
|
|
36
|
+
scheme: ColorScheme;
|
|
37
|
+
/** The theme as custom properties, ready to set on an element. */
|
|
38
|
+
variables: Record<string, string>;
|
|
39
|
+
evm: EvmState;
|
|
40
|
+
svm: SvmState;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Every option is an override, and a kit created with none of them works.
|
|
44
|
+
*
|
|
45
|
+
* What the kit needs to run is Reclack's own infrastructure, so it ships with
|
|
46
|
+
* it rather than asking each host to supply what it could not know. See
|
|
47
|
+
* config.ts. These exist for a sandbox, a private endpoint, or a partner
|
|
48
|
+
* running the kit under its own name.
|
|
49
|
+
*/
|
|
50
|
+
export interface WalletKitOptions {
|
|
51
|
+
/** A different Reclack to talk to, such as a sandbox. */
|
|
52
|
+
apiUrl?: string;
|
|
53
|
+
/**
|
|
54
|
+
* The catalogue outright, skipping the round trip. What a host that
|
|
55
|
+
* renders on a server passes, having already fetched it there.
|
|
56
|
+
*/
|
|
57
|
+
catalog?: WalletEntry[];
|
|
58
|
+
/** A different relay project, or different metadata on the approval screen. */
|
|
59
|
+
walletConnect?: WalletConnectOptions;
|
|
60
|
+
/**
|
|
61
|
+
* Where the host serves this package's `assets/` directory from.
|
|
62
|
+
*
|
|
63
|
+
* Served by the host rather than fetched from ours, so a page taking a
|
|
64
|
+
* payment still makes no third-party image request. A wallet's own
|
|
65
|
+
* EIP-6963 icon wins over these anyway, so getting it wrong costs the
|
|
66
|
+
* artwork of wallets that are not installed, not the ability to pay.
|
|
67
|
+
*/
|
|
68
|
+
assetBase?: string;
|
|
69
|
+
/**
|
|
70
|
+
* Colours, corner radius, type and light or dark.
|
|
71
|
+
*
|
|
72
|
+
* Held here rather than passed to a renderer so that the resolved mode is
|
|
73
|
+
* part of the state every framework is already subscribed to: when the
|
|
74
|
+
* reader's system flips to dark, the picker follows without the host
|
|
75
|
+
* wiring up a second listener.
|
|
76
|
+
*/
|
|
77
|
+
theme?: WalletKitTheme;
|
|
78
|
+
/**
|
|
79
|
+
* Read endpoints per EVM chain id, and one for Solana, for balances.
|
|
80
|
+
*
|
|
81
|
+
* The pinned public endpoints are used for any chain not named here.
|
|
82
|
+
* Worth overriding for anything heavier than a balance or two: they are
|
|
83
|
+
* shared and rate-limited.
|
|
84
|
+
*/
|
|
85
|
+
rpcUrls?: Record<number, string>;
|
|
86
|
+
svmRpcUrl?: string;
|
|
87
|
+
}
|
|
88
|
+
export interface WalletKit {
|
|
89
|
+
getState(): WalletKitState;
|
|
90
|
+
/** Calls back on every change. Returns the unsubscribe. */
|
|
91
|
+
subscribe(listener: () => void): () => void;
|
|
92
|
+
connectEvm(wallet: DetectedEvmWallet): Promise<void>;
|
|
93
|
+
connectSvm(wallet: DetectedSvmWallet): Promise<void>;
|
|
94
|
+
/** Pairs with a wallet that injects nothing. `onUri` fires before approval. */
|
|
95
|
+
connectRemote(wallet: {
|
|
96
|
+
id: string;
|
|
97
|
+
name: string;
|
|
98
|
+
}, chainId: number, onUri: (uri: string) => void): Promise<void>;
|
|
99
|
+
disconnect(family?: ChainFamily): void;
|
|
100
|
+
ensureChain(chainId: number): Promise<boolean>;
|
|
101
|
+
/** Changes the theme after the fact, such as when a merchant's branding lands. */
|
|
102
|
+
setTheme(theme: WalletKitTheme | undefined): void;
|
|
103
|
+
/** Whether this kit can offer WalletConnect at all. */
|
|
104
|
+
canPairRemotely(): boolean;
|
|
105
|
+
/** Reads balances for an already-connected wallet. */
|
|
106
|
+
readBalances(family: ChainFamily, assets: Asset[]): Promise<Balance[]>;
|
|
107
|
+
/** Shapes a connected wallet into what a caller's intent asked for. */
|
|
108
|
+
resolveIntent(family: ChainFamily, request: ConnectRequest): Promise<ConnectResult>;
|
|
109
|
+
destroy(): void;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Everything a page needs to connect a wallet, with nothing on screen.
|
|
113
|
+
*
|
|
114
|
+
* A store with `getState` and `subscribe` rather than a hook, because this
|
|
115
|
+
* package renders nothing and belongs to no framework. That pair is the one
|
|
116
|
+
* shape every framework can consume: React reads it with useSyncExternalStore,
|
|
117
|
+
* Vue with a shallowRef, Svelte with a store contract, and plain JavaScript by
|
|
118
|
+
* calling it. A hook would have picked React for everybody.
|
|
119
|
+
*
|
|
120
|
+
* Nothing touches the window until the first subscriber arrives, so importing
|
|
121
|
+
* this on a server is safe and a host that renders on one does not have to
|
|
122
|
+
* guard every call site.
|
|
123
|
+
*/
|
|
124
|
+
export declare function createWalletKit(options?: WalletKitOptions): WalletKit;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kit.d.ts","sourceRoot":"","sources":["../src/kit.ts"],"names":[],"mappings":"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"}
|
package/dist/kit.js
ADDED
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
import { readEvmBalance, readSvmBalance } from './balance.js';
|
|
2
|
+
import { fetchWalletCatalog, walletCatalogUrl } from './catalog-fetch.js';
|
|
3
|
+
import { DEFAULT_API_URL, DEFAULT_SVM_RPC_URL, DEFAULT_WALLETCONNECT_PROJECT_ID, defaultRpcUrl, } from './config.js';
|
|
4
|
+
import { subscribeHandheld } from './device.js';
|
|
5
|
+
import { DEFAULT_LOGO_BASE } from './icons.js';
|
|
6
|
+
import { resolveScheme, subscribeScheme, themeVariables, } from './theme.js';
|
|
7
|
+
import { connectEvmWallet, discoverEvmWallets, switchEvmChain, } from './evm.js';
|
|
8
|
+
import { walletErrorMessage } from './errors.js';
|
|
9
|
+
import { connectSvmWallet, disconnectSvmWallet, discoverSvmWallets } from './svm.js';
|
|
10
|
+
import { openWalletConnectSession, walletConnectReady, } from './walletconnect.js';
|
|
11
|
+
/**
|
|
12
|
+
* Everything a page needs to connect a wallet, with nothing on screen.
|
|
13
|
+
*
|
|
14
|
+
* A store with `getState` and `subscribe` rather than a hook, because this
|
|
15
|
+
* package renders nothing and belongs to no framework. That pair is the one
|
|
16
|
+
* shape every framework can consume: React reads it with useSyncExternalStore,
|
|
17
|
+
* Vue with a shallowRef, Svelte with a store contract, and plain JavaScript by
|
|
18
|
+
* calling it. A hook would have picked React for everybody.
|
|
19
|
+
*
|
|
20
|
+
* Nothing touches the window until the first subscriber arrives, so importing
|
|
21
|
+
* this on a server is safe and a host that renders on one does not have to
|
|
22
|
+
* guard every call site.
|
|
23
|
+
*/
|
|
24
|
+
export function createWalletKit(options = {}) {
|
|
25
|
+
const initialScheme = resolveScheme(options.theme?.mode);
|
|
26
|
+
let state = {
|
|
27
|
+
catalog: options.catalog ?? [],
|
|
28
|
+
catalogLoaded: Boolean(options.catalog),
|
|
29
|
+
handheld: false,
|
|
30
|
+
assetBase: options.assetBase ?? DEFAULT_LOGO_BASE,
|
|
31
|
+
// Resolved up front rather than deferred to the first subscriber. An
|
|
32
|
+
// explicit mode needs no window to resolve, and a kit read before
|
|
33
|
+
// anything subscribes, which is every server render, would otherwise
|
|
34
|
+
// report light while the host had asked for dark. `system` still
|
|
35
|
+
// falls back to light where there is no window to ask.
|
|
36
|
+
theme: options.theme,
|
|
37
|
+
scheme: initialScheme,
|
|
38
|
+
variables: themeVariables(options.theme, initialScheme),
|
|
39
|
+
evm: {
|
|
40
|
+
available: [],
|
|
41
|
+
connecting: false,
|
|
42
|
+
switchingChain: false,
|
|
43
|
+
error: '',
|
|
44
|
+
},
|
|
45
|
+
svm: { available: [], connecting: false, error: '' },
|
|
46
|
+
};
|
|
47
|
+
const listeners = new Set();
|
|
48
|
+
const cleanups = [];
|
|
49
|
+
let theme = options.theme;
|
|
50
|
+
let stopScheme;
|
|
51
|
+
let started = false;
|
|
52
|
+
let destroyed = false;
|
|
53
|
+
// How to end a WalletConnect session, when the connection is one.
|
|
54
|
+
let closeRemote;
|
|
55
|
+
// One object replaced wholesale rather than mutated. Callers compare the
|
|
56
|
+
// reference to decide whether to re-render, and a mutated object is the
|
|
57
|
+
// same reference, so the render never happens.
|
|
58
|
+
function set(patch) {
|
|
59
|
+
if (destroyed) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
state = { ...state, ...patch };
|
|
63
|
+
for (const listener of listeners) {
|
|
64
|
+
listener();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
function setEvm(patch) {
|
|
68
|
+
set({ evm: { ...state.evm, ...patch } });
|
|
69
|
+
}
|
|
70
|
+
function setSvm(patch) {
|
|
71
|
+
set({ svm: { ...state.svm, ...patch } });
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Begins discovery, once, when somebody is listening.
|
|
75
|
+
*
|
|
76
|
+
* Discovery is re-run when the catalogue lands: a wallet that announces
|
|
77
|
+
* itself is found without it, but one that only injects a global is found
|
|
78
|
+
* by a rule the catalogue carries, so the list is incomplete until then.
|
|
79
|
+
*/
|
|
80
|
+
function start() {
|
|
81
|
+
if (started || typeof window === 'undefined') {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
started = true;
|
|
85
|
+
cleanups.push(subscribeHandheld((handheld) => set({ handheld })));
|
|
86
|
+
watchScheme();
|
|
87
|
+
restartDiscovery();
|
|
88
|
+
if (!state.catalogLoaded) {
|
|
89
|
+
const url = walletCatalogUrl(options.apiUrl ?? DEFAULT_API_URL);
|
|
90
|
+
void fetchWalletCatalog(url).then((catalog) => {
|
|
91
|
+
if (destroyed) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
set({ catalog, catalogLoaded: true });
|
|
95
|
+
restartDiscovery();
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
function watchScheme() {
|
|
100
|
+
stopScheme?.();
|
|
101
|
+
stopScheme = subscribeScheme(theme?.mode, (scheme) => {
|
|
102
|
+
set({ theme, scheme, variables: themeVariables(theme, scheme) });
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
let stopDiscovery = [];
|
|
106
|
+
function restartDiscovery() {
|
|
107
|
+
for (const stop of stopDiscovery) {
|
|
108
|
+
stop();
|
|
109
|
+
}
|
|
110
|
+
stopDiscovery = [
|
|
111
|
+
discoverEvmWallets(state.catalog, (available) => setEvm({ available })),
|
|
112
|
+
discoverSvmWallets(state.catalog, (available) => setSvm({ available })),
|
|
113
|
+
];
|
|
114
|
+
}
|
|
115
|
+
// The payer can switch account or network in the wallet at any time, and
|
|
116
|
+
// the page has to follow: showing one address while asking somebody to
|
|
117
|
+
// sign from another is how money goes to the wrong place.
|
|
118
|
+
let unwatch;
|
|
119
|
+
function watchEvm(connected) {
|
|
120
|
+
unwatch?.();
|
|
121
|
+
unwatch = undefined;
|
|
122
|
+
const provider = connected?.provider;
|
|
123
|
+
if (!provider?.on || !provider.removeListener) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
const onAccounts = (...args) => {
|
|
127
|
+
const accounts = args[0];
|
|
128
|
+
const next = Array.isArray(accounts) ? accounts[0] : undefined;
|
|
129
|
+
if (typeof next !== 'string') {
|
|
130
|
+
setEvm({ connected: undefined });
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
setEvm({
|
|
134
|
+
connected: state.evm.connected
|
|
135
|
+
? { ...state.evm.connected, address: next }
|
|
136
|
+
: undefined,
|
|
137
|
+
});
|
|
138
|
+
};
|
|
139
|
+
const onChain = (...args) => {
|
|
140
|
+
const raw = args[0];
|
|
141
|
+
const chainId = typeof raw === 'string' ? Number.parseInt(raw, 16) : Number(raw);
|
|
142
|
+
setEvm({
|
|
143
|
+
connected: state.evm.connected
|
|
144
|
+
? { ...state.evm.connected, chainId }
|
|
145
|
+
: undefined,
|
|
146
|
+
});
|
|
147
|
+
};
|
|
148
|
+
provider.on('accountsChanged', onAccounts);
|
|
149
|
+
provider.on('chainChanged', onChain);
|
|
150
|
+
unwatch = () => {
|
|
151
|
+
provider.removeListener?.('accountsChanged', onAccounts);
|
|
152
|
+
provider.removeListener?.('chainChanged', onChain);
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/** The host's endpoint for a chain, or the pinned public one. */
|
|
156
|
+
function rpcFor(chainId) {
|
|
157
|
+
return options.rpcUrls?.[chainId] ?? defaultRpcUrl(chainId);
|
|
158
|
+
}
|
|
159
|
+
function walletConnectOptions() {
|
|
160
|
+
return (options.walletConnect
|
|
161
|
+
?? { projectId: DEFAULT_WALLETCONNECT_PROJECT_ID });
|
|
162
|
+
}
|
|
163
|
+
const kit = {
|
|
164
|
+
getState: () => state,
|
|
165
|
+
subscribe(listener) {
|
|
166
|
+
listeners.add(listener);
|
|
167
|
+
start();
|
|
168
|
+
return () => {
|
|
169
|
+
listeners.delete(listener);
|
|
170
|
+
};
|
|
171
|
+
},
|
|
172
|
+
async connectEvm(wallet) {
|
|
173
|
+
setEvm({ connecting: true, error: '' });
|
|
174
|
+
try {
|
|
175
|
+
const connected = await connectEvmWallet(wallet);
|
|
176
|
+
setEvm({ connected });
|
|
177
|
+
watchEvm(connected);
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
setEvm({
|
|
181
|
+
error: walletErrorMessage(error, 'Could not connect to your wallet.'),
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
finally {
|
|
185
|
+
setEvm({ connecting: false });
|
|
186
|
+
}
|
|
187
|
+
},
|
|
188
|
+
async connectSvm(wallet) {
|
|
189
|
+
setSvm({ connecting: true, error: '' });
|
|
190
|
+
try {
|
|
191
|
+
const { address, account } = await connectSvmWallet(wallet);
|
|
192
|
+
setSvm({
|
|
193
|
+
connected: {
|
|
194
|
+
walletId: wallet.id,
|
|
195
|
+
name: wallet.name,
|
|
196
|
+
icon: wallet.icon,
|
|
197
|
+
address,
|
|
198
|
+
account,
|
|
199
|
+
standard: wallet.standard,
|
|
200
|
+
provider: wallet.provider,
|
|
201
|
+
},
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
setSvm({
|
|
206
|
+
error: walletErrorMessage(error, 'Could not connect to your wallet.'),
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
finally {
|
|
210
|
+
setSvm({ connecting: false });
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
async connectRemote(wallet, chainId, onUri) {
|
|
214
|
+
setEvm({ connecting: true, error: '' });
|
|
215
|
+
try {
|
|
216
|
+
const session = await openWalletConnectSession(walletConnectOptions(), chainId, onUri);
|
|
217
|
+
closeRemote = session.close;
|
|
218
|
+
const connected = {
|
|
219
|
+
walletId: wallet.id,
|
|
220
|
+
name: wallet.name,
|
|
221
|
+
address: session.address,
|
|
222
|
+
chainId: session.chainId,
|
|
223
|
+
provider: session.provider,
|
|
224
|
+
};
|
|
225
|
+
setEvm({ connected });
|
|
226
|
+
watchEvm(connected);
|
|
227
|
+
}
|
|
228
|
+
catch (error) {
|
|
229
|
+
setEvm({
|
|
230
|
+
error: walletErrorMessage(error, 'Could not connect to your wallet.'),
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
finally {
|
|
234
|
+
setEvm({ connecting: false });
|
|
235
|
+
}
|
|
236
|
+
},
|
|
237
|
+
disconnect(family) {
|
|
238
|
+
if (family !== 'svm') {
|
|
239
|
+
// A page cannot revoke an extension's permission; that only
|
|
240
|
+
// clears this side. A WalletConnect session is ours to end,
|
|
241
|
+
// though, and leaving it open would have the wallet showing
|
|
242
|
+
// this page as connected long after everyone has gone.
|
|
243
|
+
void closeRemote?.();
|
|
244
|
+
closeRemote = undefined;
|
|
245
|
+
unwatch?.();
|
|
246
|
+
unwatch = undefined;
|
|
247
|
+
setEvm({ connected: undefined, error: '' });
|
|
248
|
+
}
|
|
249
|
+
if (family !== 'evm') {
|
|
250
|
+
// Asked of the wallet as well, unlike the EVM side, because
|
|
251
|
+
// Solana wallets do expose it. Best effort: this side has let
|
|
252
|
+
// go either way.
|
|
253
|
+
if (state.svm.connected) {
|
|
254
|
+
void disconnectSvmWallet(state.svm.connected).catch(() => undefined);
|
|
255
|
+
}
|
|
256
|
+
setSvm({ connected: undefined, error: '' });
|
|
257
|
+
}
|
|
258
|
+
},
|
|
259
|
+
async ensureChain(chainId) {
|
|
260
|
+
const connected = state.evm.connected;
|
|
261
|
+
if (!connected) {
|
|
262
|
+
return false;
|
|
263
|
+
}
|
|
264
|
+
if (connected.chainId === chainId) {
|
|
265
|
+
return true;
|
|
266
|
+
}
|
|
267
|
+
setEvm({ error: '', switchingChain: true });
|
|
268
|
+
try {
|
|
269
|
+
// May prompt twice: once to add the network, once to select
|
|
270
|
+
// it, so the caller stays pending throughout.
|
|
271
|
+
await switchEvmChain(connected.provider, chainId);
|
|
272
|
+
return true;
|
|
273
|
+
}
|
|
274
|
+
catch (error) {
|
|
275
|
+
setEvm({ error: walletErrorMessage(error, 'Could not switch network.') });
|
|
276
|
+
return false;
|
|
277
|
+
}
|
|
278
|
+
finally {
|
|
279
|
+
setEvm({ switchingChain: false });
|
|
280
|
+
}
|
|
281
|
+
},
|
|
282
|
+
setTheme(next) {
|
|
283
|
+
theme = next;
|
|
284
|
+
if (started) {
|
|
285
|
+
// Re-subscribed rather than recomputed: the mode may have
|
|
286
|
+
// moved to or from `system`, which changes whether the
|
|
287
|
+
// reader's own setting is being followed at all.
|
|
288
|
+
watchScheme();
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
// Nobody is listening yet, so there is nothing to follow; the
|
|
292
|
+
// mode still has to be resolved again, because it may have
|
|
293
|
+
// changed.
|
|
294
|
+
const scheme = resolveScheme(theme?.mode);
|
|
295
|
+
set({ theme, scheme, variables: themeVariables(theme, scheme) });
|
|
296
|
+
},
|
|
297
|
+
canPairRemotely: () => walletConnectReady(walletConnectOptions()),
|
|
298
|
+
async readBalances(family, assets) {
|
|
299
|
+
const connected = family === 'evm' ? state.evm.connected : state.svm.connected;
|
|
300
|
+
if (!connected) {
|
|
301
|
+
throw new Error('No wallet is connected.');
|
|
302
|
+
}
|
|
303
|
+
return Promise.all(assets.map(async (asset) => {
|
|
304
|
+
if (asset.family === 'svm') {
|
|
305
|
+
return readSvmBalance(options.svmRpcUrl ?? DEFAULT_SVM_RPC_URL, asset, connected.address);
|
|
306
|
+
}
|
|
307
|
+
// The endpoint when there is one, so reading a balance
|
|
308
|
+
// never drags a wallet onto another network. The wallet's
|
|
309
|
+
// own provider otherwise, which is the pre-flight case and
|
|
310
|
+
// does require it to be on that chain already.
|
|
311
|
+
const url = rpcFor(asset.chainId);
|
|
312
|
+
const source = url
|
|
313
|
+
? { rpcUrl: url }
|
|
314
|
+
: { provider: connected.provider };
|
|
315
|
+
return readEvmBalance(source, asset, connected.address);
|
|
316
|
+
}));
|
|
317
|
+
},
|
|
318
|
+
async resolveIntent(family, request) {
|
|
319
|
+
// The request is checked before the connection, because an
|
|
320
|
+
// intent that asks for a balance of nothing is a mistake in the
|
|
321
|
+
// caller rather than a state somebody can get out of by
|
|
322
|
+
// connecting a wallet, and it should fail the same way either
|
|
323
|
+
// way.
|
|
324
|
+
if (request.intent.includes('balance') && !request.assets?.length) {
|
|
325
|
+
throw new Error("intent 'balance' needs at least one asset.");
|
|
326
|
+
}
|
|
327
|
+
const connected = family === 'evm' ? state.evm.connected : state.svm.connected;
|
|
328
|
+
if (!connected) {
|
|
329
|
+
throw new Error('No wallet is connected.');
|
|
330
|
+
}
|
|
331
|
+
const evm = family === 'evm' ? connected : undefined;
|
|
332
|
+
const result = {
|
|
333
|
+
walletId: connected.walletId,
|
|
334
|
+
name: connected.name,
|
|
335
|
+
icon: connected.icon,
|
|
336
|
+
family,
|
|
337
|
+
address: connected.address,
|
|
338
|
+
chainId: evm?.chainId,
|
|
339
|
+
};
|
|
340
|
+
if (request.intent.includes('balance')) {
|
|
341
|
+
result.balances = await kit.readBalances(family, request.assets ?? []);
|
|
342
|
+
}
|
|
343
|
+
if (request.keepAlive && evm) {
|
|
344
|
+
result.provider = evm.provider;
|
|
345
|
+
}
|
|
346
|
+
return result;
|
|
347
|
+
},
|
|
348
|
+
destroy() {
|
|
349
|
+
destroyed = true;
|
|
350
|
+
for (const stop of [...stopDiscovery, ...cleanups]) {
|
|
351
|
+
stop();
|
|
352
|
+
}
|
|
353
|
+
stopDiscovery = [];
|
|
354
|
+
stopScheme?.();
|
|
355
|
+
unwatch?.();
|
|
356
|
+
void closeRemote?.();
|
|
357
|
+
listeners.clear();
|
|
358
|
+
},
|
|
359
|
+
};
|
|
360
|
+
return kit;
|
|
361
|
+
}
|
|
362
|
+
//# sourceMappingURL=kit.js.map
|
package/dist/kit.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kit.js","sourceRoot":"","sources":["../src/kit.ts"],"names":[],"mappings":"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"}
|
package/dist/svm.d.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type WalletEntry } from './catalog.js';
|
|
2
|
+
import { type StandardAccount } from './wallet-standard.js';
|
|
3
|
+
import type { ConnectedSvmWallet, DetectedSvmWallet } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Prompts the wallet for an account.
|
|
6
|
+
*
|
|
7
|
+
* Two routes because there are two kinds of wallet here. A registered one is
|
|
8
|
+
* asked through its connect feature and hands back accounts; an injected one
|
|
9
|
+
* is asked through its provider. The account object from the first is kept,
|
|
10
|
+
* because signing needs it back.
|
|
11
|
+
*/
|
|
12
|
+
export declare function connectSvmWallet(wallet: DetectedSvmWallet): Promise<{
|
|
13
|
+
address: string;
|
|
14
|
+
account?: StandardAccount;
|
|
15
|
+
}>;
|
|
16
|
+
/** Ends the session where the wallet offers a way to. */
|
|
17
|
+
export declare function disconnectSvmWallet(wallet: ConnectedSvmWallet): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Signs the prepared transaction and lets the wallet submit it.
|
|
20
|
+
*
|
|
21
|
+
* Nothing here builds or alters a transaction: the plan arrives built, in
|
|
22
|
+
* both the forms a wallet might want, and this picks the one its route takes.
|
|
23
|
+
* The payer still sees the wallet decode and display it before approving.
|
|
24
|
+
*
|
|
25
|
+
* Letting the wallet send it, rather than signing and sending separately,
|
|
26
|
+
* means one prompt and no RPC endpoint in this bundle.
|
|
27
|
+
*/
|
|
28
|
+
export declare function signAndSendSvm(wallet: ConnectedSvmWallet, plan: {
|
|
29
|
+
message: string;
|
|
30
|
+
transaction: string;
|
|
31
|
+
chain: string;
|
|
32
|
+
}): Promise<string>;
|
|
33
|
+
/** Truncates a base58 address for display: 5e9y…xAQf. */
|
|
34
|
+
export declare function shortSvmAddress(address: string): string;
|
|
35
|
+
/**
|
|
36
|
+
* Finds the Solana wallets available in this browser.
|
|
37
|
+
*
|
|
38
|
+
* The Wallet Standard first: it is how wallets announce Solana support, it
|
|
39
|
+
* survives several being installed at once, and the wallet supplies its own
|
|
40
|
+
* name and icon. Sniffing globals is only a fallback for one that has not
|
|
41
|
+
* adopted it, and never overrides a registered wallet.
|
|
42
|
+
*
|
|
43
|
+
* Returns a cleanup function; callers must call it to drop the listener.
|
|
44
|
+
*/
|
|
45
|
+
export declare function discoverSvmWallets(catalog: WalletEntry[], onChange: (wallets: DetectedSvmWallet[]) => void): () => void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svm.d.ts","sourceRoot":"","sources":["../src/svm.ts"],"names":[],"mappings":"AACA,OAAO,EAAgC,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA;AAE7E,OAAO,EAMN,KAAK,eAAe,EAEpB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EACX,kBAAkB,EAClB,iBAAiB,EAEjB,MAAM,YAAY,CAAA;AAqBnB;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACrC,MAAM,EAAE,iBAAiB,GACvB,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,eAAe,CAAA;CAAE,CAAC,CA4BzD;AAED,yDAAyD;AACzD,wBAAsB,mBAAmB,CACxC,MAAM,EAAE,kBAAkB,GACxB,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CACnC,MAAM,EAAE,kBAAkB,EAC1B,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC3D,OAAO,CAAC,MAAM,CAAC,CAgDjB;AAED,yDAAyD;AACzD,wBAAgB,eAAe,CAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAKxD;AAmBD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CACjC,OAAO,EAAE,WAAW,EAAE,EACtB,QAAQ,EAAE,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,IAAI,GAC9C,MAAM,IAAI,CAuDZ"}
|