@cookill/wallet-adapter 0.1.0 → 2.4.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/dist/index.d.cts CHANGED
@@ -1,48 +1,46 @@
1
1
  /**
2
- * @cookillabs/wallet-adapter
3
- * Community wallet adapter for Rialo blockchain dApps
4
- *
5
- * ⚠️ DISCLAIMER: This is a community package, NOT officially maintained by Rialo.
6
- * For official Rialo packages, see: https://www.npmjs.com/package/@rialo/frost
2
+ * @cookill/wallet-adapter v2.3.0
3
+ * Sheep Wallet adapter for Rialo blockchain dApps
7
4
  */
8
- /** Supported Rialo chains */
9
5
  type RialoChain = 'rialo:mainnet' | 'rialo:testnet' | 'rialo:devnet' | 'rialo:localnet';
10
- /** Network shorthand */
11
6
  type RialoNetwork = 'mainnet' | 'testnet' | 'devnet' | 'localnet';
12
- /** Wallet account */
13
7
  interface WalletAccount {
14
8
  address: string;
15
9
  publicKey?: Uint8Array | string;
16
10
  label?: string;
17
11
  }
18
- /** Transaction request */
19
12
  interface TransactionRequest {
20
13
  to: string;
21
14
  value: string;
22
15
  data?: string;
23
16
  memo?: string;
24
17
  }
25
- /** Transaction result */
26
18
  interface TransactionResult {
27
19
  hash: string;
20
+ signature?: string;
28
21
  status: 'pending' | 'confirmed' | 'failed';
29
22
  blockNumber?: number;
30
23
  }
31
- /** Signed message */
32
24
  interface SignedMessage {
33
25
  signature: string;
34
26
  message: string;
35
27
  address: string;
28
+ publicKey?: string;
29
+ }
30
+ interface BalanceResult {
31
+ balance: string;
32
+ balanceKelvins: string;
33
+ formatted: string;
36
34
  }
37
- /** Network configuration */
38
35
  interface NetworkConfig {
39
36
  chainId: string;
40
37
  name: string;
41
38
  rpcUrl: string;
42
39
  wsUrl?: string;
43
40
  explorerUrl?: string;
41
+ symbol: string;
42
+ decimals: number;
44
43
  }
