unwallet-client-sdk 0.14.0 → 0.16.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/README.md +2 -16
- package/dist/index.d.mts +84 -0
- package/dist/index.d.ts +84 -3
- package/dist/index.js +370 -4
- package/dist/index.mjs +343 -0
- package/package.json +27 -10
- package/.github/workflows/publish.yml +0 -29
- package/.husky/commit-msg +0 -1
- package/commitlint.config.js +0 -1
- package/dist/configs.d.ts +0 -5
- package/dist/configs.d.ts.map +0 -1
- package/dist/configs.js +0 -21
- package/dist/index.d.ts.map +0 -1
- package/dist/types.d.ts +0 -22
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/unwallet.d.ts +0 -35
- package/dist/unwallet.d.ts.map +0 -1
- package/dist/unwallet.js +0 -150
- package/src/configs.ts +0 -20
- package/src/index.ts +0 -2
- package/src/types.ts +0 -26
- package/src/unwallet.ts +0 -222
- package/tsconfig.json +0 -15
package/README.md
CHANGED
|
@@ -1,22 +1,8 @@
|
|
|
1
1
|
# unWallet client-side SDK
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
## Installation
|
|
6
|
-
|
|
7
|
-
```
|
|
8
|
-
npm install unwallet-client-sdk
|
|
9
|
-
```
|
|
3
|
+
[](https://npm.im/unwallet-client-sdk)
|
|
10
4
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
```js
|
|
14
|
-
import { UnWallet } from "unwallet-client-sdk";
|
|
15
|
-
|
|
16
|
-
const unWallet = await UnWallet.init({
|
|
17
|
-
clientID: "CLIENT_ID_OF_YOUR_APPLICATION",
|
|
18
|
-
});
|
|
19
|
-
```
|
|
5
|
+
:warning: This SDK works correctly only on web browsers.
|
|
20
6
|
|
|
21
7
|
## Usage
|
|
22
8
|
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
declare const VALID_ENVS: readonly ["prod", "dev"];
|
|
2
|
+
type Env = (typeof VALID_ENVS)[number];
|
|
3
|
+
interface Config {
|
|
4
|
+
env?: Env;
|
|
5
|
+
clientID: string;
|
|
6
|
+
}
|
|
7
|
+
interface UnWalletXAPIConfig {
|
|
8
|
+
url: string;
|
|
9
|
+
connectionTimeout: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
declare const VALID_UW_ERROR_CODES: readonly ["CONNECTION_TIMEOUT", "CONNECTION_FAILED", "CONNECTION_NOT_OPENED", "CONNECTION_CLOSED", "INVALID_REQUEST", "REQUEST_IN_PROGRESS", "REQUEST_REJECTED", "INVALID_RESPONSE"];
|
|
13
|
+
type UWErrorCode = (typeof VALID_UW_ERROR_CODES)[number];
|
|
14
|
+
declare class UWError extends Error {
|
|
15
|
+
readonly code: UWErrorCode;
|
|
16
|
+
constructor(code: UWErrorCode, message?: string);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
declare const VALID_X_RESPONSE_TYPES: readonly ["connectionID", "signature", "transactionID", "error"];
|
|
20
|
+
type XResponseType = (typeof VALID_X_RESPONSE_TYPES)[number];
|
|
21
|
+
interface XResponse {
|
|
22
|
+
readonly type: XResponseType;
|
|
23
|
+
readonly value: string;
|
|
24
|
+
}
|
|
25
|
+
interface XResponseHandler {
|
|
26
|
+
resolve: (resp: XResponse) => void;
|
|
27
|
+
reject: (err: UWError) => void;
|
|
28
|
+
}
|
|
29
|
+
declare class XConnection {
|
|
30
|
+
private socket;
|
|
31
|
+
private responseHandler;
|
|
32
|
+
readonly id: string;
|
|
33
|
+
constructor(args: {
|
|
34
|
+
socket: WebSocket;
|
|
35
|
+
id: string;
|
|
36
|
+
});
|
|
37
|
+
private initListeners;
|
|
38
|
+
get readyState(): number;
|
|
39
|
+
get hasResponseHandler(): boolean;
|
|
40
|
+
setResponseHandler(handler: XResponseHandler | null): void;
|
|
41
|
+
static init(config: UnWalletXAPIConfig): Promise<XConnection>;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
declare const VALID_AUTHORIZATION_RESPONSE_MODES: readonly ["fragment", "form_post"];
|
|
45
|
+
type AuthorizationResponseMode = (typeof VALID_AUTHORIZATION_RESPONSE_MODES)[number];
|
|
46
|
+
interface SignResult {
|
|
47
|
+
digest: string;
|
|
48
|
+
signature: string;
|
|
49
|
+
}
|
|
50
|
+
interface SendTransactionResult {
|
|
51
|
+
transactionID: string;
|
|
52
|
+
}
|
|
53
|
+
declare class UnWallet {
|
|
54
|
+
private env;
|
|
55
|
+
private clientID;
|
|
56
|
+
private xConnection;
|
|
57
|
+
constructor(args: {
|
|
58
|
+
env: Env;
|
|
59
|
+
clientID: string;
|
|
60
|
+
xConnection: XConnection;
|
|
61
|
+
});
|
|
62
|
+
static init(config: Config): Promise<UnWallet>;
|
|
63
|
+
private get unWalletConfig();
|
|
64
|
+
authorize(args: {
|
|
65
|
+
responseMode?: AuthorizationResponseMode;
|
|
66
|
+
redirectURL: string;
|
|
67
|
+
nonce?: string;
|
|
68
|
+
isVirtual?: boolean;
|
|
69
|
+
chainID?: number;
|
|
70
|
+
}): void;
|
|
71
|
+
sign(args: {
|
|
72
|
+
message: string;
|
|
73
|
+
ticketToken: string;
|
|
74
|
+
}): Promise<SignResult>;
|
|
75
|
+
sendTransaction(args: {
|
|
76
|
+
chainID: number;
|
|
77
|
+
toAddress: string;
|
|
78
|
+
value?: string;
|
|
79
|
+
data?: string;
|
|
80
|
+
ticketToken: string;
|
|
81
|
+
}): Promise<SendTransactionResult>;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export { type AuthorizationResponseMode, type Config, type Env, type SendTransactionResult, type SignResult, UWError, type UWErrorCode, UnWallet };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,84 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
declare const VALID_ENVS: readonly ["prod", "dev"];
|
|
2
|
+
type Env = (typeof VALID_ENVS)[number];
|
|
3
|
+
interface Config {
|
|
4
|
+
env?: Env;
|
|
5
|
+
clientID: string;
|
|
6
|
+
}
|
|
7
|
+
interface UnWalletXAPIConfig {
|
|
8
|
+
url: string;
|
|
9
|
+
connectionTimeout: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
declare const VALID_UW_ERROR_CODES: readonly ["CONNECTION_TIMEOUT", "CONNECTION_FAILED", "CONNECTION_NOT_OPENED", "CONNECTION_CLOSED", "INVALID_REQUEST", "REQUEST_IN_PROGRESS", "REQUEST_REJECTED", "INVALID_RESPONSE"];
|
|
13
|
+
type UWErrorCode = (typeof VALID_UW_ERROR_CODES)[number];
|
|
14
|
+
declare class UWError extends Error {
|
|
15
|
+
readonly code: UWErrorCode;
|
|
16
|
+
constructor(code: UWErrorCode, message?: string);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
declare const VALID_X_RESPONSE_TYPES: readonly ["connectionID", "signature", "transactionID", "error"];
|
|
20
|
+
type XResponseType = (typeof VALID_X_RESPONSE_TYPES)[number];
|
|
21
|
+
interface XResponse {
|
|
22
|
+
readonly type: XResponseType;
|
|
23
|
+
readonly value: string;
|
|
24
|
+
}
|
|
25
|
+
interface XResponseHandler {
|
|
26
|
+
resolve: (resp: XResponse) => void;
|
|
27
|
+
reject: (err: UWError) => void;
|
|
28
|
+
}
|
|
29
|
+
declare class XConnection {
|
|
30
|
+
private socket;
|
|
31
|
+
private responseHandler;
|
|
32
|
+
readonly id: string;
|
|
33
|
+
constructor(args: {
|
|
34
|
+
socket: WebSocket;
|
|
35
|
+
id: string;
|
|
36
|
+
});
|
|
37
|
+
private initListeners;
|
|
38
|
+
get readyState(): number;
|
|
39
|
+
get hasResponseHandler(): boolean;
|
|
40
|
+
setResponseHandler(handler: XResponseHandler | null): void;
|
|
41
|
+
static init(config: UnWalletXAPIConfig): Promise<XConnection>;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
declare const VALID_AUTHORIZATION_RESPONSE_MODES: readonly ["fragment", "form_post"];
|
|
45
|
+
type AuthorizationResponseMode = (typeof VALID_AUTHORIZATION_RESPONSE_MODES)[number];
|
|
46
|
+
interface SignResult {
|
|
47
|
+
digest: string;
|
|
48
|
+
signature: string;
|
|
49
|
+
}
|
|
50
|
+
interface SendTransactionResult {
|
|
51
|
+
transactionID: string;
|
|
52
|
+
}
|
|
53
|
+
declare class UnWallet {
|
|
54
|
+
private env;
|
|
55
|
+
private clientID;
|
|
56
|
+
private xConnection;
|
|
57
|
+
constructor(args: {
|
|
58
|
+
env: Env;
|
|
59
|
+
clientID: string;
|
|
60
|
+
xConnection: XConnection;
|
|
61
|
+
});
|
|
62
|
+
static init(config: Config): Promise<UnWallet>;
|
|
63
|
+
private get unWalletConfig();
|
|
64
|
+
authorize(args: {
|
|
65
|
+
responseMode?: AuthorizationResponseMode;
|
|
66
|
+
redirectURL: string;
|
|
67
|
+
nonce?: string;
|
|
68
|
+
isVirtual?: boolean;
|
|
69
|
+
chainID?: number;
|
|
70
|
+
}): void;
|
|
71
|
+
sign(args: {
|
|
72
|
+
message: string;
|
|
73
|
+
ticketToken: string;
|
|
74
|
+
}): Promise<SignResult>;
|
|
75
|
+
sendTransaction(args: {
|
|
76
|
+
chainID: number;
|
|
77
|
+
toAddress: string;
|
|
78
|
+
value?: string;
|
|
79
|
+
data?: string;
|
|
80
|
+
ticketToken: string;
|
|
81
|
+
}): Promise<SendTransactionResult>;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export { type AuthorizationResponseMode, type Config, type Env, type SendTransactionResult, type SignResult, UWError, type UWErrorCode, UnWallet };
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,371 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty
|
|
3
|
-
|
|
4
|
-
var
|
|
5
|
-
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
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_ethers = require("ethers");
|
|
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
|
+
}
|
|
59
|
+
};
|
|
60
|
+
function getUnWalletConfigByEnv(env) {
|
|
61
|
+
switch (env) {
|
|
62
|
+
case "prod":
|
|
63
|
+
return UNWALLET_CONFIG_PROD;
|
|
64
|
+
case "dev":
|
|
65
|
+
return UNWALLET_CONFIG_DEV;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// src/x.ts
|
|
70
|
+
var import_zod = require("zod");
|
|
71
|
+
var VALID_X_RESPONSE_TYPES = [
|
|
72
|
+
"connectionID",
|
|
73
|
+
"signature",
|
|
74
|
+
"transactionID",
|
|
75
|
+
"error"
|
|
76
|
+
];
|
|
77
|
+
var XConnection = class _XConnection {
|
|
78
|
+
constructor(args) {
|
|
79
|
+
this.responseHandler = null;
|
|
80
|
+
this.socket = args.socket;
|
|
81
|
+
this.id = args.id;
|
|
82
|
+
this.initListeners();
|
|
83
|
+
}
|
|
84
|
+
initListeners() {
|
|
85
|
+
this.socket.onopen = null;
|
|
86
|
+
this.socket.onmessage = (event) => {
|
|
87
|
+
if (this.responseHandler === null) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
let resp;
|
|
91
|
+
{
|
|
92
|
+
const result = safeParseMessageEventDataToXResponse(event.data);
|
|
93
|
+
if (!result.success) {
|
|
94
|
+
this.responseHandler.reject(result.error);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
resp = result.data;
|
|
98
|
+
}
|
|
99
|
+
switch (resp.type) {
|
|
100
|
+
case "error":
|
|
101
|
+
switch (resp.value) {
|
|
102
|
+
case "rejected":
|
|
103
|
+
this.responseHandler.reject(new UWError("REQUEST_REJECTED"));
|
|
104
|
+
break;
|
|
105
|
+
default:
|
|
106
|
+
this.responseHandler.reject(
|
|
107
|
+
new UWError(
|
|
108
|
+
"INVALID_RESPONSE",
|
|
109
|
+
`unexpected error response value: ${resp.value}`
|
|
110
|
+
)
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
break;
|
|
114
|
+
default:
|
|
115
|
+
this.responseHandler.resolve(resp);
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
this.socket.onerror = null;
|
|
119
|
+
this.socket.onclose = (event) => {
|
|
120
|
+
if (this.responseHandler === null) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
this.responseHandler.reject(
|
|
124
|
+
new UWError("CONNECTION_CLOSED", event.reason)
|
|
125
|
+
);
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
get readyState() {
|
|
129
|
+
return this.socket.readyState;
|
|
130
|
+
}
|
|
131
|
+
get hasResponseHandler() {
|
|
132
|
+
return this.responseHandler !== null;
|
|
133
|
+
}
|
|
134
|
+
setResponseHandler(handler) {
|
|
135
|
+
this.responseHandler = handler;
|
|
136
|
+
}
|
|
137
|
+
static async init(config) {
|
|
138
|
+
const socket = new WebSocket(config.url);
|
|
139
|
+
const id = await new Promise((resolve, reject) => {
|
|
140
|
+
setInterval(
|
|
141
|
+
() => reject(new UWError("CONNECTION_TIMEOUT")),
|
|
142
|
+
config.connectionTimeout
|
|
143
|
+
);
|
|
144
|
+
socket.onopen = () => socket.send(JSON.stringify({ action: "getConnectionID" }));
|
|
145
|
+
socket.onmessage = (event) => {
|
|
146
|
+
let resp;
|
|
147
|
+
{
|
|
148
|
+
const result = safeParseMessageEventDataToXResponse(event.data);
|
|
149
|
+
if (!result.success) {
|
|
150
|
+
reject(result.error);
|
|
151
|
+
return;
|
|
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
|
+
}
|
|
171
|
+
};
|
|
172
|
+
function safeParseMessageEventDataToXResponse(data) {
|
|
173
|
+
let s;
|
|
174
|
+
{
|
|
175
|
+
const result = import_zod.z.string().refine((val) => {
|
|
176
|
+
try {
|
|
177
|
+
JSON.parse(val);
|
|
178
|
+
} catch (e) {
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
return true;
|
|
182
|
+
}).safeParse(data);
|
|
183
|
+
if (!result.success) {
|
|
184
|
+
return {
|
|
185
|
+
success: false,
|
|
186
|
+
error: new UWError(
|
|
187
|
+
"INVALID_RESPONSE",
|
|
188
|
+
"message event data must be a json string"
|
|
189
|
+
)
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
s = result.data;
|
|
193
|
+
}
|
|
194
|
+
let parsed;
|
|
195
|
+
{
|
|
196
|
+
const result = import_zod.z.object({
|
|
197
|
+
type: import_zod.z.enum(VALID_X_RESPONSE_TYPES),
|
|
198
|
+
value: import_zod.z.string()
|
|
199
|
+
}).safeParse(JSON.parse(s));
|
|
200
|
+
if (!result.success) {
|
|
201
|
+
return {
|
|
202
|
+
success: false,
|
|
203
|
+
error: new UWError(
|
|
204
|
+
"INVALID_RESPONSE",
|
|
205
|
+
`invalid message event data: ${result.error.message}`
|
|
206
|
+
)
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
parsed = result.data;
|
|
210
|
+
}
|
|
211
|
+
return {
|
|
212
|
+
success: true,
|
|
213
|
+
data: parsed
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// src/unwallet.ts
|
|
218
|
+
var UnWallet = class _UnWallet {
|
|
219
|
+
constructor(args) {
|
|
220
|
+
this.env = args.env;
|
|
221
|
+
this.clientID = args.clientID;
|
|
222
|
+
this.xConnection = args.xConnection;
|
|
223
|
+
}
|
|
224
|
+
static async init(config) {
|
|
225
|
+
const env = config.env !== void 0 ? config.env : "prod";
|
|
226
|
+
return new _UnWallet({
|
|
227
|
+
env,
|
|
228
|
+
clientID: config.clientID,
|
|
229
|
+
xConnection: await XConnection.init(getUnWalletConfigByEnv(env).xapi)
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
get unWalletConfig() {
|
|
233
|
+
return getUnWalletConfigByEnv(this.env);
|
|
234
|
+
}
|
|
235
|
+
authorize(args) {
|
|
236
|
+
const url = new URL(
|
|
237
|
+
`${this.unWalletConfig.frontend.baseURL}/${args.isVirtual !== void 0 ? args.isVirtual ? "v" : "" : "v"}authorize`
|
|
238
|
+
);
|
|
239
|
+
{
|
|
240
|
+
url.searchParams.set("response_type", "id_token");
|
|
241
|
+
url.searchParams.set(
|
|
242
|
+
"response_mode",
|
|
243
|
+
args.responseMode !== void 0 ? args.responseMode : "fragment"
|
|
244
|
+
);
|
|
245
|
+
url.searchParams.set("client_id", this.clientID);
|
|
246
|
+
url.searchParams.set("scope", "openid");
|
|
247
|
+
url.searchParams.set("redirect_uri", args.redirectURL);
|
|
248
|
+
if (args.nonce !== void 0) {
|
|
249
|
+
url.searchParams.set("nonce", args.nonce);
|
|
250
|
+
}
|
|
251
|
+
if (args.chainID !== void 0) {
|
|
252
|
+
url.searchParams.set("chain_id", args.chainID.toString());
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
location.assign(url);
|
|
256
|
+
}
|
|
257
|
+
sign(args) {
|
|
258
|
+
return new Promise((resolve, reject) => {
|
|
259
|
+
if (this.xConnection.readyState !== WebSocket.OPEN) {
|
|
260
|
+
reject(new UWError("CONNECTION_NOT_OPENED"));
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
if (this.xConnection.hasResponseHandler) {
|
|
264
|
+
reject(new UWError("REQUEST_IN_PROGRESS"));
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
this.xConnection.setResponseHandler({
|
|
268
|
+
resolve: (resp) => {
|
|
269
|
+
this.xConnection.setResponseHandler(null);
|
|
270
|
+
if (resp.type !== "signature") {
|
|
271
|
+
reject(
|
|
272
|
+
new UWError(
|
|
273
|
+
"INVALID_RESPONSE",
|
|
274
|
+
`unexpected response type: ${resp.type}`
|
|
275
|
+
)
|
|
276
|
+
);
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
resolve({
|
|
280
|
+
digest: import_ethers.ethers.sha256(import_ethers.ethers.toUtf8Bytes(args.message)),
|
|
281
|
+
signature: resp.value
|
|
282
|
+
});
|
|
283
|
+
},
|
|
284
|
+
reject: (err) => {
|
|
285
|
+
this.xConnection.setResponseHandler(null);
|
|
286
|
+
reject(err);
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
const url = new URL(`${this.unWalletConfig.frontend.baseURL}/x/sign`);
|
|
290
|
+
{
|
|
291
|
+
url.searchParams.set("connectionID", this.xConnection.id);
|
|
292
|
+
url.searchParams.set("clientID", this.clientID);
|
|
293
|
+
url.searchParams.set("message", args.message);
|
|
294
|
+
url.searchParams.set("ticketToken", args.ticketToken);
|
|
295
|
+
}
|
|
296
|
+
openWindow(url);
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
sendTransaction(args) {
|
|
300
|
+
return new Promise((resolve, reject) => {
|
|
301
|
+
if (this.xConnection.readyState !== WebSocket.OPEN) {
|
|
302
|
+
reject(new UWError("CONNECTION_NOT_OPENED"));
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
if (this.xConnection.hasResponseHandler) {
|
|
306
|
+
reject(new UWError("REQUEST_IN_PROGRESS"));
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
if (args.value === void 0 && args.data === void 0) {
|
|
310
|
+
reject(
|
|
311
|
+
new UWError("INVALID_REQUEST", "either value or data is required")
|
|
312
|
+
);
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
this.xConnection.setResponseHandler({
|
|
316
|
+
resolve: (resp) => {
|
|
317
|
+
this.xConnection.setResponseHandler(null);
|
|
318
|
+
if (resp.type !== "transactionID") {
|
|
319
|
+
reject(
|
|
320
|
+
new UWError(
|
|
321
|
+
"INVALID_RESPONSE",
|
|
322
|
+
`unexpected response type: ${resp.type}`
|
|
323
|
+
)
|
|
324
|
+
);
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
resolve({ transactionID: resp.value });
|
|
328
|
+
},
|
|
329
|
+
reject: (err) => {
|
|
330
|
+
this.xConnection.setResponseHandler(null);
|
|
331
|
+
reject(err);
|
|
332
|
+
}
|
|
333
|
+
});
|
|
334
|
+
const url = new URL(
|
|
335
|
+
`${this.unWalletConfig.frontend.baseURL}/x/sendTransaction`
|
|
336
|
+
);
|
|
337
|
+
{
|
|
338
|
+
url.searchParams.set("connectionID", this.xConnection.id);
|
|
339
|
+
url.searchParams.set("clientID", this.clientID);
|
|
340
|
+
url.searchParams.set("chainID", args.chainID.toString());
|
|
341
|
+
url.searchParams.set("toAddress", args.toAddress);
|
|
342
|
+
url.searchParams.set(
|
|
343
|
+
"value",
|
|
344
|
+
args.value !== void 0 ? args.value : "0x0"
|
|
345
|
+
);
|
|
346
|
+
url.searchParams.set(
|
|
347
|
+
"data",
|
|
348
|
+
args.data !== void 0 ? args.data : "0x"
|
|
349
|
+
);
|
|
350
|
+
url.searchParams.set("ticketToken", args.ticketToken);
|
|
351
|
+
}
|
|
352
|
+
openWindow(url);
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
};
|
|
356
|
+
function openWindow(url) {
|
|
357
|
+
const width = screen.width / 2;
|
|
358
|
+
const height = screen.height;
|
|
359
|
+
const left = screen.width / 4;
|
|
360
|
+
const top = 0;
|
|
361
|
+
window.open(
|
|
362
|
+
url.toString(),
|
|
363
|
+
"_blank",
|
|
364
|
+
`width=${width},height=${height},left=${left},top=${top}`
|
|
365
|
+
);
|
|
366
|
+
}
|
|
367
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
368
|
+
0 && (module.exports = {
|
|
369
|
+
UWError,
|
|
370
|
+
UnWallet
|
|
371
|
+
});
|