@multiplatform.one/web3 7.33.0 → 7.34.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/README.md +24 -6
- package/dist/cjs/connectkit/connectors/metaMaskConnectConnector.cjs +14 -3
- package/dist/cjs/connectkit/connectors/metaMaskConnectConnector.native.js +14 -3
- package/dist/cjs/connectkit/connectors/metaMaskConnectConnector.native.js.map +1 -1
- package/dist/cjs/phantom/crypto.cjs +108 -0
- package/dist/cjs/phantom/crypto.native.js +224 -0
- package/dist/cjs/phantom/crypto.native.js.map +1 -0
- package/dist/cjs/phantom/index.cjs +16 -1
- package/dist/cjs/phantom/index.native.js +16 -1
- package/dist/cjs/phantom/index.native.js.map +1 -1
- package/dist/cjs/phantom/solana.cjs +309 -0
- package/dist/cjs/phantom/solana.native.js +466 -0
- package/dist/cjs/phantom/solana.native.js.map +1 -0
- package/dist/cjs/phantom/urls.cjs +68 -3
- package/dist/cjs/phantom/urls.native.js +92 -4
- package/dist/cjs/phantom/urls.native.js.map +1 -1
- package/dist/esm/connectkit/connectors/metaMaskConnectConnector.mjs +14 -3
- package/dist/esm/connectkit/connectors/metaMaskConnectConnector.mjs.map +1 -1
- package/dist/esm/connectkit/connectors/metaMaskConnectConnector.native.js +14 -3
- package/dist/esm/connectkit/connectors/metaMaskConnectConnector.native.js.map +1 -1
- package/dist/esm/phantom/crypto.mjs +67 -0
- package/dist/esm/phantom/crypto.mjs.map +1 -0
- package/dist/esm/phantom/crypto.native.js +180 -0
- package/dist/esm/phantom/crypto.native.js.map +1 -0
- package/dist/esm/phantom/index.mjs +4 -2
- package/dist/esm/phantom/index.mjs.map +1 -1
- package/dist/esm/phantom/index.native.js +4 -2
- package/dist/esm/phantom/index.native.js.map +1 -1
- package/dist/esm/phantom/solana.mjs +271 -0
- package/dist/esm/phantom/solana.mjs.map +1 -0
- package/dist/esm/phantom/solana.native.js +425 -0
- package/dist/esm/phantom/solana.native.js.map +1 -0
- package/dist/esm/phantom/urls.mjs +53 -3
- package/dist/esm/phantom/urls.mjs.map +1 -1
- package/dist/esm/phantom/urls.native.js +77 -4
- package/dist/esm/phantom/urls.native.js.map +1 -1
- package/dist/jsx/connectkit/connectors/metaMaskConnectConnector.mjs +14 -3
- package/dist/jsx/connectkit/connectors/metaMaskConnectConnector.mjs.map +1 -1
- package/dist/jsx/connectkit/connectors/metaMaskConnectConnector.native.js +14 -3
- package/dist/jsx/connectkit/connectors/metaMaskConnectConnector.native.js.map +1 -1
- package/dist/jsx/phantom/crypto.mjs +67 -0
- package/dist/jsx/phantom/crypto.mjs.map +1 -0
- package/dist/jsx/phantom/crypto.native.js +224 -0
- package/dist/jsx/phantom/crypto.native.js.map +1 -0
- package/dist/jsx/phantom/index.mjs +4 -2
- package/dist/jsx/phantom/index.mjs.map +1 -1
- package/dist/jsx/phantom/index.native.js +16 -1
- package/dist/jsx/phantom/index.native.js.map +1 -1
- package/dist/jsx/phantom/solana.mjs +271 -0
- package/dist/jsx/phantom/solana.mjs.map +1 -0
- package/dist/jsx/phantom/solana.native.js +466 -0
- package/dist/jsx/phantom/solana.native.js.map +1 -0
- package/dist/jsx/phantom/urls.mjs +53 -3
- package/dist/jsx/phantom/urls.mjs.map +1 -1
- package/dist/jsx/phantom/urls.native.js +92 -4
- package/dist/jsx/phantom/urls.native.js.map +1 -1
- package/dist/keycloak/login.iife.js +63 -63
- package/package.json +7 -6
- package/src/connectkit/connectors/metaMaskConnectConnector.spec.ts +44 -0
- package/src/connectkit/connectors/metaMaskConnectConnector.ts +30 -2
- package/src/phantom/crypto.spec.ts +61 -0
- package/src/phantom/crypto.ts +88 -0
- package/src/phantom/index.ts +38 -5
- package/src/phantom/solana.spec.ts +262 -0
- package/src/phantom/solana.ts +374 -0
- package/src/phantom/urls.spec.ts +101 -10
- package/src/phantom/urls.ts +119 -4
- package/types/connectkit/connectors/metaMaskConnectConnector.d.ts.map +1 -1
- package/types/phantom/crypto.d.ts +27 -0
- package/types/phantom/crypto.d.ts.map +1 -0
- package/types/phantom/index.d.ts +3 -1
- package/types/phantom/index.d.ts.map +1 -1
- package/types/phantom/solana.d.ts +113 -0
- package/types/phantom/solana.d.ts.map +1 -0
- package/types/phantom/urls.d.ts +46 -2
- package/types/phantom/urls.d.ts.map +1 -1
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
import bs58 from "bs58";
|
|
2
|
+
import { boxKeyPairFromSecretKey, decryptPayload, generateBoxKeyPair, sharedSecret } from "./crypto.mjs";
|
|
3
|
+
import { parsePhantomRedirect, phantomConnectUrl, phantomMethodUrl, stripPhantomRedirect } from "./urls.mjs";
|
|
4
|
+
class PhantomNotConnectedError extends Error {
|
|
5
|
+
constructor() {
|
|
6
|
+
super("no Phantom deeplink session: call connect() first");
|
|
7
|
+
this.name = "PhantomNotConnectedError";
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
const defaultStorageKey = "mpo.web3.phantom.deeplink";
|
|
11
|
+
function defaultStorage() {
|
|
12
|
+
const storage = globalThis.localStorage;
|
|
13
|
+
if (!storage) throw new Error("phantomDeeplink: no localStorage here; pass `storage`");
|
|
14
|
+
return storage;
|
|
15
|
+
}
|
|
16
|
+
function currentHref() {
|
|
17
|
+
const href = globalThis.location?.href;
|
|
18
|
+
if (!href) throw new Error("phantomDeeplink: no location here; pass `redirectLink`");
|
|
19
|
+
return href;
|
|
20
|
+
}
|
|
21
|
+
function phantomDeeplink(config) {
|
|
22
|
+
const storageKey = config.storageKey ?? defaultStorageKey;
|
|
23
|
+
const storage = () => config.storage ?? defaultStorage();
|
|
24
|
+
const now = config.now ?? Date.now;
|
|
25
|
+
const navigate = config.navigate ?? (url => globalThis.location.assign(url));
|
|
26
|
+
const redirectLink = () => config.redirectLink ?? stripPhantomRedirect(currentHref());
|
|
27
|
+
const load = () => {
|
|
28
|
+
const raw = storage().getItem(storageKey);
|
|
29
|
+
if (!raw) return void 0;
|
|
30
|
+
try {
|
|
31
|
+
return JSON.parse(raw);
|
|
32
|
+
} catch {
|
|
33
|
+
return void 0;
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
const save = record => storage().setItem(storageKey, JSON.stringify(record));
|
|
37
|
+
const connected = () => {
|
|
38
|
+
const record = load();
|
|
39
|
+
if (!record?.session || !record.phantomEncryptionPublicKey) throw new PhantomNotConnectedError();
|
|
40
|
+
return record;
|
|
41
|
+
};
|
|
42
|
+
const methodUrl = (record, method, payload) => {
|
|
43
|
+
const keyPair = boxKeyPairFromSecretKey(bs58.decode(record.dappSecretKey));
|
|
44
|
+
return phantomMethodUrl({
|
|
45
|
+
method,
|
|
46
|
+
payload,
|
|
47
|
+
session: record.session,
|
|
48
|
+
dappEncryptionPublicKey: keyPair.publicKey,
|
|
49
|
+
sharedSecret: sharedSecret(bs58.decode(record.phantomEncryptionPublicKey), keyPair.secretKey),
|
|
50
|
+
redirectLink: redirectLink(),
|
|
51
|
+
base: config.base
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
const request = (method, payload) => {
|
|
55
|
+
const record = connected();
|
|
56
|
+
const url = methodUrl(record, method, payload);
|
|
57
|
+
save({
|
|
58
|
+
...record,
|
|
59
|
+
pending: {
|
|
60
|
+
method,
|
|
61
|
+
at: now()
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
navigate(url);
|
|
65
|
+
return url;
|
|
66
|
+
};
|
|
67
|
+
return {
|
|
68
|
+
get publicKey() {
|
|
69
|
+
return load()?.publicKey;
|
|
70
|
+
},
|
|
71
|
+
get connected() {
|
|
72
|
+
const record = load();
|
|
73
|
+
return !!(record?.session && record.phantomEncryptionPublicKey);
|
|
74
|
+
},
|
|
75
|
+
get pending() {
|
|
76
|
+
return load()?.pending;
|
|
77
|
+
},
|
|
78
|
+
connect() {
|
|
79
|
+
const keyPair = generateBoxKeyPair();
|
|
80
|
+
const url = phantomConnectUrl({
|
|
81
|
+
appUrl: config.appUrl,
|
|
82
|
+
dappEncryptionPublicKey: keyPair.publicKey,
|
|
83
|
+
redirectLink: redirectLink(),
|
|
84
|
+
cluster: config.cluster,
|
|
85
|
+
base: config.base
|
|
86
|
+
});
|
|
87
|
+
save({
|
|
88
|
+
dappSecretKey: bs58.encode(keyPair.secretKey),
|
|
89
|
+
cluster: config.cluster,
|
|
90
|
+
pending: {
|
|
91
|
+
method: "connect",
|
|
92
|
+
at: now()
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
navigate(url);
|
|
96
|
+
return url;
|
|
97
|
+
},
|
|
98
|
+
signTransaction(serializedTransaction) {
|
|
99
|
+
return request("signTransaction", {
|
|
100
|
+
transaction: bs58.encode(serializedTransaction)
|
|
101
|
+
});
|
|
102
|
+
},
|
|
103
|
+
signAllTransactions(serializedTransactions) {
|
|
104
|
+
return request("signAllTransactions", {
|
|
105
|
+
transactions: serializedTransactions.map(tx => bs58.encode(tx))
|
|
106
|
+
});
|
|
107
|
+
},
|
|
108
|
+
signAndSendTransaction(serializedTransaction, sendOptions) {
|
|
109
|
+
return request("signAndSendTransaction", {
|
|
110
|
+
transaction: bs58.encode(serializedTransaction),
|
|
111
|
+
...(sendOptions ? {
|
|
112
|
+
sendOptions
|
|
113
|
+
} : {})
|
|
114
|
+
});
|
|
115
|
+
},
|
|
116
|
+
signMessage(message, display) {
|
|
117
|
+
const bytes = typeof message === "string" ? new TextEncoder().encode(message) : message;
|
|
118
|
+
return request("signMessage", {
|
|
119
|
+
message: bs58.encode(bytes),
|
|
120
|
+
...(display ? {
|
|
121
|
+
display
|
|
122
|
+
} : {})
|
|
123
|
+
});
|
|
124
|
+
},
|
|
125
|
+
disconnect() {
|
|
126
|
+
const url = methodUrl(connected(), "disconnect", {});
|
|
127
|
+
storage().removeItem(storageKey);
|
|
128
|
+
navigate(url);
|
|
129
|
+
return url;
|
|
130
|
+
},
|
|
131
|
+
handleRedirect(href) {
|
|
132
|
+
const params = parsePhantomRedirect(href ?? currentHref());
|
|
133
|
+
if (!params) return void 0;
|
|
134
|
+
const record = load();
|
|
135
|
+
const method = record?.pending?.method;
|
|
136
|
+
if (params.errorCode) {
|
|
137
|
+
if (record) save({
|
|
138
|
+
...record,
|
|
139
|
+
pending: void 0
|
|
140
|
+
});
|
|
141
|
+
return {
|
|
142
|
+
ok: false,
|
|
143
|
+
method,
|
|
144
|
+
errorCode: params.errorCode,
|
|
145
|
+
errorMessage: params.errorMessage ?? ""
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
if (!record || !params.data || !params.nonce) {
|
|
149
|
+
return {
|
|
150
|
+
ok: false,
|
|
151
|
+
method,
|
|
152
|
+
errorCode: "-32603",
|
|
153
|
+
errorMessage: "Phantom answered, but this browser holds no matching request"
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
const secretKey = bs58.decode(record.dappSecretKey);
|
|
157
|
+
const phantomKey = method === "connect" ? params.phantomEncryptionPublicKey : record.phantomEncryptionPublicKey;
|
|
158
|
+
if (!phantomKey) {
|
|
159
|
+
return {
|
|
160
|
+
ok: false,
|
|
161
|
+
method,
|
|
162
|
+
errorCode: "-32603",
|
|
163
|
+
errorMessage: "Phantom's answer carries no encryption key"
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
const data = decryptPayload(params.data, params.nonce, sharedSecret(bs58.decode(phantomKey), secretKey));
|
|
167
|
+
switch (method) {
|
|
168
|
+
case "connect":
|
|
169
|
+
{
|
|
170
|
+
const publicKey = String(data.public_key);
|
|
171
|
+
const session = String(data.session);
|
|
172
|
+
save({
|
|
173
|
+
...record,
|
|
174
|
+
phantomEncryptionPublicKey: phantomKey,
|
|
175
|
+
publicKey,
|
|
176
|
+
session,
|
|
177
|
+
pending: void 0
|
|
178
|
+
});
|
|
179
|
+
return {
|
|
180
|
+
ok: true,
|
|
181
|
+
method,
|
|
182
|
+
publicKey,
|
|
183
|
+
session
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
case "signTransaction":
|
|
187
|
+
save({
|
|
188
|
+
...record,
|
|
189
|
+
pending: void 0
|
|
190
|
+
});
|
|
191
|
+
return {
|
|
192
|
+
ok: true,
|
|
193
|
+
method,
|
|
194
|
+
transaction: bs58.decode(String(data.transaction))
|
|
195
|
+
};
|
|
196
|
+
case "signAllTransactions":
|
|
197
|
+
save({
|
|
198
|
+
...record,
|
|
199
|
+
pending: void 0
|
|
200
|
+
});
|
|
201
|
+
return {
|
|
202
|
+
ok: true,
|
|
203
|
+
method,
|
|
204
|
+
transactions: data.transactions.map(tx => bs58.decode(tx))
|
|
205
|
+
};
|
|
206
|
+
case "signAndSendTransaction":
|
|
207
|
+
save({
|
|
208
|
+
...record,
|
|
209
|
+
pending: void 0
|
|
210
|
+
});
|
|
211
|
+
return {
|
|
212
|
+
ok: true,
|
|
213
|
+
method,
|
|
214
|
+
signature: String(data.signature)
|
|
215
|
+
};
|
|
216
|
+
case "signMessage":
|
|
217
|
+
save({
|
|
218
|
+
...record,
|
|
219
|
+
pending: void 0
|
|
220
|
+
});
|
|
221
|
+
return {
|
|
222
|
+
ok: true,
|
|
223
|
+
method,
|
|
224
|
+
signature: bs58.decode(String(data.signature))
|
|
225
|
+
};
|
|
226
|
+
default:
|
|
227
|
+
return {
|
|
228
|
+
ok: false,
|
|
229
|
+
method,
|
|
230
|
+
errorCode: "-32603",
|
|
231
|
+
errorMessage: "Phantom answered a request this browser did not make"
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
},
|
|
235
|
+
forget() {
|
|
236
|
+
storage().removeItem(storageKey);
|
|
237
|
+
}
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
function toBase64(bytes) {
|
|
241
|
+
let binary = "";
|
|
242
|
+
for (const byte of bytes) binary += String.fromCharCode(byte);
|
|
243
|
+
return btoa(binary);
|
|
244
|
+
}
|
|
245
|
+
async function sendSolanaTransaction(rpcUrl, signedTransaction, options = {}) {
|
|
246
|
+
const response = await (options.fetch ?? fetch)(rpcUrl, {
|
|
247
|
+
method: "POST",
|
|
248
|
+
headers: {
|
|
249
|
+
"content-type": "application/json"
|
|
250
|
+
},
|
|
251
|
+
body: JSON.stringify({
|
|
252
|
+
jsonrpc: "2.0",
|
|
253
|
+
id: 1,
|
|
254
|
+
method: "sendTransaction",
|
|
255
|
+
params: [toBase64(signedTransaction), {
|
|
256
|
+
encoding: "base64",
|
|
257
|
+
skipPreflight: options.skipPreflight ?? false
|
|
258
|
+
}]
|
|
259
|
+
})
|
|
260
|
+
});
|
|
261
|
+
const body = await response.json();
|
|
262
|
+
if (body.error) {
|
|
263
|
+
throw Object.assign(new Error(`sendTransaction failed: ${body.error.message}`), {
|
|
264
|
+
code: body.error.code
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
if (typeof body.result !== "string") throw new Error("sendTransaction returned no signature");
|
|
268
|
+
return body.result;
|
|
269
|
+
}
|
|
270
|
+
export { PhantomNotConnectedError, phantomDeeplink, sendSolanaTransaction };
|
|
271
|
+
//# sourceMappingURL=solana.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["bs58","boxKeyPairFromSecretKey","decryptPayload","generateBoxKeyPair","sharedSecret","parsePhantomRedirect","phantomConnectUrl","phantomMethodUrl","stripPhantomRedirect","PhantomNotConnectedError","Error","constructor","name","defaultStorageKey","defaultStorage","storage","globalThis","localStorage","currentHref","href","location","phantomDeeplink","config","storageKey","now","Date","navigate","url","assign","redirectLink","load","raw","getItem","JSON","parse","save","record","setItem","stringify","connected","session","phantomEncryptionPublicKey","methodUrl","method","payload","keyPair","decode","dappSecretKey","dappEncryptionPublicKey","publicKey","secretKey","base","request","pending","at","connect","appUrl","cluster","encode","signTransaction","serializedTransaction","transaction","signAllTransactions","serializedTransactions","transactions","map","tx","signAndSendTransaction","sendOptions","signMessage","message","display","bytes","TextEncoder","disconnect","removeItem","handleRedirect","params","errorCode","ok","errorMessage","data","nonce","phantomKey","String","public_key","signature","forget","toBase64","binary","byte","fromCharCode","btoa","sendSolanaTransaction","rpcUrl","signedTransaction","options","response","fetch","headers","body","jsonrpc","id","encoding","skipPreflight","json","error","Object","code","result"],"sources":["../../../src/phantom/solana.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|