unwallet-client-sdk 0.18.2 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +294 -413
- package/dist/index.d.cts +85 -84
- package/dist/index.d.ts +85 -84
- package/dist/index.js +292 -390
- package/package.json +14 -9
package/dist/index.cjs
CHANGED
|
@@ -1,423 +1,304 @@
|
|
|
1
|
-
"
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
var
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
|
|
20
|
-
// src/index.ts
|
|
21
|
-
var index_exports = {};
|
|
22
|
-
__export(index_exports, {
|
|
23
|
-
UWError: () => UWError,
|
|
24
|
-
UnWallet: () => UnWallet
|
|
25
|
-
});
|
|
26
|
-
module.exports = __toCommonJS(index_exports);
|
|
27
|
-
|
|
28
|
-
// src/error.ts
|
|
29
|
-
var _UWError = class _UWError extends Error {
|
|
30
|
-
constructor(code, message) {
|
|
31
|
-
super(message !== void 0 ? `${code}: ${message}` : code);
|
|
32
|
-
this.code = code;
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
_UWError.prototype.name = "UWError";
|
|
36
|
-
var UWError = _UWError;
|
|
37
|
-
|
|
38
|
-
// src/unwallet.ts
|
|
39
|
-
var import_viem = require("viem");
|
|
40
|
-
|
|
41
|
-
// src/config.ts
|
|
42
|
-
var UNWALLET_CONFIG_PROD = {
|
|
43
|
-
frontend: {
|
|
44
|
-
baseURL: "https://id.unwallet.world"
|
|
45
|
-
},
|
|
46
|
-
xapi: {
|
|
47
|
-
url: "wss://xapi.id.unwallet.world",
|
|
48
|
-
connectionTimeout: 1e4
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
var UNWALLET_CONFIG_DEV = {
|
|
52
|
-
frontend: {
|
|
53
|
-
baseURL: "http://localhost:4200"
|
|
54
|
-
},
|
|
55
|
-
xapi: {
|
|
56
|
-
url: "wss://xapi.id.test.unwallet.dev",
|
|
57
|
-
connectionTimeout: 1e4
|
|
58
|
-
}
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
let viem = require("viem");
|
|
3
|
+
let zod = require("zod");
|
|
4
|
+
//#region src/error.ts
|
|
5
|
+
var UWError = class extends Error {
|
|
6
|
+
constructor(code, message) {
|
|
7
|
+
super(message !== void 0 ? `${code}: ${message}` : code);
|
|
8
|
+
this.code = code;
|
|
9
|
+
}
|
|
10
|
+
static {
|
|
11
|
+
this.prototype.name = "UWError";
|
|
12
|
+
}
|
|
59
13
|
};
|
|
14
|
+
//#endregion
|
|
15
|
+
//#region src/config.ts
|
|
60
16
|
function getUnWalletConfigByEnv(env) {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
17
|
+
switch (env) {
|
|
18
|
+
case "prod": return {
|
|
19
|
+
frontend: { baseURL: "https://id.unwallet.world" },
|
|
20
|
+
xapi: {
|
|
21
|
+
url: "wss://xapi.id.unwallet.world",
|
|
22
|
+
connectionTimeout: 1e4
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
case "dev": return {
|
|
26
|
+
frontend: { baseURL: "http://localhost:4200" },
|
|
27
|
+
xapi: {
|
|
28
|
+
url: "wss://xapi.id.test.unwallet.dev",
|
|
29
|
+
connectionTimeout: 1e4
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
67
33
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
"error"
|
|
34
|
+
//#endregion
|
|
35
|
+
//#region src/x.ts
|
|
36
|
+
const X_RESPONSE_TYPES = [
|
|
37
|
+
"connectionID",
|
|
38
|
+
"signature",
|
|
39
|
+
"transactionID",
|
|
40
|
+
"error"
|
|
76
41
|
];
|
|
77
|
-
var XConnection = class
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
resp = result.data;
|
|
154
|
-
}
|
|
155
|
-
if (resp.type !== "connectionID") {
|
|
156
|
-
reject(
|
|
157
|
-
new UWError(
|
|
158
|
-
"INVALID_RESPONSE",
|
|
159
|
-
`unexpected response type: ${resp.type}`
|
|
160
|
-
)
|
|
161
|
-
);
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
resolve(resp.value);
|
|
165
|
-
};
|
|
166
|
-
socket.onerror = () => reject(new UWError("CONNECTION_FAILED"));
|
|
167
|
-
socket.onclose = (event) => reject(new UWError("CONNECTION_CLOSED", event.reason));
|
|
168
|
-
});
|
|
169
|
-
return new _XConnection({ socket, id });
|
|
170
|
-
}
|
|
42
|
+
var XConnection = class XConnection {
|
|
43
|
+
constructor(args) {
|
|
44
|
+
this.responseHandler = null;
|
|
45
|
+
this.socket = args.socket;
|
|
46
|
+
this.id = args.id;
|
|
47
|
+
this.initListeners();
|
|
48
|
+
}
|
|
49
|
+
static async init(config) {
|
|
50
|
+
const socket = new WebSocket(config.url);
|
|
51
|
+
const id = await new Promise((resolve, reject) => {
|
|
52
|
+
setInterval(() => reject(new UWError("CONNECTION_TIMEOUT")), config.connectionTimeout);
|
|
53
|
+
socket.onopen = () => socket.send(JSON.stringify({ action: "getConnectionID" }));
|
|
54
|
+
socket.onmessage = (event) => {
|
|
55
|
+
let resp;
|
|
56
|
+
{
|
|
57
|
+
const result = safeParseMessageEventDataToXResponse(event.data);
|
|
58
|
+
if (!result.success) {
|
|
59
|
+
reject(result.error);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
resp = result.data;
|
|
63
|
+
}
|
|
64
|
+
if (resp.type !== "connectionID") {
|
|
65
|
+
reject(new UWError("INVALID_RESPONSE", `unexpected response type: ${resp.type}`));
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
resolve(resp.value);
|
|
69
|
+
};
|
|
70
|
+
socket.onerror = () => reject(new UWError("CONNECTION_FAILED"));
|
|
71
|
+
socket.onclose = (event) => reject(new UWError("CONNECTION_CLOSED", event.reason));
|
|
72
|
+
});
|
|
73
|
+
return new XConnection({
|
|
74
|
+
id,
|
|
75
|
+
socket
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
initListeners() {
|
|
79
|
+
this.socket.onopen = null;
|
|
80
|
+
this.socket.onmessage = (event) => {
|
|
81
|
+
if (this.responseHandler === null) return;
|
|
82
|
+
let resp;
|
|
83
|
+
{
|
|
84
|
+
const result = safeParseMessageEventDataToXResponse(event.data);
|
|
85
|
+
if (!result.success) {
|
|
86
|
+
this.responseHandler.reject(result.error);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
resp = result.data;
|
|
90
|
+
}
|
|
91
|
+
switch (resp.type) {
|
|
92
|
+
case "error":
|
|
93
|
+
switch (resp.value) {
|
|
94
|
+
case "rejected":
|
|
95
|
+
this.responseHandler.reject(new UWError("REQUEST_REJECTED"));
|
|
96
|
+
break;
|
|
97
|
+
default: this.responseHandler.reject(new UWError("INVALID_RESPONSE", `unexpected error response value: ${resp.value}`));
|
|
98
|
+
}
|
|
99
|
+
break;
|
|
100
|
+
default: this.responseHandler.resolve(resp);
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
this.socket.onerror = null;
|
|
104
|
+
this.socket.onclose = (event) => {
|
|
105
|
+
if (this.responseHandler === null) return;
|
|
106
|
+
this.responseHandler.reject(new UWError("CONNECTION_CLOSED", event.reason));
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
get readyState() {
|
|
110
|
+
return this.socket.readyState;
|
|
111
|
+
}
|
|
112
|
+
get hasResponseHandler() {
|
|
113
|
+
return this.responseHandler !== null;
|
|
114
|
+
}
|
|
115
|
+
setResponseHandler(handler) {
|
|
116
|
+
this.responseHandler = handler;
|
|
117
|
+
}
|
|
171
118
|
};
|
|
172
119
|
function safeParseMessageEventDataToXResponse(data) {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
error: new UWError(
|
|
196
|
-
"INVALID_RESPONSE",
|
|
197
|
-
`invalid message event data: ${result.error.message}`
|
|
198
|
-
)
|
|
199
|
-
};
|
|
200
|
-
}
|
|
201
|
-
return {
|
|
202
|
-
success: true,
|
|
203
|
-
data: result.data
|
|
204
|
-
};
|
|
120
|
+
const result = zod.z.string().refine((val) => {
|
|
121
|
+
try {
|
|
122
|
+
JSON.parse(val);
|
|
123
|
+
} catch (e) {
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
return true;
|
|
127
|
+
}, {
|
|
128
|
+
abort: true,
|
|
129
|
+
message: "Invalid JSON string"
|
|
130
|
+
}).transform((val) => JSON.parse(val)).pipe(zod.z.object({
|
|
131
|
+
type: zod.z.enum(X_RESPONSE_TYPES),
|
|
132
|
+
value: zod.z.string()
|
|
133
|
+
})).safeParse(data);
|
|
134
|
+
if (!result.success) return {
|
|
135
|
+
success: false,
|
|
136
|
+
error: new UWError("INVALID_RESPONSE", `invalid message event data: ${result.error.message}`)
|
|
137
|
+
};
|
|
138
|
+
return {
|
|
139
|
+
success: true,
|
|
140
|
+
data: result.data
|
|
141
|
+
};
|
|
205
142
|
}
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
var UnWallet = class
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
reject(new UWError("REQUEST_IN_PROGRESS"));
|
|
359
|
-
return;
|
|
360
|
-
}
|
|
361
|
-
if (args.value === void 0 && args.data === void 0) {
|
|
362
|
-
reject(
|
|
363
|
-
new UWError("INVALID_REQUEST", "either value or data is required")
|
|
364
|
-
);
|
|
365
|
-
return;
|
|
366
|
-
}
|
|
367
|
-
this.xConnection.setResponseHandler({
|
|
368
|
-
resolve: (resp) => {
|
|
369
|
-
this.xConnection.setResponseHandler(null);
|
|
370
|
-
if (resp.type !== "transactionID") {
|
|
371
|
-
reject(
|
|
372
|
-
new UWError(
|
|
373
|
-
"INVALID_RESPONSE",
|
|
374
|
-
`unexpected response type: ${resp.type}`
|
|
375
|
-
)
|
|
376
|
-
);
|
|
377
|
-
return;
|
|
378
|
-
}
|
|
379
|
-
resolve({ transactionID: resp.value });
|
|
380
|
-
},
|
|
381
|
-
reject: (err) => {
|
|
382
|
-
this.xConnection.setResponseHandler(null);
|
|
383
|
-
reject(err);
|
|
384
|
-
}
|
|
385
|
-
});
|
|
386
|
-
const url = new URL(
|
|
387
|
-
`${this.unWalletConfig.frontend.baseURL}/x/sendTransaction`
|
|
388
|
-
);
|
|
389
|
-
{
|
|
390
|
-
url.searchParams.set("connectionID", this.xConnection.id);
|
|
391
|
-
url.searchParams.set("clientID", this.clientID);
|
|
392
|
-
url.searchParams.set("chainID", args.chainID.toString());
|
|
393
|
-
url.searchParams.set("toAddress", args.toAddress);
|
|
394
|
-
url.searchParams.set(
|
|
395
|
-
"value",
|
|
396
|
-
args.value !== void 0 ? args.value : "0x0"
|
|
397
|
-
);
|
|
398
|
-
url.searchParams.set(
|
|
399
|
-
"data",
|
|
400
|
-
args.data !== void 0 ? args.data : "0x"
|
|
401
|
-
);
|
|
402
|
-
url.searchParams.set("ticketToken", args.ticketToken);
|
|
403
|
-
}
|
|
404
|
-
openWindow(url);
|
|
405
|
-
});
|
|
406
|
-
}
|
|
143
|
+
//#endregion
|
|
144
|
+
//#region src/unwallet.ts
|
|
145
|
+
var UnWallet = class UnWallet {
|
|
146
|
+
constructor(args) {
|
|
147
|
+
this.env = args.env;
|
|
148
|
+
this.clientID = args.clientID;
|
|
149
|
+
this.xConnection = args.xConnection;
|
|
150
|
+
}
|
|
151
|
+
static async init(config) {
|
|
152
|
+
const env = config.env ?? "prod";
|
|
153
|
+
return new UnWallet({
|
|
154
|
+
env,
|
|
155
|
+
clientID: config.clientID,
|
|
156
|
+
xConnection: await XConnection.init(getUnWalletConfigByEnv(env).xapi)
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
get unWalletConfig() {
|
|
160
|
+
return getUnWalletConfigByEnv(this.env);
|
|
161
|
+
}
|
|
162
|
+
authorize(args) {
|
|
163
|
+
const url = new URL(`${this.unWalletConfig.frontend.baseURL}/${args.isVirtual !== void 0 ? args.isVirtual ? "v" : "" : "v"}authorize`);
|
|
164
|
+
url.searchParams.set("response_type", "id_token");
|
|
165
|
+
url.searchParams.set("response_mode", args.responseMode ?? "fragment");
|
|
166
|
+
url.searchParams.set("client_id", this.clientID);
|
|
167
|
+
url.searchParams.set("scope", "openid");
|
|
168
|
+
url.searchParams.set("redirect_uri", args.redirectURL);
|
|
169
|
+
if (args.nonce !== void 0) url.searchParams.set("nonce", args.nonce);
|
|
170
|
+
if (args.chainID !== void 0) url.searchParams.set("chain_id", args.chainID.toString());
|
|
171
|
+
location.assign(url);
|
|
172
|
+
}
|
|
173
|
+
sign(args) {
|
|
174
|
+
return new Promise((resolve, reject) => {
|
|
175
|
+
if (this.xConnection.readyState !== WebSocket.OPEN) {
|
|
176
|
+
reject(new UWError("CONNECTION_NOT_OPENED"));
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
if (this.xConnection.hasResponseHandler) {
|
|
180
|
+
reject(new UWError("REQUEST_IN_PROGRESS"));
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
const digest = (0, viem.sha256)((0, viem.toBytes)(args.message));
|
|
184
|
+
this.xConnection.setResponseHandler({
|
|
185
|
+
resolve: (resp) => {
|
|
186
|
+
this.xConnection.setResponseHandler(null);
|
|
187
|
+
if (resp.type !== "signature") {
|
|
188
|
+
reject(new UWError("INVALID_RESPONSE", `unexpected response type: ${resp.type}`));
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
resolve({
|
|
192
|
+
digest,
|
|
193
|
+
signature: resp.value
|
|
194
|
+
});
|
|
195
|
+
},
|
|
196
|
+
reject: (err) => {
|
|
197
|
+
this.xConnection.setResponseHandler(null);
|
|
198
|
+
reject(err);
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
const url = new URL(`${this.unWalletConfig.frontend.baseURL}/x/sign`);
|
|
202
|
+
url.searchParams.set("connectionID", this.xConnection.id);
|
|
203
|
+
url.searchParams.set("clientID", this.clientID);
|
|
204
|
+
url.searchParams.set("message", args.message);
|
|
205
|
+
url.searchParams.set("ticketToken", args.ticketToken);
|
|
206
|
+
openWindow(url);
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
signEIP712TypedData(args) {
|
|
210
|
+
return new Promise((resolve, reject) => {
|
|
211
|
+
if (this.xConnection.readyState !== WebSocket.OPEN) {
|
|
212
|
+
reject(new UWError("CONNECTION_NOT_OPENED"));
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
if (this.xConnection.hasResponseHandler) {
|
|
216
|
+
reject(new UWError("REQUEST_IN_PROGRESS"));
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
const { EIP712Domain: _, ...typedDataTypes } = args.typedData.types;
|
|
220
|
+
const typedData = {
|
|
221
|
+
...args.typedData,
|
|
222
|
+
types: typedDataTypes
|
|
223
|
+
};
|
|
224
|
+
try {
|
|
225
|
+
(0, viem.validateTypedData)(typedData);
|
|
226
|
+
} catch (e) {
|
|
227
|
+
reject(new UWError("INVALID_REQUEST", `invalid typed data: ${e.message}`));
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
const digest = (0, viem.hashTypedData)(typedData);
|
|
231
|
+
this.xConnection.setResponseHandler({
|
|
232
|
+
resolve: (resp) => {
|
|
233
|
+
this.xConnection.setResponseHandler(null);
|
|
234
|
+
if (resp.type !== "signature") {
|
|
235
|
+
reject(new UWError("INVALID_RESPONSE", `unexpected response type: ${resp.type}`));
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
resolve({
|
|
239
|
+
digest,
|
|
240
|
+
signature: resp.value
|
|
241
|
+
});
|
|
242
|
+
},
|
|
243
|
+
reject: (err) => {
|
|
244
|
+
this.xConnection.setResponseHandler(null);
|
|
245
|
+
reject(err);
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
const url = new URL(`${this.unWalletConfig.frontend.baseURL}/x/signEIP712TypedData`);
|
|
249
|
+
url.searchParams.set("connectionID", this.xConnection.id);
|
|
250
|
+
url.searchParams.set("clientID", this.clientID);
|
|
251
|
+
url.searchParams.set("typedData", JSON.stringify(args.typedData));
|
|
252
|
+
url.searchParams.set("ticketToken", args.ticketToken);
|
|
253
|
+
openWindow(url);
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
sendTransaction(args) {
|
|
257
|
+
return new Promise((resolve, reject) => {
|
|
258
|
+
if (this.xConnection.readyState !== WebSocket.OPEN) {
|
|
259
|
+
reject(new UWError("CONNECTION_NOT_OPENED"));
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
if (this.xConnection.hasResponseHandler) {
|
|
263
|
+
reject(new UWError("REQUEST_IN_PROGRESS"));
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
if (args.value === void 0 && args.data === void 0) {
|
|
267
|
+
reject(new UWError("INVALID_REQUEST", "either value or data is required"));
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
this.xConnection.setResponseHandler({
|
|
271
|
+
resolve: (resp) => {
|
|
272
|
+
this.xConnection.setResponseHandler(null);
|
|
273
|
+
if (resp.type !== "transactionID") {
|
|
274
|
+
reject(new UWError("INVALID_RESPONSE", `unexpected response type: ${resp.type}`));
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
resolve({ transactionID: resp.value });
|
|
278
|
+
},
|
|
279
|
+
reject: (err) => {
|
|
280
|
+
this.xConnection.setResponseHandler(null);
|
|
281
|
+
reject(err);
|
|
282
|
+
}
|
|
283
|
+
});
|
|
284
|
+
const url = new URL(`${this.unWalletConfig.frontend.baseURL}/x/sendTransaction`);
|
|
285
|
+
url.searchParams.set("connectionID", this.xConnection.id);
|
|
286
|
+
url.searchParams.set("clientID", this.clientID);
|
|
287
|
+
url.searchParams.set("chainID", args.chainID.toString());
|
|
288
|
+
url.searchParams.set("toAddress", args.toAddress);
|
|
289
|
+
url.searchParams.set("value", args.value ?? "0x0");
|
|
290
|
+
url.searchParams.set("data", args.data ?? "0x");
|
|
291
|
+
url.searchParams.set("ticketToken", args.ticketToken);
|
|
292
|
+
openWindow(url);
|
|
293
|
+
});
|
|
294
|
+
}
|
|
407
295
|
};
|
|
408
296
|
function openWindow(url) {
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
window.open(
|
|
414
|
-
url.toString(),
|
|
415
|
-
"_blank",
|
|
416
|
-
`width=${width},height=${height},left=${left},top=${top}`
|
|
417
|
-
);
|
|
297
|
+
const width = screen.width / 2;
|
|
298
|
+
const height = screen.height;
|
|
299
|
+
const left = screen.width / 4;
|
|
300
|
+
window.open(url.toString(), "_blank", `width=${width},height=${height},left=${left},top=0`);
|
|
418
301
|
}
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
UnWallet
|
|
423
|
-
});
|
|
302
|
+
//#endregion
|
|
303
|
+
exports.UWError = UWError;
|
|
304
|
+
exports.UnWallet = UnWallet;
|