45
- /** Wallet info for registry */
46
44
  interface WalletInfo {
47
45
  id: string;
48
46
  name: string;
@@ -50,57 +48,72 @@ interface WalletInfo {
50
48
  installed?: boolean;
51
49
  downloadUrl?: string;
52
50
  }
53
- /** Wallet adapter events */
54
- type WalletEvent = 'connect' | 'disconnect' | 'accountChange' | 'networkChange' | 'error';
51
+ type WalletEvent = 'connect' | 'disconnect' | 'accountsChanged' | 'networkChanged' | 'chainChanged' | 'error';
55
52
  declare const NETWORKS: Record<RialoNetwork, NetworkConfig>;
56
- /**
57
- * Provider interface injected by Rialo Wallet extension
58
- * Available at window.rialo when extension is installed
59
- */
60
53
  interface RialoProvider {
61
54
  isRialo: boolean;
55
+ isSheepWallet?: boolean;
56
+ name?: string;
57
+ walletName?: string;
62
58
  version: string;
63
- connect(): Promise<string[]>;
59
+ icon?: string;
60
+ connect(options?: {
61
+ silent?: boolean;
62
+ }): Promise<WalletAccount[]>;
64
63
  disconnect(): Promise<void>;
65
64
  isConnected(): Promise<boolean>;
66
- getAccounts(): Promise<string[]>;
65
+ getAccounts(): Promise<WalletAccount[]>;
67
66
  signTransaction(tx: TransactionRequest): Promise<{
68
67
  signature: string;
68
+ signedTransaction?: string;
69
69
  rawTransaction?: string;
70
70
  }>;
71
71
  sendTransaction(tx: TransactionRequest): Promise<TransactionResult>;
72
72
  signAndSendTransaction(tx: TransactionRequest): Promise<TransactionResult>;
73
- signMessage(message: string): Promise<SignedMessage>;
74
- getNetwork(): Promise<string>;
75
- switchNetwork(network: RialoNetwork): Promise<void>;
76
- getBalance(address?: string): Promise<string>;
73
+ signAllTransactions?(txs: TransactionRequest[]): Promise<{
74
+ signedTransactions: string[];
75
+ }>;
76
+ signMessage(message: string | Uint8Array): Promise<SignedMessage>;
77
+ getNetwork(): Promise<RialoNetwork>;
78
+ switchNetwork(network: RialoNetwork): Promise<{
79
+ success: boolean;
80
+ }>;
81
+ getChainId(): Promise<string>;
82
+ getBalance(address?: string): Promise<BalanceResult | string>;
77
83
  on(event: WalletEvent, callback: (data: unknown) => void): () => void;
84
+ off?(event: WalletEvent, callback: (data: unknown) => void): void;
78
85
  removeListener(event: WalletEvent, callback: (data: unknown) => void): void;
79
86
  removeAllListeners(event?: WalletEvent): void;
87
+ utils?: {
88
+ isValidAddress(address: string): boolean;
89
+ formatAddress(address: string, chars?: number): string;
90
+ };
91
+ features?: string[];
92
+ supportsFeature?(feature: string): boolean;
93
+ readonly connected?: boolean;
94
+ readonly accounts?: WalletAccount[];
95
+ readonly address?: string | null;
96
+ readonly publicKey?: string | null;
97
+ readonly network?: RialoNetwork;
98
+ readonly chainId?: string;
80
99
  }
81
- /**
82
- * Check if Rialo Wallet extension is installed
83
- */
84
100
  declare function isRialoInstalled(): boolean;
85
- /**
86
- * Get the Rialo provider if available
87
- */
88
101
  declare function getRialoProvider(): RialoProvider | undefined;
89
- /**
90
- * Wait for Rialo provider to be available (with timeout)
91
- */
92
102
  declare function waitForRialoProvider(timeout?: number): Promise<RialoProvider | undefined>;
93
103
  declare class RialoWallet {
94
104
  private provider;
95
105
  private _connected;
96
106
  private _accounts;
97
107
  private _network;
108
+ private _listeners;
98
109
  constructor();
110
+ private setupEvents;
99
111
  get isInstalled(): boolean;
100
112
  get connected(): boolean;
101
113
  get accounts(): WalletAccount[];
102
114
  get activeAccount(): WalletAccount | undefined;
103
115
  get network(): RialoNetwork;
116
+ get chainId(): string;
104
117
  connect(): Promise<WalletAccount[]>;
105
118
  disconnect(): Promise<void>;
106
119
  signMessage(message: string): Promise<SignedMessage>;
@@ -111,27 +124,17 @@ declare class RialoWallet {
111
124
  switchNetwork(network: RialoNetwork): Promise<void>;
112
125
  on(event: WalletEvent, callback: (data: unknown) => void): () => void;
113
126
  }
114
- /**
115
- * Format address for display (truncated base58)
116
- */
117
127
  declare function formatAddress(address: string, chars?: number): string;
118
- /**
119
- * Format balance from kelvins (smallest unit) to RLO
120
- */
121
128
  declare function formatBalance(kelvins: string | bigint, decimals?: number): string;
122
- /**
123
- * Parse RLO to kelvins
124
- */
125
129
  declare function parseBalance(rlo: string | number): bigint;
126
- /**
127
- * Validate Rialo address format (base58)
128
- * Real Rialo addresses are base58 encoded public keys (32-50 chars)
129
- */
130
130
  declare function isValidAddress(address: string): boolean;
131
+ declare function toChainId(network: RialoNetwork): RialoChain;
132
+ declare function fromChainId(chainId: RialoChain): RialoNetwork;
131
133
  declare global {
132
134
  interface Window {
133
135
  rialo?: RialoProvider;
136
+ Rialo?: RialoProvider;
134
137
  }
135
138
  }
136
139
 
137
- export { NETWORKS, type NetworkConfig, type RialoChain, type RialoNetwork, type RialoProvider, RialoWallet, type SignedMessage, type TransactionRequest, type TransactionResult, type WalletAccount, type WalletEvent, type WalletInfo, RialoWallet as default, formatAddress, formatBalance, getRialoProvider, isRialoInstalled, isValidAddress, parseBalance, waitForRialoProvider };
140
+ export { type BalanceResult, NETWORKS, type NetworkConfig, type RialoChain, type RialoNetwork, type RialoProvider, RialoWallet, type SignedMessage, type TransactionRequest, type TransactionResult, type WalletAccount, type WalletEvent, type WalletInfo, RialoWallet as default, formatAddress, formatBalance, fromChainId, getRialoProvider, isRialoInstalled, isValidAddress, parseBalance, toChainId, waitForRialoProvider };
package/dist/index.d.ts CHANGED
@@ -1,48 +1,46 @@
1
1
  /**
2
- * @cookillabs/wallet-adapter
3
- * Community wallet adapter for Rialo blockchain dApps
4
- *
5
- * ⚠️ DISCLAIMER: This is a community package, NOT officially maintained by Rialo.
6
- * For official Rialo packages, see: https://www.npmjs.com/package/@rialo/frost
2
+ * @cookill/wallet-adapter v2.3.0
3
+ * Sheep Wallet adapter for Rialo blockchain dApps
7
4
  */
8
- /** Supported Rialo chains */
9
5
  type RialoChain = 'rialo:mainnet' | 'rialo:testnet' | 'rialo:devnet' | 'rialo:localnet';
10
- /** Network shorthand */
11
6
  type RialoNetwork = 'mainnet' | 'testnet' | 'devnet' | 'localnet';
12
- /** Wallet account */
13
7
  interface WalletAccount {
14
8
  address: string;
15
9
  publicKey?: Uint8Array | string;
16
10
  label?: string;
17
11
  }
18
- /** Transaction request */
19
12
  interface TransactionRequest {
20
13
  to: string;
21
14
  value: string;
22
15
  data?: string;
23
16
  memo?: string;
24
17
  }
25
- /** Transaction result */
26
18
  interface TransactionResult {
27
19
  hash: string;
20
+ signature?: string;
28
21
  status: 'pending' | 'confirmed' | 'failed';
29
22
  blockNumber?: number;
30
23
  }
31
- /** Signed message */
32
24
  interface SignedMessage {
33
25
  signature: string;
34
26
  message: string;
35
27
  address: string;
28
+ publicKey?: string;
29
+ }
30
+ interface BalanceResult {
31
+ balance: string;
32
+ balanceKelvins: string;
33
+ formatted: string;
36
34
  }
37
- /** Network configuration */
38
35
  interface NetworkConfig {
39
36
  chainId: string;
40
37
  name: string;
41
38
  rpcUrl: string;
42
39
  wsUrl?: string;
43
40
  explorerUrl?: string;
41
+ symbol: string;
42
+ decimals: number;
44
43
  }
45
- /** Wallet info for registry */
46
44
  interface WalletInfo {
47
45
  id: string;
48
46
  name: string;
@@ -50,57 +48,72 @@ interface WalletInfo {
50
48
  installed?: boolean;
51
49
  downloadUrl?: string;
52
50
  }
53
- /** Wallet adapter events */
54
- type WalletEvent = 'connect' | 'disconnect' | 'accountChange' | 'networkChange' | 'error';
51
+ type WalletEvent = 'connect' | 'disconnect' | 'accountsChanged' | 'networkChanged' | 'chainChanged' | 'error';
55
52
  declare const NETWORKS: Record<RialoNetwork, NetworkConfig>;
56
- /**
57
- * Provider interface injected by Rialo Wallet extension
58
- * Available at window.rialo when extension is installed
59
- */
60
53
  interface RialoProvider {
61
54
  isRialo: boolean;
55
+ isSheepWallet?: boolean;
56
+ name?: string;
57
+ walletName?: string;
62
58
  version: string;
63
- connect(): Promise<string[]>;
59
+ icon?: string;
60
+ connect(options?: {
61
+ silent?: boolean;
62
+ }): Promise<WalletAccount[]>;
64
63
  disconnect(): Promise<void>;
65
64
  isConnected(): Promise<boolean>;
66
- getAccounts(): Promise<string[]>;
65
+ getAccounts(): Promise<WalletAccount[]>;
67
66
  signTransaction(tx: TransactionRequest): Promise<{
68
67
  signature: string;
68
+ signedTransaction?: string;
69
69
  rawTransaction?: string;
70
70
  }>;
71
71
  sendTransaction(tx: TransactionRequest): Promise<TransactionResult>;
72
72
  signAndSendTransaction(tx: TransactionRequest): Promise<TransactionResult>;
73
- signMessage(message: string): Promise<SignedMessage>;
74
- getNetwork(): Promise<string>;
75
- switchNetwork(network: RialoNetwork): Promise<void>;
76
- getBalance(address?: string): Promise<string>;
73
+ signAllTransactions?(txs: TransactionRequest[]): Promise<{
74
+ signedTransactions: string[];
75
+ }>;
76
+ signMessage(message: string | Uint8Array): Promise<SignedMessage>;
77
+ getNetwork(): Promise<RialoNetwork>;
78
+ switchNetwork(network: RialoNetwork): Promise<{
79
+ success: boolean;
80
+ }>;
81
+ getChainId(): Promise<string>;
82
+ getBalance(address?: string): Promise<BalanceResult | string>;
77
83
  on(event: WalletEvent, callback: (data: unknown) => void): () => void;
84
+ off?(event: WalletEvent, callback: (data: unknown) => void): void;
78
85
  removeListener(event: WalletEvent, callback: (data: unknown) => void): void;
79
86
  removeAllListeners(event?: WalletEvent): void;
87
+ utils?: {
88
+ isValidAddress(address: string): boolean;
89
+ formatAddress(address: string, chars?: number): string;
90
+ };
91
+ features?: string[];
92
+ supportsFeature?(feature: string): boolean;
93
+ readonly connected?: boolean;
94
+ readonly accounts?: WalletAccount[];
95
+ readonly address?: string | null;
96
+ readonly publicKey?: string | null;
97
+ readonly network?: RialoNetwork;
98
+ readonly chainId?: string;
80
99
  }
81
- /**
82
- * Check if Rialo Wallet extension is installed
83
- */
84
100
  declare function isRialoInstalled(): boolean;
85
- /**
86
- * Get the Rialo provider if available
87
- */
88
101
  declare function getRialoProvider(): RialoProvider | undefined;
89
- /**
90
- * Wait for Rialo provider to be available (with timeout)
91
- */
92
102
  declare function waitForRialoProvider(timeout?: number): Promise<RialoProvider | undefined>;
93
103
  declare class RialoWallet {
94
104
  private provider;
95
105
  private _connected;
96
106
  private _accounts;
97
107
  private _network;
108
+ private _listeners;
98
109
  constructor();
110
+ private setupEvents;
99
111
  get isInstalled(): boolean;
100
112
  get connected(): boolean;
101
113
  get accounts(): WalletAccount[];
102
114
  get activeAccount(): WalletAccount | undefined;
103
115
  get network(): RialoNetwork;
116
+ get chainId(): string;
104
117
  connect(): Promise<WalletAccount[]>;
105
118
  disconnect(): Promise<void>;
106
119
  signMessage(message: string): Promise<SignedMessage>;
@@ -111,27 +124,17 @@ declare class RialoWallet {
111
124
  switchNetwork(network: RialoNetwork): Promise<void>;
112
125
  on(event: WalletEvent, callback: (data: unknown) => void): () => void;
113
126
  }
114
- /**
115
- * Format address for display (truncated base58)
116
- */
117
127
  declare function formatAddress(address: string, chars?: number): string;
118
- /**
119
- * Format balance from kelvins (smallest unit) to RLO
120
- */
121
128
  declare function formatBalance(kelvins: string | bigint, decimals?: number): string;
122
- /**
123
- * Parse RLO to kelvins
124
- */
125
129
  declare function parseBalance(rlo: string | number): bigint;
126
- /**
127
- * Validate Rialo address format (base58)
128
- * Real Rialo addresses are base58 encoded public keys (32-50 chars)
129
- */
130
130
  declare function isValidAddress(address: string): boolean;
131
+ declare function toChainId(network: RialoNetwork): RialoChain;
132
+ declare function fromChainId(chainId: RialoChain): RialoNetwork;
131
133
  declare global {
132
134
  interface Window {
133
135
  rialo?: RialoProvider;
136
+ Rialo?: RialoProvider;
134
137
  }
135
138
  }
136
139
 
137
- export { NETWORKS, type NetworkConfig, type RialoChain, type RialoNetwork, type RialoProvider, RialoWallet, type SignedMessage, type TransactionRequest, type TransactionResult, type WalletAccount, type WalletEvent, type WalletInfo, RialoWallet as default, formatAddress, formatBalance, getRialoProvider, isRialoInstalled, isValidAddress, parseBalance, waitForRialoProvider };
140
+ export { type BalanceResult, NETWORKS, type NetworkConfig, type RialoChain, type RialoNetwork, type RialoProvider, RialoWallet, type SignedMessage, type TransactionRequest, type TransactionResult, type WalletAccount, type WalletEvent, type WalletInfo, RialoWallet as default, formatAddress, formatBalance, fromChainId, getRialoProvider, isRialoInstalled, isValidAddress, parseBalance, toChainId, waitForRialoProvider };
package/dist/index.js CHANGED
@@ -5,28 +5,36 @@ var NETWORKS = {
5
5
  name: "Rialo Mainnet",
6
6
  rpcUrl: "https://mainnet.rialo.io:4101",
7
7
  wsUrl: "wss://mainnet.rialo.io:4102",
8
- explorerUrl: "https://explorer.rialo.io"
8
+ explorerUrl: "https://explorer.rialo.io",
9
+ symbol: "RLO",
10
+ decimals: 9
9
11
  },
10
12
  testnet: {
11
13
  chainId: "rialo:testnet",
12
14
  name: "Rialo Testnet",
13
15
  rpcUrl: "https://testnet.rialo.io:4101",
14
16
  wsUrl: "wss://testnet.rialo.io:4102",
15
- explorerUrl: "https://testnet.explorer.rialo.io"
17
+ explorerUrl: "https://testnet.explorer.rialo.io",
18
+ symbol: "tRLO",
19
+ decimals: 9
16
20
  },
17
21
  devnet: {
18
22
  chainId: "rialo:devnet",
19
23
  name: "Rialo Devnet",
20
24
  rpcUrl: "https://devnet.rialo.io:4101",
21
25
  wsUrl: "wss://devnet.rialo.io:4102",
22
- explorerUrl: "https://devnet.explorer.rialo.io"
26
+ explorerUrl: "https://devnet.explorer.rialo.io",
27
+ symbol: "dRLO",
28
+ decimals: 9
23
29
  },
24
30
  localnet: {
25
31
  chainId: "rialo:localnet",
26
32
  name: "Rialo Localnet",
27
33
  rpcUrl: "http://localhost:4101",
28
34
  wsUrl: "ws://localhost:4102",
29
- explorerUrl: "http://localhost:3000"
35
+ explorerUrl: "http://localhost:3000",
36
+ symbol: "lRLO",
37
+ decimals: 9
30
38
  }
31
39
  };
32
40
  function isRialoInstalled() {
@@ -44,16 +52,29 @@ function waitForRialoProvider(timeout = 3e3) {
44
52
  resolve(getRialoProvider());
45
53
  return;
46
54
  }
55
+ let resolved = false;
47
56
  const checkInterval = setInterval(() => {
48
- if (isRialoInstalled()) {
57
+ if (isRialoInstalled() && !resolved) {
58
+ resolved = true;
49
59
  clearInterval(checkInterval);
50
60
  resolve(getRialoProvider());
51
61
  }
52
62
  }, 100);
53
63
  setTimeout(() => {
54
- clearInterval(checkInterval);
55
- resolve(void 0);
64
+ if (!resolved) {
65
+ resolved = true;
66
+ clearInterval(checkInterval);
67
+ resolve(void 0);
68
+ }
56
69
  }, timeout);
70
+ const handler = () => {
71
+ if (!resolved) {
72
+ resolved = true;
73
+ clearInterval(checkInterval);
74
+ resolve(getRialoProvider());
75
+ }
76
+ };
77
+ window.addEventListener("rialo#initialized", handler, { once: true });
57
78
  });
58
79
  }
59
80
  var RialoWallet = class {
@@ -61,7 +82,24 @@ var RialoWallet = class {
61
82
  this._connected = false;
62
83
  this._accounts = [];
63
84
  this._network = "devnet";
85
+ this._listeners = /* @__PURE__ */ new Map();
64
86
  this.provider = getRialoProvider();
87
+ this.setupEvents();
88
+ }
89
+ setupEvents() {
90
+ if (!this.provider) return;
91
+ this.provider.on("disconnect", () => {
92
+ this._connected = false;
93
+ this._accounts = [];
94
+ });
95
+ this.provider.on("accountsChanged", (data) => {
96
+ const accounts = data;
97
+ this._accounts = accounts;
98
+ });
99
+ this.provider.on("networkChanged", (data) => {
100
+ const { network } = data;
101
+ this._network = network;
102
+ });
65
103
  }
66
104
  get isInstalled() {
67
105
  return isRialoInstalled();
@@ -78,16 +116,19 @@ var RialoWallet = class {
78
116
  get network() {
79
117
  return this._network;
80
118
  }
119
+ get chainId() {
120
+ return `rialo:${this._network}`;
121
+ }
81
122
  async connect() {
82
123
  this.provider = getRialoProvider();
83
124
  if (!this.provider) {
84
125
  throw new Error("Rialo Wallet not installed. Download at https://rialo.io/wallet");
85
126
  }
86
- const addresses = await this.provider.connect();
87
- this._accounts = addresses.map((address) => ({ address }));
127
+ const accounts = await this.provider.connect();
128
+ this._accounts = accounts;
88
129
  this._connected = true;
89
- const networkStr = await this.provider.getNetwork();
90
- this._network = networkStr.replace("rialo:", "");
130
+ const network = await this.provider.getNetwork();
131
+ this._network = network;
91
132
  return this._accounts;
92
133
  }
93
134
  async disconnect() {
@@ -126,7 +167,9 @@ var RialoWallet = class {
126
167
  if (!this.provider) {
127
168
  throw new Error("Wallet not available");
128
169
  }
129
- return this.provider.getBalance(address);
170
+ const result = await this.provider.getBalance(address);
171
+ if (typeof result === "string") return result;
172
+ return result.balance;
130
173
  }
131
174
  async switchNetwork(network) {
132
175
  if (!this.provider) {
@@ -149,7 +192,7 @@ function formatAddress(address, chars = 4) {
149
192
  return `${address.slice(0, chars + 2)}...${address.slice(-chars)}`;
150
193
  }
151
194
  function formatBalance(kelvins, decimals = 4) {
152
- const value = typeof kelvins === "string" ? BigInt(kelvins) : kelvins;
195
+ const value = typeof kelvins === "string" ? BigInt(kelvins || "0") : kelvins;
153
196
  const rlo = Number(value) / 1e9;
154
197
  return rlo.toFixed(decimals);
155
198
  }
@@ -160,11 +203,16 @@ function parseBalance(rlo) {
160
203
  function isValidAddress(address) {
161
204
  if (!address || typeof address !== "string") return false;
162
205
  if (address.length < 32 || address.length > 50) return false;
163
- const base58Regex = /^[1-9A-HJ-NP-Za-km-z]+$/;
164
- return base58Regex.test(address);
206
+ return /^[1-9A-HJ-NP-Za-km-z]+$/.test(address);
207
+ }
208
+ function toChainId(network) {
209
+ return `rialo:${network}`;
210
+ }
211
+ function fromChainId(chainId) {
212
+ return chainId.replace("rialo:", "");
165
213
  }
166
214
  var src_default = RialoWallet;
167
215
 
168
- export { NETWORKS, RialoWallet, src_default as default, formatAddress, formatBalance, getRialoProvider, isRialoInstalled, isValidAddress, parseBalance, waitForRialoProvider };
216
+ export { NETWORKS, RialoWallet, src_default as default, formatAddress, formatBalance, fromChainId, getRialoProvider, isRialoInstalled, isValidAddress, parseBalance, toChainId, waitForRialoProvider };
169
217
  //# sourceMappingURL=index.js.map
170
218
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @cookillabs/wallet-adapter\n * Community wallet adapter for Rialo blockchain dApps\n * \n * ⚠️ DISCLAIMER: This is a community package, NOT officially maintained by Rialo.\n * For official Rialo packages, see: https://www.npmjs.com/package/@rialo/frost\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Supported Rialo chains */\nexport type RialoChain = 'rialo:mainnet' | 'rialo:testnet' | 'rialo:devnet' | 'rialo:localnet';\n\n/** Network shorthand */\nexport type RialoNetwork = 'mainnet' | 'testnet' | 'devnet' | 'localnet';\n\n/** Wallet account */\nexport interface WalletAccount {\n address: string;\n publicKey?: Uint8Array | string;\n label?: string;\n}\n\n/** Transaction request */\nexport interface TransactionRequest {\n to: string;\n value: string;\n data?: string;\n memo?: string;\n}\n\n/** Transaction result */\nexport interface TransactionResult {\n hash: string;\n status: 'pending' | 'confirmed' | 'failed';\n blockNumber?: number;\n}\n\n/** Signed message */\nexport interface SignedMessage {\n signature: string;\n message: string;\n address: string;\n}\n\n/** Network configuration */\nexport interface NetworkConfig {\n chainId: string;\n name: string;\n rpcUrl: string;\n wsUrl?: string;\n explorerUrl?: string;\n}\n\n/** Wallet info for registry */\nexport interface WalletInfo {\n id: string;\n name: string;\n icon: string;\n installed?: boolean;\n downloadUrl?: string;\n}\n\n/** Wallet adapter events */\nexport type WalletEvent = 'connect' | 'disconnect' | 'accountChange' | 'networkChange' | 'error';\n\n// ============================================================================\n// Network Configurations\n// ============================================================================\n\nexport const NETWORKS: Record<RialoNetwork, NetworkConfig> = {\n mainnet: {\n chainId: 'rialo:mainnet',\n name: 'Rialo Mainnet',\n rpcUrl: 'https://mainnet.rialo.io:4101',\n wsUrl: 'wss://mainnet.rialo.io:4102',\n explorerUrl: 'https://explorer.rialo.io',\n },\n testnet: {\n chainId: 'rialo:testnet',\n name: 'Rialo Testnet',\n rpcUrl: 'https://testnet.rialo.io:4101',\n wsUrl: 'wss://testnet.rialo.io:4102',\n explorerUrl: 'https://testnet.explorer.rialo.io',\n },\n devnet: {\n chainId: 'rialo:devnet',\n name: 'Rialo Devnet',\n rpcUrl: 'https://devnet.rialo.io:4101',\n wsUrl: 'wss://devnet.rialo.io:4102',\n explorerUrl: 'https://devnet.explorer.rialo.io',\n },\n localnet: {\n chainId: 'rialo:localnet',\n name: 'Rialo Localnet',\n rpcUrl: 'http://localhost:4101',\n wsUrl: 'ws://localhost:4102',\n explorerUrl: 'http://localhost:3000',\n },\n};\n\n// ============================================================================\n// Wallet Provider Interface\n// ============================================================================\n\n/**\n * Provider interface injected by Rialo Wallet extension\n * Available at window.rialo when extension is installed\n */\nexport interface RialoProvider {\n isRialo: boolean;\n version: string;\n\n // Connection\n connect(): Promise<string[]>;\n disconnect(): Promise<void>;\n isConnected(): Promise<boolean>;\n getAccounts(): Promise<string[]>;\n\n // Transactions\n signTransaction(tx: TransactionRequest): Promise<{ signature: string; rawTransaction?: string }>;\n sendTransaction(tx: TransactionRequest): Promise<TransactionResult>;\n signAndSendTransaction(tx: TransactionRequest): Promise<TransactionResult>;\n\n // Message signing\n signMessage(message: string): Promise<SignedMessage>;\n\n // Network\n getNetwork(): Promise<string>;\n switchNetwork(network: RialoNetwork): Promise<void>;\n getBalance(address?: string): Promise<string>;\n\n // Events\n on(event: WalletEvent, callback: (data: unknown) => void): () => void;\n removeListener(event: WalletEvent, callback: (data: unknown) => void): void;\n removeAllListeners(event?: WalletEvent): void;\n}\n\n// ============================================================================\n// Detection & Access\n// ============================================================================\n\n/**\n * Check if Rialo Wallet extension is installed\n */\nexport function isRialoInstalled(): boolean {\n if (typeof window === 'undefined') return false;\n return !!(window as RialoWindow).rialo?.isRialo;\n}\n\n/**\n * Get the Rialo provider if available\n */\nexport function getRialoProvider(): RialoProvider | undefined {\n if (typeof window === 'undefined') return undefined;\n const rialo = (window as RialoWindow).rialo;\n return rialo?.isRialo ? rialo : undefined;\n}\n\n/**\n * Wait for Rialo provider to be available (with timeout)\n */\nexport function waitForRialoProvider(timeout = 3000): Promise<RialoProvider | undefined> {\n return new Promise((resolve) => {\n if (isRialoInstalled()) {\n resolve(getRialoProvider());\n return;\n }\n\n const checkInterval = setInterval(() => {\n if (isRialoInstalled()) {\n clearInterval(checkInterval);\n resolve(getRialoProvider());\n }\n }, 100);\n\n setTimeout(() => {\n clearInterval(checkInterval);\n resolve(undefined);\n }, timeout);\n });\n}\n\n// ============================================================================\n// Simple Wallet Class (Non-React)\n// ============================================================================\n\nexport class RialoWallet {\n private provider: RialoProvider | undefined;\n private _connected = false;\n private _accounts: WalletAccount[] = [];\n private _network: RialoNetwork = 'devnet';\n\n constructor() {\n this.provider = getRialoProvider();\n }\n\n get isInstalled(): boolean {\n return isRialoInstalled();\n }\n\n get connected(): boolean {\n return this._connected;\n }\n\n get accounts(): WalletAccount[] {\n return this._accounts;\n }\n\n get activeAccount(): WalletAccount | undefined {\n return this._accounts[0];\n }\n\n get network(): RialoNetwork {\n return this._network;\n }\n\n async connect(): Promise<WalletAccount[]> {\n this.provider = getRialoProvider();\n if (!this.provider) {\n throw new Error('Rialo Wallet not installed. Download at https://rialo.io/wallet');\n }\n\n const addresses = await this.provider.connect();\n this._accounts = addresses.map((address) => ({ address }));\n this._connected = true;\n\n const networkStr = await this.provider.getNetwork();\n this._network = networkStr.replace('rialo:', '') as RialoNetwork;\n\n return this._accounts;\n }\n\n async disconnect(): Promise<void> {\n if (this.provider) {\n await this.provider.disconnect();\n }\n this._connected = false;\n this._accounts = [];\n }\n\n async signMessage(message: string): Promise<SignedMessage> {\n if (!this.provider || !this._connected) {\n throw new Error('Wallet not connected');\n }\n return this.provider.signMessage(message);\n }\n\n async signTransaction(tx: TransactionRequest): Promise<string> {\n if (!this.provider || !this._connected) {\n throw new Error('Wallet not connected');\n }\n const result = await this.provider.signTransaction(tx);\n return result.signature;\n }\n\n async sendTransaction(tx: TransactionRequest): Promise<TransactionResult> {\n if (!this.provider || !this._connected) {\n throw new Error('Wallet not connected');\n }\n return this.provider.sendTransaction(tx);\n }\n\n async signAndSendTransaction(tx: TransactionRequest): Promise<TransactionResult> {\n if (!this.provider || !this._connected) {\n throw new Error('Wallet not connected');\n }\n return this.provider.signAndSendTransaction(tx);\n }\n\n async getBalance(address?: string): Promise<string> {\n if (!this.provider) {\n throw new Error('Wallet not available');\n }\n return this.provider.getBalance(address);\n }\n\n async switchNetwork(network: RialoNetwork): Promise<void> {\n if (!this.provider) {\n throw new Error('Wallet not available');\n }\n await this.provider.switchNetwork(network);\n this._network = network;\n }\n\n on(event: WalletEvent, callback: (data: unknown) => void): () => void {\n if (!this.provider) {\n return () => {};\n }\n return this.provider.on(event, callback);\n }\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Format address for display (truncated base58)\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 (smallest unit) to RLO\n */\nexport function formatBalance(kelvins: string | bigint, decimals = 4): string {\n const value = typeof kelvins === 'string' ? BigInt(kelvins) : kelvins;\n const rlo = Number(value) / 1_000_000_000;\n return rlo.toFixed(decimals);\n}\n\n/**\n * Parse RLO 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 (base58)\n * Real Rialo addresses are base58 encoded public keys (32-50 chars)\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 \n // Base58 character set (no 0, O, I, l)\n const base58Regex = /^[1-9A-HJ-NP-Za-km-z]+$/;\n return base58Regex.test(address);\n}\n\n// ============================================================================\n// Window Extension\n// ============================================================================\n\ninterface RialoWindow extends Window {\n rialo?: RialoProvider;\n}\n\ndeclare global {\n interface Window {\n rialo?: RialoProvider;\n }\n}\n\n// ============================================================================\n// Default Export\n// ============================================================================\n\nexport default RialoWallet;\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @cookill/wallet-adapter v2.3.0\n * Sheep Wallet adapter for Rialo blockchain dApps\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type RialoChain = 'rialo:mainnet' | 'rialo:testnet' | 'rialo:devnet' | 'rialo:localnet';\nexport type RialoNetwork = 'mainnet' | 'testnet' | 'devnet' | 'localnet';\n\nexport interface WalletAccount {\n address: string;\n publicKey?: Uint8Array | string;\n label?: string;\n}\n\nexport interface TransactionRequest {\n to: string;\n value: string;\n data?: string;\n memo?: string;\n}\n\nexport interface TransactionResult {\n hash: string;\n signature?: string;\n status: 'pending' | 'confirmed' | 'failed';\n blockNumber?: number;\n}\n\nexport interface SignedMessage {\n signature: string;\n message: string;\n address: string;\n publicKey?: string;\n}\n\nexport interface BalanceResult {\n balance: string;\n balanceKelvins: string;\n formatted: string;\n}\n\nexport interface NetworkConfig {\n chainId: string;\n name: string;\n rpcUrl: string;\n wsUrl?: string;\n explorerUrl?: string;\n symbol: string;\n decimals: number;\n}\n\nexport interface WalletInfo {\n id: string;\n name: string;\n icon: string;\n installed?: boolean;\n downloadUrl?: string;\n}\n\nexport type WalletEvent = \n | 'connect' \n | 'disconnect' \n | 'accountsChanged'\n | 'networkChanged' \n | 'chainChanged'\n | 'error';\n\n// ============================================================================\n// Network Configurations\n// ============================================================================\n\nexport const NETWORKS: Record<RialoNetwork, NetworkConfig> = {\n mainnet: {\n chainId: 'rialo:mainnet',\n name: 'Rialo Mainnet',\n rpcUrl: 'https://mainnet.rialo.io:4101',\n wsUrl: 'wss://mainnet.rialo.io:4102',\n explorerUrl: 'https://explorer.rialo.io',\n symbol: 'RLO',\n decimals: 9,\n },\n testnet: {\n chainId: 'rialo:testnet',\n name: 'Rialo Testnet',\n rpcUrl: 'https://testnet.rialo.io:4101',\n wsUrl: 'wss://testnet.rialo.io:4102',\n explorerUrl: 'https://testnet.explorer.rialo.io',\n symbol: 'tRLO',\n decimals: 9,\n },\n devnet: {\n chainId: 'rialo:devnet',\n name: 'Rialo Devnet',\n rpcUrl: 'https://devnet.rialo.io:4101',\n wsUrl: 'wss://devnet.rialo.io:4102',\n explorerUrl: 'https://devnet.explorer.rialo.io',\n symbol: 'dRLO',\n decimals: 9,\n },\n localnet: {\n chainId: 'rialo:localnet',\n name: 'Rialo Localnet',\n rpcUrl: 'http://localhost:4101',\n wsUrl: 'ws://localhost:4102',\n explorerUrl: 'http://localhost:3000',\n symbol: 'lRLO',\n decimals: 9,\n },\n};\n\n// ============================================================================\n// Provider Interface\n// ============================================================================\n\nexport interface RialoProvider {\n // Metadata\n isRialo: boolean;\n isSheepWallet?: boolean;\n name?: string;\n walletName?: string;\n version: string;\n icon?: string;\n\n // Connection\n connect(options?: { silent?: boolean }): Promise<WalletAccount[]>;\n disconnect(): Promise<void>;\n isConnected(): Promise<boolean>;\n getAccounts(): Promise<WalletAccount[]>;\n\n // Transactions\n signTransaction(tx: TransactionRequest): Promise<{ signature: string; signedTransaction?: string; rawTransaction?: string }>;\n sendTransaction(tx: TransactionRequest): Promise<TransactionResult>;\n signAndSendTransaction(tx: TransactionRequest): Promise<TransactionResult>;\n signAllTransactions?(txs: TransactionRequest[]): Promise<{ signedTransactions: string[] }>;\n\n // Message signing\n signMessage(message: string | Uint8Array): Promise<SignedMessage>;\n\n // Network\n getNetwork(): Promise<RialoNetwork>;\n switchNetwork(network: RialoNetwork): Promise<{ success: boolean }>;\n getChainId(): Promise<string>;\n getBalance(address?: string): Promise<BalanceResult | string>;\n\n // Events\n on(event: WalletEvent, callback: (data: unknown) => void): () => void;\n off?(event: WalletEvent, callback: (data: unknown) => void): void;\n removeListener(event: WalletEvent, callback: (data: unknown) => void): void;\n removeAllListeners(event?: WalletEvent): void;\n\n // Utilities\n utils?: {\n isValidAddress(address: string): boolean;\n formatAddress(address: string, chars?: number): string;\n };\n\n // Wallet Standard\n features?: string[];\n supportsFeature?(feature: string): boolean;\n\n // State getters\n readonly connected?: boolean;\n readonly accounts?: WalletAccount[];\n readonly address?: string | null;\n readonly publicKey?: string | null;\n readonly network?: RialoNetwork;\n readonly chainId?: string;\n}\n\n// ============================================================================\n// Detection & Access\n// ============================================================================\n\nexport function isRialoInstalled(): boolean {\n if (typeof window === 'undefined') return false;\n return !!(window as RialoWindow).rialo?.isRialo;\n}\n\nexport function getRialoProvider(): RialoProvider | undefined {\n if (typeof window === 'undefined') return undefined;\n const rialo = (window as RialoWindow).rialo;\n return rialo?.isRialo ? rialo : undefined;\n}\n\nexport function waitForRialoProvider(timeout = 3000): Promise<RialoProvider | undefined> {\n return new Promise((resolve) => {\n if (isRialoInstalled()) {\n resolve(getRialoProvider());\n return;\n }\n\n let resolved = false;\n const checkInterval = setInterval(() => {\n if (isRialoInstalled() && !resolved) {\n resolved = true;\n clearInterval(checkInterval);\n resolve(getRialoProvider());\n }\n }, 100);\n\n setTimeout(() => {\n if (!resolved) {\n resolved = true;\n clearInterval(checkInterval);\n resolve(undefined);\n }\n }, timeout);\n\n // Also listen for initialization event\n const handler = () => {\n if (!resolved) {\n resolved = true;\n clearInterval(checkInterval);\n resolve(getRialoProvider());\n }\n };\n window.addEventListener('rialo#initialized', handler, { once: true });\n });\n}\n\n// ============================================================================\n// Simple Wallet Class (Non-React)\n// ============================================================================\n\nexport class RialoWallet {\n private provider: RialoProvider | undefined;\n private _connected = false;\n private _accounts: WalletAccount[] = [];\n private _network: RialoNetwork = 'devnet';\n private _listeners: Map<string, Set<() => void>> = new Map();\n\n constructor() {\n this.provider = getRialoProvider();\n this.setupEvents();\n }\n\n private setupEvents() {\n if (!this.provider) return;\n\n this.provider.on('disconnect', () => {\n this._connected = false;\n this._accounts = [];\n });\n\n this.provider.on('accountsChanged', (data: unknown) => {\n const accounts = data as WalletAccount[];\n this._accounts = accounts;\n });\n\n this.provider.on('networkChanged', (data: unknown) => {\n const { network } = data as { network: RialoNetwork };\n this._network = network;\n });\n }\n\n get isInstalled(): boolean {\n return isRialoInstalled();\n }\n\n get connected(): boolean {\n return this._connected;\n }\n\n get accounts(): WalletAccount[] {\n return this._accounts;\n }\n\n get activeAccount(): WalletAccount | undefined {\n return this._accounts[0];\n }\n\n get network(): RialoNetwork {\n return this._network;\n }\n\n get chainId(): string {\n return `rialo:${this._network}`;\n }\n\n async connect(): Promise<WalletAccount[]> {\n this.provider = getRialoProvider();\n if (!this.provider) {\n throw new Error('Rialo Wallet not installed. Download at https://rialo.io/wallet');\n }\n\n const accounts = await this.provider.connect();\n this._accounts = accounts;\n this._connected = true;\n\n const network = await this.provider.getNetwork();\n this._network = network;\n\n return this._accounts;\n }\n\n async disconnect(): Promise<void> {\n if (this.provider) {\n await this.provider.disconnect();\n }\n this._connected = false;\n this._accounts = [];\n }\n\n async signMessage(message: string): Promise<SignedMessage> {\n if (!this.provider || !this._connected) {\n throw new Error('Wallet not connected');\n }\n return this.provider.signMessage(message);\n }\n\n async signTransaction(tx: TransactionRequest): Promise<string> {\n if (!this.provider || !this._connected) {\n throw new Error('Wallet not connected');\n }\n const result = await this.provider.signTransaction(tx);\n return result.signature;\n }\n\n async sendTransaction(tx: TransactionRequest): Promise<TransactionResult> {\n if (!this.provider || !this._connected) {\n throw new Error('Wallet not connected');\n }\n return this.provider.sendTransaction(tx);\n }\n\n async signAndSendTransaction(tx: TransactionRequest): Promise<TransactionResult> {\n if (!this.provider || !this._connected) {\n throw new Error('Wallet not connected');\n }\n return this.provider.signAndSendTransaction(tx);\n }\n\n async getBalance(address?: string): Promise<string> {\n if (!this.provider) {\n throw new Error('Wallet not available');\n }\n const result = await this.provider.getBalance(address);\n if (typeof result === 'string') return result;\n return result.balance;\n }\n\n async switchNetwork(network: RialoNetwork): Promise<void> {\n if (!this.provider) {\n throw new Error('Wallet not available');\n }\n await this.provider.switchNetwork(network);\n this._network = network;\n }\n\n on(event: WalletEvent, callback: (data: unknown) => void): () => void {\n if (!this.provider) {\n return () => {};\n }\n return this.provider.on(event, callback);\n }\n}\n\n// ============================================================================\n// Utilities\n// ============================================================================\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\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\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\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\nexport function toChainId(network: RialoNetwork): RialoChain {\n return `rialo:${network}` as RialoChain;\n}\n\nexport function fromChainId(chainId: RialoChain): RialoNetwork {\n return chainId.replace('rialo:', '') as RialoNetwork;\n}\n\n// ============================================================================\n// Window Extension\n// ============================================================================\n\ninterface RialoWindow extends Window {\n rialo?: RialoProvider;\n}\n\ndeclare global {\n interface Window {\n rialo?: RialoProvider;\n Rialo?: RialoProvider;\n }\n}\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport default RialoWallet;\n"]}