@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.
@@ -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,13 @@
1
+ import {
2
+ registerSlushWallet,
3
+ SlushWallet,
4
+ SLUSH_WALLET_NAME,
5
+ SLUSH_WALLET_ICON
6
+ } from "./wallet/index.js";
7
+ export {
8
+ SLUSH_WALLET_ICON,
9
+ SLUSH_WALLET_NAME,
10
+ SlushWallet,
11
+ registerSlushWallet
12
+ };
13
+ //# sourceMappingURL=index.js.map
@@ -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,5 @@
1
+ {
2
+ "private": true,
3
+ "type": "module",
4
+ "sideEffects": false
5
+ }
@@ -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 {};