@asseteragmbh/wallet-connector 0.2.1 → 0.2.3
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 +53 -6
- package/dist/{chunk-6OZIE56G.js → chunk-CPSTYPVT.js} +3 -3
- package/dist/{chunk-6OZIE56G.js.map → chunk-CPSTYPVT.js.map} +1 -1
- package/dist/{chunk-YJHLKN7O.js → chunk-RAR3QQGK.js} +49 -4
- package/dist/chunk-RAR3QQGK.js.map +1 -0
- package/dist/{chunk-H7PEM735.js → chunk-ZEOGKINA.js} +24 -3
- package/dist/chunk-ZEOGKINA.js.map +1 -0
- package/dist/index.cjs +99 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +22 -8
- package/dist/index.d.ts +22 -8
- package/dist/index.js +34 -13
- package/dist/index.js.map +1 -1
- package/dist/protocol.cjs +22 -0
- package/dist/protocol.cjs.map +1 -1
- package/dist/protocol.d.cts +27 -2
- package/dist/protocol.d.ts +27 -2
- package/dist/protocol.js +1 -1
- package/dist/{provider-OStA8Fqx.d.ts → provider-BNMvsJst.d.ts} +27 -4
- package/dist/{provider-Cn9rPKZh.d.cts → provider-CfVvuYbQ.d.cts} +27 -4
- package/dist/rainbowkit.cjs +68 -1
- package/dist/rainbowkit.cjs.map +1 -1
- package/dist/rainbowkit.js +3 -3
- package/dist/wagmi.cjs +68 -1
- package/dist/wagmi.cjs.map +1 -1
- package/dist/wagmi.d.cts +1 -1
- package/dist/wagmi.d.ts +1 -1
- package/dist/wagmi.js +3 -3
- package/package.json +6 -6
- package/dist/chunk-H7PEM735.js.map +0 -1
- package/dist/chunk-YJHLKN7O.js.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -68,6 +68,27 @@ function isSecurityMessage(value) {
|
|
|
68
68
|
const data = value.data;
|
|
69
69
|
return isRecord(data) && typeof data.protection === "string" && WALLET_PROTECTIONS.includes(data.protection) && isCount(data.passkeys) && isCount(data.authenticatorApps);
|
|
70
70
|
}
|
|
71
|
+
var MAX_ACCOUNT_NAMES = 50;
|
|
72
|
+
function hasControlCharacter(value) {
|
|
73
|
+
for (const character of value) {
|
|
74
|
+
const code = character.codePointAt(0) ?? 0;
|
|
75
|
+
if (code <= 31 || code >= 127 && code <= 159) return true;
|
|
76
|
+
}
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
function isAccountName(value) {
|
|
80
|
+
if (typeof value !== "string") return false;
|
|
81
|
+
if (hasControlCharacter(value)) return false;
|
|
82
|
+
const trimmed = value.trim();
|
|
83
|
+
return trimmed.length >= 1 && trimmed.length <= 64;
|
|
84
|
+
}
|
|
85
|
+
function isAccountsMessage(value) {
|
|
86
|
+
if (!hasType(value, "accounts")) return false;
|
|
87
|
+
const data = value.data;
|
|
88
|
+
return Array.isArray(data) && data.length <= MAX_ACCOUNT_NAMES && data.every(
|
|
89
|
+
(entry) => isRecord(entry) && typeof entry.address === "string" && EVM_ADDRESS_RE.test(entry.address) && isAccountName(entry.name)
|
|
90
|
+
);
|
|
91
|
+
}
|
|
71
92
|
function isRequestMessage(value) {
|
|
72
93
|
return hasType(value, "request") && typeof value.id === "string" && typeof value.method === "string";
|
|
73
94
|
}
|
|
@@ -154,9 +175,11 @@ function createAsseteraWalletProvider(options) {
|
|
|
154
175
|
let chainIdHex = null;
|
|
155
176
|
let walletDisconnected = false;
|
|
156
177
|
let lastSecurity;
|
|
178
|
+
let lastAccountNameList;
|
|
157
179
|
const pending = /* @__PURE__ */ new Map();
|
|
158
180
|
const listeners = /* @__PURE__ */ new Map();
|
|
159
181
|
let closeTimer = null;
|
|
182
|
+
let requestsSent = 0;
|
|
160
183
|
function currentChainId() {
|
|
161
184
|
return chainIdHex ?? toHexChainId(defaultChainId);
|
|
162
185
|
}
|
|
@@ -287,6 +310,13 @@ function createAsseteraWalletProvider(options) {
|
|
|
287
310
|
};
|
|
288
311
|
emit("assetera_security", lastSecurity);
|
|
289
312
|
}
|
|
313
|
+
function copyAccountNames2(accounts2) {
|
|
314
|
+
return accounts2.map((account) => ({ address: account.address, name: account.name }));
|
|
315
|
+
}
|
|
316
|
+
function handleAccountsMessage(message) {
|
|
317
|
+
lastAccountNameList = copyAccountNames2(message.data);
|
|
318
|
+
emit("assetera_accounts", copyAccountNames2(lastAccountNameList));
|
|
319
|
+
}
|
|
290
320
|
function onWindowMessage(event) {
|
|
291
321
|
if (event.origin !== walletOrigin) return;
|
|
292
322
|
if (popup === null || event.source !== popup) return;
|
|
@@ -303,6 +333,10 @@ function createAsseteraWalletProvider(options) {
|
|
|
303
333
|
handleSecurityMessage(data);
|
|
304
334
|
return;
|
|
305
335
|
}
|
|
336
|
+
if (isAccountsMessage(data)) {
|
|
337
|
+
handleAccountsMessage(data);
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
306
340
|
if (isEventMessage(data)) handleEventMessage(data);
|
|
307
341
|
}
|
|
308
342
|
if (typeof window !== "undefined") window.addEventListener("message", onWindowMessage);
|
|
@@ -326,6 +360,7 @@ function createAsseteraWalletProvider(options) {
|
|
|
326
360
|
if (method === "eth_accounts") return Promise.resolve([...accounts]);
|
|
327
361
|
if (method === "eth_chainId") return Promise.resolve(currentChainId());
|
|
328
362
|
if (method === "eth_requestAccounts") {
|
|
363
|
+
requestsSent += 1;
|
|
329
364
|
const active2 = openPopup();
|
|
330
365
|
if (!active2) return Promise.reject(blockedError());
|
|
331
366
|
return ready.promise.then(() => sendRequest("eth_requestAccounts", params)).then((result) => {
|
|
@@ -343,6 +378,7 @@ function createAsseteraWalletProvider(options) {
|
|
|
343
378
|
)
|
|
344
379
|
);
|
|
345
380
|
}
|
|
381
|
+
requestsSent += 1;
|
|
346
382
|
const active = openPopup();
|
|
347
383
|
if (!active) return Promise.reject(blockedError());
|
|
348
384
|
if (SIGNING_METHODS.has(method)) active.focus();
|
|
@@ -369,6 +405,25 @@ function createAsseteraWalletProvider(options) {
|
|
|
369
405
|
walletDisconnected = false;
|
|
370
406
|
emit("disconnect", disconnectedError("Disconnected from the Assetera Wallet."));
|
|
371
407
|
}
|
|
408
|
+
function prepareSigning() {
|
|
409
|
+
const existed = popup !== null && !popup.closed;
|
|
410
|
+
const active = typeof window === "undefined" ? null : openPopup();
|
|
411
|
+
if (!active) return { opened: false, release: () => {
|
|
412
|
+
} };
|
|
413
|
+
const sentAtPrepare = requestsSent;
|
|
414
|
+
let released = false;
|
|
415
|
+
return {
|
|
416
|
+
opened: true,
|
|
417
|
+
release() {
|
|
418
|
+
if (released) return;
|
|
419
|
+
released = true;
|
|
420
|
+
if (existed || popup !== active || active.closed) return;
|
|
421
|
+
if (requestsSent !== sentAtPrepare || pending.size > 0) return;
|
|
422
|
+
active.close();
|
|
423
|
+
handlePopupClosed();
|
|
424
|
+
}
|
|
425
|
+
};
|
|
426
|
+
}
|
|
372
427
|
function on(event, listener) {
|
|
373
428
|
addListener(event, listener);
|
|
374
429
|
}
|
|
@@ -378,7 +433,18 @@ function createAsseteraWalletProvider(options) {
|
|
|
378
433
|
function lastSecurityStatus() {
|
|
379
434
|
return lastSecurity;
|
|
380
435
|
}
|
|
381
|
-
|
|
436
|
+
function lastAccountNames() {
|
|
437
|
+
return lastAccountNameList === void 0 ? void 0 : copyAccountNames2(lastAccountNameList);
|
|
438
|
+
}
|
|
439
|
+
return {
|
|
440
|
+
request,
|
|
441
|
+
on,
|
|
442
|
+
removeListener,
|
|
443
|
+
disconnect,
|
|
444
|
+
lastSecurityStatus,
|
|
445
|
+
lastAccountNames,
|
|
446
|
+
prepareSigning
|
|
447
|
+
};
|
|
382
448
|
}
|
|
383
449
|
|
|
384
450
|
// src/popup.ts
|
|
@@ -435,6 +501,9 @@ function cancelMessage(reason) {
|
|
|
435
501
|
if (reason === "refused") return "The Assetera Wallet refused the onboarding.";
|
|
436
502
|
return "The Assetera Wallet onboarding failed.";
|
|
437
503
|
}
|
|
504
|
+
function copyAccountNames(accounts) {
|
|
505
|
+
return accounts.map((account) => ({ address: account.address, name: account.name }));
|
|
506
|
+
}
|
|
438
507
|
function showOverlay(win, labels, handlers) {
|
|
439
508
|
const doc = win.document;
|
|
440
509
|
const root = doc.createElement("div");
|
|
@@ -603,6 +672,7 @@ function openAsseteraOnboarding(options) {
|
|
|
603
672
|
});
|
|
604
673
|
}
|
|
605
674
|
let address;
|
|
675
|
+
let lastAccountNameList;
|
|
606
676
|
function onMessage(event) {
|
|
607
677
|
if (event.origin !== walletOrigin) return;
|
|
608
678
|
if (event.source !== activePopup) return;
|
|
@@ -616,7 +686,8 @@ function openAsseteraOnboarding(options) {
|
|
|
616
686
|
chain: data.chain,
|
|
617
687
|
created: data.created ?? true,
|
|
618
688
|
signMessage,
|
|
619
|
-
close
|
|
689
|
+
close,
|
|
690
|
+
lastAccounts: () => lastAccountNameList === void 0 ? void 0 : copyAccountNames(lastAccountNameList)
|
|
620
691
|
});
|
|
621
692
|
return;
|
|
622
693
|
}
|
|
@@ -625,6 +696,11 @@ function openAsseteraOnboarding(options) {
|
|
|
625
696
|
}
|
|
626
697
|
return;
|
|
627
698
|
}
|
|
699
|
+
if (isAccountsMessage(data)) {
|
|
700
|
+
lastAccountNameList = copyAccountNames(data.data);
|
|
701
|
+
options.onAccounts?.(copyAccountNames(lastAccountNameList));
|
|
702
|
+
return;
|
|
703
|
+
}
|
|
628
704
|
if (isResponseMessage(data)) {
|
|
629
705
|
const entry = pending.get(data.id);
|
|
630
706
|
if (!entry) return;
|
|
@@ -703,6 +779,7 @@ function openAsseteraWalletManager(options) {
|
|
|
703
779
|
const activePopup = popup;
|
|
704
780
|
let finished = false;
|
|
705
781
|
let lastSecurity;
|
|
782
|
+
let lastAccounts;
|
|
706
783
|
let closeTimer = null;
|
|
707
784
|
let resolveClosed;
|
|
708
785
|
const closed = new Promise((resolve) => {
|
|
@@ -722,18 +799,27 @@ function openAsseteraWalletManager(options) {
|
|
|
722
799
|
cleanup();
|
|
723
800
|
if (!activePopup.closed) activePopup.close();
|
|
724
801
|
}
|
|
802
|
+
function copyAccountNames2(accounts) {
|
|
803
|
+
return accounts.map((account) => ({ address: account.address, name: account.name }));
|
|
804
|
+
}
|
|
725
805
|
function onMessage(event) {
|
|
726
806
|
if (event.origin !== walletOrigin) return;
|
|
727
807
|
if (event.source !== activePopup) return;
|
|
728
808
|
const data = event.data;
|
|
729
|
-
if (
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
809
|
+
if (isSecurityMessage(data)) {
|
|
810
|
+
const status = {
|
|
811
|
+
protection: data.data.protection,
|
|
812
|
+
passkeys: data.data.passkeys,
|
|
813
|
+
authenticatorApps: data.data.authenticatorApps
|
|
814
|
+
};
|
|
815
|
+
lastSecurity = status;
|
|
816
|
+
options.onSecurity?.(status);
|
|
817
|
+
return;
|
|
818
|
+
}
|
|
819
|
+
if (isAccountsMessage(data)) {
|
|
820
|
+
lastAccounts = copyAccountNames2(data.data);
|
|
821
|
+
options.onAccounts?.(copyAccountNames2(lastAccounts));
|
|
822
|
+
}
|
|
737
823
|
}
|
|
738
824
|
targetWindow.addEventListener("message", onMessage);
|
|
739
825
|
closeTimer = setInterval(() => {
|
|
@@ -742,7 +828,8 @@ function openAsseteraWalletManager(options) {
|
|
|
742
828
|
return {
|
|
743
829
|
close,
|
|
744
830
|
closed,
|
|
745
|
-
lastSecurity: () => lastSecurity
|
|
831
|
+
lastSecurity: () => lastSecurity,
|
|
832
|
+
lastAccounts: () => lastAccounts === void 0 ? void 0 : copyAccountNames2(lastAccounts)
|
|
746
833
|
};
|
|
747
834
|
}
|
|
748
835
|
|
|
@@ -759,6 +846,7 @@ exports.SIGN_IN_HINTS = SIGN_IN_HINTS;
|
|
|
759
846
|
exports.SUPPORTED_METHODS = SUPPORTED_METHODS;
|
|
760
847
|
exports.connectUrl = connectUrl;
|
|
761
848
|
exports.createAsseteraWalletProvider = createAsseteraWalletProvider;
|
|
849
|
+
exports.isAccountsMessage = isAccountsMessage;
|
|
762
850
|
exports.isCaip2EvmChain = isCaip2EvmChain;
|
|
763
851
|
exports.isDisconnectMessage = isDisconnectMessage;
|
|
764
852
|
exports.isEventMessage = isEventMessage;
|