@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.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @cookill/wallet-adapter/standard v2.5.0
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: StandardConnectFeature & StandardDisconnectFeature & StandardEventsFeature & RialoSignTransactionFeature & RialoSignAndSendTransactionFeature & RialoSignMessageFeature;
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 setupProviderEvents;
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 emit;
131
- private createAccount;
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 { RIALO_SIGN_ALL_TRANSACTIONS, RIALO_SIGN_AND_SEND_TRANSACTION, RIALO_SIGN_MESSAGE, RIALO_SIGN_TRANSACTION, type RialoChain, type RialoSignAndSendTransactionFeature, type RialoSignMessageFeature, type RialoSignTransactionFeature, type RialoWallet, type RialoWalletAccount, RialoWalletStandard, type SignAndSendTransactionInput, type SignAndSendTransactionOutput, type SignMessageInput, type SignMessageOutput, type SignTransactionInput, type SignTransactionOutput, type StandardConnectFeature, type StandardDisconnectFeature, type StandardEventsFeature, type WalletStandardEvents, RialoWalletStandard as default, getRialoWallet, isRialoWalletRegistered, registerRialoWallet };
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("Rialo Wallet not installed");
22
- const result = await provider.connect();
23
- this._accounts = result.map(
24
- (acc) => this.createAccount(typeof acc === "string" ? acc : acc.address)
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.emit("change", { accounts: this._accounts });
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) await provider.disconnect();
77
+ if (provider) {
78
+ try {
79
+ await provider.disconnect();
80
+ } catch {
81
+ }
82
+ }
40
83
  this._accounts = [];
41
84
  this._connected = false;
42
- this.emit("change", { accounts: [] });
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 listeners = this._eventListeners[event];
51
- listeners.add(listener);
52
- return () => listeners.delete(listener);
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("Rialo Wallet not available");
60
- const transactionBase64 = this.bytesToBase64(input.transaction);
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
- transaction: transactionBase64,
63
- chain: input.chain || this._activeChain
105
+ to: "",
106
+ value: "0",
107
+ data: b64
64
108
  });
65
- const signedTxBytes = result.rawTransaction ? this.base64ToBytes(result.rawTransaction) : input.transaction;
66
- return { signedTransaction: signedTxBytes };
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("Rialo Wallet not available");
74
- const transactionBase64 = this.bytesToBase64(input.transaction);
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
- transaction: transactionBase64,
77
- chain: input.chain || this._activeChain,
78
- options: input.options
120
+ to: "",
121
+ value: "0",
122
+ data: b64
79
123
  });
80
- return { signature: result.hash || result.signature || "" };
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("Rialo Wallet not available");
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 signatureBytes = this.hexToBytes(sigHex);
92
- return { signature: signatureBytes, signedMessage: input.message };
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.setupProviderEvents();
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
- if (typeof window === "undefined") return void 0;
106
- return window.rialo;
151
+ return getProvider();
107
152
  }
108
- setupProviderEvents() {
153
+ _setupProviderEvents() {
109
154
  const provider = this.provider;
110
155
  if (!provider) return;
111
- const cleanup1 = provider.on("accountsChanged", (data) => {
112
- const accounts = data;
113
- this._accounts = accounts.map((acc) => this.createAccount(typeof acc === "string" ? acc : acc.address));
114
- this.emit("change", { accounts: this._accounts });
115
- });
116
- const cleanup2 = provider.on("networkChanged", (data) => {
117
- const { network } = data;
118
- this._activeChain = `rialo:${network}`;
119
- this.emit("change", { chains: [this._activeChain] });
120
- });
121
- const cleanup3 = provider.on("disconnect", () => {
122
- this._connected = false;
123
- this._accounts = [];
124
- this.emit("change", { accounts: [] });
125
- });
126
- this._cleanupFns.push(cleanup1, cleanup2, cleanup3);
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
- emit(event, data) {
178
+ _emit(event, data) {
129
179
  const listeners = this._eventListeners[event];
130
180
  if (listeners) {
131
- listeners.forEach((listener) => {
132
- listener(data);
133
- });
181
+ listeners.forEach((fn) => fn(data));
134
182
  }
135
183
  }
136
- createAccount(address) {
184
+ _toStandardAccount(acc) {
137
185
  const encoder = new TextEncoder();
138
186
  const publicKey = new Uint8Array(32);
139
- const addressBytes = encoder.encode(address);
140
- publicKey.set(addressBytes.slice(0, 32));
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.emit("change", { chains: [chain] });
203
+ this._emit("change", { chains: [chain] });
167
204
  }
168
205
  destroy() {
169
- this._cleanupFns.forEach((fn) => fn());
170
- this._cleanupFns = [];
171
- Object.keys(this._eventListeners).forEach((key) => {
172
- delete this._eventListeners[key];
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
- const registerEvent = new CustomEvent("wallet-standard:register-wallet", {
221
+ window.dispatchEvent(new CustomEvent("wallet-standard:register-wallet", {
183
222
  detail: {
184
- register: (callback) => {
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 (error) {
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
- export {
227
- RIALO_SIGN_ALL_TRANSACTIONS,
228
- RIALO_SIGN_AND_SEND_TRANSACTION,
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
@@ -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": "2.5.4",
4
- "description": "Official Sheep Wallet adapter for Rialo blockchain dApps - with Error Boundary and Loading States",
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
- "dev": "tsup --watch",
53
- "lint": "eslint src --ext .ts,.tsx",
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
- "optional": false
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
  }