walletpair-sdk 1.0.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 +415 -0
- package/dist/ble/framing.d.ts +23 -0
- package/dist/ble/framing.d.ts.map +1 -0
- package/dist/ble/framing.js +83 -0
- package/dist/ble/framing.js.map +1 -0
- package/dist/ble/index.d.ts +9 -0
- package/dist/ble/index.d.ts.map +1 -0
- package/dist/ble/index.js +9 -0
- package/dist/ble/index.js.map +1 -0
- package/dist/ble/web-ble-transport.d.ts +29 -0
- package/dist/ble/web-ble-transport.d.ts.map +1 -0
- package/dist/ble/web-ble-transport.js +93 -0
- package/dist/ble/web-ble-transport.js.map +1 -0
- package/dist/crypto.d.ts +102 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +279 -0
- package/dist/crypto.js.map +1 -0
- package/dist/dapp-session.d.ts +106 -0
- package/dist/dapp-session.d.ts.map +1 -0
- package/dist/dapp-session.js +918 -0
- package/dist/dapp-session.js.map +1 -0
- package/dist/emitter.d.ts +16 -0
- package/dist/emitter.d.ts.map +1 -0
- package/dist/emitter.js +41 -0
- package/dist/emitter.js.map +1 -0
- package/dist/evm/eip1193.d.ts +83 -0
- package/dist/evm/eip1193.d.ts.map +1 -0
- package/dist/evm/eip1193.js +270 -0
- package/dist/evm/eip1193.js.map +1 -0
- package/dist/evm/index.d.ts +8 -0
- package/dist/evm/index.d.ts.map +1 -0
- package/dist/evm/index.js +8 -0
- package/dist/evm/index.js.map +1 -0
- package/dist/evm/wagmi.d.ts +118 -0
- package/dist/evm/wagmi.d.ts.map +1 -0
- package/dist/evm/wagmi.js +205 -0
- package/dist/evm/wagmi.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +225 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +31 -0
- package/dist/types.js.map +1 -0
- package/dist/wallet-session.d.ts +107 -0
- package/dist/wallet-session.d.ts.map +1 -0
- package/dist/wallet-session.js +794 -0
- package/dist/wallet-session.js.map +1 -0
- package/dist/ws-transport.d.ts +29 -0
- package/dist/ws-transport.d.ts.map +1 -0
- package/dist/ws-transport.js +79 -0
- package/dist/ws-transport.js.map +1 -0
- package/package.json +55 -0
- package/src/__tests__/adversarial/crypto-attacks.test.ts +557 -0
- package/src/__tests__/adversarial/malicious-dapp.test.ts +505 -0
- package/src/__tests__/adversarial/malicious-relay.test.ts +528 -0
- package/src/__tests__/adversarial/malicious-wallet.test.ts +467 -0
- package/src/__tests__/spec-compliance/canonical-json.test.ts +227 -0
- package/src/__tests__/spec-compliance/crypto-vectors.test.ts +321 -0
- package/src/__tests__/spec-compliance/message-format.test.ts +356 -0
- package/src/__tests__/spec-compliance/sequence-numbers.test.ts +300 -0
- package/src/__tests__/spec-compliance/state-machine.test.ts +364 -0
- package/src/ble/framing.test.ts +196 -0
- package/src/ble/framing.ts +100 -0
- package/src/ble/index.ts +18 -0
- package/src/ble/web-ble-transport.test.ts +192 -0
- package/src/ble/web-ble-transport.ts +116 -0
- package/src/ble/web-bluetooth.d.ts +47 -0
- package/src/canonical-json.test.ts +612 -0
- package/src/crypto-directional.test.ts +263 -0
- package/src/crypto-hardening.test.ts +529 -0
- package/src/crypto.test.ts +635 -0
- package/src/crypto.ts +405 -0
- package/src/dapp-session.test.ts +647 -0
- package/src/dapp-session.ts +1004 -0
- package/src/emitter.test.ts +169 -0
- package/src/emitter.ts +45 -0
- package/src/evm/eip1193.test.ts +365 -0
- package/src/evm/eip1193.ts +346 -0
- package/src/evm/index.ts +19 -0
- package/src/evm/wagmi.test.ts +396 -0
- package/src/evm/wagmi.ts +321 -0
- package/src/index.ts +86 -0
- package/src/integration.test.ts +385 -0
- package/src/security.test.ts +430 -0
- package/src/sequence-validation.test.ts +1185 -0
- package/src/test-helpers.ts +216 -0
- package/src/types.test.ts +82 -0
- package/src/types.ts +305 -0
- package/src/wallet-session.test.ts +683 -0
- package/src/wallet-session.ts +922 -0
- package/src/ws-transport.test.ts +231 -0
- package/src/ws-transport.ts +92 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wagmi connector for WalletPair.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* import { walletPair } from 'walletpair-sdk/evm/wagmi'
|
|
6
|
+
* import { createConfig } from 'wagmi'
|
|
7
|
+
*
|
|
8
|
+
* const config = createConfig({
|
|
9
|
+
* connectors: [
|
|
10
|
+
* walletPair({
|
|
11
|
+
* relayUrl: 'wss://relay.walletpair.org/v1',
|
|
12
|
+
* meta: { name: 'MyDApp', description: 'A dApp', url: 'https://mydapp.com', icon: 'https://mydapp.com/icon.png' },
|
|
13
|
+
* onPairingUri: (uri) => { showQrCode(uri) },
|
|
14
|
+
* onSessionFingerprint: (fp) => { showFingerprint(fp) },
|
|
15
|
+
* }),
|
|
16
|
+
* ],
|
|
17
|
+
* })
|
|
18
|
+
*/
|
|
19
|
+
import type { Transport } from '../types.js';
|
|
20
|
+
import { WalletPairProvider } from './eip1193.js';
|
|
21
|
+
interface Chain {
|
|
22
|
+
id: number;
|
|
23
|
+
name: string;
|
|
24
|
+
[key: string]: unknown;
|
|
25
|
+
}
|
|
26
|
+
interface ConnectorEventMap {
|
|
27
|
+
change: {
|
|
28
|
+
accounts?: readonly string[] | undefined;
|
|
29
|
+
chainId?: number | undefined;
|
|
30
|
+
};
|
|
31
|
+
connect: {
|
|
32
|
+
accounts: readonly string[];
|
|
33
|
+
chainId: number;
|
|
34
|
+
};
|
|
35
|
+
disconnect: never;
|
|
36
|
+
error: {
|
|
37
|
+
error: Error;
|
|
38
|
+
};
|
|
39
|
+
message: {
|
|
40
|
+
type: string;
|
|
41
|
+
data?: unknown | undefined;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
interface WagmiEmitter {
|
|
45
|
+
emit<K extends keyof ConnectorEventMap>(event: K, data: ConnectorEventMap[K]): void;
|
|
46
|
+
on<K extends keyof ConnectorEventMap>(event: K, handler: (data: ConnectorEventMap[K]) => void): void;
|
|
47
|
+
off<K extends keyof ConnectorEventMap>(event: K, handler: (data: ConnectorEventMap[K]) => void): void;
|
|
48
|
+
listenerCount(event: keyof ConnectorEventMap): number;
|
|
49
|
+
}
|
|
50
|
+
interface Storage {
|
|
51
|
+
getItem(key: string): Promise<string | null>;
|
|
52
|
+
setItem(key: string, value: string): Promise<void>;
|
|
53
|
+
removeItem(key: string): Promise<void>;
|
|
54
|
+
}
|
|
55
|
+
interface ConnectorConfig {
|
|
56
|
+
chains: readonly [Chain, ...Chain[]];
|
|
57
|
+
emitter: WagmiEmitter;
|
|
58
|
+
storage?: Storage | null | undefined;
|
|
59
|
+
}
|
|
60
|
+
type CreateConnectorFn = (config: ConnectorConfig) => {
|
|
61
|
+
id: string;
|
|
62
|
+
name: string;
|
|
63
|
+
type: string;
|
|
64
|
+
icon?: string | undefined;
|
|
65
|
+
connect(params?: {
|
|
66
|
+
chainId?: number | undefined;
|
|
67
|
+
isReconnecting?: boolean | undefined;
|
|
68
|
+
}): Promise<{
|
|
69
|
+
accounts: readonly string[];
|
|
70
|
+
chainId: number;
|
|
71
|
+
}>;
|
|
72
|
+
disconnect(): Promise<void>;
|
|
73
|
+
getAccounts(): Promise<readonly string[]>;
|
|
74
|
+
getChainId(): Promise<number>;
|
|
75
|
+
getProvider(params?: {
|
|
76
|
+
chainId?: number | undefined;
|
|
77
|
+
}): Promise<WalletPairProvider>;
|
|
78
|
+
isAuthorized(): Promise<boolean>;
|
|
79
|
+
onAccountsChanged(accounts: string[]): void;
|
|
80
|
+
onChainChanged(chainId: string): void;
|
|
81
|
+
onConnect?(connectInfo: {
|
|
82
|
+
chainId: string;
|
|
83
|
+
}): void;
|
|
84
|
+
onDisconnect(error?: Error | undefined): void;
|
|
85
|
+
setup?(): Promise<void>;
|
|
86
|
+
switchChain?(params: {
|
|
87
|
+
chainId: number;
|
|
88
|
+
}): Promise<Chain>;
|
|
89
|
+
};
|
|
90
|
+
export interface WalletPairConnectorOptions {
|
|
91
|
+
/** WebSocket relay URL. Used when `transport` is not provided. */
|
|
92
|
+
relayUrl?: string | undefined;
|
|
93
|
+
/** Custom transport instance. Overrides relayUrl when provided. */
|
|
94
|
+
transport?: Transport | undefined;
|
|
95
|
+
/** DApp metadata (name, description, url, icon). */
|
|
96
|
+
meta: {
|
|
97
|
+
name: string;
|
|
98
|
+
description: string;
|
|
99
|
+
url: string;
|
|
100
|
+
icon: string;
|
|
101
|
+
};
|
|
102
|
+
/** Request timeout in ms. */
|
|
103
|
+
requestTimeout?: number | undefined;
|
|
104
|
+
/** Called when a pairing URI is generated (display QR code). */
|
|
105
|
+
onPairingUri?: ((uri: string) => void) | undefined;
|
|
106
|
+
/** Called when the session fingerprint is ready (display alongside QR). */
|
|
107
|
+
onSessionFingerprint?: ((fingerprint: string) => void) | undefined;
|
|
108
|
+
/**
|
|
109
|
+
* Called after QR is shown but before transport connects (BLE mode).
|
|
110
|
+
* The returned Promise must resolve when the user is ready to scan.
|
|
111
|
+
* This gives the wallet time to scan the QR before the BLE device picker opens.
|
|
112
|
+
* Only relevant when using a custom transport (e.g. WebBleCentralTransport).
|
|
113
|
+
*/
|
|
114
|
+
onBeforeTransportConnect?: (() => Promise<void>) | undefined;
|
|
115
|
+
}
|
|
116
|
+
export declare function walletPair(options: WalletPairConnectorOptions): CreateConnectorFn;
|
|
117
|
+
export {};
|
|
118
|
+
//# sourceMappingURL=wagmi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wagmi.d.ts","sourceRoot":"","sources":["../../src/evm/wagmi.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wagmi connector for WalletPair.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* import { walletPair } from 'walletpair-sdk/evm/wagmi'
|
|
6
|
+
* import { createConfig } from 'wagmi'
|
|
7
|
+
*
|
|
8
|
+
* const config = createConfig({
|
|
9
|
+
* connectors: [
|
|
10
|
+
* walletPair({
|
|
11
|
+
* relayUrl: 'wss://relay.walletpair.org/v1',
|
|
12
|
+
* meta: { name: 'MyDApp', description: 'A dApp', url: 'https://mydapp.com', icon: 'https://mydapp.com/icon.png' },
|
|
13
|
+
* onPairingUri: (uri) => { showQrCode(uri) },
|
|
14
|
+
* onSessionFingerprint: (fp) => { showFingerprint(fp) },
|
|
15
|
+
* }),
|
|
16
|
+
* ],
|
|
17
|
+
* })
|
|
18
|
+
*/
|
|
19
|
+
import { DAppSession } from '../dapp-session.js';
|
|
20
|
+
import { evmNumericChainId } from '../types.js';
|
|
21
|
+
import { WebSocketTransport } from '../ws-transport.js';
|
|
22
|
+
import { WalletPairProvider } from './eip1193.js';
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
// Connector factory
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
export function walletPair(options) {
|
|
27
|
+
let session = null;
|
|
28
|
+
let provider = null;
|
|
29
|
+
let sessionEventsBound = false;
|
|
30
|
+
function persistenceFromStorage(storage) {
|
|
31
|
+
if (!storage)
|
|
32
|
+
return undefined;
|
|
33
|
+
return {
|
|
34
|
+
save: (snapshot) => storage.setItem('walletPair.session', snapshot),
|
|
35
|
+
load: () => storage.getItem('walletPair.session'),
|
|
36
|
+
clear: () => storage.removeItem('walletPair.session'),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function getOrCreateSession(config) {
|
|
40
|
+
if (!session) {
|
|
41
|
+
const transport = options.transport ??
|
|
42
|
+
(() => {
|
|
43
|
+
if (!options.relayUrl) {
|
|
44
|
+
throw new Error('WalletPair requires either relayUrl or transport');
|
|
45
|
+
}
|
|
46
|
+
return new WebSocketTransport(options.relayUrl);
|
|
47
|
+
})();
|
|
48
|
+
session = new DAppSession({
|
|
49
|
+
transport,
|
|
50
|
+
meta: options.meta,
|
|
51
|
+
requestTimeout: options.requestTimeout,
|
|
52
|
+
persistence: persistenceFromStorage(config?.storage),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return session;
|
|
56
|
+
}
|
|
57
|
+
function getOrCreateProvider(chainId, config) {
|
|
58
|
+
if (!provider) {
|
|
59
|
+
provider = new WalletPairProvider({
|
|
60
|
+
session: getOrCreateSession(config),
|
|
61
|
+
chainId,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
return provider;
|
|
65
|
+
}
|
|
66
|
+
function bindSessionEvents(config, chainId) {
|
|
67
|
+
const s = getOrCreateSession(config);
|
|
68
|
+
if (sessionEventsBound)
|
|
69
|
+
return;
|
|
70
|
+
sessionEventsBound = true;
|
|
71
|
+
// Bridge WalletPair events → wagmi emitter
|
|
72
|
+
s.on('event', ({ event, data }) => {
|
|
73
|
+
if (event === 'accountsChanged') {
|
|
74
|
+
const accts = data?.accounts ?? data;
|
|
75
|
+
if (Array.isArray(accts)) {
|
|
76
|
+
config.emitter.emit('change', { accounts: accts });
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
else if (event === 'chainChanged') {
|
|
80
|
+
const raw = data?.chainId ?? data;
|
|
81
|
+
let newId;
|
|
82
|
+
if (typeof raw === 'string' && raw.startsWith('eip155:')) {
|
|
83
|
+
newId = evmNumericChainId(raw) ?? chainId;
|
|
84
|
+
}
|
|
85
|
+
else if (typeof raw === 'string') {
|
|
86
|
+
newId = Number.parseInt(raw, raw.startsWith('0x') ? 16 : 10);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
newId = raw;
|
|
90
|
+
}
|
|
91
|
+
config.emitter.emit('change', { chainId: newId });
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
async function requestAccountsWhenConnected(s, p) {
|
|
96
|
+
if (s.phase === 'connected') {
|
|
97
|
+
return (await p.request({ method: 'eth_requestAccounts' }));
|
|
98
|
+
}
|
|
99
|
+
return new Promise((resolve, reject) => {
|
|
100
|
+
const cleanup = [];
|
|
101
|
+
cleanup.push(s.on('phase', async (phase) => {
|
|
102
|
+
if (phase === 'connected') {
|
|
103
|
+
try {
|
|
104
|
+
const accts = (await p.request({ method: 'eth_requestAccounts' }));
|
|
105
|
+
for (const off of cleanup)
|
|
106
|
+
off();
|
|
107
|
+
resolve(accts);
|
|
108
|
+
}
|
|
109
|
+
catch (e) {
|
|
110
|
+
for (const off of cleanup)
|
|
111
|
+
off();
|
|
112
|
+
reject(e);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
else if (phase === 'closed') {
|
|
116
|
+
for (const off of cleanup)
|
|
117
|
+
off();
|
|
118
|
+
reject(new Error('Session closed'));
|
|
119
|
+
}
|
|
120
|
+
}));
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
return (config) => {
|
|
124
|
+
return {
|
|
125
|
+
id: 'walletPair',
|
|
126
|
+
name: options.meta.name,
|
|
127
|
+
type: 'walletPair',
|
|
128
|
+
async connect(params) {
|
|
129
|
+
const chainId = params?.chainId ?? config.chains[0].id;
|
|
130
|
+
const s = getOrCreateSession(config);
|
|
131
|
+
const p = getOrCreateProvider(chainId, config);
|
|
132
|
+
bindSessionEvents(config, chainId);
|
|
133
|
+
if (params?.isReconnecting) {
|
|
134
|
+
const restored = await s.restoreFromPersistence();
|
|
135
|
+
if (!restored)
|
|
136
|
+
throw new Error('No persisted WalletPair session');
|
|
137
|
+
await s.reconnect();
|
|
138
|
+
const accounts = await requestAccountsWhenConnected(s, p);
|
|
139
|
+
return { accounts, chainId };
|
|
140
|
+
}
|
|
141
|
+
// Start pairing flow
|
|
142
|
+
// If onBeforeTransportConnect is set (BLE mode), defer transport connection
|
|
143
|
+
// so the wallet can scan the QR before the BLE device picker opens.
|
|
144
|
+
const deferTransport = !!options.onBeforeTransportConnect;
|
|
145
|
+
const uri = await s.createPairing({ deferTransport });
|
|
146
|
+
options.onPairingUri?.(uri);
|
|
147
|
+
if (deferTransport && options.onBeforeTransportConnect) {
|
|
148
|
+
await options.onBeforeTransportConnect();
|
|
149
|
+
await s.connectTransport();
|
|
150
|
+
}
|
|
151
|
+
// Emit session fingerprint for display alongside QR
|
|
152
|
+
options.onSessionFingerprint?.(s.sessionFingerprint);
|
|
153
|
+
// Wait for wallet to join (auto-accepted after sealed_join verification)
|
|
154
|
+
const accounts = await requestAccountsWhenConnected(s, p);
|
|
155
|
+
// DAppSession persists snapshots write-ahead through config.storage.
|
|
156
|
+
return { accounts, chainId };
|
|
157
|
+
},
|
|
158
|
+
async disconnect() {
|
|
159
|
+
session?.close();
|
|
160
|
+
session = null;
|
|
161
|
+
provider = null;
|
|
162
|
+
sessionEventsBound = false;
|
|
163
|
+
if (config.storage) {
|
|
164
|
+
await config.storage.removeItem('walletPair.session');
|
|
165
|
+
}
|
|
166
|
+
},
|
|
167
|
+
async getAccounts() {
|
|
168
|
+
return getOrCreateProvider(undefined, config).getAccounts();
|
|
169
|
+
},
|
|
170
|
+
async getChainId() {
|
|
171
|
+
return Number.parseInt(getOrCreateProvider(undefined, config).getChainId(), 16);
|
|
172
|
+
},
|
|
173
|
+
async getProvider() {
|
|
174
|
+
return getOrCreateProvider(undefined, config);
|
|
175
|
+
},
|
|
176
|
+
async isAuthorized() {
|
|
177
|
+
if (!config.storage)
|
|
178
|
+
return false;
|
|
179
|
+
return getOrCreateSession(config).restoreFromPersistence();
|
|
180
|
+
},
|
|
181
|
+
onAccountsChanged(accounts) {
|
|
182
|
+
config.emitter.emit('change', { accounts });
|
|
183
|
+
},
|
|
184
|
+
onChainChanged(chainId) {
|
|
185
|
+
config.emitter.emit('change', { chainId: Number.parseInt(chainId, 16) });
|
|
186
|
+
},
|
|
187
|
+
onDisconnect() {
|
|
188
|
+
config.emitter.emit('disconnect', undefined);
|
|
189
|
+
},
|
|
190
|
+
async switchChain(params) {
|
|
191
|
+
const p = getOrCreateProvider(undefined, config);
|
|
192
|
+
await p.request({
|
|
193
|
+
method: 'wallet_switchEthereumChain',
|
|
194
|
+
params: [{ chainId: `0x${params.chainId.toString(16)}` }],
|
|
195
|
+
});
|
|
196
|
+
config.emitter.emit('change', { chainId: params.chainId });
|
|
197
|
+
const chain = config.chains.find((c) => c.id === params.chainId);
|
|
198
|
+
if (!chain)
|
|
199
|
+
throw new Error(`Chain ${params.chainId} not configured`);
|
|
200
|
+
return chain;
|
|
201
|
+
},
|
|
202
|
+
};
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=wagmi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wagmi.js","sourceRoot":"","sources":["../../src/evm/wagmi.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WalletPair SDK — connect dApps and wallets over the WalletPair protocol.
|
|
3
|
+
*
|
|
4
|
+
* Main entry point re-exports everything needed for both dApp and wallet sides.
|
|
5
|
+
*
|
|
6
|
+
* Subpath exports:
|
|
7
|
+
* - walletpair-sdk Core (this file)
|
|
8
|
+
* - walletpair-sdk/evm EVM: EIP-1193 provider + wagmi connector
|
|
9
|
+
* - walletpair-sdk/evm/eip1193 EIP-1193 provider only
|
|
10
|
+
* - walletpair-sdk/evm/wagmi Wagmi connector only
|
|
11
|
+
* - walletpair-sdk/ble BLE transport + framing utilities
|
|
12
|
+
*/
|
|
13
|
+
export type { DirectionalSessionKeys, SessionCryptoContext, X25519KeyPair } from './crypto.js';
|
|
14
|
+
export { b64urlDecode, b64urlEncode, buildPairingUri, bytesToHex, canonicalJson, computeHandshakeTranscriptHash, computeSessionFingerprint, computeSharedSecret, deriveDirectionalSessionKeys, deriveJoinEncryptionKey, deriveSessionKey, generateChannelId, generateX25519KeyPair, getPublicKey, hexToBytes, parsePairingUri, sealJoin, sealPayload, sha256Hex, signSnapshot, unsealJoin, unsealPayload, verifySnapshot, } from './crypto.js';
|
|
15
|
+
export { DAppSession } from './dapp-session.js';
|
|
16
|
+
export { Emitter } from './emitter.js';
|
|
17
|
+
export type { AcceptMessage, Capabilities, CloseMessage, CloseReason, CreateMessage, DAppMeta, DAppPhase, DAppSessionEvents, DAppSessionOptions, EventMessage, JoinMessage, PairingParams, PendingRequest, PingMessage, PongMessage, ProtocolMessage, ProtocolMessageBase, ReadyMessage, RequestMessage, ResponseMessage, SessionPersistence, TerminateMessage, Transport, TransportState, WalletMeta, WalletPhase, WalletSessionEvents, WalletSessionOptions, } from './types.js';
|
|
18
|
+
export { evmChainId, evmNumericChainId, formatChainId, parseChainId, } from './types.js';
|
|
19
|
+
export { WalletSession } from './wallet-session.js';
|
|
20
|
+
export type { WebSocketTransportOptions } from './ws-transport.js';
|
|
21
|
+
export { WebSocketTransport } from './ws-transport.js';
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,YAAY,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE9F,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,UAAU,EACV,aAAa,EACb,8BAA8B,EAC9B,yBAAyB,EACzB,mBAAmB,EACnB,4BAA4B,EAC5B,uBAAuB,EACvB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,EACZ,UAAU,EACV,eAAe,EACf,QAAQ,EACR,WAAW,EACX,SAAS,EACT,YAAY,EACZ,UAAU,EACV,aAAa,EACb,cAAc,GACf,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,YAAY,EACV,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,aAAa,EACb,QAAQ,EACR,SAAS,EACT,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,aAAa,EACb,cAAc,EACd,WAAW,EACX,WAAW,EACX,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,SAAS,EACT,cAAc,EACd,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,YAAY,CAAA;AAEnB,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,YAAY,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAA;AAElE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WalletPair SDK — connect dApps and wallets over the WalletPair protocol.
|
|
3
|
+
*
|
|
4
|
+
* Main entry point re-exports everything needed for both dApp and wallet sides.
|
|
5
|
+
*
|
|
6
|
+
* Subpath exports:
|
|
7
|
+
* - walletpair-sdk Core (this file)
|
|
8
|
+
* - walletpair-sdk/evm EVM: EIP-1193 provider + wagmi connector
|
|
9
|
+
* - walletpair-sdk/evm/eip1193 EIP-1193 provider only
|
|
10
|
+
* - walletpair-sdk/evm/wagmi Wagmi connector only
|
|
11
|
+
* - walletpair-sdk/ble BLE transport + framing utilities
|
|
12
|
+
*/
|
|
13
|
+
// Crypto
|
|
14
|
+
export { b64urlDecode, b64urlEncode, buildPairingUri, bytesToHex, canonicalJson, computeHandshakeTranscriptHash, computeSessionFingerprint, computeSharedSecret, deriveDirectionalSessionKeys, deriveJoinEncryptionKey, deriveSessionKey, generateChannelId, generateX25519KeyPair, getPublicKey, hexToBytes, parsePairingUri, sealJoin, sealPayload, sha256Hex, signSnapshot, unsealJoin, unsealPayload, verifySnapshot, } from './crypto.js';
|
|
15
|
+
// Sessions
|
|
16
|
+
export { DAppSession } from './dapp-session.js';
|
|
17
|
+
// Emitter
|
|
18
|
+
export { Emitter } from './emitter.js';
|
|
19
|
+
// Chain ID helpers (CAIP-2)
|
|
20
|
+
export { evmChainId, evmNumericChainId, formatChainId, parseChainId, } from './types.js';
|
|
21
|
+
export { WalletSession } from './wallet-session.js';
|
|
22
|
+
// Transport
|
|
23
|
+
export { WebSocketTransport } from './ws-transport.js';
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,SAAS;AACT,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,UAAU,EACV,aAAa,EACb,8BAA8B,EAC9B,yBAAyB,EACzB,mBAAmB,EACnB,4BAA4B,EAC5B,uBAAuB,EACvB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,EACZ,UAAU,EACV,eAAe,EACf,QAAQ,EACR,WAAW,EACX,SAAS,EACT,YAAY,EACZ,UAAU,EACV,aAAa,EACb,cAAc,GACf,MAAM,aAAa,CAAA;AACpB,WAAW;AACX,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,UAAU;AACV,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAgCtC,4BAA4B;AAC5B,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,YAAY,GACb,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,YAAY;AACZ,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WalletPair SDK — shared types and interfaces.
|
|
3
|
+
*
|
|
4
|
+
* Multi-chain ready: uses CAIP-2 chain IDs throughout (e.g. "eip155:1").
|
|
5
|
+
*/
|
|
6
|
+
export type TransportState = 'disconnected' | 'connecting' | 'connected';
|
|
7
|
+
export interface Transport {
|
|
8
|
+
readonly state: TransportState;
|
|
9
|
+
send(msg: ProtocolMessage): void;
|
|
10
|
+
connect(): Promise<void>;
|
|
11
|
+
disconnect(): void;
|
|
12
|
+
onMessage(handler: (msg: ProtocolMessage) => void): void;
|
|
13
|
+
onClose(handler: () => void): void;
|
|
14
|
+
onOpen(handler: () => void): void;
|
|
15
|
+
}
|
|
16
|
+
export interface ProtocolMessageBase {
|
|
17
|
+
v: 1;
|
|
18
|
+
t: string;
|
|
19
|
+
ch: string;
|
|
20
|
+
ts: number;
|
|
21
|
+
from: string;
|
|
22
|
+
body: Record<string, unknown>;
|
|
23
|
+
}
|
|
24
|
+
export interface CreateMessage extends ProtocolMessageBase {
|
|
25
|
+
t: 'create';
|
|
26
|
+
body: {
|
|
27
|
+
meta: DAppMeta;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export interface JoinMessage extends ProtocolMessageBase {
|
|
31
|
+
t: 'join';
|
|
32
|
+
body: {
|
|
33
|
+
sealed_join: string | null;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export interface AcceptMessage extends ProtocolMessageBase {
|
|
37
|
+
t: 'accept';
|
|
38
|
+
body: {
|
|
39
|
+
target: string;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export interface ReadyMessage extends ProtocolMessageBase {
|
|
43
|
+
t: 'ready';
|
|
44
|
+
body: {
|
|
45
|
+
state: 'waiting' | 'connected';
|
|
46
|
+
role: 'dapp' | 'wallet';
|
|
47
|
+
self: string;
|
|
48
|
+
remote: string | null;
|
|
49
|
+
reconnect: boolean;
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export interface RequestMessage extends ProtocolMessageBase {
|
|
53
|
+
t: 'req';
|
|
54
|
+
body: {
|
|
55
|
+
id: string;
|
|
56
|
+
sealed: string;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
export interface ResponseMessage extends ProtocolMessageBase {
|
|
60
|
+
t: 'res';
|
|
61
|
+
body: {
|
|
62
|
+
id: string;
|
|
63
|
+
sealed: string;
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
export interface EventMessage extends ProtocolMessageBase {
|
|
67
|
+
t: 'evt';
|
|
68
|
+
body: {
|
|
69
|
+
id: string;
|
|
70
|
+
sealed: string;
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
export interface PingMessage extends ProtocolMessageBase {
|
|
74
|
+
t: 'ping';
|
|
75
|
+
body: Record<string, never>;
|
|
76
|
+
}
|
|
77
|
+
export interface PongMessage extends ProtocolMessageBase {
|
|
78
|
+
t: 'pong';
|
|
79
|
+
body: Record<string, never>;
|
|
80
|
+
}
|
|
81
|
+
export interface CloseMessage extends ProtocolMessageBase {
|
|
82
|
+
t: 'close';
|
|
83
|
+
body: {
|
|
84
|
+
reason: CloseReason;
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
export interface TerminateMessage extends ProtocolMessageBase {
|
|
88
|
+
t: 'terminate';
|
|
89
|
+
from: '_adapter';
|
|
90
|
+
body: {
|
|
91
|
+
reason: CloseReason;
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
export type ProtocolMessage = CreateMessage | JoinMessage | AcceptMessage | ReadyMessage | RequestMessage | ResponseMessage | EventMessage | PingMessage | PongMessage | CloseMessage | TerminateMessage;
|
|
95
|
+
export type CloseReason = 'normal' | 'user_rejected' | 'unsupported_capability' | 'channel_not_found' | 'channel_exists' | 'already_connected' | 'invalid_state' | 'invalid_role' | 'timeout' | 'rate_limited' | 'payload_too_large' | 'protocol_error' | 'unsupported_version' | 'decryption_failed';
|
|
96
|
+
export interface Capabilities {
|
|
97
|
+
/** Supported RPC methods (e.g. "wallet_getAccounts", "wallet_signMessage"). */
|
|
98
|
+
methods: string[];
|
|
99
|
+
/** Supported events (e.g. "accountsChanged", "chainChanged"). */
|
|
100
|
+
events: string[];
|
|
101
|
+
/** CAIP-2 chain IDs (e.g. "eip155:1", "solana:mainnet"). */
|
|
102
|
+
chains: string[];
|
|
103
|
+
/** Sub-protocol version map (e.g. { evm: 1 }). §8 */
|
|
104
|
+
version?: Record<string, number> | undefined;
|
|
105
|
+
}
|
|
106
|
+
export interface DAppMeta {
|
|
107
|
+
name: string;
|
|
108
|
+
description: string;
|
|
109
|
+
url: string;
|
|
110
|
+
icon: string;
|
|
111
|
+
}
|
|
112
|
+
export interface WalletMeta {
|
|
113
|
+
name: string;
|
|
114
|
+
description: string;
|
|
115
|
+
url: string;
|
|
116
|
+
icon: string;
|
|
117
|
+
[key: string]: unknown;
|
|
118
|
+
}
|
|
119
|
+
export type DAppPhase = 'idle' | 'waiting' | 'pending_accept' | 'connected' | 'disconnected' | 'closed';
|
|
120
|
+
export type WalletPhase = 'idle' | 'waiting' | 'waiting_accept' | 'connected' | 'disconnected' | 'closed';
|
|
121
|
+
export interface DAppSessionEvents {
|
|
122
|
+
[key: string]: unknown;
|
|
123
|
+
phase: DAppPhase;
|
|
124
|
+
pairingUri: string;
|
|
125
|
+
sessionFingerprint: string;
|
|
126
|
+
walletJoined: {
|
|
127
|
+
capabilities?: Capabilities | undefined;
|
|
128
|
+
meta?: WalletMeta | undefined;
|
|
129
|
+
};
|
|
130
|
+
response: {
|
|
131
|
+
id: string;
|
|
132
|
+
ok: boolean;
|
|
133
|
+
result: unknown;
|
|
134
|
+
};
|
|
135
|
+
event: {
|
|
136
|
+
event: string;
|
|
137
|
+
data: unknown;
|
|
138
|
+
};
|
|
139
|
+
error: Error;
|
|
140
|
+
}
|
|
141
|
+
export interface WalletSessionEvents {
|
|
142
|
+
[key: string]: unknown;
|
|
143
|
+
phase: WalletPhase;
|
|
144
|
+
sessionFingerprint: string;
|
|
145
|
+
request: {
|
|
146
|
+
id: string;
|
|
147
|
+
method: string;
|
|
148
|
+
params: unknown;
|
|
149
|
+
};
|
|
150
|
+
error: Error;
|
|
151
|
+
}
|
|
152
|
+
export interface PairingParams {
|
|
153
|
+
ch: string;
|
|
154
|
+
pubkey: string;
|
|
155
|
+
/** Relay URL. Undefined when using direct transport (BLE). */
|
|
156
|
+
relay?: string | undefined;
|
|
157
|
+
name: string;
|
|
158
|
+
/** DApp website URL. */
|
|
159
|
+
url: string;
|
|
160
|
+
/** DApp icon URL. */
|
|
161
|
+
icon: string;
|
|
162
|
+
/** Methods the dApp intends to call (§9.1). */
|
|
163
|
+
methods?: string[] | undefined;
|
|
164
|
+
/** CAIP-2 chains the dApp intends to use (§9.1). */
|
|
165
|
+
chains?: string[] | undefined;
|
|
166
|
+
}
|
|
167
|
+
export interface PendingRequest {
|
|
168
|
+
id: string;
|
|
169
|
+
method: string;
|
|
170
|
+
resolve: (result: unknown) => void;
|
|
171
|
+
reject: (error: Error) => void;
|
|
172
|
+
timer?: ReturnType<typeof setTimeout>;
|
|
173
|
+
}
|
|
174
|
+
export interface SessionPersistence {
|
|
175
|
+
/**
|
|
176
|
+
* Persist a complete serialized session snapshot. Implementations used for
|
|
177
|
+
* reconnect MUST make this durable before resolving; the SDK calls this
|
|
178
|
+
* before sending each encrypted message after advancing `sendSeq`.
|
|
179
|
+
*/
|
|
180
|
+
save(snapshot: string): void | Promise<void>;
|
|
181
|
+
/** Load the most recent durable snapshot. */
|
|
182
|
+
load?(): string | null | Promise<string | null>;
|
|
183
|
+
/** Remove the durable snapshot when the channel closes. */
|
|
184
|
+
clear?(): void | Promise<void>;
|
|
185
|
+
}
|
|
186
|
+
export interface DAppSessionOptions {
|
|
187
|
+
transport: Transport;
|
|
188
|
+
/** DApp metadata (name, description, url, icon). Included in pairing URI and create message. */
|
|
189
|
+
meta: DAppMeta;
|
|
190
|
+
/** Methods the dApp intends to call (included in pairing URI §9.1). */
|
|
191
|
+
methods?: string[] | undefined;
|
|
192
|
+
/** CAIP-2 chains the dApp intends to use (included in pairing URI §9.1). */
|
|
193
|
+
chains?: string[] | undefined;
|
|
194
|
+
/** Request timeout in ms (default 120_000). */
|
|
195
|
+
requestTimeout?: number | undefined;
|
|
196
|
+
/** Session lifetime in ms (default 86_400_000 = 24h). §16 rule 16. */
|
|
197
|
+
sessionTtl?: number | undefined;
|
|
198
|
+
/** Auto-accept known wallets on rejoin (default true). */
|
|
199
|
+
autoAccept?: boolean | undefined;
|
|
200
|
+
/** Durable snapshot persistence for reconnect and write-ahead counters. */
|
|
201
|
+
persistence?: SessionPersistence | undefined;
|
|
202
|
+
}
|
|
203
|
+
export interface WalletSessionOptions {
|
|
204
|
+
transport: Transport;
|
|
205
|
+
/** Wallet capabilities to advertise. */
|
|
206
|
+
capabilities: Capabilities;
|
|
207
|
+
/** Wallet metadata (name, description, url, icon). */
|
|
208
|
+
meta: WalletMeta;
|
|
209
|
+
/** Session lifetime in ms (default 86_400_000 = 24h). §16 rule 16. */
|
|
210
|
+
sessionTtl?: number | undefined;
|
|
211
|
+
/** Durable snapshot persistence for reconnect and write-ahead counters. */
|
|
212
|
+
persistence?: SessionPersistence | undefined;
|
|
213
|
+
}
|
|
214
|
+
/** Parse CAIP-2 chain ID into namespace and reference. */
|
|
215
|
+
export declare function parseChainId(caip2: string): {
|
|
216
|
+
namespace: string;
|
|
217
|
+
reference: string;
|
|
218
|
+
};
|
|
219
|
+
/** Build CAIP-2 chain ID from namespace and reference. */
|
|
220
|
+
export declare function formatChainId(namespace: string, reference: string): string;
|
|
221
|
+
/** Convert EVM numeric chain ID to CAIP-2. */
|
|
222
|
+
export declare function evmChainId(id: number): string;
|
|
223
|
+
/** Extract EVM numeric chain ID from CAIP-2. Returns null if not eip155. */
|
|
224
|
+
export declare function evmNumericChainId(caip2: string): number | null;
|
|
225
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|