@phantom/browser-injected-sdk 0.0.9
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 +161 -0
- package/dist/auto-confirm/index.d.ts +37 -0
- package/dist/auto-confirm/index.js +107 -0
- package/dist/auto-confirm/index.mjs +82 -0
- package/dist/chunk-GV6AIHPN.mjs +18 -0
- package/dist/chunk-QNVIOBKG.mjs +382 -0
- package/dist/chunk-WUKYLWAZ.mjs +0 -0
- package/dist/ethereum/index.d.ts +1 -0
- package/dist/ethereum/index.js +416 -0
- package/dist/ethereum/index.mjs +8 -0
- package/dist/index-2f448acb.d.ts +168 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +452 -0
- package/dist/index.mjs +41 -0
- package/dist/solana/index.d.ts +139 -0
- package/dist/solana/index.js +413 -0
- package/dist/solana/index.mjs +379 -0
- package/package.json +61 -0
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__privateAdd,
|
|
3
|
+
__privateMethod
|
|
4
|
+
} from "./chunk-GV6AIHPN.mjs";
|
|
5
|
+
|
|
6
|
+
// src/ethereum/strategies/injected.ts
|
|
7
|
+
var MAX_RETRIES = 4;
|
|
8
|
+
var BASE_DELAY = 100;
|
|
9
|
+
var _getProvider, getProvider_fn;
|
|
10
|
+
var InjectedEthereumStrategy = class {
|
|
11
|
+
constructor() {
|
|
12
|
+
__privateAdd(this, _getProvider);
|
|
13
|
+
this.type = "injected" /* INJECTED */;
|
|
14
|
+
}
|
|
15
|
+
load() {
|
|
16
|
+
let retryCount = 0;
|
|
17
|
+
const scheduleRetry = (resolve, reject) => {
|
|
18
|
+
const delay = BASE_DELAY * Math.pow(2, Math.min(retryCount, 5));
|
|
19
|
+
setTimeout(() => {
|
|
20
|
+
if (__privateMethod(this, _getProvider, getProvider_fn).call(this)) {
|
|
21
|
+
resolve();
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
retryCount++;
|
|
25
|
+
if (retryCount >= MAX_RETRIES) {
|
|
26
|
+
reject();
|
|
27
|
+
} else {
|
|
28
|
+
scheduleRetry(resolve, reject);
|
|
29
|
+
}
|
|
30
|
+
}, delay);
|
|
31
|
+
};
|
|
32
|
+
return new Promise((resolve, reject) => {
|
|
33
|
+
scheduleRetry(() => resolve(this), reject);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
get isConnected() {
|
|
37
|
+
const provider = __privateMethod(this, _getProvider, getProvider_fn).call(this);
|
|
38
|
+
return provider?.isConnected && provider.selectedAddress ? true : false;
|
|
39
|
+
}
|
|
40
|
+
async connect({ onlyIfTrusted }) {
|
|
41
|
+
const provider = __privateMethod(this, _getProvider, getProvider_fn).call(this);
|
|
42
|
+
if (!provider) {
|
|
43
|
+
throw new Error("Provider not found.");
|
|
44
|
+
}
|
|
45
|
+
if (provider.isConnected && provider.selectedAddress) {
|
|
46
|
+
return this.getAccounts();
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
const accounts = await provider.request({
|
|
50
|
+
method: onlyIfTrusted ? "eth_accounts" : "eth_requestAccounts"
|
|
51
|
+
});
|
|
52
|
+
return accounts;
|
|
53
|
+
} catch (_) {
|
|
54
|
+
return void 0;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async disconnect() {
|
|
58
|
+
return Promise.resolve();
|
|
59
|
+
}
|
|
60
|
+
async getAccounts() {
|
|
61
|
+
const provider = __privateMethod(this, _getProvider, getProvider_fn).call(this);
|
|
62
|
+
if (!provider) {
|
|
63
|
+
return [];
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
const accounts = await provider.request({ method: "eth_accounts" });
|
|
67
|
+
return accounts || [];
|
|
68
|
+
} catch (_) {
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async signMessage(message, address) {
|
|
73
|
+
const provider = __privateMethod(this, _getProvider, getProvider_fn).call(this);
|
|
74
|
+
if (!provider) {
|
|
75
|
+
throw new Error("Provider not found.");
|
|
76
|
+
}
|
|
77
|
+
if (!provider.isConnected) {
|
|
78
|
+
throw new Error("Provider is not connected.");
|
|
79
|
+
}
|
|
80
|
+
const signature = await provider.request({
|
|
81
|
+
method: "eth_sign",
|
|
82
|
+
params: [address, message]
|
|
83
|
+
});
|
|
84
|
+
return signature;
|
|
85
|
+
}
|
|
86
|
+
async signPersonalMessage(message, address) {
|
|
87
|
+
const provider = __privateMethod(this, _getProvider, getProvider_fn).call(this);
|
|
88
|
+
if (!provider) {
|
|
89
|
+
throw new Error("Provider not found.");
|
|
90
|
+
}
|
|
91
|
+
if (!provider.isConnected) {
|
|
92
|
+
throw new Error("Provider is not connected.");
|
|
93
|
+
}
|
|
94
|
+
const signature = await provider.request({
|
|
95
|
+
method: "personal_sign",
|
|
96
|
+
params: [message, address]
|
|
97
|
+
});
|
|
98
|
+
return signature;
|
|
99
|
+
}
|
|
100
|
+
async signTypedData(typedData, address) {
|
|
101
|
+
const provider = __privateMethod(this, _getProvider, getProvider_fn).call(this);
|
|
102
|
+
if (!provider) {
|
|
103
|
+
throw new Error("Provider not found.");
|
|
104
|
+
}
|
|
105
|
+
if (!provider.isConnected) {
|
|
106
|
+
throw new Error("Provider is not connected.");
|
|
107
|
+
}
|
|
108
|
+
const signature = await provider.request({
|
|
109
|
+
method: "eth_signTypedData_v4",
|
|
110
|
+
params: [address, JSON.stringify(typedData)]
|
|
111
|
+
});
|
|
112
|
+
return signature;
|
|
113
|
+
}
|
|
114
|
+
async signIn(signInData) {
|
|
115
|
+
const provider = __privateMethod(this, _getProvider, getProvider_fn).call(this);
|
|
116
|
+
if (!provider) {
|
|
117
|
+
throw new Error("Provider not found.");
|
|
118
|
+
}
|
|
119
|
+
const message = `Sign in to ${signInData.domain || "this application"}`;
|
|
120
|
+
const address = provider.selectedAddress;
|
|
121
|
+
if (!address) {
|
|
122
|
+
throw new Error("No address available.");
|
|
123
|
+
}
|
|
124
|
+
const signature = await this.signPersonalMessage(message, address);
|
|
125
|
+
return {
|
|
126
|
+
address,
|
|
127
|
+
signature,
|
|
128
|
+
signedMessage: message
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
async sendTransaction(transaction) {
|
|
132
|
+
const provider = __privateMethod(this, _getProvider, getProvider_fn).call(this);
|
|
133
|
+
if (!provider) {
|
|
134
|
+
throw new Error("Provider not found.");
|
|
135
|
+
}
|
|
136
|
+
if (!provider.isConnected) {
|
|
137
|
+
throw new Error("Provider is not connected.");
|
|
138
|
+
}
|
|
139
|
+
const txHash = await provider.request({
|
|
140
|
+
method: "eth_sendTransaction",
|
|
141
|
+
params: [transaction]
|
|
142
|
+
});
|
|
143
|
+
return txHash;
|
|
144
|
+
}
|
|
145
|
+
async signTransaction(transaction) {
|
|
146
|
+
const provider = __privateMethod(this, _getProvider, getProvider_fn).call(this);
|
|
147
|
+
if (!provider) {
|
|
148
|
+
throw new Error("Provider not found.");
|
|
149
|
+
}
|
|
150
|
+
if (!provider.isConnected) {
|
|
151
|
+
throw new Error("Provider is not connected.");
|
|
152
|
+
}
|
|
153
|
+
const signedTx = await provider.request({
|
|
154
|
+
method: "eth_signTransaction",
|
|
155
|
+
params: [transaction]
|
|
156
|
+
});
|
|
157
|
+
return signedTx;
|
|
158
|
+
}
|
|
159
|
+
async getChainId() {
|
|
160
|
+
const provider = __privateMethod(this, _getProvider, getProvider_fn).call(this);
|
|
161
|
+
if (!provider) {
|
|
162
|
+
throw new Error("Provider not found.");
|
|
163
|
+
}
|
|
164
|
+
const chainId = await provider.request({ method: "eth_chainId" });
|
|
165
|
+
return chainId;
|
|
166
|
+
}
|
|
167
|
+
async switchChain(chainId) {
|
|
168
|
+
const provider = __privateMethod(this, _getProvider, getProvider_fn).call(this);
|
|
169
|
+
if (!provider) {
|
|
170
|
+
throw new Error("Provider not found.");
|
|
171
|
+
}
|
|
172
|
+
await provider.request({
|
|
173
|
+
method: "wallet_switchEthereumChain",
|
|
174
|
+
params: [{ chainId }]
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
_getProvider = new WeakSet();
|
|
179
|
+
getProvider_fn = function() {
|
|
180
|
+
return window?.phantom?.ethereum;
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
// src/ethereum/getProvider.ts
|
|
184
|
+
async function getProvider(strategy = "injected" /* INJECTED */) {
|
|
185
|
+
if (strategy === "injected") {
|
|
186
|
+
const provider = new InjectedEthereumStrategy();
|
|
187
|
+
try {
|
|
188
|
+
await provider.load();
|
|
189
|
+
return provider;
|
|
190
|
+
} catch (error) {
|
|
191
|
+
throw new Error("Provider not found.");
|
|
192
|
+
}
|
|
193
|
+
} else {
|
|
194
|
+
throw new Error("Invalid provider type.");
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// src/ethereum/eventListeners.ts
|
|
199
|
+
var eventListeners = /* @__PURE__ */ new Map();
|
|
200
|
+
function addEventListener(event, callback) {
|
|
201
|
+
if (!eventListeners.has(event)) {
|
|
202
|
+
eventListeners.set(event, /* @__PURE__ */ new Set());
|
|
203
|
+
}
|
|
204
|
+
const listeners = eventListeners.get(event);
|
|
205
|
+
listeners.add(callback);
|
|
206
|
+
return () => removeEventListener(event, callback);
|
|
207
|
+
}
|
|
208
|
+
function removeEventListener(event, callback) {
|
|
209
|
+
const listeners = eventListeners.get(event);
|
|
210
|
+
if (listeners) {
|
|
211
|
+
listeners.delete(callback);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
function triggerEvent(event, data) {
|
|
215
|
+
const listeners = eventListeners.get(event);
|
|
216
|
+
if (listeners) {
|
|
217
|
+
listeners.forEach((callback) => {
|
|
218
|
+
try {
|
|
219
|
+
callback(data);
|
|
220
|
+
} catch (error) {
|
|
221
|
+
console.error(`Error in ${event} event listener:`, error);
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// src/ethereum/connect.ts
|
|
228
|
+
async function connect() {
|
|
229
|
+
const provider = await getProvider();
|
|
230
|
+
if (!provider) {
|
|
231
|
+
throw new Error("Provider not found.");
|
|
232
|
+
}
|
|
233
|
+
if (provider.isConnected) {
|
|
234
|
+
const accounts = await provider.getAccounts();
|
|
235
|
+
return accounts;
|
|
236
|
+
}
|
|
237
|
+
try {
|
|
238
|
+
const accounts = await provider.connect({ onlyIfTrusted: true });
|
|
239
|
+
if (accounts && accounts.length > 0) {
|
|
240
|
+
triggerEvent("connect", accounts);
|
|
241
|
+
return accounts;
|
|
242
|
+
}
|
|
243
|
+
} catch (error) {
|
|
244
|
+
}
|
|
245
|
+
try {
|
|
246
|
+
const accounts = await provider.connect({ onlyIfTrusted: false });
|
|
247
|
+
if (accounts && accounts.length > 0) {
|
|
248
|
+
triggerEvent("connect", accounts);
|
|
249
|
+
return accounts;
|
|
250
|
+
}
|
|
251
|
+
} catch (error) {
|
|
252
|
+
}
|
|
253
|
+
throw new Error("Failed to connect to Phantom.");
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// src/ethereum/disconnect.ts
|
|
257
|
+
async function disconnect() {
|
|
258
|
+
const provider = await getProvider();
|
|
259
|
+
if (!provider) {
|
|
260
|
+
throw new Error("Provider not found.");
|
|
261
|
+
}
|
|
262
|
+
await provider.disconnect();
|
|
263
|
+
triggerEvent("disconnect", []);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
// src/ethereum/getAccounts.ts
|
|
267
|
+
async function getAccounts() {
|
|
268
|
+
const provider = await getProvider();
|
|
269
|
+
if (!provider) {
|
|
270
|
+
throw new Error("Provider not found.");
|
|
271
|
+
}
|
|
272
|
+
return provider.getAccounts();
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
// src/ethereum/signMessage.ts
|
|
276
|
+
async function signMessage(message, address) {
|
|
277
|
+
const provider = await getProvider();
|
|
278
|
+
if (!provider) {
|
|
279
|
+
throw new Error("Provider not found.");
|
|
280
|
+
}
|
|
281
|
+
if (!provider.isConnected) {
|
|
282
|
+
await provider.connect({ onlyIfTrusted: false });
|
|
283
|
+
}
|
|
284
|
+
return provider.signMessage(message, address);
|
|
285
|
+
}
|
|
286
|
+
async function signPersonalMessage(message, address) {
|
|
287
|
+
const provider = await getProvider();
|
|
288
|
+
if (!provider) {
|
|
289
|
+
throw new Error("Provider not found.");
|
|
290
|
+
}
|
|
291
|
+
if (!provider.isConnected) {
|
|
292
|
+
await provider.connect({ onlyIfTrusted: false });
|
|
293
|
+
}
|
|
294
|
+
return provider.signPersonalMessage(message, address);
|
|
295
|
+
}
|
|
296
|
+
async function signTypedData(typedData, address) {
|
|
297
|
+
const provider = await getProvider();
|
|
298
|
+
if (!provider) {
|
|
299
|
+
throw new Error("Provider not found.");
|
|
300
|
+
}
|
|
301
|
+
if (!provider.isConnected) {
|
|
302
|
+
await provider.connect({ onlyIfTrusted: false });
|
|
303
|
+
}
|
|
304
|
+
return provider.signTypedData(typedData, address);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
// src/ethereum/signIn.ts
|
|
308
|
+
async function signIn(signInData) {
|
|
309
|
+
const provider = await getProvider();
|
|
310
|
+
if (!provider) {
|
|
311
|
+
throw new Error("Provider not found.");
|
|
312
|
+
}
|
|
313
|
+
if (!provider.isConnected) {
|
|
314
|
+
await provider.connect({ onlyIfTrusted: false });
|
|
315
|
+
}
|
|
316
|
+
return provider.signIn(signInData);
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
// src/ethereum/sendTransaction.ts
|
|
320
|
+
async function sendTransaction(transaction) {
|
|
321
|
+
const provider = await getProvider();
|
|
322
|
+
if (!provider) {
|
|
323
|
+
throw new Error("Provider not found.");
|
|
324
|
+
}
|
|
325
|
+
if (!provider.isConnected) {
|
|
326
|
+
await provider.connect({ onlyIfTrusted: false });
|
|
327
|
+
}
|
|
328
|
+
return provider.sendTransaction(transaction);
|
|
329
|
+
}
|
|
330
|
+
async function signTransaction(transaction) {
|
|
331
|
+
const provider = await getProvider();
|
|
332
|
+
if (!provider) {
|
|
333
|
+
throw new Error("Provider not found.");
|
|
334
|
+
}
|
|
335
|
+
if (!provider.isConnected) {
|
|
336
|
+
await provider.connect({ onlyIfTrusted: false });
|
|
337
|
+
}
|
|
338
|
+
return provider.signTransaction(transaction);
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
// src/ethereum/chainUtils.ts
|
|
342
|
+
async function getChainId() {
|
|
343
|
+
const provider = await getProvider();
|
|
344
|
+
if (!provider) {
|
|
345
|
+
throw new Error("Provider not found.");
|
|
346
|
+
}
|
|
347
|
+
return provider.getChainId();
|
|
348
|
+
}
|
|
349
|
+
async function switchChain(chainId) {
|
|
350
|
+
const provider = await getProvider();
|
|
351
|
+
if (!provider) {
|
|
352
|
+
throw new Error("Provider not found.");
|
|
353
|
+
}
|
|
354
|
+
return provider.switchChain(chainId);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
// src/ethereum/plugin.ts
|
|
358
|
+
var ethereum = {
|
|
359
|
+
connect,
|
|
360
|
+
disconnect,
|
|
361
|
+
getAccounts,
|
|
362
|
+
signMessage,
|
|
363
|
+
signPersonalMessage,
|
|
364
|
+
signTypedData,
|
|
365
|
+
signIn,
|
|
366
|
+
sendTransaction,
|
|
367
|
+
signTransaction,
|
|
368
|
+
getChainId,
|
|
369
|
+
switchChain,
|
|
370
|
+
addEventListener,
|
|
371
|
+
removeEventListener
|
|
372
|
+
};
|
|
373
|
+
function createEthereumPlugin() {
|
|
374
|
+
return {
|
|
375
|
+
name: "ethereum",
|
|
376
|
+
create: () => ethereum
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
export {
|
|
381
|
+
createEthereumPlugin
|
|
382
|
+
};
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { d as EthereumEventType, b as EthereumSignInData, E as EthereumTransaction, a as PhantomEthereumProvider, c as createEthereumPlugin } from '../index-2f448acb.js';
|