@haneullabs/slush-wallet 0.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/CHANGELOG.md +365 -0
- package/README.md +1 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +28 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/package.json +5 -0
- package/dist/cjs/wallet/index.d.ts +37 -0
- package/dist/cjs/wallet/index.js +341 -0
- package/dist/cjs/wallet/index.js.map +7 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +13 -0
- package/dist/esm/index.js.map +7 -0
- package/dist/esm/package.json +5 -0
- package/dist/esm/wallet/index.d.ts +37 -0
- package/dist/esm/wallet/index.js +311 -0
- package/dist/esm/wallet/index.js.map +7 -0
- package/dist/tsconfig.esm.tsbuildinfo +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __typeError = (msg) => {
|
|
9
|
+
throw TypeError(msg);
|
|
10
|
+
};
|
|
11
|
+
var __export = (target, all) => {
|
|
12
|
+
for (var name in all)
|
|
13
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
14
|
+
};
|
|
15
|
+
var __copyProps = (to, from, except, desc) => {
|
|
16
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
17
|
+
for (let key of __getOwnPropNames(from))
|
|
18
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
19
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
20
|
+
}
|
|
21
|
+
return to;
|
|
22
|
+
};
|
|
23
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
24
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
25
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
26
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
27
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
28
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
29
|
+
mod
|
|
30
|
+
));
|
|
31
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
32
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
33
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
34
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
35
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
36
|
+
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
37
|
+
var wallet_exports = {};
|
|
38
|
+
__export(wallet_exports, {
|
|
39
|
+
SLUSH_WALLET_ICON: () => SLUSH_WALLET_ICON,
|
|
40
|
+
SLUSH_WALLET_NAME: () => SLUSH_WALLET_NAME,
|
|
41
|
+
SlushWallet: () => SlushWallet,
|
|
42
|
+
registerSlushWallet: () => registerSlushWallet
|
|
43
|
+
});
|
|
44
|
+
module.exports = __toCommonJS(wallet_exports);
|
|
45
|
+
var import_utils = require("@haneullabs/haneul/utils");
|
|
46
|
+
var import_wallet_standard = require("@haneullabs/wallet-standard");
|
|
47
|
+
var import_mitt = __toESM(require("mitt"));
|
|
48
|
+
var import_valibot = require("valibot");
|
|
49
|
+
var import_window_wallet_core = require("@haneullabs/window-wallet-core");
|
|
50
|
+
var _id, _events, _accounts, _origin, _walletName, _icon, _name, _signTransactionBlock, _signTransaction, _signAndExecuteTransaction, _signPersonalMessage, _on, _SlushWallet_instances, setAccounts_fn, _connect, getPreviouslyAuthorizedAccounts_fn, _disconnect, getNewPopupChannel_fn;
|
|
51
|
+
const DEFAULT_SLUSH_ORIGIN = "https://my.slush.app";
|
|
52
|
+
const SLUSH_SESSION_KEY = "slush:session";
|
|
53
|
+
const SLUSH_WALLET_NAME = "Slush";
|
|
54
|
+
const SLUSH_WALLET_ICON = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTAgMjRDMCAxMC43NDUyIDEwLjc0NTIgMCAyNCAwQzM3LjI1NDggMCA0OCAxMC43NDUyIDQ4IDI0QzQ4IDM3LjI1NDggMzcuMjU0OCA0OCAyNCA0OEMxMC43NDUyIDQ4IDAgMzcuMjU0OCAwIDI0WiIgZmlsbD0iIzBDMEExRiIvPgo8cGF0aCBkPSJNMTMuMTM1OCAzMi4xMDg1QzE0LjE3MDEgMzUuOTY4MyAxOC4wMzMxIDM5LjQ2MjQgMjYuMDI1NSAzNy4zMjA4QzMzLjY1MTUgMzUuMjc3NCAzOC40MzA5IDI5LjAwNCAzNy4xOTE2IDI0LjM3ODlDMzYuNzYzNiAyMi43ODE3IDM1LjQ3NDYgMjEuNzAwNiAzMy40ODcyIDIxLjg3NjVMMTUuNzE2NSAyMy4zNTcyQzE0LjU5NzMgMjMuNDQzIDE0LjA4NDIgMjMuMjU5NiAxMy43ODgxIDIyLjU1NDNDMTMuNTAxIDIxLjg4MjMgMTMuNjY0NiAyMS4xNjA5IDE1LjAxNjMgMjAuNDc3N0wyOC41NDAxIDEzLjUzNzRDMjkuNTc2NyAxMy4wMSAzMC4yNjcxIDEyLjc4OTMgMzAuODk4IDEzLjAxMjZDMzEuMjkzNCAxMy4xNTYzIDMxLjU1MzggMTMuNzI4NCAzMS4zMTQ3IDE0LjQzNDRMMzAuNDM3OCAxNy4wMjMyQzI5LjM2MTcgMjAuMjAwMiAzMS42NjUzIDIwLjkzODIgMzIuOTY0MSAyMC41OTAyQzM0LjkyODkgMjAuMDYzNyAzNS4zOTExIDE4LjE5MjMgMzQuNzU4MSAxNS44Mjk5QzMzLjE1MzMgOS44NDA1NCAyNi43OTkgOC45MDQxMSAyMS4wMzc4IDEwLjQ0NzhDMTUuMTc2NyAxMi4wMTgzIDEwLjA5NiAxNi43Njc2IDExLjY0NzQgMjIuNTU3M0MxMi4wMTI5IDIzLjkyMTYgMTMuMjY4NyAyNS4wMTE2IDE0LjcyMzIgMjQuOTc4NUwxNi45NDM4IDI0Ljk3MzFDMTcuNDAwNCAyNC45NjI1IDE3LjIzNiAyNSAxOC4xMTcgMjQuOTI3MUMxOC45OTggMjQuODU0MSAyMS4zNTA5IDI0LjU2NDYgMjEuMzUwOSAyNC41NjQ2TDMyLjg5NjIgMjMuMjU4TDMzLjE5MzcgMjMuMjE0OEMzMy44Njg5IDIzLjA5OTcgMzQuMzc5MiAyMy4yNzUgMzQuODEwNiAyNC4wMTgzQzM1LjQ1NjMgMjUuMTMwNCAzNC40NzEyIDI1Ljk2OTEgMzMuMjkyIDI2Ljk3MzFDMzMuMjYwNSAyNyAzMy4yMjg4IDI3LjAyNyAzMy4xOTcgMjcuMDU0MUwyMy4wNDgyIDM1LjgwMDVDMjEuMzA4NyAzNy4zMDA4IDIwLjA4NjcgMzYuNzM2NyAxOS42NTg4IDM1LjEzOTVMMTguMTQzMSAyOS40ODI5QzE3Ljc2ODcgMjguMDg1NCAxNi40MDQxIDI2Ljk4ODkgMTQuODA1NiAyNy40MTcyQzEyLjgwNzUgMjcuOTUyNiAxMi42NDU1IDMwLjI3ODQgMTMuMTM1OCAzMi4xMDg1WiIgZmlsbD0iI0ZCRkFGRiIvPgo8L3N2Zz4K";
|
|
55
|
+
const HANEUL_WALLET_EXTENSION_ID = "com.haneullabs.haneulwallet";
|
|
56
|
+
const METADATA_API_URL = "https://api.slush.app/api/wallet/metadata";
|
|
57
|
+
const FALLBACK_METADATA = {
|
|
58
|
+
id: "com.haneullabs.haneulwallet.web",
|
|
59
|
+
walletName: "Slush",
|
|
60
|
+
description: "Trade and earn on Haneul.",
|
|
61
|
+
icon: SLUSH_WALLET_ICON,
|
|
62
|
+
enabled: true
|
|
63
|
+
};
|
|
64
|
+
const WalletMetadataSchema = (0, import_valibot.object)({
|
|
65
|
+
id: (0, import_valibot.string)("Wallet ID is required"),
|
|
66
|
+
walletName: (0, import_valibot.string)("Wallet name is required"),
|
|
67
|
+
icon: (0, import_valibot.string)("Icon must be a valid wallet icon format"),
|
|
68
|
+
enabled: (0, import_valibot.boolean)("Enabled is required")
|
|
69
|
+
});
|
|
70
|
+
function setSessionToStorage(session) {
|
|
71
|
+
localStorage.setItem(SLUSH_SESSION_KEY, session);
|
|
72
|
+
}
|
|
73
|
+
function getSessionFromStorage() {
|
|
74
|
+
const session = localStorage.getItem(SLUSH_SESSION_KEY);
|
|
75
|
+
if (!session) {
|
|
76
|
+
throw new Error("No session found");
|
|
77
|
+
}
|
|
78
|
+
return session;
|
|
79
|
+
}
|
|
80
|
+
const walletAccountFeatures = [
|
|
81
|
+
"sui:signTransaction",
|
|
82
|
+
"sui:signAndExecuteTransaction",
|
|
83
|
+
"sui:signPersonalMessage",
|
|
84
|
+
"sui:signTransactionBlock",
|
|
85
|
+
"sui:signAndExecuteTransactionBlock"
|
|
86
|
+
];
|
|
87
|
+
function getAccountsFromSession(session) {
|
|
88
|
+
const { payload } = (0, import_window_wallet_core.decodeJwtSession)(session);
|
|
89
|
+
return payload.accounts.map((account) => {
|
|
90
|
+
return new import_wallet_standard.ReadonlyWalletAccount({
|
|
91
|
+
address: account.address,
|
|
92
|
+
chains: import_wallet_standard.HANEUL_CHAINS,
|
|
93
|
+
features: walletAccountFeatures,
|
|
94
|
+
publicKey: (0, import_utils.fromBase64)(account.publicKey)
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
class SlushWallet {
|
|
99
|
+
constructor({
|
|
100
|
+
name,
|
|
101
|
+
origin,
|
|
102
|
+
metadata
|
|
103
|
+
}) {
|
|
104
|
+
__privateAdd(this, _SlushWallet_instances);
|
|
105
|
+
__privateAdd(this, _id);
|
|
106
|
+
__privateAdd(this, _events);
|
|
107
|
+
__privateAdd(this, _accounts);
|
|
108
|
+
__privateAdd(this, _origin);
|
|
109
|
+
__privateAdd(this, _walletName);
|
|
110
|
+
__privateAdd(this, _icon);
|
|
111
|
+
__privateAdd(this, _name);
|
|
112
|
+
__privateAdd(this, _signTransactionBlock, async ({
|
|
113
|
+
transactionBlock,
|
|
114
|
+
account,
|
|
115
|
+
chain
|
|
116
|
+
}) => {
|
|
117
|
+
const data = await transactionBlock.toJSON();
|
|
118
|
+
const popup = __privateMethod(this, _SlushWallet_instances, getNewPopupChannel_fn).call(this);
|
|
119
|
+
const response = await popup.send({
|
|
120
|
+
type: "sign-transaction",
|
|
121
|
+
transaction: data,
|
|
122
|
+
address: account.address,
|
|
123
|
+
chain,
|
|
124
|
+
session: getSessionFromStorage()
|
|
125
|
+
});
|
|
126
|
+
return {
|
|
127
|
+
transactionBlockBytes: response.bytes,
|
|
128
|
+
signature: response.signature
|
|
129
|
+
};
|
|
130
|
+
});
|
|
131
|
+
__privateAdd(this, _signTransaction, async ({ transaction, account, chain }) => {
|
|
132
|
+
const popup = __privateMethod(this, _SlushWallet_instances, getNewPopupChannel_fn).call(this);
|
|
133
|
+
const tx = await transaction.toJSON();
|
|
134
|
+
const response = await popup.send({
|
|
135
|
+
type: "sign-transaction",
|
|
136
|
+
transaction: tx,
|
|
137
|
+
address: account.address,
|
|
138
|
+
chain,
|
|
139
|
+
session: getSessionFromStorage()
|
|
140
|
+
});
|
|
141
|
+
return {
|
|
142
|
+
bytes: response.bytes,
|
|
143
|
+
signature: response.signature
|
|
144
|
+
};
|
|
145
|
+
});
|
|
146
|
+
__privateAdd(this, _signAndExecuteTransaction, async ({
|
|
147
|
+
transaction,
|
|
148
|
+
account,
|
|
149
|
+
chain
|
|
150
|
+
}) => {
|
|
151
|
+
const popup = __privateMethod(this, _SlushWallet_instances, getNewPopupChannel_fn).call(this);
|
|
152
|
+
const data = await transaction.toJSON();
|
|
153
|
+
const response = await popup.send({
|
|
154
|
+
type: "sign-and-execute-transaction",
|
|
155
|
+
transaction: data,
|
|
156
|
+
address: account.address,
|
|
157
|
+
chain,
|
|
158
|
+
session: getSessionFromStorage()
|
|
159
|
+
});
|
|
160
|
+
return {
|
|
161
|
+
bytes: response.bytes,
|
|
162
|
+
signature: response.signature,
|
|
163
|
+
digest: response.digest,
|
|
164
|
+
effects: response.effects
|
|
165
|
+
};
|
|
166
|
+
});
|
|
167
|
+
__privateAdd(this, _signPersonalMessage, async ({ message, account, chain }) => {
|
|
168
|
+
const popup = __privateMethod(this, _SlushWallet_instances, getNewPopupChannel_fn).call(this);
|
|
169
|
+
const response = await popup.send({
|
|
170
|
+
type: "sign-personal-message",
|
|
171
|
+
message: (0, import_utils.toBase64)(message),
|
|
172
|
+
address: account.address,
|
|
173
|
+
chain: chain ?? account.chains[0],
|
|
174
|
+
session: getSessionFromStorage()
|
|
175
|
+
});
|
|
176
|
+
return {
|
|
177
|
+
bytes: response.bytes,
|
|
178
|
+
signature: response.signature
|
|
179
|
+
};
|
|
180
|
+
});
|
|
181
|
+
__privateAdd(this, _on, (event, listener) => {
|
|
182
|
+
__privateGet(this, _events).on(event, listener);
|
|
183
|
+
return () => __privateGet(this, _events).off(event, listener);
|
|
184
|
+
});
|
|
185
|
+
__privateAdd(this, _connect, async (input) => {
|
|
186
|
+
if (input?.silent) {
|
|
187
|
+
return { accounts: this.accounts };
|
|
188
|
+
}
|
|
189
|
+
const popup = __privateMethod(this, _SlushWallet_instances, getNewPopupChannel_fn).call(this);
|
|
190
|
+
const response = await popup.send({
|
|
191
|
+
type: "connect"
|
|
192
|
+
});
|
|
193
|
+
setSessionToStorage(response.session);
|
|
194
|
+
__privateMethod(this, _SlushWallet_instances, setAccounts_fn).call(this, getAccountsFromSession(response.session));
|
|
195
|
+
return { accounts: this.accounts };
|
|
196
|
+
});
|
|
197
|
+
__privateAdd(this, _disconnect, async () => {
|
|
198
|
+
localStorage.removeItem(SLUSH_SESSION_KEY);
|
|
199
|
+
__privateMethod(this, _SlushWallet_instances, setAccounts_fn).call(this, []);
|
|
200
|
+
});
|
|
201
|
+
__privateSet(this, _id, metadata.id);
|
|
202
|
+
__privateSet(this, _accounts, __privateMethod(this, _SlushWallet_instances, getPreviouslyAuthorizedAccounts_fn).call(this));
|
|
203
|
+
__privateSet(this, _events, (0, import_mitt.default)());
|
|
204
|
+
__privateSet(this, _origin, origin || DEFAULT_SLUSH_ORIGIN);
|
|
205
|
+
__privateSet(this, _name, name);
|
|
206
|
+
__privateSet(this, _walletName, metadata.walletName);
|
|
207
|
+
__privateSet(this, _icon, metadata.icon);
|
|
208
|
+
}
|
|
209
|
+
get name() {
|
|
210
|
+
return __privateGet(this, _walletName);
|
|
211
|
+
}
|
|
212
|
+
get id() {
|
|
213
|
+
return __privateGet(this, _id);
|
|
214
|
+
}
|
|
215
|
+
get icon() {
|
|
216
|
+
return __privateGet(this, _icon);
|
|
217
|
+
}
|
|
218
|
+
get version() {
|
|
219
|
+
return "1.0.0";
|
|
220
|
+
}
|
|
221
|
+
get chains() {
|
|
222
|
+
return import_wallet_standard.HANEUL_CHAINS;
|
|
223
|
+
}
|
|
224
|
+
get accounts() {
|
|
225
|
+
return __privateGet(this, _accounts);
|
|
226
|
+
}
|
|
227
|
+
get features() {
|
|
228
|
+
return {
|
|
229
|
+
"standard:connect": {
|
|
230
|
+
version: "1.0.0",
|
|
231
|
+
connect: __privateGet(this, _connect)
|
|
232
|
+
},
|
|
233
|
+
"standard:disconnect": {
|
|
234
|
+
version: "1.0.0",
|
|
235
|
+
disconnect: __privateGet(this, _disconnect)
|
|
236
|
+
},
|
|
237
|
+
"standard:events": {
|
|
238
|
+
version: "1.0.0",
|
|
239
|
+
on: __privateGet(this, _on)
|
|
240
|
+
},
|
|
241
|
+
"sui:signTransactionBlock": {
|
|
242
|
+
version: "1.0.0",
|
|
243
|
+
signTransactionBlock: __privateGet(this, _signTransactionBlock)
|
|
244
|
+
},
|
|
245
|
+
"sui:signTransaction": {
|
|
246
|
+
version: "2.0.0",
|
|
247
|
+
signTransaction: __privateGet(this, _signTransaction)
|
|
248
|
+
},
|
|
249
|
+
"sui:signPersonalMessage": {
|
|
250
|
+
version: "1.1.0",
|
|
251
|
+
signPersonalMessage: __privateGet(this, _signPersonalMessage)
|
|
252
|
+
},
|
|
253
|
+
"sui:signAndExecuteTransaction": {
|
|
254
|
+
version: "2.0.0",
|
|
255
|
+
signAndExecuteTransaction: __privateGet(this, _signAndExecuteTransaction)
|
|
256
|
+
}
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
updateMetadata(metadata) {
|
|
260
|
+
__privateSet(this, _id, metadata.id);
|
|
261
|
+
__privateSet(this, _walletName, metadata.walletName);
|
|
262
|
+
__privateSet(this, _icon, metadata.icon);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
_id = new WeakMap();
|
|
266
|
+
_events = new WeakMap();
|
|
267
|
+
_accounts = new WeakMap();
|
|
268
|
+
_origin = new WeakMap();
|
|
269
|
+
_walletName = new WeakMap();
|
|
270
|
+
_icon = new WeakMap();
|
|
271
|
+
_name = new WeakMap();
|
|
272
|
+
_signTransactionBlock = new WeakMap();
|
|
273
|
+
_signTransaction = new WeakMap();
|
|
274
|
+
_signAndExecuteTransaction = new WeakMap();
|
|
275
|
+
_signPersonalMessage = new WeakMap();
|
|
276
|
+
_on = new WeakMap();
|
|
277
|
+
_SlushWallet_instances = new WeakSet();
|
|
278
|
+
setAccounts_fn = function(accounts) {
|
|
279
|
+
__privateSet(this, _accounts, accounts);
|
|
280
|
+
__privateGet(this, _events).emit("change", { accounts: this.accounts });
|
|
281
|
+
};
|
|
282
|
+
_connect = new WeakMap();
|
|
283
|
+
getPreviouslyAuthorizedAccounts_fn = function() {
|
|
284
|
+
try {
|
|
285
|
+
return getAccountsFromSession(getSessionFromStorage());
|
|
286
|
+
} catch {
|
|
287
|
+
return [];
|
|
288
|
+
}
|
|
289
|
+
};
|
|
290
|
+
_disconnect = new WeakMap();
|
|
291
|
+
getNewPopupChannel_fn = function() {
|
|
292
|
+
return new import_window_wallet_core.DappPostMessageChannel({
|
|
293
|
+
appName: __privateGet(this, _name),
|
|
294
|
+
hostOrigin: __privateGet(this, _origin)
|
|
295
|
+
});
|
|
296
|
+
};
|
|
297
|
+
async function fetchMetadata(metadataApiUrl) {
|
|
298
|
+
const response = await fetch(metadataApiUrl);
|
|
299
|
+
if (!response.ok) {
|
|
300
|
+
throw new Error("Failed to fetch wallet metadata");
|
|
301
|
+
}
|
|
302
|
+
const data = await response.json();
|
|
303
|
+
return (0, import_valibot.parse)(WalletMetadataSchema, data);
|
|
304
|
+
}
|
|
305
|
+
function registerSlushWallet(name, {
|
|
306
|
+
origin,
|
|
307
|
+
metadataApiUrl = METADATA_API_URL
|
|
308
|
+
} = {}) {
|
|
309
|
+
const wallets = (0, import_wallet_standard.getWallets)();
|
|
310
|
+
let unregister = null;
|
|
311
|
+
wallets.on("register", (wallet) => {
|
|
312
|
+
if (wallet.id === HANEUL_WALLET_EXTENSION_ID) {
|
|
313
|
+
unregister?.();
|
|
314
|
+
}
|
|
315
|
+
});
|
|
316
|
+
const extension = wallets.get().find((wallet) => wallet.id === HANEUL_WALLET_EXTENSION_ID);
|
|
317
|
+
if (extension) {
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
const slushWalletInstance = new SlushWallet({
|
|
321
|
+
name,
|
|
322
|
+
origin,
|
|
323
|
+
metadata: FALLBACK_METADATA
|
|
324
|
+
});
|
|
325
|
+
unregister = wallets.register(slushWalletInstance);
|
|
326
|
+
fetchMetadata(metadataApiUrl).then((metadata) => {
|
|
327
|
+
if (!metadata.enabled) {
|
|
328
|
+
console.log("Slush wallet is not currently enabled.");
|
|
329
|
+
unregister?.();
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
slushWalletInstance.updateMetadata(metadata);
|
|
333
|
+
}).catch((error) => {
|
|
334
|
+
console.error("Error fetching metadata", error);
|
|
335
|
+
});
|
|
336
|
+
return {
|
|
337
|
+
wallet: slushWalletInstance,
|
|
338
|
+
unregister
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/wallet/index.ts"],
|
|
4
|
+
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { fromBase64, toBase64 } from '@haneullabs/haneul/utils';\nimport type {\n\tStandardConnectFeature,\n\tStandardConnectMethod,\n\tStandardDisconnectFeature,\n\tStandardDisconnectMethod,\n\tStandardEventsFeature,\n\tStandardEventsListeners,\n\tStandardEventsOnMethod,\n\tHaneulChain,\n\tHaneulSignAndExecuteTransactionFeature,\n\tHaneulSignAndExecuteTransactionMethod,\n\tHaneulSignPersonalMessageFeature,\n\tHaneulSignPersonalMessageMethod,\n\tHaneulSignTransactionBlockFeature,\n\tHaneulSignTransactionBlockMethod,\n\tHaneulSignTransactionFeature,\n\tHaneulSignTransactionMethod,\n\tWallet,\n\tWalletIcon,\n} from '@haneullabs/wallet-standard';\nimport { getWallets, ReadonlyWalletAccount, HANEUL_CHAINS } from '@haneullabs/wallet-standard';\nimport type { Emitter } from 'mitt';\nimport mitt from 'mitt';\nimport type { InferOutput } from 'valibot';\nimport { boolean, object, parse, string } from 'valibot';\nimport { DappPostMessageChannel, decodeJwtSession } from '@haneullabs/window-wallet-core';\n\nconst DEFAULT_SLUSH_ORIGIN = 'https://my.slush.app';\n\ntype WalletEventsMap = {\n\t[E in keyof StandardEventsListeners]: Parameters<StandardEventsListeners[E]>[0];\n};\n\nconst SLUSH_SESSION_KEY = 'slush:session';\n\nexport const SLUSH_WALLET_NAME = 'Slush' as const;\n\nexport const SLUSH_WALLET_ICON =\n\t'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTAgMjRDMCAxMC43NDUyIDEwLjc0NTIgMCAyNCAwQzM3LjI1NDggMCA0OCAxMC43NDUyIDQ4IDI0QzQ4IDM3LjI1NDggMzcuMjU0OCA0OCAyNCA0OEMxMC43NDUyIDQ4IDAgMzcuMjU0OCAwIDI0WiIgZmlsbD0iIzBDMEExRiIvPgo8cGF0aCBkPSJNMTMuMTM1OCAzMi4xMDg1QzE0LjE3MDEgMzUuOTY4MyAxOC4wMzMxIDM5LjQ2MjQgMjYuMDI1NSAzNy4zMjA4QzMzLjY1MTUgMzUuMjc3NCAzOC40MzA5IDI5LjAwNCAzNy4xOTE2IDI0LjM3ODlDMzYuNzYzNiAyMi43ODE3IDM1LjQ3NDYgMjEuNzAwNiAzMy40ODcyIDIxLjg3NjVMMTUuNzE2NSAyMy4zNTcyQzE0LjU5NzMgMjMuNDQzIDE0LjA4NDIgMjMuMjU5NiAxMy43ODgxIDIyLjU1NDNDMTMuNTAxIDIxLjg4MjMgMTMuNjY0NiAyMS4xNjA5IDE1LjAxNjMgMjAuNDc3N0wyOC41NDAxIDEzLjUzNzRDMjkuNTc2NyAxMy4wMSAzMC4yNjcxIDEyLjc4OTMgMzAuODk4IDEzLjAxMjZDMzEuMjkzNCAxMy4xNTYzIDMxLjU1MzggMTMuNzI4NCAzMS4zMTQ3IDE0LjQzNDRMMzAuNDM3OCAxNy4wMjMyQzI5LjM2MTcgMjAuMjAwMiAzMS42NjUzIDIwLjkzODIgMzIuOTY0MSAyMC41OTAyQzM0LjkyODkgMjAuMDYzNyAzNS4zOTExIDE4LjE5MjMgMzQuNzU4MSAxNS44Mjk5QzMzLjE1MzMgOS44NDA1NCAyNi43OTkgOC45MDQxMSAyMS4wMzc4IDEwLjQ0NzhDMTUuMTc2NyAxMi4wMTgzIDEwLjA5NiAxNi43Njc2IDExLjY0NzQgMjIuNTU3M0MxMi4wMTI5IDIzLjkyMTYgMTMuMjY4NyAyNS4wMTE2IDE0LjcyMzIgMjQuOTc4NUwxNi45NDM4IDI0Ljk3MzFDMTcuNDAwNCAyNC45NjI1IDE3LjIzNiAyNSAxOC4xMTcgMjQuOTI3MUMxOC45OTggMjQuODU0MSAyMS4zNTA5IDI0LjU2NDYgMjEuMzUwOSAyNC41NjQ2TDMyLjg5NjIgMjMuMjU4TDMzLjE5MzcgMjMuMjE0OEMzMy44Njg5IDIzLjA5OTcgMzQuMzc5MiAyMy4yNzUgMzQuODEwNiAyNC4wMTgzQzM1LjQ1NjMgMjUuMTMwNCAzNC40NzEyIDI1Ljk2OTEgMzMuMjkyIDI2Ljk3MzFDMzMuMjYwNSAyNyAzMy4yMjg4IDI3LjAyNyAzMy4xOTcgMjcuMDU0MUwyMy4wNDgyIDM1LjgwMDVDMjEuMzA4NyAzNy4zMDA4IDIwLjA4NjcgMzYuNzM2NyAxOS42NTg4IDM1LjEzOTVMMTguMTQzMSAyOS40ODI5QzE3Ljc2ODcgMjguMDg1NCAxNi40MDQxIDI2Ljk4ODkgMTQuODA1NiAyNy40MTcyQzEyLjgwNzUgMjcuOTUyNiAxMi42NDU1IDMwLjI3ODQgMTMuMTM1OCAzMi4xMDg1WiIgZmlsbD0iI0ZCRkFGRiIvPgo8L3N2Zz4K' as const;\n\nconst HANEUL_WALLET_EXTENSION_ID = 'com.haneullabs.haneulwallet' as const;\nconst METADATA_API_URL = 'https://api.slush.app/api/wallet/metadata';\n\nconst FALLBACK_METADATA = {\n\tid: 'com.haneullabs.haneulwallet.web',\n\twalletName: 'Slush',\n\tdescription: 'Trade and earn on Haneul.',\n\ticon: SLUSH_WALLET_ICON,\n\tenabled: true,\n};\n\nconst WalletMetadataSchema = object({\n\tid: string('Wallet ID is required'),\n\twalletName: string('Wallet name is required'),\n\ticon: string('Icon must be a valid wallet icon format'),\n\tenabled: boolean('Enabled is required'),\n});\n\nfunction setSessionToStorage(session: string) {\n\tlocalStorage.setItem(SLUSH_SESSION_KEY, session);\n}\n\nfunction getSessionFromStorage() {\n\tconst session = localStorage.getItem(SLUSH_SESSION_KEY);\n\n\tif (!session) {\n\t\tthrow new Error('No session found');\n\t}\n\n\treturn session;\n}\n\nconst walletAccountFeatures = [\n\t'sui:signTransaction',\n\t'sui:signAndExecuteTransaction',\n\t'sui:signPersonalMessage',\n\t'sui:signTransactionBlock',\n\t'sui:signAndExecuteTransactionBlock',\n] as const;\n\nfunction getAccountsFromSession(session: string) {\n\tconst { payload } = decodeJwtSession(session);\n\treturn payload.accounts.map((account) => {\n\t\treturn new ReadonlyWalletAccount({\n\t\t\taddress: account.address,\n\t\t\tchains: HANEUL_CHAINS,\n\t\t\tfeatures: walletAccountFeatures,\n\t\t\tpublicKey: fromBase64(account.publicKey),\n\t\t});\n\t});\n}\n\ntype WalletMetadata = InferOutput<typeof WalletMetadataSchema>;\nexport class SlushWallet implements Wallet {\n\t#id: string;\n\t#events: Emitter<WalletEventsMap>;\n\t#accounts: ReadonlyWalletAccount[];\n\t#origin: string;\n\t#walletName: string;\n\t#icon: WalletIcon;\n\t#name: string;\n\n\tget name() {\n\t\treturn this.#walletName;\n\t}\n\n\tget id() {\n\t\treturn this.#id;\n\t}\n\n\tget icon() {\n\t\treturn this.#icon;\n\t}\n\n\tget version() {\n\t\treturn '1.0.0' as const;\n\t}\n\n\tget chains() {\n\t\treturn HANEUL_CHAINS;\n\t}\n\n\tget accounts() {\n\t\treturn this.#accounts;\n\t}\n\n\tget features(): StandardConnectFeature &\n\t\tStandardDisconnectFeature &\n\t\tStandardEventsFeature &\n\t\tHaneulSignTransactionBlockFeature &\n\t\tHaneulSignTransactionFeature &\n\t\tHaneulSignPersonalMessageFeature &\n\t\tHaneulSignAndExecuteTransactionFeature {\n\t\treturn {\n\t\t\t'standard:connect': {\n\t\t\t\tversion: '1.0.0',\n\t\t\t\tconnect: this.#connect,\n\t\t\t},\n\t\t\t'standard:disconnect': {\n\t\t\t\tversion: '1.0.0',\n\t\t\t\tdisconnect: this.#disconnect,\n\t\t\t},\n\t\t\t'standard:events': {\n\t\t\t\tversion: '1.0.0',\n\t\t\t\ton: this.#on,\n\t\t\t},\n\t\t\t'sui:signTransactionBlock': {\n\t\t\t\tversion: '1.0.0',\n\t\t\t\tsignTransactionBlock: this.#signTransactionBlock,\n\t\t\t},\n\t\t\t'sui:signTransaction': {\n\t\t\t\tversion: '2.0.0',\n\t\t\t\tsignTransaction: this.#signTransaction,\n\t\t\t},\n\t\t\t'sui:signPersonalMessage': {\n\t\t\t\tversion: '1.1.0',\n\t\t\t\tsignPersonalMessage: this.#signPersonalMessage,\n\t\t\t},\n\t\t\t'sui:signAndExecuteTransaction': {\n\t\t\t\tversion: '2.0.0',\n\t\t\t\tsignAndExecuteTransaction: this.#signAndExecuteTransaction,\n\t\t\t},\n\t\t};\n\t}\n\n\tconstructor({\n\t\tname,\n\t\torigin,\n\t\tmetadata,\n\t}: {\n\t\tname: string;\n\t\torigin?: string;\n\t\tchain?: HaneulChain;\n\t\tmetadata: WalletMetadata;\n\t}) {\n\t\tthis.#id = metadata.id;\n\t\tthis.#accounts = this.#getPreviouslyAuthorizedAccounts();\n\t\tthis.#events = mitt();\n\t\tthis.#origin = origin || DEFAULT_SLUSH_ORIGIN;\n\t\tthis.#name = name;\n\t\tthis.#walletName = metadata.walletName;\n\t\tthis.#icon = metadata.icon as WalletIcon;\n\t}\n\n\t#signTransactionBlock: HaneulSignTransactionBlockMethod = async ({\n\t\ttransactionBlock,\n\t\taccount,\n\t\tchain,\n\t}) => {\n\t\tconst data = await transactionBlock.toJSON();\n\n\t\tconst popup = this.#getNewPopupChannel();\n\n\t\tconst response = await popup.send({\n\t\t\ttype: 'sign-transaction',\n\t\t\ttransaction: data,\n\t\t\taddress: account.address,\n\t\t\tchain,\n\t\t\tsession: getSessionFromStorage(),\n\t\t});\n\n\t\treturn {\n\t\t\ttransactionBlockBytes: response.bytes,\n\t\t\tsignature: response.signature,\n\t\t};\n\t};\n\n\t#signTransaction: HaneulSignTransactionMethod = async ({ transaction, account, chain }) => {\n\t\tconst popup = this.#getNewPopupChannel();\n\n\t\tconst tx = await transaction.toJSON();\n\n\t\tconst response = await popup.send({\n\t\t\ttype: 'sign-transaction',\n\t\t\ttransaction: tx,\n\t\t\taddress: account.address,\n\t\t\tchain,\n\t\t\tsession: getSessionFromStorage(),\n\t\t});\n\n\t\treturn {\n\t\t\tbytes: response.bytes,\n\t\t\tsignature: response.signature,\n\t\t};\n\t};\n\n\t#signAndExecuteTransaction: HaneulSignAndExecuteTransactionMethod = async ({\n\t\ttransaction,\n\t\taccount,\n\t\tchain,\n\t}) => {\n\t\tconst popup = this.#getNewPopupChannel();\n\n\t\tconst data = await transaction.toJSON();\n\n\t\tconst response = await popup.send({\n\t\t\ttype: 'sign-and-execute-transaction',\n\t\t\ttransaction: data,\n\t\t\taddress: account.address,\n\t\t\tchain,\n\t\t\tsession: getSessionFromStorage(),\n\t\t});\n\t\treturn {\n\t\t\tbytes: response.bytes,\n\t\t\tsignature: response.signature,\n\t\t\tdigest: response.digest,\n\t\t\teffects: response.effects,\n\t\t};\n\t};\n\n\t#signPersonalMessage: HaneulSignPersonalMessageMethod = async ({ message, account, chain }) => {\n\t\tconst popup = this.#getNewPopupChannel();\n\n\t\tconst response = await popup.send({\n\t\t\ttype: 'sign-personal-message',\n\t\t\tmessage: toBase64(message),\n\t\t\taddress: account.address,\n\t\t\tchain: chain ?? account.chains[0],\n\t\t\tsession: getSessionFromStorage(),\n\t\t});\n\n\t\treturn {\n\t\t\tbytes: response.bytes,\n\t\t\tsignature: response.signature,\n\t\t};\n\t};\n\n\t#on: StandardEventsOnMethod = (event, listener) => {\n\t\tthis.#events.on(event, listener);\n\t\treturn () => this.#events.off(event, listener);\n\t};\n\n\t#setAccounts(accounts: ReadonlyWalletAccount[]) {\n\t\tthis.#accounts = accounts;\n\t\tthis.#events.emit('change', { accounts: this.accounts });\n\t}\n\n\t#connect: StandardConnectMethod = async (input) => {\n\t\tif (input?.silent) {\n\t\t\treturn { accounts: this.accounts };\n\t\t}\n\n\t\tconst popup = this.#getNewPopupChannel();\n\t\tconst response = await popup.send({\n\t\t\ttype: 'connect',\n\t\t});\n\n\t\tsetSessionToStorage(response.session);\n\t\tthis.#setAccounts(getAccountsFromSession(response.session));\n\n\t\treturn { accounts: this.accounts };\n\t};\n\n\t#getPreviouslyAuthorizedAccounts() {\n\t\ttry {\n\t\t\treturn getAccountsFromSession(getSessionFromStorage());\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\t#disconnect: StandardDisconnectMethod = async () => {\n\t\tlocalStorage.removeItem(SLUSH_SESSION_KEY);\n\t\tthis.#setAccounts([]);\n\t};\n\n\t#getNewPopupChannel() {\n\t\treturn new DappPostMessageChannel({\n\t\t\tappName: this.#name,\n\t\t\thostOrigin: this.#origin,\n\t\t});\n\t}\n\n\tupdateMetadata(metadata: WalletMetadata) {\n\t\tthis.#id = metadata.id;\n\t\tthis.#walletName = metadata.walletName;\n\t\tthis.#icon = metadata.icon as WalletIcon;\n\t}\n}\n\nasync function fetchMetadata(metadataApiUrl: string): Promise<WalletMetadata> {\n\tconst response = await fetch(metadataApiUrl);\n\tif (!response.ok) {\n\t\tthrow new Error('Failed to fetch wallet metadata');\n\t}\n\tconst data = await response.json();\n\treturn parse(WalletMetadataSchema, data);\n}\n\nexport function registerSlushWallet(\n\tname: string,\n\t{\n\t\torigin,\n\t\tmetadataApiUrl = METADATA_API_URL,\n\t}: {\n\t\torigin?: string;\n\t\tmetadataApiUrl?: string;\n\t} = {},\n) {\n\tconst wallets = getWallets();\n\n\tlet unregister: (() => void) | null = null;\n\n\t// listen for wallet registration\n\twallets.on('register', (wallet) => {\n\t\tif (wallet.id === HANEUL_WALLET_EXTENSION_ID) {\n\t\t\tunregister?.();\n\t\t}\n\t});\n\n\tconst extension = wallets.get().find((wallet) => wallet.id === HANEUL_WALLET_EXTENSION_ID);\n\tif (extension) {\n\t\treturn;\n\t}\n\n\tconst slushWalletInstance = new SlushWallet({\n\t\tname,\n\t\torigin,\n\t\tmetadata: FALLBACK_METADATA,\n\t});\n\tunregister = wallets.register(slushWalletInstance);\n\n\tfetchMetadata(metadataApiUrl)\n\t\t.then((metadata) => {\n\t\t\tif (!metadata.enabled) {\n\t\t\t\tconsole.log('Slush wallet is not currently enabled.');\n\t\t\t\tunregister?.();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tslushWalletInstance.updateMetadata(metadata);\n\t\t})\n\t\t.catch((error) => {\n\t\t\tconsole.error('Error fetching metadata', error);\n\t\t});\n\n\treturn {\n\t\twallet: slushWalletInstance,\n\t\tunregister,\n\t};\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["mitt"]
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { registerSlushWallet, SlushWallet, SLUSH_WALLET_NAME, SLUSH_WALLET_ICON, } from './wallet/index.js';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/index.ts"],
|
|
4
|
+
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nexport {\n\tregisterSlushWallet,\n\tSlushWallet,\n\tSLUSH_WALLET_NAME,\n\tSLUSH_WALLET_ICON,\n} from './wallet/index.js';\n"],
|
|
5
|
+
"mappings": "AAGA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { StandardConnectFeature, StandardDisconnectFeature, StandardEventsFeature, HaneulChain, HaneulSignAndExecuteTransactionFeature, HaneulSignPersonalMessageFeature, HaneulSignTransactionBlockFeature, HaneulSignTransactionFeature, Wallet } from '@haneullabs/wallet-standard';
|
|
2
|
+
import { ReadonlyWalletAccount } from '@haneullabs/wallet-standard';
|
|
3
|
+
import type { InferOutput } from 'valibot';
|
|
4
|
+
export declare const SLUSH_WALLET_NAME: "Slush";
|
|
5
|
+
export declare const SLUSH_WALLET_ICON: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCA0OCA0OCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTAgMjRDMCAxMC43NDUyIDEwLjc0NTIgMCAyNCAwQzM3LjI1NDggMCA0OCAxMC43NDUyIDQ4IDI0QzQ4IDM3LjI1NDggMzcuMjU0OCA0OCAyNCA0OEMxMC43NDUyIDQ4IDAgMzcuMjU0OCAwIDI0WiIgZmlsbD0iIzBDMEExRiIvPgo8cGF0aCBkPSJNMTMuMTM1OCAzMi4xMDg1QzE0LjE3MDEgMzUuOTY4MyAxOC4wMzMxIDM5LjQ2MjQgMjYuMDI1NSAzNy4zMjA4QzMzLjY1MTUgMzUuMjc3NCAzOC40MzA5IDI5LjAwNCAzNy4xOTE2IDI0LjM3ODlDMzYuNzYzNiAyMi43ODE3IDM1LjQ3NDYgMjEuNzAwNiAzMy40ODcyIDIxLjg3NjVMMTUuNzE2NSAyMy4zNTcyQzE0LjU5NzMgMjMuNDQzIDE0LjA4NDIgMjMuMjU5NiAxMy43ODgxIDIyLjU1NDNDMTMuNTAxIDIxLjg4MjMgMTMuNjY0NiAyMS4xNjA5IDE1LjAxNjMgMjAuNDc3N0wyOC41NDAxIDEzLjUzNzRDMjkuNTc2NyAxMy4wMSAzMC4yNjcxIDEyLjc4OTMgMzAuODk4IDEzLjAxMjZDMzEuMjkzNCAxMy4xNTYzIDMxLjU1MzggMTMuNzI4NCAzMS4zMTQ3IDE0LjQzNDRMMzAuNDM3OCAxNy4wMjMyQzI5LjM2MTcgMjAuMjAwMiAzMS42NjUzIDIwLjkzODIgMzIuOTY0MSAyMC41OTAyQzM0LjkyODkgMjAuMDYzNyAzNS4zOTExIDE4LjE5MjMgMzQuNzU4MSAxNS44Mjk5QzMzLjE1MzMgOS44NDA1NCAyNi43OTkgOC45MDQxMSAyMS4wMzc4IDEwLjQ0NzhDMTUuMTc2NyAxMi4wMTgzIDEwLjA5NiAxNi43Njc2IDExLjY0NzQgMjIuNTU3M0MxMi4wMTI5IDIzLjkyMTYgMTMuMjY4NyAyNS4wMTE2IDE0LjcyMzIgMjQuOTc4NUwxNi45NDM4IDI0Ljk3MzFDMTcuNDAwNCAyNC45NjI1IDE3LjIzNiAyNSAxOC4xMTcgMjQuOTI3MUMxOC45OTggMjQuODU0MSAyMS4zNTA5IDI0LjU2NDYgMjEuMzUwOSAyNC41NjQ2TDMyLjg5NjIgMjMuMjU4TDMzLjE5MzcgMjMuMjE0OEMzMy44Njg5IDIzLjA5OTcgMzQuMzc5MiAyMy4yNzUgMzQuODEwNiAyNC4wMTgzQzM1LjQ1NjMgMjUuMTMwNCAzNC40NzEyIDI1Ljk2OTEgMzMuMjkyIDI2Ljk3MzFDMzMuMjYwNSAyNyAzMy4yMjg4IDI3LjAyNyAzMy4xOTcgMjcuMDU0MUwyMy4wNDgyIDM1LjgwMDVDMjEuMzA4NyAzNy4zMDA4IDIwLjA4NjcgMzYuNzM2NyAxOS42NTg4IDM1LjEzOTVMMTguMTQzMSAyOS40ODI5QzE3Ljc2ODcgMjguMDg1NCAxNi40MDQxIDI2Ljk4ODkgMTQuODA1NiAyNy40MTcyQzEyLjgwNzUgMjcuOTUyNiAxMi42NDU1IDMwLjI3ODQgMTMuMTM1OCAzMi4xMDg1WiIgZmlsbD0iI0ZCRkFGRiIvPgo8L3N2Zz4K";
|
|
6
|
+
declare const WalletMetadataSchema: import("valibot").ObjectSchema<{
|
|
7
|
+
readonly id: import("valibot").StringSchema<"Wallet ID is required">;
|
|
8
|
+
readonly walletName: import("valibot").StringSchema<"Wallet name is required">;
|
|
9
|
+
readonly icon: import("valibot").StringSchema<"Icon must be a valid wallet icon format">;
|
|
10
|
+
readonly enabled: import("valibot").BooleanSchema<"Enabled is required">;
|
|
11
|
+
}, undefined>;
|
|
12
|
+
type WalletMetadata = InferOutput<typeof WalletMetadataSchema>;
|
|
13
|
+
export declare class SlushWallet implements Wallet {
|
|
14
|
+
#private;
|
|
15
|
+
get name(): string;
|
|
16
|
+
get id(): string;
|
|
17
|
+
get icon(): `data:image/svg+xml;base64,${string}` | `data:image/webp;base64,${string}` | `data:image/png;base64,${string}` | `data:image/gif;base64,${string}`;
|
|
18
|
+
get version(): "1.0.0";
|
|
19
|
+
get chains(): readonly ["haneul:devnet", "haneul:testnet", "haneul:localnet", "haneul:mainnet"];
|
|
20
|
+
get accounts(): ReadonlyWalletAccount[];
|
|
21
|
+
get features(): StandardConnectFeature & StandardDisconnectFeature & StandardEventsFeature & HaneulSignTransactionBlockFeature & HaneulSignTransactionFeature & HaneulSignPersonalMessageFeature & HaneulSignAndExecuteTransactionFeature;
|
|
22
|
+
constructor({ name, origin, metadata, }: {
|
|
23
|
+
name: string;
|
|
24
|
+
origin?: string;
|
|
25
|
+
chain?: HaneulChain;
|
|
26
|
+
metadata: WalletMetadata;
|
|
27
|
+
});
|
|
28
|
+
updateMetadata(metadata: WalletMetadata): void;
|
|
29
|
+
}
|
|
30
|
+
export declare function registerSlushWallet(name: string, { origin, metadataApiUrl, }?: {
|
|
31
|
+
origin?: string;
|
|
32
|
+
metadataApiUrl?: string;
|
|
33
|
+
}): {
|
|
34
|
+
wallet: SlushWallet;
|
|
35
|
+
unregister: () => void;
|
|
36
|
+
} | undefined;
|
|
37
|
+
export {};
|