@cookill/wallet-adapter 2.5.4 → 3.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/README.md +275 -196
- package/dist/ErrorBoundary.cjs +53 -110
- package/dist/ErrorBoundary.cjs.map +1 -1
- package/dist/ErrorBoundary.d.cts +11 -7
- package/dist/ErrorBoundary.d.ts +11 -7
- package/dist/ErrorBoundary.js +50 -85
- package/dist/ErrorBoundary.js.map +1 -1
- package/dist/LoadingStates.cjs +134 -267
- package/dist/LoadingStates.cjs.map +1 -1
- package/dist/LoadingStates.d.cts +11 -15
- package/dist/LoadingStates.d.ts +11 -15
- package/dist/LoadingStates.js +129 -239
- package/dist/LoadingStates.js.map +1 -1
- package/dist/index.cjs +483 -161
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +330 -62
- package/dist/index.d.ts +330 -62
- package/dist/index.js +463 -127
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +438 -1024
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +1 -118
- package/dist/react.d.ts +1 -118
- package/dist/react.js +430 -969
- package/dist/react.js.map +1 -1
- package/dist/standard.cjs +127 -121
- package/dist/standard.cjs.map +1 -1
- package/dist/standard.d.cts +6 -44
- package/dist/standard.d.ts +6 -44
- package/dist/standard.js +118 -91
- package/dist/standard.js.map +1 -1
- package/package.json +42 -36
package/dist/standard.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @cookill/wallet-adapter/standard
|
|
2
|
+
* @cookill/wallet-adapter/standard v3.0.0
|
|
3
3
|
* Wallet Standard implementation for advanced integrations
|
|
4
4
|
*/
|
|
5
5
|
type RialoChain = 'rialo:mainnet' | 'rialo:testnet' | 'rialo:devnet' | 'rialo:localnet';
|
|
@@ -9,12 +9,10 @@ interface RialoWalletAccount {
|
|
|
9
9
|
chains: RialoChain[];
|
|
10
10
|
features: string[];
|
|
11
11
|
label?: string;
|
|
12
|
-
icon?: string;
|
|
13
12
|
}
|
|
14
13
|
declare const RIALO_SIGN_TRANSACTION: "rialo:signTransaction";
|
|
15
14
|
declare const RIALO_SIGN_AND_SEND_TRANSACTION: "rialo:signAndSendTransaction";
|
|
16
15
|
declare const RIALO_SIGN_MESSAGE: "rialo:signMessage";
|
|
17
|
-
declare const RIALO_SIGN_ALL_TRANSACTIONS: "rialo:signAllTransactions";
|
|
18
16
|
interface SignTransactionInput {
|
|
19
17
|
account: RialoWalletAccount;
|
|
20
18
|
transaction: Uint8Array;
|
|
@@ -30,7 +28,6 @@ interface SignAndSendTransactionInput {
|
|
|
30
28
|
options?: {
|
|
31
29
|
skipPreflight?: boolean;
|
|
32
30
|
preflightCommitment?: 'processed' | 'confirmed' | 'finalized';
|
|
33
|
-
maxRetries?: number;
|
|
34
31
|
};
|
|
35
32
|
}
|
|
36
33
|
interface SignAndSendTransactionOutput {
|
|
@@ -50,45 +47,13 @@ interface WalletStandardEvents {
|
|
|
50
47
|
chains?: RialoChain[];
|
|
51
48
|
};
|
|
52
49
|
}
|
|
53
|
-
interface StandardConnectFeature {
|
|
54
|
-
'standard:connect': {
|
|
55
|
-
connect(): Promise<{
|
|
56
|
-
accounts: RialoWalletAccount[];
|
|
57
|
-
}>;
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
interface StandardDisconnectFeature {
|
|
61
|
-
'standard:disconnect': {
|
|
62
|
-
disconnect(): Promise<void>;
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
interface StandardEventsFeature {
|
|
66
|
-
'standard:events': {
|
|
67
|
-
on<E extends keyof WalletStandardEvents>(event: E, listener: (data: WalletStandardEvents[E]) => void): () => void;
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
interface RialoSignTransactionFeature {
|
|
71
|
-
[RIALO_SIGN_TRANSACTION]: {
|
|
72
|
-
signTransaction(input: SignTransactionInput): Promise<SignTransactionOutput>;
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
interface RialoSignAndSendTransactionFeature {
|
|
76
|
-
[RIALO_SIGN_AND_SEND_TRANSACTION]: {
|
|
77
|
-
signAndSendTransaction(input: SignAndSendTransactionInput): Promise<SignAndSendTransactionOutput>;
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
interface RialoSignMessageFeature {
|
|
81
|
-
[RIALO_SIGN_MESSAGE]: {
|
|
82
|
-
signMessage(input: SignMessageInput): Promise<SignMessageOutput>;
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
50
|
interface RialoWallet {
|
|
86
51
|
readonly version: '1.0.0';
|
|
87
52
|
readonly name: string;
|
|
88
53
|
readonly icon: string;
|
|
89
54
|
readonly chains: RialoChain[];
|
|
90
55
|
readonly accounts: RialoWalletAccount[];
|
|
91
|
-
readonly features:
|
|
56
|
+
readonly features: Record<string, unknown>;
|
|
92
57
|
}
|
|
93
58
|
declare class RialoWalletStandard implements RialoWallet {
|
|
94
59
|
readonly version: "1.0.0";
|
|
@@ -104,7 +69,7 @@ declare class RialoWalletStandard implements RialoWallet {
|
|
|
104
69
|
get accounts(): RialoWalletAccount[];
|
|
105
70
|
private get provider();
|
|
106
71
|
constructor();
|
|
107
|
-
private
|
|
72
|
+
private _setupProviderEvents;
|
|
108
73
|
readonly features: {
|
|
109
74
|
'standard:connect': {
|
|
110
75
|
connect: () => Promise<{
|
|
@@ -127,11 +92,8 @@ declare class RialoWalletStandard implements RialoWallet {
|
|
|
127
92
|
signMessage: (input: SignMessageInput) => Promise<SignMessageOutput>;
|
|
128
93
|
};
|
|
129
94
|
};
|
|
130
|
-
private
|
|
131
|
-
private
|
|
132
|
-
private bytesToBase64;
|
|
133
|
-
private base64ToBytes;
|
|
134
|
-
private hexToBytes;
|
|
95
|
+
private _emit;
|
|
96
|
+
private _toStandardAccount;
|
|
135
97
|
setActiveChain(chain: RialoChain): void;
|
|
136
98
|
destroy(): void;
|
|
137
99
|
}
|
|
@@ -139,4 +101,4 @@ declare function registerRialoWallet(): RialoWalletStandard;
|
|
|
139
101
|
declare function getRialoWallet(): RialoWalletStandard | null;
|
|
140
102
|
declare function isRialoWalletRegistered(): boolean;
|
|
141
103
|
|
|
142
|
-
export {
|
|
104
|
+
export { RIALO_SIGN_AND_SEND_TRANSACTION, RIALO_SIGN_MESSAGE, RIALO_SIGN_TRANSACTION, type RialoChain, type RialoWallet, type RialoWalletAccount, RialoWalletStandard, type SignAndSendTransactionInput, type SignAndSendTransactionOutput, type SignMessageInput, type SignMessageOutput, type SignTransactionInput, type SignTransactionOutput, type WalletStandardEvents, RialoWalletStandard as default, getRialoWallet, isRialoWalletRegistered, registerRialoWallet };
|
package/dist/standard.js
CHANGED
|
@@ -1,8 +1,42 @@
|
|
|
1
|
+
// src/core/provider.ts
|
|
2
|
+
function getProvider() {
|
|
3
|
+
if (typeof window === "undefined") return void 0;
|
|
4
|
+
try {
|
|
5
|
+
const provider = window.rialo;
|
|
6
|
+
if (provider?.isRialo) return provider;
|
|
7
|
+
} catch {
|
|
8
|
+
}
|
|
9
|
+
return void 0;
|
|
10
|
+
}
|
|
11
|
+
function withTimeout(promise, ms, errorMessage = "Operation timed out") {
|
|
12
|
+
let timeoutId;
|
|
13
|
+
const timeout = new Promise((_, reject) => {
|
|
14
|
+
timeoutId = setTimeout(() => reject(new Error(errorMessage)), ms);
|
|
15
|
+
});
|
|
16
|
+
return Promise.race([promise, timeout]).finally(() => {
|
|
17
|
+
if (timeoutId) clearTimeout(timeoutId);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// src/core/utils.ts
|
|
22
|
+
function normalizeAccounts(accounts) {
|
|
23
|
+
if (!Array.isArray(accounts)) return [];
|
|
24
|
+
return accounts.map((acc) => {
|
|
25
|
+
if (typeof acc === "string") {
|
|
26
|
+
return { address: acc, publicKey: acc };
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
address: acc.address,
|
|
30
|
+
publicKey: acc.publicKey || acc.address,
|
|
31
|
+
label: acc.label
|
|
32
|
+
};
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
1
36
|
// src/standard.ts
|
|
2
37
|
var RIALO_SIGN_TRANSACTION = "rialo:signTransaction";
|
|
3
38
|
var RIALO_SIGN_AND_SEND_TRANSACTION = "rialo:signAndSendTransaction";
|
|
4
39
|
var RIALO_SIGN_MESSAGE = "rialo:signMessage";
|
|
5
|
-
var RIALO_SIGN_ALL_TRANSACTIONS = "rialo:signAllTransactions";
|
|
6
40
|
var RialoWalletStandard = class {
|
|
7
41
|
constructor() {
|
|
8
42
|
this.version = "1.0.0";
|
|
@@ -14,32 +48,41 @@ var RialoWalletStandard = class {
|
|
|
14
48
|
this._eventListeners = {};
|
|
15
49
|
this._connected = false;
|
|
16
50
|
this._cleanupFns = [];
|
|
51
|
+
// Features
|
|
17
52
|
this.features = {
|
|
18
53
|
"standard:connect": {
|
|
19
54
|
connect: async () => {
|
|
20
55
|
const provider = this.provider;
|
|
21
|
-
if (!provider) throw new Error("
|
|
22
|
-
const result = await
|
|
23
|
-
|
|
24
|
-
|
|
56
|
+
if (!provider) throw new Error("Sheep Wallet not installed");
|
|
57
|
+
const result = await withTimeout(
|
|
58
|
+
provider.connect(),
|
|
59
|
+
2e4,
|
|
60
|
+
"Connection timed out"
|
|
25
61
|
);
|
|
62
|
+
const accounts = normalizeAccounts(result);
|
|
63
|
+
this._accounts = accounts.map((acc) => this._toStandardAccount(acc));
|
|
26
64
|
this._connected = true;
|
|
27
65
|
try {
|
|
28
66
|
const network = await provider.getNetwork();
|
|
29
67
|
this._activeChain = `rialo:${network}`;
|
|
30
68
|
} catch {
|
|
31
69
|
}
|
|
32
|
-
this.
|
|
70
|
+
this._emit("change", { accounts: this._accounts });
|
|
33
71
|
return { accounts: this._accounts };
|
|
34
72
|
}
|
|
35
73
|
},
|
|
36
74
|
"standard:disconnect": {
|
|
37
75
|
disconnect: async () => {
|
|
38
76
|
const provider = this.provider;
|
|
39
|
-
if (provider)
|
|
77
|
+
if (provider) {
|
|
78
|
+
try {
|
|
79
|
+
await provider.disconnect();
|
|
80
|
+
} catch {
|
|
81
|
+
}
|
|
82
|
+
}
|
|
40
83
|
this._accounts = [];
|
|
41
84
|
this._connected = false;
|
|
42
|
-
this.
|
|
85
|
+
this._emit("change", { accounts: [] });
|
|
43
86
|
}
|
|
44
87
|
},
|
|
45
88
|
"standard:events": {
|
|
@@ -47,53 +90,56 @@ var RialoWalletStandard = class {
|
|
|
47
90
|
if (!this._eventListeners[event]) {
|
|
48
91
|
this._eventListeners[event] = /* @__PURE__ */ new Set();
|
|
49
92
|
}
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
return () =>
|
|
93
|
+
const set = this._eventListeners[event];
|
|
94
|
+
set.add(listener);
|
|
95
|
+
return () => set.delete(listener);
|
|
53
96
|
}
|
|
54
97
|
},
|
|
55
98
|
[RIALO_SIGN_TRANSACTION]: {
|
|
56
99
|
signTransaction: async (input) => {
|
|
57
100
|
if (!this._connected) throw new Error("Wallet not connected");
|
|
58
101
|
const provider = this.provider;
|
|
59
|
-
if (!provider) throw new Error("
|
|
60
|
-
const
|
|
102
|
+
if (!provider) throw new Error("Wallet not available");
|
|
103
|
+
const b64 = btoa(String.fromCharCode(...input.transaction));
|
|
61
104
|
const result = await provider.signTransaction({
|
|
62
|
-
|
|
63
|
-
|
|
105
|
+
to: "",
|
|
106
|
+
value: "0",
|
|
107
|
+
data: b64
|
|
64
108
|
});
|
|
65
|
-
const
|
|
66
|
-
return { signedTransaction:
|
|
109
|
+
const signedBytes = result.rawTransaction ? Uint8Array.from(atob(result.rawTransaction), (c) => c.charCodeAt(0)) : input.transaction;
|
|
110
|
+
return { signedTransaction: signedBytes };
|
|
67
111
|
}
|
|
68
112
|
},
|
|
69
113
|
[RIALO_SIGN_AND_SEND_TRANSACTION]: {
|
|
70
114
|
signAndSendTransaction: async (input) => {
|
|
71
115
|
if (!this._connected) throw new Error("Wallet not connected");
|
|
72
116
|
const provider = this.provider;
|
|
73
|
-
if (!provider) throw new Error("
|
|
74
|
-
const
|
|
117
|
+
if (!provider) throw new Error("Wallet not available");
|
|
118
|
+
const b64 = btoa(String.fromCharCode(...input.transaction));
|
|
75
119
|
const result = await provider.signAndSendTransaction({
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
120
|
+
to: "",
|
|
121
|
+
value: "0",
|
|
122
|
+
data: b64
|
|
79
123
|
});
|
|
80
|
-
return { signature: result.hash
|
|
124
|
+
return { signature: result.hash };
|
|
81
125
|
}
|
|
82
126
|
},
|
|
83
127
|
[RIALO_SIGN_MESSAGE]: {
|
|
84
128
|
signMessage: async (input) => {
|
|
85
129
|
if (!this._connected) throw new Error("Wallet not connected");
|
|
86
130
|
const provider = this.provider;
|
|
87
|
-
if (!provider) throw new Error("
|
|
131
|
+
if (!provider) throw new Error("Wallet not available");
|
|
88
132
|
const messageStr = new TextDecoder().decode(input.message);
|
|
89
133
|
const result = await provider.signMessage(messageStr);
|
|
90
134
|
const sigHex = result.signature.startsWith("0x") ? result.signature.slice(2) : result.signature;
|
|
91
|
-
const
|
|
92
|
-
|
|
135
|
+
const sigBytes = new Uint8Array(
|
|
136
|
+
(sigHex.match(/.{1,2}/g) || []).map((b) => parseInt(b, 16))
|
|
137
|
+
);
|
|
138
|
+
return { signature: sigBytes, signedMessage: input.message };
|
|
93
139
|
}
|
|
94
140
|
}
|
|
95
141
|
};
|
|
96
|
-
this.
|
|
142
|
+
this._setupProviderEvents();
|
|
97
143
|
}
|
|
98
144
|
get chains() {
|
|
99
145
|
return [...this._chains];
|
|
@@ -102,75 +148,68 @@ var RialoWalletStandard = class {
|
|
|
102
148
|
return [...this._accounts];
|
|
103
149
|
}
|
|
104
150
|
get provider() {
|
|
105
|
-
|
|
106
|
-
return window.rialo;
|
|
151
|
+
return getProvider();
|
|
107
152
|
}
|
|
108
|
-
|
|
153
|
+
_setupProviderEvents() {
|
|
109
154
|
const provider = this.provider;
|
|
110
155
|
if (!provider) return;
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
156
|
+
this._cleanupFns.push(
|
|
157
|
+
provider.on("accountsChanged", (data) => {
|
|
158
|
+
const accounts = normalizeAccounts(data);
|
|
159
|
+
this._accounts = accounts.map((acc) => this._toStandardAccount(acc));
|
|
160
|
+
this._emit("change", { accounts: this._accounts });
|
|
161
|
+
})
|
|
162
|
+
);
|
|
163
|
+
this._cleanupFns.push(
|
|
164
|
+
provider.on("networkChanged", (data) => {
|
|
165
|
+
const { network } = data;
|
|
166
|
+
this._activeChain = `rialo:${network}`;
|
|
167
|
+
this._emit("change", { chains: [this._activeChain] });
|
|
168
|
+
})
|
|
169
|
+
);
|
|
170
|
+
this._cleanupFns.push(
|
|
171
|
+
provider.on("disconnect", () => {
|
|
172
|
+
this._connected = false;
|
|
173
|
+
this._accounts = [];
|
|
174
|
+
this._emit("change", { accounts: [] });
|
|
175
|
+
})
|
|
176
|
+
);
|
|
127
177
|
}
|
|
128
|
-
|
|
178
|
+
_emit(event, data) {
|
|
129
179
|
const listeners = this._eventListeners[event];
|
|
130
180
|
if (listeners) {
|
|
131
|
-
listeners.forEach((
|
|
132
|
-
listener(data);
|
|
133
|
-
});
|
|
181
|
+
listeners.forEach((fn) => fn(data));
|
|
134
182
|
}
|
|
135
183
|
}
|
|
136
|
-
|
|
184
|
+
_toStandardAccount(acc) {
|
|
137
185
|
const encoder = new TextEncoder();
|
|
138
186
|
const publicKey = new Uint8Array(32);
|
|
139
|
-
const
|
|
140
|
-
publicKey.set(
|
|
187
|
+
const bytes = encoder.encode(acc.address);
|
|
188
|
+
publicKey.set(bytes.slice(0, 32));
|
|
141
189
|
return {
|
|
142
|
-
address,
|
|
190
|
+
address: acc.address,
|
|
143
191
|
publicKey,
|
|
144
192
|
chains: this._chains,
|
|
145
193
|
features: [
|
|
146
194
|
RIALO_SIGN_TRANSACTION,
|
|
147
195
|
RIALO_SIGN_AND_SEND_TRANSACTION,
|
|
148
|
-
RIALO_SIGN_MESSAGE
|
|
149
|
-
RIALO_SIGN_ALL_TRANSACTIONS
|
|
196
|
+
RIALO_SIGN_MESSAGE
|
|
150
197
|
],
|
|
151
|
-
label: "Sheep Account"
|
|
198
|
+
label: acc.label || "Sheep Account"
|
|
152
199
|
};
|
|
153
200
|
}
|
|
154
|
-
bytesToBase64(bytes) {
|
|
155
|
-
return btoa(String.fromCharCode(...bytes));
|
|
156
|
-
}
|
|
157
|
-
base64ToBytes(base64) {
|
|
158
|
-
return Uint8Array.from(atob(base64), (c) => c.charCodeAt(0));
|
|
159
|
-
}
|
|
160
|
-
hexToBytes(hex) {
|
|
161
|
-
const matches = hex.match(/.{1,2}/g);
|
|
162
|
-
return new Uint8Array(matches?.map((byte) => parseInt(byte, 16)) || []);
|
|
163
|
-
}
|
|
164
201
|
setActiveChain(chain) {
|
|
165
202
|
this._activeChain = chain;
|
|
166
|
-
this.
|
|
203
|
+
this._emit("change", { chains: [chain] });
|
|
167
204
|
}
|
|
168
205
|
destroy() {
|
|
169
|
-
this._cleanupFns.forEach((fn) =>
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
206
|
+
this._cleanupFns.forEach((fn) => {
|
|
207
|
+
try {
|
|
208
|
+
fn();
|
|
209
|
+
} catch {
|
|
210
|
+
}
|
|
173
211
|
});
|
|
212
|
+
this._cleanupFns = [];
|
|
174
213
|
}
|
|
175
214
|
};
|
|
176
215
|
var walletInstance = null;
|
|
@@ -179,14 +218,11 @@ function registerRialoWallet() {
|
|
|
179
218
|
walletInstance = new RialoWalletStandard();
|
|
180
219
|
if (typeof window !== "undefined") {
|
|
181
220
|
try {
|
|
182
|
-
|
|
221
|
+
window.dispatchEvent(new CustomEvent("wallet-standard:register-wallet", {
|
|
183
222
|
detail: {
|
|
184
|
-
register: (
|
|
185
|
-
callback(walletInstance);
|
|
186
|
-
}
|
|
223
|
+
register: (cb) => cb(walletInstance)
|
|
187
224
|
}
|
|
188
|
-
});
|
|
189
|
-
window.dispatchEvent(registerEvent);
|
|
225
|
+
}));
|
|
190
226
|
window.dispatchEvent(new CustomEvent("eip6963:announceProvider", {
|
|
191
227
|
detail: {
|
|
192
228
|
info: {
|
|
@@ -198,8 +234,7 @@ function registerRialoWallet() {
|
|
|
198
234
|
provider: walletInstance
|
|
199
235
|
}
|
|
200
236
|
}));
|
|
201
|
-
} catch
|
|
202
|
-
console.warn("Failed to dispatch wallet registration event:", error);
|
|
237
|
+
} catch {
|
|
203
238
|
}
|
|
204
239
|
Object.defineProperty(window, "__rialoWalletStandard", {
|
|
205
240
|
value: walletInstance,
|
|
@@ -223,15 +258,7 @@ if (typeof window !== "undefined") {
|
|
|
223
258
|
}
|
|
224
259
|
}
|
|
225
260
|
var standard_default = RialoWalletStandard;
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
RIALO_SIGN_MESSAGE,
|
|
230
|
-
RIALO_SIGN_TRANSACTION,
|
|
231
|
-
RialoWalletStandard,
|
|
232
|
-
standard_default as default,
|
|
233
|
-
getRialoWallet,
|
|
234
|
-
isRialoWalletRegistered,
|
|
235
|
-
registerRialoWallet
|
|
236
|
-
};
|
|
261
|
+
|
|
262
|
+
export { RIALO_SIGN_AND_SEND_TRANSACTION, RIALO_SIGN_MESSAGE, RIALO_SIGN_TRANSACTION, RialoWalletStandard, standard_default as default, getRialoWallet, isRialoWalletRegistered, registerRialoWallet };
|
|
263
|
+
//# sourceMappingURL=standard.js.map
|
|
237
264
|
//# sourceMappingURL=standard.js.map
|
package/dist/standard.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/standard.ts"],"sourcesContent":["/**\n * @cookill/wallet-adapter/standard v2.5.0\n * Wallet Standard implementation for advanced integrations\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type RialoChain = 'rialo:mainnet' | 'rialo:testnet' | 'rialo:devnet' | 'rialo:localnet';\n\nexport interface RialoWalletAccount {\n address: string;\n publicKey: Uint8Array;\n chains: RialoChain[];\n features: string[];\n label?: string;\n icon?: string;\n}\n\n// Feature identifiers\nexport const RIALO_SIGN_TRANSACTION = 'rialo:signTransaction' as const;\nexport const RIALO_SIGN_AND_SEND_TRANSACTION = 'rialo:signAndSendTransaction' as const;\nexport const RIALO_SIGN_MESSAGE = 'rialo:signMessage' as const;\nexport const RIALO_SIGN_ALL_TRANSACTIONS = 'rialo:signAllTransactions' as const;\n\n// Transaction input/output\nexport interface SignTransactionInput {\n account: RialoWalletAccount;\n transaction: Uint8Array;\n chain?: RialoChain;\n}\n\nexport interface SignTransactionOutput {\n signedTransaction: Uint8Array;\n}\n\nexport interface SignAndSendTransactionInput {\n account: RialoWalletAccount;\n transaction: Uint8Array;\n chain?: RialoChain;\n options?: {\n skipPreflight?: boolean;\n preflightCommitment?: 'processed' | 'confirmed' | 'finalized';\n maxRetries?: number;\n };\n}\n\nexport interface SignAndSendTransactionOutput {\n signature: string;\n}\n\nexport interface SignMessageInput {\n account: RialoWalletAccount;\n message: Uint8Array;\n}\n\nexport interface SignMessageOutput {\n signature: Uint8Array;\n signedMessage: Uint8Array;\n}\n\n// Events\nexport interface WalletStandardEvents {\n change: {\n accounts?: RialoWalletAccount[];\n chains?: RialoChain[];\n };\n}\n\n// ============================================================================\n// Feature Interfaces\n// ============================================================================\n\nexport interface StandardConnectFeature {\n 'standard:connect': {\n connect(): Promise<{ accounts: RialoWalletAccount[] }>;\n };\n}\n\nexport interface StandardDisconnectFeature {\n 'standard:disconnect': {\n disconnect(): Promise<void>;\n };\n}\n\nexport interface StandardEventsFeature {\n 'standard:events': {\n on<E extends keyof WalletStandardEvents>(\n event: E,\n listener: (data: WalletStandardEvents[E]) => void\n ): () => void;\n };\n}\n\nexport interface RialoSignTransactionFeature {\n [RIALO_SIGN_TRANSACTION]: {\n signTransaction(input: SignTransactionInput): Promise<SignTransactionOutput>;\n };\n}\n\nexport interface RialoSignAndSendTransactionFeature {\n [RIALO_SIGN_AND_SEND_TRANSACTION]: {\n signAndSendTransaction(input: SignAndSendTransactionInput): Promise<SignAndSendTransactionOutput>;\n };\n}\n\nexport interface RialoSignMessageFeature {\n [RIALO_SIGN_MESSAGE]: {\n signMessage(input: SignMessageInput): Promise<SignMessageOutput>;\n };\n}\n\n// ============================================================================\n// Wallet Interface\n// ============================================================================\n\nexport interface RialoWallet {\n readonly version: '1.0.0';\n readonly name: string;\n readonly icon: string;\n readonly chains: RialoChain[];\n readonly accounts: RialoWalletAccount[];\n readonly features: StandardConnectFeature &\n StandardDisconnectFeature &\n StandardEventsFeature &\n RialoSignTransactionFeature &\n RialoSignAndSendTransactionFeature &\n RialoSignMessageFeature;\n}\n\n// ============================================================================\n// Wallet Standard Implementation\n// ============================================================================\n\ntype EventListenerMap = {\n [K in keyof WalletStandardEvents]?: Set<(data: WalletStandardEvents[K]) => void>;\n};\n\ninterface RialoInpageProvider {\n isRialo: boolean;\n version: string;\n connect(): Promise<Array<string | { address: string; publicKey?: string }>>;\n disconnect(): Promise<void>;\n signTransaction(tx: Record<string, unknown>): Promise<{ signature: string; rawTransaction?: string }>;\n signAndSendTransaction(tx: Record<string, unknown>): Promise<{ hash: string; signature?: string }>;\n signMessage(message: string): Promise<{ signature: string; message?: string }>;\n getNetwork(): Promise<string>;\n switchNetwork(network: string): Promise<{ success: boolean }>;\n on(event: string, callback: (data: unknown) => void): () => void;\n}\n\nexport class RialoWalletStandard implements RialoWallet {\n readonly version = '1.0.0' as const;\n readonly name = 'Sheep Wallet';\n readonly icon = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHJ4PSI4IiBmaWxsPSIjMDExQjI5Ii8+PHRleHQgeD0iNTAlIiB5PSI1NSUiIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXdlaWdodD0iYm9sZCIgZm9udC1zaXplPSIxNiIgZmlsbD0iIzZFQjlBOCI+Uzwvc2VsZj48L3N2Zz4=';\n\n private _accounts: RialoWalletAccount[] = [];\n private _chains: RialoChain[] = ['rialo:mainnet', 'rialo:testnet', 'rialo:devnet', 'rialo:localnet'];\n private _activeChain: RialoChain = 'rialo:devnet';\n private _eventListeners: EventListenerMap = {};\n private _connected = false;\n private _cleanupFns: Array<() => void> = [];\n\n get chains(): RialoChain[] {\n return [...this._chains];\n }\n\n get accounts(): RialoWalletAccount[] {\n return [...this._accounts];\n }\n\n private get provider(): RialoInpageProvider | undefined {\n if (typeof window === 'undefined') return undefined;\n return (window as unknown as { rialo?: RialoInpageProvider }).rialo;\n }\n\n constructor() {\n this.setupProviderEvents();\n }\n\n private setupProviderEvents() {\n const provider = this.provider;\n if (!provider) return;\n\n const cleanup1 = provider.on('accountsChanged', (data: unknown) => {\n const accounts = data as Array<string | { address: string }>;\n this._accounts = accounts.map(acc => this.createAccount(typeof acc === 'string' ? acc : acc.address));\n this.emit('change', { accounts: this._accounts });\n });\n\n const cleanup2 = provider.on('networkChanged', (data: unknown) => {\n const { network } = data as { network: string };\n this._activeChain = `rialo:${network}` as RialoChain;\n this.emit('change', { chains: [this._activeChain] });\n });\n\n const cleanup3 = provider.on('disconnect', () => {\n this._connected = false;\n this._accounts = [];\n this.emit('change', { accounts: [] });\n });\n\n this._cleanupFns.push(cleanup1, cleanup2, cleanup3);\n }\n\n readonly features = {\n 'standard:connect': {\n connect: async (): Promise<{ accounts: RialoWalletAccount[] }> => {\n const provider = this.provider;\n if (!provider) throw new Error('Rialo Wallet not installed');\n\n const result = await provider.connect();\n this._accounts = result.map((acc) => \n this.createAccount(typeof acc === 'string' ? acc : acc.address)\n );\n this._connected = true;\n \n // Get current network\n try {\n const network = await provider.getNetwork();\n this._activeChain = `rialo:${network}` as RialoChain;\n } catch {}\n\n this.emit('change', { accounts: this._accounts });\n return { accounts: this._accounts };\n },\n },\n 'standard:disconnect': {\n disconnect: async (): Promise<void> => {\n const provider = this.provider;\n if (provider) await provider.disconnect();\n this._accounts = [];\n this._connected = false;\n this.emit('change', { accounts: [] });\n },\n },\n 'standard:events': {\n on: <E extends keyof WalletStandardEvents>(\n event: E,\n listener: (data: WalletStandardEvents[E]) => void\n ): (() => void) => {\n if (!this._eventListeners[event]) {\n this._eventListeners[event] = new Set();\n }\n const listeners = this._eventListeners[event] as Set<(data: WalletStandardEvents[E]) => void>;\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n },\n [RIALO_SIGN_TRANSACTION]: {\n signTransaction: async (input: SignTransactionInput): Promise<SignTransactionOutput> => {\n if (!this._connected) throw new Error('Wallet not connected');\n const provider = this.provider;\n if (!provider) throw new Error('Rialo Wallet not available');\n\n const transactionBase64 = this.bytesToBase64(input.transaction);\n const result = await provider.signTransaction({\n transaction: transactionBase64,\n chain: input.chain || this._activeChain,\n });\n\n const signedTxBytes = result.rawTransaction\n ? this.base64ToBytes(result.rawTransaction)\n : input.transaction;\n\n return { signedTransaction: signedTxBytes };\n },\n },\n [RIALO_SIGN_AND_SEND_TRANSACTION]: {\n signAndSendTransaction: async (input: SignAndSendTransactionInput): Promise<SignAndSendTransactionOutput> => {\n if (!this._connected) throw new Error('Wallet not connected');\n const provider = this.provider;\n if (!provider) throw new Error('Rialo Wallet not available');\n\n const transactionBase64 = this.bytesToBase64(input.transaction);\n const result = await provider.signAndSendTransaction({\n transaction: transactionBase64,\n chain: input.chain || this._activeChain,\n options: input.options,\n });\n\n return { signature: result.hash || result.signature || '' };\n },\n },\n [RIALO_SIGN_MESSAGE]: {\n signMessage: async (input: SignMessageInput): Promise<SignMessageOutput> => {\n if (!this._connected) throw new Error('Wallet not connected');\n const provider = this.provider;\n if (!provider) throw new Error('Rialo Wallet not available');\n\n const messageStr = new TextDecoder().decode(input.message);\n const result = await provider.signMessage(messageStr);\n\n const sigHex = result.signature.startsWith('0x') \n ? result.signature.slice(2) \n : result.signature;\n const signatureBytes = this.hexToBytes(sigHex);\n\n return { signature: signatureBytes, signedMessage: input.message };\n },\n },\n };\n\n private emit<E extends keyof WalletStandardEvents>(event: E, data: WalletStandardEvents[E]): void {\n const listeners = this._eventListeners[event];\n if (listeners) {\n listeners.forEach((listener) => {\n (listener as (data: WalletStandardEvents[E]) => void)(data);\n });\n }\n }\n\n private createAccount(address: string): RialoWalletAccount {\n const encoder = new TextEncoder();\n const publicKey = new Uint8Array(32);\n const addressBytes = encoder.encode(address);\n publicKey.set(addressBytes.slice(0, 32));\n\n return {\n address,\n publicKey,\n chains: this._chains,\n features: [\n RIALO_SIGN_TRANSACTION, \n RIALO_SIGN_AND_SEND_TRANSACTION, \n RIALO_SIGN_MESSAGE,\n RIALO_SIGN_ALL_TRANSACTIONS,\n ],\n label: 'Sheep Account',\n };\n }\n\n private bytesToBase64(bytes: Uint8Array): string {\n return btoa(String.fromCharCode(...bytes));\n }\n\n private base64ToBytes(base64: string): Uint8Array {\n return Uint8Array.from(atob(base64), c => c.charCodeAt(0));\n }\n\n private hexToBytes(hex: string): Uint8Array {\n const matches = hex.match(/.{1,2}/g);\n return new Uint8Array(matches?.map(byte => parseInt(byte, 16)) || []);\n }\n\n setActiveChain(chain: RialoChain): void {\n this._activeChain = chain;\n this.emit('change', { chains: [chain] });\n }\n\n destroy(): void {\n this._cleanupFns.forEach(fn => fn());\n this._cleanupFns = [];\n Object.keys(this._eventListeners).forEach(key => {\n delete this._eventListeners[key as keyof WalletStandardEvents];\n });\n }\n}\n\n// ============================================================================\n// Registration\n// ============================================================================\n\nlet walletInstance: RialoWalletStandard | null = null;\n\nexport function registerRialoWallet(): RialoWalletStandard {\n if (walletInstance) return walletInstance;\n\n walletInstance = new RialoWalletStandard();\n\n if (typeof window !== 'undefined') {\n try {\n // Wallet Standard registration\n const registerEvent = new CustomEvent('wallet-standard:register-wallet', {\n detail: {\n register: (callback: (wallet: RialoWalletStandard) => void) => {\n callback(walletInstance!);\n },\n },\n });\n window.dispatchEvent(registerEvent);\n\n // Also announce via EIP-6963\n window.dispatchEvent(new CustomEvent('eip6963:announceProvider', {\n detail: {\n info: {\n uuid: 'sheep-wallet-standard',\n name: 'Sheep Wallet',\n icon: walletInstance.icon,\n rdns: 'io.rialo.sheep',\n },\n provider: walletInstance,\n },\n }));\n } catch (error) {\n console.warn('Failed to dispatch wallet registration event:', error);\n }\n\n Object.defineProperty(window, '__rialoWalletStandard', {\n value: walletInstance,\n writable: false,\n configurable: false,\n });\n }\n\n return walletInstance;\n}\n\nexport function getRialoWallet(): RialoWalletStandard | null {\n return walletInstance;\n}\n\nexport function isRialoWalletRegistered(): boolean {\n return walletInstance !== null;\n}\n\n// Auto-register when DOM is ready\nif (typeof window !== 'undefined') {\n if (document.readyState === 'complete') {\n registerRialoWallet();\n } else {\n window.addEventListener('load', registerRialoWallet);\n }\n}\n\nexport default RialoWalletStandard;\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/core/provider.ts","../src/core/utils.ts","../src/standard.ts"],"names":[],"mappings":"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","file":"standard.js","sourcesContent":["/**\n * @cookill/wallet-adapter v3.0.0\n * Provider detection and access utilities\n * \n * CRITICAL: All provider access is non-blocking and defensive\n */\n\nimport type { RialoProvider } from './types';\n\n/**\n * Check if Rialo/Sheep Wallet is installed\n * This is synchronous and never blocks\n */\nexport function isInstalled(): boolean {\n if (typeof window === 'undefined') return false;\n try {\n return !!window.rialo?.isRialo;\n } catch {\n return false;\n }\n}\n\n/**\n * Get the provider reference (synchronous)\n * Returns undefined if not installed\n */\nexport function getProvider(): RialoProvider | undefined {\n if (typeof window === 'undefined') return undefined;\n try {\n const provider = window.rialo;\n if (provider?.isRialo) return provider;\n } catch {}\n return undefined;\n}\n\n/**\n * Wait for provider to become available\n * Uses polling + event listener, with guaranteed timeout\n * \n * @param timeout Maximum time to wait in ms (default 3000)\n */\nexport function waitForProvider(timeout = 3000): Promise<RialoProvider | undefined> {\n return new Promise((resolve) => {\n // Already available?\n const existing = getProvider();\n if (existing) {\n resolve(existing);\n return;\n }\n\n let resolved = false;\n let checkInterval: ReturnType<typeof setInterval> | null = null;\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const cleanup = () => {\n resolved = true;\n if (checkInterval) clearInterval(checkInterval);\n if (timeoutId) clearTimeout(timeoutId);\n };\n\n const done = (provider: RialoProvider | undefined) => {\n if (resolved) return;\n cleanup();\n resolve(provider);\n };\n\n // Poll every 100ms\n checkInterval = setInterval(() => {\n const p = getProvider();\n if (p) done(p);\n }, 100);\n\n // Listen for initialization event\n const onInit = () => done(getProvider());\n window.addEventListener('rialo#initialized', onInit, { once: true });\n\n // Guaranteed timeout\n timeoutId = setTimeout(() => {\n window.removeEventListener('rialo#initialized', onInit);\n done(undefined);\n }, timeout);\n });\n}\n\n/**\n * Promise timeout wrapper\n * Ensures promises never hang indefinitely\n */\nexport function withTimeout<T>(\n promise: Promise<T>,\n ms: number,\n errorMessage = 'Operation timed out'\n): Promise<T> {\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n const timeout = new Promise<never>((_, reject) => {\n timeoutId = setTimeout(() => reject(new Error(errorMessage)), ms);\n });\n\n return Promise.race([promise, timeout]).finally(() => {\n if (timeoutId) clearTimeout(timeoutId);\n }) as Promise<T>;\n}\n","/**\n * @cookill/wallet-adapter v3.0.0\n * Utility functions\n */\n\nimport type { WalletAccount, RialoNetwork, RialoChainId } from './types';\n\n/**\n * Format address for display (truncated)\n */\nexport function formatAddress(address: string, chars = 4): string {\n if (!address) return '';\n if (address.length <= chars * 2 + 3) return address;\n return `${address.slice(0, chars + 2)}...${address.slice(-chars)}`;\n}\n\n/**\n * Format balance from kelvins to RLO\n */\nexport function formatBalance(kelvins: string | bigint, decimals = 4): string {\n const value = typeof kelvins === 'string' ? BigInt(kelvins || '0') : kelvins;\n const rlo = Number(value) / 1_000_000_000;\n return rlo.toFixed(decimals);\n}\n\n/**\n * Parse RLO amount to kelvins\n */\nexport function parseBalance(rlo: string | number): bigint {\n const value = typeof rlo === 'string' ? parseFloat(rlo) : rlo;\n return BigInt(Math.floor(value * 1_000_000_000));\n}\n\n/**\n * Validate Rialo address format\n */\nexport function isValidAddress(address: string): boolean {\n if (!address || typeof address !== 'string') return false;\n if (address.length < 32 || address.length > 50) return false;\n return /^[1-9A-HJ-NP-Za-km-z]+$/.test(address);\n}\n\n/**\n * Convert network name to chain ID\n */\nexport function toChainId(network: RialoNetwork): RialoChainId {\n return `rialo:${network}`;\n}\n\n/**\n * Extract network from chain ID\n */\nexport function fromChainId(chainId: RialoChainId): RialoNetwork {\n return chainId.replace('rialo:', '') as RialoNetwork;\n}\n\n/**\n * Normalize account data (handles both string and object formats)\n * CRITICAL: Extension can return either string[] or WalletAccount[]\n */\nexport function normalizeAccounts(accounts: Array<string | WalletAccount>): WalletAccount[] {\n if (!Array.isArray(accounts)) return [];\n \n return accounts.map((acc): WalletAccount => {\n if (typeof acc === 'string') {\n return { address: acc, publicKey: acc };\n }\n return {\n address: acc.address,\n publicKey: acc.publicKey || acc.address,\n label: acc.label,\n };\n });\n}\n","/**\n * @cookill/wallet-adapter/standard v3.0.0\n * Wallet Standard implementation for advanced integrations\n */\n\nimport {\n type RialoProvider,\n type WalletAccount,\n type RialoNetwork,\n isInstalled,\n getProvider,\n normalizeAccounts,\n withTimeout,\n} from './core';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type RialoChain = 'rialo:mainnet' | 'rialo:testnet' | 'rialo:devnet' | 'rialo:localnet';\n\nexport interface RialoWalletAccount {\n address: string;\n publicKey: Uint8Array;\n chains: RialoChain[];\n features: string[];\n label?: string;\n}\n\nexport const RIALO_SIGN_TRANSACTION = 'rialo:signTransaction' as const;\nexport const RIALO_SIGN_AND_SEND_TRANSACTION = 'rialo:signAndSendTransaction' as const;\nexport const RIALO_SIGN_MESSAGE = 'rialo:signMessage' as const;\n\nexport interface SignTransactionInput {\n account: RialoWalletAccount;\n transaction: Uint8Array;\n chain?: RialoChain;\n}\n\nexport interface SignTransactionOutput {\n signedTransaction: Uint8Array;\n}\n\nexport interface SignAndSendTransactionInput {\n account: RialoWalletAccount;\n transaction: Uint8Array;\n chain?: RialoChain;\n options?: {\n skipPreflight?: boolean;\n preflightCommitment?: 'processed' | 'confirmed' | 'finalized';\n };\n}\n\nexport interface SignAndSendTransactionOutput {\n signature: string;\n}\n\nexport interface SignMessageInput {\n account: RialoWalletAccount;\n message: Uint8Array;\n}\n\nexport interface SignMessageOutput {\n signature: Uint8Array;\n signedMessage: Uint8Array;\n}\n\nexport interface WalletStandardEvents {\n change: {\n accounts?: RialoWalletAccount[];\n chains?: RialoChain[];\n };\n}\n\n// ============================================================================\n// Wallet Standard Interface\n// ============================================================================\n\nexport interface RialoWallet {\n readonly version: '1.0.0';\n readonly name: string;\n readonly icon: string;\n readonly chains: RialoChain[];\n readonly accounts: RialoWalletAccount[];\n readonly features: Record<string, unknown>;\n}\n\n// ============================================================================\n// Implementation\n// ============================================================================\n\ntype EventListenerMap = {\n [K in keyof WalletStandardEvents]?: Set<(data: WalletStandardEvents[K]) => void>;\n};\n\nexport class RialoWalletStandard implements RialoWallet {\n readonly version = '1.0.0' as const;\n readonly name = 'Sheep Wallet';\n readonly icon = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHJ4PSI4IiBmaWxsPSIjMDExQjI5Ii8+PHRleHQgeD0iNTAlIiB5PSI1NSUiIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXdlaWdodD0iYm9sZCIgZm9udC1zaXplPSIxNiIgZmlsbD0iIzZFQjlBOCI+Uzwvc2VsZj48L3N2Zz4=';\n\n private _accounts: RialoWalletAccount[] = [];\n private _chains: RialoChain[] = ['rialo:mainnet', 'rialo:testnet', 'rialo:devnet', 'rialo:localnet'];\n private _activeChain: RialoChain = 'rialo:devnet';\n private _eventListeners: EventListenerMap = {};\n private _connected = false;\n private _cleanupFns: Array<() => void> = [];\n\n get chains(): RialoChain[] {\n return [...this._chains];\n }\n\n get accounts(): RialoWalletAccount[] {\n return [...this._accounts];\n }\n\n private get provider(): RialoProvider | undefined {\n return getProvider();\n }\n\n constructor() {\n this._setupProviderEvents();\n }\n\n private _setupProviderEvents(): void {\n const provider = this.provider;\n if (!provider) return;\n\n this._cleanupFns.push(\n provider.on('accountsChanged', (data) => {\n const accounts = normalizeAccounts(data as any[]);\n this._accounts = accounts.map(acc => this._toStandardAccount(acc));\n this._emit('change', { accounts: this._accounts });\n })\n );\n\n this._cleanupFns.push(\n provider.on('networkChanged', (data) => {\n const { network } = data as { network: RialoNetwork };\n this._activeChain = `rialo:${network}` as RialoChain;\n this._emit('change', { chains: [this._activeChain] });\n })\n );\n\n this._cleanupFns.push(\n provider.on('disconnect', () => {\n this._connected = false;\n this._accounts = [];\n this._emit('change', { accounts: [] });\n })\n );\n }\n\n // Features\n readonly features = {\n 'standard:connect': {\n connect: async (): Promise<{ accounts: RialoWalletAccount[] }> => {\n const provider = this.provider;\n if (!provider) throw new Error('Sheep Wallet not installed');\n\n const result = await withTimeout(\n provider.connect(),\n 20_000,\n 'Connection timed out'\n );\n\n const accounts = normalizeAccounts(result);\n this._accounts = accounts.map(acc => this._toStandardAccount(acc));\n this._connected = true;\n\n try {\n const network = await provider.getNetwork();\n this._activeChain = `rialo:${network}` as RialoChain;\n } catch {}\n\n this._emit('change', { accounts: this._accounts });\n return { accounts: this._accounts };\n },\n },\n\n 'standard:disconnect': {\n disconnect: async (): Promise<void> => {\n const provider = this.provider;\n if (provider) {\n try {\n await provider.disconnect();\n } catch {}\n }\n this._accounts = [];\n this._connected = false;\n this._emit('change', { accounts: [] });\n },\n },\n\n 'standard:events': {\n on: <E extends keyof WalletStandardEvents>(\n event: E,\n listener: (data: WalletStandardEvents[E]) => void\n ): (() => void) => {\n if (!this._eventListeners[event]) {\n this._eventListeners[event] = new Set();\n }\n const set = this._eventListeners[event] as Set<(data: WalletStandardEvents[E]) => void>;\n set.add(listener);\n return () => set.delete(listener);\n },\n },\n\n [RIALO_SIGN_TRANSACTION]: {\n signTransaction: async (input: SignTransactionInput): Promise<SignTransactionOutput> => {\n if (!this._connected) throw new Error('Wallet not connected');\n const provider = this.provider;\n if (!provider) throw new Error('Wallet not available');\n\n const b64 = btoa(String.fromCharCode(...input.transaction));\n const result = await provider.signTransaction({\n to: '',\n value: '0',\n data: b64,\n } as any);\n\n const signedBytes = result.rawTransaction\n ? Uint8Array.from(atob(result.rawTransaction), c => c.charCodeAt(0))\n : input.transaction;\n\n return { signedTransaction: signedBytes };\n },\n },\n\n [RIALO_SIGN_AND_SEND_TRANSACTION]: {\n signAndSendTransaction: async (input: SignAndSendTransactionInput): Promise<SignAndSendTransactionOutput> => {\n if (!this._connected) throw new Error('Wallet not connected');\n const provider = this.provider;\n if (!provider) throw new Error('Wallet not available');\n\n const b64 = btoa(String.fromCharCode(...input.transaction));\n const result = await provider.signAndSendTransaction({\n to: '',\n value: '0',\n data: b64,\n } as any);\n\n return { signature: result.hash };\n },\n },\n\n [RIALO_SIGN_MESSAGE]: {\n signMessage: async (input: SignMessageInput): Promise<SignMessageOutput> => {\n if (!this._connected) throw new Error('Wallet not connected');\n const provider = this.provider;\n if (!provider) throw new Error('Wallet not available');\n\n const messageStr = new TextDecoder().decode(input.message);\n const result = await provider.signMessage(messageStr);\n\n const sigHex = result.signature.startsWith('0x')\n ? result.signature.slice(2)\n : result.signature;\n const sigBytes = new Uint8Array(\n (sigHex.match(/.{1,2}/g) || []).map(b => parseInt(b, 16))\n );\n\n return { signature: sigBytes, signedMessage: input.message };\n },\n },\n };\n\n private _emit<E extends keyof WalletStandardEvents>(event: E, data: WalletStandardEvents[E]): void {\n const listeners = this._eventListeners[event];\n if (listeners) {\n listeners.forEach(fn => (fn as (d: WalletStandardEvents[E]) => void)(data));\n }\n }\n\n private _toStandardAccount(acc: WalletAccount): RialoWalletAccount {\n const encoder = new TextEncoder();\n const publicKey = new Uint8Array(32);\n const bytes = encoder.encode(acc.address);\n publicKey.set(bytes.slice(0, 32));\n\n return {\n address: acc.address,\n publicKey,\n chains: this._chains,\n features: [\n RIALO_SIGN_TRANSACTION,\n RIALO_SIGN_AND_SEND_TRANSACTION,\n RIALO_SIGN_MESSAGE,\n ],\n label: acc.label || 'Sheep Account',\n };\n }\n\n setActiveChain(chain: RialoChain): void {\n this._activeChain = chain;\n this._emit('change', { chains: [chain] });\n }\n\n destroy(): void {\n this._cleanupFns.forEach(fn => { try { fn(); } catch {} });\n this._cleanupFns = [];\n }\n}\n\n// ============================================================================\n// Registration\n// ============================================================================\n\nlet walletInstance: RialoWalletStandard | null = null;\n\nexport function registerRialoWallet(): RialoWalletStandard {\n if (walletInstance) return walletInstance;\n\n walletInstance = new RialoWalletStandard();\n\n if (typeof window !== 'undefined') {\n try {\n window.dispatchEvent(new CustomEvent('wallet-standard:register-wallet', {\n detail: {\n register: (cb: (w: RialoWalletStandard) => void) => cb(walletInstance!),\n },\n }));\n\n window.dispatchEvent(new CustomEvent('eip6963:announceProvider', {\n detail: {\n info: {\n uuid: 'sheep-wallet-standard',\n name: 'Sheep Wallet',\n icon: walletInstance.icon,\n rdns: 'io.rialo.sheep',\n },\n provider: walletInstance,\n },\n }));\n } catch {}\n\n Object.defineProperty(window, '__rialoWalletStandard', {\n value: walletInstance,\n writable: false,\n configurable: false,\n });\n }\n\n return walletInstance;\n}\n\nexport function getRialoWallet(): RialoWalletStandard | null {\n return walletInstance;\n}\n\nexport function isRialoWalletRegistered(): boolean {\n return walletInstance !== null;\n}\n\n// Auto-register\nif (typeof window !== 'undefined') {\n if (document.readyState === 'complete') {\n registerRialoWallet();\n } else {\n window.addEventListener('load', registerRialoWallet);\n }\n}\n\nexport default RialoWalletStandard;\n"]}
|
package/package.json
CHANGED
|
@@ -1,45 +1,38 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cookill/wallet-adapter",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "Official Sheep Wallet adapter for Rialo blockchain
|
|
3
|
+
"version": "3.1.0",
|
|
4
|
+
"description": "Official Sheep Wallet adapter for Rialo blockchain - REX confidential TX, SfS gasless TX, Scan-to-Connect",
|
|
5
5
|
"author": "CookilLabs",
|
|
6
6
|
"license": "MIT",
|
|
7
|
-
"repository": {
|
|
8
|
-
"type": "git",
|
|
9
|
-
"url": "https://github.com/cookillabs/rialo-wallet-adapter"
|
|
10
|
-
},
|
|
11
|
-
"homepage": "https://github.com/cookillabs/rialo-wallet-adapter",
|
|
12
|
-
"keywords": [
|
|
13
|
-
"rialo",
|
|
14
|
-
"wallet",
|
|
15
|
-
"blockchain",
|
|
16
|
-
"dapp",
|
|
17
|
-
"web3",
|
|
18
|
-
"cryptocurrency",
|
|
19
|
-
"wallet-adapter",
|
|
20
|
-
"react",
|
|
21
|
-
"sheep-wallet"
|
|
22
|
-
],
|
|
23
7
|
"type": "module",
|
|
24
|
-
"sideEffects": false,
|
|
25
8
|
"main": "./dist/index.cjs",
|
|
26
9
|
"module": "./dist/index.js",
|
|
27
10
|
"types": "./dist/index.d.ts",
|
|
28
11
|
"exports": {
|
|
29
12
|
".": {
|
|
30
|
-
"types": "./dist/index.d.ts",
|
|
31
13
|
"import": "./dist/index.js",
|
|
32
|
-
"require": "./dist/index.cjs"
|
|
14
|
+
"require": "./dist/index.cjs",
|
|
15
|
+
"types": "./dist/index.d.ts"
|
|
33
16
|
},
|
|
34
17
|
"./react": {
|
|
35
|
-
"types": "./dist/react.d.ts",
|
|
36
18
|
"import": "./dist/react.js",
|
|
37
|
-
"require": "./dist/react.cjs"
|
|
19
|
+
"require": "./dist/react.cjs",
|
|
20
|
+
"types": "./dist/react.d.ts"
|
|
38
21
|
},
|
|
39
22
|
"./standard": {
|
|
40
|
-
"types": "./dist/standard.d.ts",
|
|
41
23
|
"import": "./dist/standard.js",
|
|
42
|
-
"require": "./dist/standard.cjs"
|
|
24
|
+
"require": "./dist/standard.cjs",
|
|
25
|
+
"types": "./dist/standard.d.ts"
|
|
26
|
+
},
|
|
27
|
+
"./ErrorBoundary": {
|
|
28
|
+
"import": "./dist/ErrorBoundary.js",
|
|
29
|
+
"require": "./dist/ErrorBoundary.cjs",
|
|
30
|
+
"types": "./dist/ErrorBoundary.d.ts"
|
|
31
|
+
},
|
|
32
|
+
"./LoadingStates": {
|
|
33
|
+
"import": "./dist/LoadingStates.js",
|
|
34
|
+
"require": "./dist/LoadingStates.cjs",
|
|
35
|
+
"types": "./dist/LoadingStates.d.ts"
|
|
43
36
|
}
|
|
44
37
|
},
|
|
45
38
|
"files": [
|
|
@@ -49,23 +42,16 @@
|
|
|
49
42
|
],
|
|
50
43
|
"scripts": {
|
|
51
44
|
"build": "tsup",
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"typecheck": "tsc --noEmit",
|
|
55
|
-
"clean": "rm -rf dist",
|
|
56
|
-
"prepublishOnly": "npm run build"
|
|
45
|
+
"prepublishOnly": "npm run build",
|
|
46
|
+
"typecheck": "tsc --noEmit"
|
|
57
47
|
},
|
|
58
48
|
"peerDependencies": {
|
|
59
49
|
"react": ">=17.0.0",
|
|
60
50
|
"react-dom": ">=17.0.0"
|
|
61
51
|
},
|
|
62
52
|
"peerDependenciesMeta": {
|
|
63
|
-
"react": {
|
|
64
|
-
|
|
65
|
-
},
|
|
66
|
-
"react-dom": {
|
|
67
|
-
"optional": false
|
|
68
|
-
}
|
|
53
|
+
"react": { "optional": true },
|
|
54
|
+
"react-dom": { "optional": true }
|
|
69
55
|
},
|
|
70
56
|
"devDependencies": {
|
|
71
57
|
"@types/react": "^18.2.0",
|
|
@@ -74,5 +60,25 @@
|
|
|
74
60
|
"react-dom": "^18.2.0",
|
|
75
61
|
"tsup": "^8.0.0",
|
|
76
62
|
"typescript": "^5.3.0"
|
|
63
|
+
},
|
|
64
|
+
"keywords": [
|
|
65
|
+
"rialo",
|
|
66
|
+
"sheep-wallet",
|
|
67
|
+
"wallet",
|
|
68
|
+
"blockchain",
|
|
69
|
+
"crypto",
|
|
70
|
+
"web3",
|
|
71
|
+
"dapp",
|
|
72
|
+
"adapter",
|
|
73
|
+
"react",
|
|
74
|
+
"hooks"
|
|
75
|
+
],
|
|
76
|
+
"repository": {
|
|
77
|
+
"type": "git",
|
|
78
|
+
"url": "https://github.com/cookillabs/wallet-adapter"
|
|
79
|
+
},
|
|
80
|
+
"homepage": "https://rialo.io/wallet",
|
|
81
|
+
"bugs": {
|
|
82
|
+
"url": "https://github.com/cookillabs/wallet-adapter/issues"
|
|
77
83
|
}
|
|
78
84
|
}
|