unwallet-client-sdk 0.13.0 → 0.15.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 +3 -17
- package/dist/{unwallet.d.ts → index.d.mts} +30 -5
- package/dist/index.d.ts +60 -3
- package/dist/index.js +217 -4
- package/{src/unwallet.ts → dist/index.mjs} +69 -97
- package/package.json +28 -12
- package/.github/workflows/publish.yml +0 -31
- 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.map +0 -1
- package/dist/unwallet.js +0 -150
- package/docs/functions.md +0 -118
- package/src/configs.ts +0 -20
- package/src/index.ts +0 -2
- package/src/types.ts +0 -26
- package/tsconfig.json +0 -15
package/README.md
CHANGED
|
@@ -1,23 +1,9 @@
|
|
|
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
|
|
|
23
|
-
|
|
9
|
+
https://developers.ent.unwallet.world/01_spec/02_client-side-sdk
|
|
@@ -1,5 +1,29 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
declare const VALID_ENVS: readonly ["prod", "dev"];
|
|
2
|
+
|
|
3
|
+
type Env = (typeof VALID_ENVS)[number];
|
|
4
|
+
interface Config {
|
|
5
|
+
clientID: string;
|
|
6
|
+
env?: Env;
|
|
7
|
+
}
|
|
8
|
+
interface UnWalletConfig {
|
|
9
|
+
frontend: UnWalletFrontendConfig;
|
|
10
|
+
xapi: UnWalletXAPIConfig;
|
|
11
|
+
}
|
|
12
|
+
interface UnWalletFrontendConfig {
|
|
13
|
+
baseURL: string;
|
|
14
|
+
}
|
|
15
|
+
interface UnWalletXAPIConfig {
|
|
16
|
+
url: string;
|
|
17
|
+
}
|
|
18
|
+
interface SignResult {
|
|
19
|
+
digest: string;
|
|
20
|
+
signature: string;
|
|
21
|
+
}
|
|
22
|
+
interface SendTransactionResult {
|
|
23
|
+
transactionID: string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
declare class UnWallet {
|
|
3
27
|
private config;
|
|
4
28
|
private unWalletConfig;
|
|
5
29
|
private ws;
|
|
@@ -18,18 +42,19 @@ export declare class UnWallet {
|
|
|
18
42
|
}): void;
|
|
19
43
|
sign(args: {
|
|
20
44
|
message: string;
|
|
21
|
-
|
|
45
|
+
ticketToken: string;
|
|
22
46
|
}): Promise<SignResult>;
|
|
23
47
|
sendTransaction(args: {
|
|
24
48
|
chainID: number;
|
|
25
49
|
toAddress: string;
|
|
26
50
|
value?: string;
|
|
27
51
|
data?: string;
|
|
28
|
-
|
|
52
|
+
ticketToken: string;
|
|
29
53
|
}): Promise<SendTransactionResult>;
|
|
30
54
|
private getConnectionID;
|
|
31
55
|
private sendWSMessage;
|
|
32
56
|
private handleWSMessage;
|
|
33
57
|
private openWindow;
|
|
34
58
|
}
|
|
35
|
-
|
|
59
|
+
|
|
60
|
+
export { type Config, type SendTransactionResult, type SignResult, UnWallet };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,60 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
declare const VALID_ENVS: readonly ["prod", "dev"];
|
|
2
|
+
|
|
3
|
+
type Env = (typeof VALID_ENVS)[number];
|
|
4
|
+
interface Config {
|
|
5
|
+
clientID: string;
|
|
6
|
+
env?: Env;
|
|
7
|
+
}
|
|
8
|
+
interface UnWalletConfig {
|
|
9
|
+
frontend: UnWalletFrontendConfig;
|
|
10
|
+
xapi: UnWalletXAPIConfig;
|
|
11
|
+
}
|
|
12
|
+
interface UnWalletFrontendConfig {
|
|
13
|
+
baseURL: string;
|
|
14
|
+
}
|
|
15
|
+
interface UnWalletXAPIConfig {
|
|
16
|
+
url: string;
|
|
17
|
+
}
|
|
18
|
+
interface SignResult {
|
|
19
|
+
digest: string;
|
|
20
|
+
signature: string;
|
|
21
|
+
}
|
|
22
|
+
interface SendTransactionResult {
|
|
23
|
+
transactionID: string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
declare class UnWallet {
|
|
27
|
+
private config;
|
|
28
|
+
private unWalletConfig;
|
|
29
|
+
private ws;
|
|
30
|
+
private connectionID;
|
|
31
|
+
private resolve;
|
|
32
|
+
private reject;
|
|
33
|
+
constructor(config: Config, unWalletConfig: UnWalletConfig, ws: WebSocket);
|
|
34
|
+
private initPromiseArgs;
|
|
35
|
+
static init(config: Config): Promise<UnWallet>;
|
|
36
|
+
authorize(args: {
|
|
37
|
+
responseMode?: string;
|
|
38
|
+
redirectURL: string;
|
|
39
|
+
nonce?: string;
|
|
40
|
+
isVirtual?: boolean;
|
|
41
|
+
chainID?: number;
|
|
42
|
+
}): void;
|
|
43
|
+
sign(args: {
|
|
44
|
+
message: string;
|
|
45
|
+
ticketToken: string;
|
|
46
|
+
}): Promise<SignResult>;
|
|
47
|
+
sendTransaction(args: {
|
|
48
|
+
chainID: number;
|
|
49
|
+
toAddress: string;
|
|
50
|
+
value?: string;
|
|
51
|
+
data?: string;
|
|
52
|
+
ticketToken: string;
|
|
53
|
+
}): Promise<SendTransactionResult>;
|
|
54
|
+
private getConnectionID;
|
|
55
|
+
private sendWSMessage;
|
|
56
|
+
private handleWSMessage;
|
|
57
|
+
private openWindow;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export { type Config, type SendTransactionResult, type SignResult, UnWallet };
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,218 @@
|
|
|
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
|
+
UnWallet: () => UnWallet
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(index_exports);
|
|
26
|
+
|
|
27
|
+
// src/unwallet.ts
|
|
28
|
+
var import_ethers = require("ethers");
|
|
29
|
+
|
|
30
|
+
// src/consts.ts
|
|
31
|
+
var UNWALLET_CONFIG_PROD = {
|
|
32
|
+
frontend: {
|
|
33
|
+
baseURL: "https://id.unwallet.world"
|
|
34
|
+
},
|
|
35
|
+
xapi: {
|
|
36
|
+
url: "wss://xapi.id.unwallet.world"
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
var UNWALLET_CONFIG_DEV = {
|
|
40
|
+
frontend: {
|
|
41
|
+
baseURL: "http://localhost:4200"
|
|
42
|
+
},
|
|
43
|
+
xapi: {
|
|
44
|
+
url: "wss://xapi.id.test.unwallet.dev"
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
// src/unwallet.ts
|
|
49
|
+
var UnWallet = class _UnWallet {
|
|
50
|
+
constructor(config, unWalletConfig, ws) {
|
|
51
|
+
this.resolve = null;
|
|
52
|
+
this.reject = null;
|
|
53
|
+
this.config = config;
|
|
54
|
+
this.unWalletConfig = unWalletConfig;
|
|
55
|
+
this.ws = ws;
|
|
56
|
+
this.connectionID = "";
|
|
57
|
+
this.initPromiseArgs();
|
|
58
|
+
}
|
|
59
|
+
initPromiseArgs() {
|
|
60
|
+
this.resolve = () => {
|
|
61
|
+
};
|
|
62
|
+
this.reject = () => {
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
static init(config) {
|
|
66
|
+
return new Promise((resolve, reject) => {
|
|
67
|
+
if (config.env === void 0) {
|
|
68
|
+
config.env = "prod";
|
|
69
|
+
}
|
|
70
|
+
let unWalletConfig;
|
|
71
|
+
{
|
|
72
|
+
switch (config.env) {
|
|
73
|
+
case "prod":
|
|
74
|
+
unWalletConfig = UNWALLET_CONFIG_PROD;
|
|
75
|
+
break;
|
|
76
|
+
case "dev":
|
|
77
|
+
unWalletConfig = UNWALLET_CONFIG_DEV;
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
const ws = new WebSocket(unWalletConfig.xapi.url);
|
|
82
|
+
{
|
|
83
|
+
ws.onerror = () => {
|
|
84
|
+
reject("websocket connection failed");
|
|
85
|
+
};
|
|
86
|
+
ws.onopen = () => {
|
|
87
|
+
unWallet.getConnectionID();
|
|
88
|
+
};
|
|
89
|
+
ws.onmessage = (event) => {
|
|
90
|
+
const msg = JSON.parse(event.data);
|
|
91
|
+
if (msg.type === "connectionID") {
|
|
92
|
+
unWallet.connectionID = msg.value;
|
|
93
|
+
resolve(unWallet);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
unWallet.handleWSMessage(msg);
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
const unWallet = new _UnWallet(config, unWalletConfig, ws);
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
authorize(args) {
|
|
103
|
+
if (!args.responseMode) {
|
|
104
|
+
args.responseMode = "fragment";
|
|
105
|
+
}
|
|
106
|
+
let url = new URL(
|
|
107
|
+
`${this.unWalletConfig.frontend.baseURL}/${args.isVirtual === false ? "" : "v"}authorize`
|
|
108
|
+
);
|
|
109
|
+
{
|
|
110
|
+
url.searchParams.set("response_type", "id_token");
|
|
111
|
+
url.searchParams.set("response_mode", args.responseMode);
|
|
112
|
+
url.searchParams.set("client_id", this.config.clientID);
|
|
113
|
+
url.searchParams.set("scope", "openid");
|
|
114
|
+
url.searchParams.set("redirect_uri", args.redirectURL);
|
|
115
|
+
if (args.nonce !== void 0) {
|
|
116
|
+
url.searchParams.set("nonce", args.nonce);
|
|
117
|
+
}
|
|
118
|
+
if (args.chainID !== void 0) {
|
|
119
|
+
url.searchParams.set("chain_id", args.chainID.toString());
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
location.assign(url.toString());
|
|
123
|
+
}
|
|
124
|
+
sign(args) {
|
|
125
|
+
return new Promise((resolve, reject) => {
|
|
126
|
+
this.resolve = (sig) => {
|
|
127
|
+
resolve({
|
|
128
|
+
digest: import_ethers.ethers.sha256(import_ethers.ethers.toUtf8Bytes(args.message)),
|
|
129
|
+
signature: sig
|
|
130
|
+
});
|
|
131
|
+
};
|
|
132
|
+
this.reject = reject;
|
|
133
|
+
const url = new URL(`${this.unWalletConfig.frontend.baseURL}/x/sign`);
|
|
134
|
+
{
|
|
135
|
+
url.searchParams.set("connectionID", this.connectionID);
|
|
136
|
+
url.searchParams.set("clientID", this.config.clientID);
|
|
137
|
+
url.searchParams.set("message", args.message);
|
|
138
|
+
url.searchParams.set("ticketToken", args.ticketToken);
|
|
139
|
+
}
|
|
140
|
+
this.openWindow(url);
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
sendTransaction(args) {
|
|
144
|
+
return new Promise((resolve, reject) => {
|
|
145
|
+
if (args.value === void 0 && args.data === void 0) {
|
|
146
|
+
throw new Error("either value or data required");
|
|
147
|
+
}
|
|
148
|
+
this.resolve = (txID) => {
|
|
149
|
+
resolve({ transactionID: txID });
|
|
150
|
+
};
|
|
151
|
+
this.reject = reject;
|
|
152
|
+
const url = new URL(
|
|
153
|
+
`${this.unWalletConfig.frontend.baseURL}/x/sendTransaction`
|
|
154
|
+
);
|
|
155
|
+
{
|
|
156
|
+
url.searchParams.set("connectionID", this.connectionID);
|
|
157
|
+
url.searchParams.set("clientID", this.config.clientID);
|
|
158
|
+
url.searchParams.set("chainID", args.chainID.toString());
|
|
159
|
+
url.searchParams.set("toAddress", args.toAddress);
|
|
160
|
+
url.searchParams.set(
|
|
161
|
+
"value",
|
|
162
|
+
args.value !== void 0 ? args.value : "0x0"
|
|
163
|
+
);
|
|
164
|
+
url.searchParams.set(
|
|
165
|
+
"data",
|
|
166
|
+
args.data !== void 0 ? args.data : "0x"
|
|
167
|
+
);
|
|
168
|
+
url.searchParams.set("ticketToken", args.ticketToken);
|
|
169
|
+
}
|
|
170
|
+
this.openWindow(url);
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
getConnectionID() {
|
|
174
|
+
this.sendWSMessage({
|
|
175
|
+
action: "getConnectionID"
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
sendWSMessage(msg) {
|
|
179
|
+
this.ws.send(JSON.stringify(msg));
|
|
180
|
+
}
|
|
181
|
+
handleWSMessage(msg) {
|
|
182
|
+
switch (msg.type) {
|
|
183
|
+
case "signature":
|
|
184
|
+
this.resolve(msg.value);
|
|
185
|
+
break;
|
|
186
|
+
case "transactionID":
|
|
187
|
+
this.resolve(msg.value);
|
|
188
|
+
break;
|
|
189
|
+
case "error":
|
|
190
|
+
switch (msg.value) {
|
|
191
|
+
case "rejected":
|
|
192
|
+
this.reject("canceled");
|
|
193
|
+
break;
|
|
194
|
+
default:
|
|
195
|
+
throw new Error(msg.value);
|
|
196
|
+
}
|
|
197
|
+
break;
|
|
198
|
+
default:
|
|
199
|
+
throw new Error(`unexpected message type: ${msg.type}`);
|
|
200
|
+
}
|
|
201
|
+
this.initPromiseArgs();
|
|
202
|
+
}
|
|
203
|
+
openWindow(url) {
|
|
204
|
+
const width = screen.width / 2;
|
|
205
|
+
const height = screen.height;
|
|
206
|
+
const left = screen.width / 4;
|
|
207
|
+
const top = 0;
|
|
208
|
+
window.open(
|
|
209
|
+
url.toString(),
|
|
210
|
+
"_blank",
|
|
211
|
+
`width=${width},height=${height},left=${left},top=${top}`
|
|
212
|
+
);
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
216
|
+
0 && (module.exports = {
|
|
217
|
+
UnWallet
|
|
218
|
+
});
|
|
@@ -1,59 +1,65 @@
|
|
|
1
|
+
// src/unwallet.ts
|
|
1
2
|
import { ethers } from "ethers";
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
4
|
+
// src/consts.ts
|
|
5
|
+
var UNWALLET_CONFIG_PROD = {
|
|
6
|
+
frontend: {
|
|
7
|
+
baseURL: "https://id.unwallet.world"
|
|
8
|
+
},
|
|
9
|
+
xapi: {
|
|
10
|
+
url: "wss://xapi.id.unwallet.world"
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
var UNWALLET_CONFIG_DEV = {
|
|
14
|
+
frontend: {
|
|
15
|
+
baseURL: "http://localhost:4200"
|
|
16
|
+
},
|
|
17
|
+
xapi: {
|
|
18
|
+
url: "wss://xapi.id.test.unwallet.dev"
|
|
19
|
+
}
|
|
20
|
+
};
|
|
20
21
|
|
|
21
|
-
|
|
22
|
+
// src/unwallet.ts
|
|
23
|
+
var UnWallet = class _UnWallet {
|
|
24
|
+
constructor(config, unWalletConfig, ws) {
|
|
25
|
+
this.resolve = null;
|
|
26
|
+
this.reject = null;
|
|
22
27
|
this.config = config;
|
|
23
28
|
this.unWalletConfig = unWalletConfig;
|
|
24
|
-
|
|
25
29
|
this.ws = ws;
|
|
26
30
|
this.connectionID = "";
|
|
27
|
-
|
|
28
31
|
this.initPromiseArgs();
|
|
29
32
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
this.reject = (
|
|
33
|
+
initPromiseArgs() {
|
|
34
|
+
this.resolve = () => {
|
|
35
|
+
};
|
|
36
|
+
this.reject = () => {
|
|
37
|
+
};
|
|
34
38
|
}
|
|
35
|
-
|
|
36
|
-
public static init(config: Config): Promise<UnWallet> {
|
|
39
|
+
static init(config) {
|
|
37
40
|
return new Promise((resolve, reject) => {
|
|
38
|
-
if (config.env ===
|
|
41
|
+
if (config.env === void 0) {
|
|
39
42
|
config.env = "prod";
|
|
40
43
|
}
|
|
41
|
-
|
|
42
|
-
|
|
44
|
+
let unWalletConfig;
|
|
45
|
+
{
|
|
46
|
+
switch (config.env) {
|
|
47
|
+
case "prod":
|
|
48
|
+
unWalletConfig = UNWALLET_CONFIG_PROD;
|
|
49
|
+
break;
|
|
50
|
+
case "dev":
|
|
51
|
+
unWalletConfig = UNWALLET_CONFIG_DEV;
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
43
54
|
}
|
|
44
|
-
|
|
45
|
-
const unWalletConfig = unWalletConfigs[config.env];
|
|
46
|
-
|
|
47
55
|
const ws = new WebSocket(unWalletConfig.xapi.url);
|
|
48
56
|
{
|
|
49
|
-
ws.onerror = (
|
|
57
|
+
ws.onerror = () => {
|
|
50
58
|
reject("websocket connection failed");
|
|
51
59
|
};
|
|
52
|
-
|
|
53
|
-
ws.onopen = (event) => {
|
|
60
|
+
ws.onopen = () => {
|
|
54
61
|
unWallet.getConnectionID();
|
|
55
62
|
};
|
|
56
|
-
|
|
57
63
|
ws.onmessage = (event) => {
|
|
58
64
|
const msg = JSON.parse(event.data);
|
|
59
65
|
if (msg.type === "connectionID") {
|
|
@@ -61,31 +67,18 @@ export class UnWallet {
|
|
|
61
67
|
resolve(unWallet);
|
|
62
68
|
return;
|
|
63
69
|
}
|
|
64
|
-
|
|
65
70
|
unWallet.handleWSMessage(msg);
|
|
66
71
|
};
|
|
67
72
|
}
|
|
68
|
-
|
|
69
|
-
// should be run after ws setup
|
|
70
|
-
const unWallet = new UnWallet(config, unWalletConfig, ws);
|
|
73
|
+
const unWallet = new _UnWallet(config, unWalletConfig, ws);
|
|
71
74
|
});
|
|
72
75
|
}
|
|
73
|
-
|
|
74
|
-
public authorize(args: {
|
|
75
|
-
responseMode?: string;
|
|
76
|
-
redirectURL: string;
|
|
77
|
-
nonce?: string;
|
|
78
|
-
isVirtual?: boolean;
|
|
79
|
-
chainID?: number;
|
|
80
|
-
}): void {
|
|
76
|
+
authorize(args) {
|
|
81
77
|
if (!args.responseMode) {
|
|
82
78
|
args.responseMode = "fragment";
|
|
83
79
|
}
|
|
84
|
-
|
|
85
80
|
let url = new URL(
|
|
86
|
-
`${this.unWalletConfig.frontend.baseURL}/${
|
|
87
|
-
args.isVirtual === false ? "" : "v"
|
|
88
|
-
}authorize`
|
|
81
|
+
`${this.unWalletConfig.frontend.baseURL}/${args.isVirtual === false ? "" : "v"}authorize`
|
|
89
82
|
);
|
|
90
83
|
{
|
|
91
84
|
url.searchParams.set("response_type", "id_token");
|
|
@@ -93,56 +86,43 @@ export class UnWallet {
|
|
|
93
86
|
url.searchParams.set("client_id", this.config.clientID);
|
|
94
87
|
url.searchParams.set("scope", "openid");
|
|
95
88
|
url.searchParams.set("redirect_uri", args.redirectURL);
|
|
96
|
-
if (args.nonce !==
|
|
89
|
+
if (args.nonce !== void 0) {
|
|
97
90
|
url.searchParams.set("nonce", args.nonce);
|
|
98
91
|
}
|
|
99
|
-
if (args.chainID !==
|
|
92
|
+
if (args.chainID !== void 0) {
|
|
100
93
|
url.searchParams.set("chain_id", args.chainID.toString());
|
|
101
94
|
}
|
|
102
95
|
}
|
|
103
|
-
|
|
104
96
|
location.assign(url.toString());
|
|
105
97
|
}
|
|
106
|
-
|
|
107
|
-
public sign(args: { message: string; ticket: string }): Promise<SignResult> {
|
|
98
|
+
sign(args) {
|
|
108
99
|
return new Promise((resolve, reject) => {
|
|
109
|
-
this.resolve = (sig
|
|
100
|
+
this.resolve = (sig) => {
|
|
110
101
|
resolve({
|
|
111
102
|
digest: ethers.sha256(ethers.toUtf8Bytes(args.message)),
|
|
112
|
-
signature: sig
|
|
103
|
+
signature: sig
|
|
113
104
|
});
|
|
114
105
|
};
|
|
115
106
|
this.reject = reject;
|
|
116
|
-
|
|
117
107
|
const url = new URL(`${this.unWalletConfig.frontend.baseURL}/x/sign`);
|
|
118
108
|
{
|
|
119
109
|
url.searchParams.set("connectionID", this.connectionID);
|
|
120
110
|
url.searchParams.set("clientID", this.config.clientID);
|
|
121
111
|
url.searchParams.set("message", args.message);
|
|
122
|
-
url.searchParams.set("
|
|
112
|
+
url.searchParams.set("ticketToken", args.ticketToken);
|
|
123
113
|
}
|
|
124
|
-
|
|
125
114
|
this.openWindow(url);
|
|
126
115
|
});
|
|
127
116
|
}
|
|
128
|
-
|
|
129
|
-
public sendTransaction(args: {
|
|
130
|
-
chainID: number;
|
|
131
|
-
toAddress: string;
|
|
132
|
-
value?: string;
|
|
133
|
-
data?: string;
|
|
134
|
-
ticket: string;
|
|
135
|
-
}): Promise<SendTransactionResult> {
|
|
117
|
+
sendTransaction(args) {
|
|
136
118
|
return new Promise((resolve, reject) => {
|
|
137
|
-
if (args.value ===
|
|
119
|
+
if (args.value === void 0 && args.data === void 0) {
|
|
138
120
|
throw new Error("either value or data required");
|
|
139
121
|
}
|
|
140
|
-
|
|
141
|
-
this.resolve = (txID: string) => {
|
|
122
|
+
this.resolve = (txID) => {
|
|
142
123
|
resolve({ transactionID: txID });
|
|
143
124
|
};
|
|
144
125
|
this.reject = reject;
|
|
145
|
-
|
|
146
126
|
const url = new URL(
|
|
147
127
|
`${this.unWalletConfig.frontend.baseURL}/x/sendTransaction`
|
|
148
128
|
);
|
|
@@ -153,67 +133,59 @@ export class UnWallet {
|
|
|
153
133
|
url.searchParams.set("toAddress", args.toAddress);
|
|
154
134
|
url.searchParams.set(
|
|
155
135
|
"value",
|
|
156
|
-
args.value !==
|
|
136
|
+
args.value !== void 0 ? args.value : "0x0"
|
|
157
137
|
);
|
|
158
138
|
url.searchParams.set(
|
|
159
139
|
"data",
|
|
160
|
-
args.data !==
|
|
140
|
+
args.data !== void 0 ? args.data : "0x"
|
|
161
141
|
);
|
|
162
|
-
url.searchParams.set("
|
|
142
|
+
url.searchParams.set("ticketToken", args.ticketToken);
|
|
163
143
|
}
|
|
164
|
-
|
|
165
144
|
this.openWindow(url);
|
|
166
145
|
});
|
|
167
146
|
}
|
|
168
|
-
|
|
169
|
-
private getConnectionID(): void {
|
|
147
|
+
getConnectionID() {
|
|
170
148
|
this.sendWSMessage({
|
|
171
|
-
action: "getConnectionID"
|
|
149
|
+
action: "getConnectionID"
|
|
172
150
|
});
|
|
173
151
|
}
|
|
174
|
-
|
|
175
|
-
private sendWSMessage(msg: any): void {
|
|
152
|
+
sendWSMessage(msg) {
|
|
176
153
|
this.ws.send(JSON.stringify(msg));
|
|
177
154
|
}
|
|
178
|
-
|
|
179
|
-
private handleWSMessage(msg: any): void {
|
|
155
|
+
handleWSMessage(msg) {
|
|
180
156
|
switch (msg.type) {
|
|
181
157
|
case "signature":
|
|
182
|
-
this.resolve
|
|
158
|
+
this.resolve(msg.value);
|
|
183
159
|
break;
|
|
184
|
-
|
|
185
160
|
case "transactionID":
|
|
186
|
-
this.resolve
|
|
161
|
+
this.resolve(msg.value);
|
|
187
162
|
break;
|
|
188
|
-
|
|
189
163
|
case "error":
|
|
190
164
|
switch (msg.value) {
|
|
191
165
|
case "rejected":
|
|
192
|
-
this.reject
|
|
166
|
+
this.reject("canceled");
|
|
193
167
|
break;
|
|
194
|
-
|
|
195
168
|
default:
|
|
196
169
|
throw new Error(msg.value);
|
|
197
170
|
}
|
|
198
171
|
break;
|
|
199
|
-
|
|
200
172
|
default:
|
|
201
173
|
throw new Error(`unexpected message type: ${msg.type}`);
|
|
202
174
|
}
|
|
203
|
-
|
|
204
175
|
this.initPromiseArgs();
|
|
205
176
|
}
|
|
206
|
-
|
|
207
|
-
private openWindow(url: URL): void {
|
|
177
|
+
openWindow(url) {
|
|
208
178
|
const width = screen.width / 2;
|
|
209
179
|
const height = screen.height;
|
|
210
180
|
const left = screen.width / 4;
|
|
211
181
|
const top = 0;
|
|
212
|
-
|
|
213
182
|
window.open(
|
|
214
183
|
url.toString(),
|
|
215
184
|
"_blank",
|
|
216
185
|
`width=${width},height=${height},left=${left},top=${top}`
|
|
217
186
|
);
|
|
218
187
|
}
|
|
219
|
-
}
|
|
188
|
+
};
|
|
189
|
+
export {
|
|
190
|
+
UnWallet
|
|
191
|
+
};
|
package/package.json
CHANGED
|
@@ -1,32 +1,48 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "unwallet-client-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"description": "unWallet client-side SDK",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "SIVIRA",
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
"files": [
|
|
8
|
+
"dist"
|
|
9
|
+
],
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"require": {
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"default": "./dist/index.js"
|
|
15
|
+
},
|
|
16
|
+
"import": {
|
|
17
|
+
"types": "./dist/index.d.mts",
|
|
18
|
+
"default": "./dist/index.mjs"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
11
21
|
},
|
|
22
|
+
"main": "dist/index.js",
|
|
23
|
+
"module": "dist/index.mjs",
|
|
24
|
+
"types": "dist/index.d.ts",
|
|
25
|
+
"repository": "github:SIVIRA/unwallet-client-sdk-js",
|
|
12
26
|
"config": {
|
|
13
27
|
"commitizen": {
|
|
14
28
|
"path": "./node_modules/cz-conventional-changelog"
|
|
15
29
|
}
|
|
16
30
|
},
|
|
17
31
|
"dependencies": {
|
|
18
|
-
"ethers": "6.
|
|
32
|
+
"ethers": "6.14.0"
|
|
19
33
|
},
|
|
20
34
|
"devDependencies": {
|
|
21
|
-
"@commitlint/cli": "19.
|
|
22
|
-
"@commitlint/config-conventional": "19.
|
|
23
|
-
"
|
|
35
|
+
"@commitlint/cli": "19.8.1",
|
|
36
|
+
"@commitlint/config-conventional": "19.8.1",
|
|
37
|
+
"@commitlint/types": "19.8.1",
|
|
38
|
+
"@tsconfig/strictest": "2.0.5",
|
|
39
|
+
"commitizen": "4.3.1",
|
|
24
40
|
"cz-conventional-changelog": "3.3.0",
|
|
25
|
-
"husky": "9.1.
|
|
26
|
-
"
|
|
41
|
+
"husky": "9.1.7",
|
|
42
|
+
"tsup": "8.4.0"
|
|
27
43
|
},
|
|
28
44
|
"scripts": {
|
|
29
|
-
"build": "
|
|
45
|
+
"build": "tsup",
|
|
30
46
|
"commit": "cz"
|
|
31
47
|
}
|
|
32
48
|
}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
name: publish
|
|
2
|
-
on:
|
|
3
|
-
release:
|
|
4
|
-
types: [published]
|
|
5
|
-
jobs:
|
|
6
|
-
publish:
|
|
7
|
-
runs-on: ubuntu-latest
|
|
8
|
-
steps:
|
|
9
|
-
- name: Checkout
|
|
10
|
-
uses: actions/checkout@v4
|
|
11
|
-
- name: Set up pnpm
|
|
12
|
-
uses: pnpm/action-setup@v4
|
|
13
|
-
with:
|
|
14
|
-
version: 8
|
|
15
|
-
- name: Prepare to cache dependencies
|
|
16
|
-
shell: bash
|
|
17
|
-
run: |
|
|
18
|
-
echo "PNPM_STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
|
|
19
|
-
- name: Cache dependencies
|
|
20
|
-
uses: actions/cache@v4
|
|
21
|
-
with:
|
|
22
|
-
path: ${{ env.PNPM_STORE_PATH }}
|
|
23
|
-
key: pnpm-store-${{ hashFiles('pnpm-lock.yaml') }}
|
|
24
|
-
- name: Install dependencies
|
|
25
|
-
run: pnpm install
|
|
26
|
-
- name: Build
|
|
27
|
-
run: pnpm build
|
|
28
|
-
- name: Prepare to publish
|
|
29
|
-
run: pnpm config set '//registry.npmjs.org/:_authToken' "${{ secrets.NPM_TOKEN }}"
|
|
30
|
-
- name: Publish
|
|
31
|
-
run: pnpm publish --access public --no-git-checks
|
package/.husky/commit-msg
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
pnpm --no -- commitlint --edit $1
|
package/commitlint.config.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
module.exports = { extends: ["@commitlint/config-conventional"] };
|
package/dist/configs.d.ts
DELETED
package/dist/configs.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"configs.d.ts","sourceRoot":"","sources":["../src/configs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,eAAO,MAAM,eAAe,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAAA;CAiB5D,CAAC"}
|
package/dist/configs.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.unWalletConfigs = void 0;
|
|
4
|
-
exports.unWalletConfigs = {
|
|
5
|
-
prod: {
|
|
6
|
-
frontend: {
|
|
7
|
-
baseURL: "https://id.unwallet.world",
|
|
8
|
-
},
|
|
9
|
-
xapi: {
|
|
10
|
-
url: "wss://xapi.id.unwallet.world",
|
|
11
|
-
},
|
|
12
|
-
},
|
|
13
|
-
dev: {
|
|
14
|
-
frontend: {
|
|
15
|
-
baseURL: "http://localhost:4200",
|
|
16
|
-
},
|
|
17
|
-
xapi: {
|
|
18
|
-
url: "wss://xapi.id.test.unwallet.dev",
|
|
19
|
-
},
|
|
20
|
-
},
|
|
21
|
-
};
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/types.d.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
export interface Config {
|
|
2
|
-
clientID: string;
|
|
3
|
-
env?: string;
|
|
4
|
-
}
|
|
5
|
-
export interface UnWalletConfig {
|
|
6
|
-
frontend: UnWalletFrontendConfig;
|
|
7
|
-
xapi: UnWalletXAPIConfig;
|
|
8
|
-
}
|
|
9
|
-
export interface UnWalletFrontendConfig {
|
|
10
|
-
baseURL: string;
|
|
11
|
-
}
|
|
12
|
-
export interface UnWalletXAPIConfig {
|
|
13
|
-
url: string;
|
|
14
|
-
}
|
|
15
|
-
export interface SignResult {
|
|
16
|
-
digest: string;
|
|
17
|
-
signature: string;
|
|
18
|
-
}
|
|
19
|
-
export interface SendTransactionResult {
|
|
20
|
-
transactionID: string;
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,sBAAsB,CAAC;IACjC,IAAI,EAAE,kBAAkB,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAC;CACvB"}
|
package/dist/types.js
DELETED
package/dist/unwallet.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"unwallet.d.ts","sourceRoot":"","sources":["../src/unwallet.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,MAAM,EACN,cAAc,EACd,UAAU,EACV,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAEjB,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,cAAc,CAAiB;IAEvC,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,YAAY,CAAS;IAE7B,OAAO,CAAC,OAAO,CAAwC;IACvD,OAAO,CAAC,MAAM,CAAwC;gBAE1C,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,EAAE,EAAE,SAAS;IAUzE,OAAO,CAAC,eAAe;WAKT,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAsC9C,SAAS,CAAC,IAAI,EAAE;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,IAAI;IA2BD,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,CAAC;IAsBpE,eAAe,CAAC,IAAI,EAAE;QAC3B,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAkClC,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,eAAe;IA4BvB,OAAO,CAAC,UAAU;CAYnB"}
|
package/dist/unwallet.js
DELETED
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.UnWallet = void 0;
|
|
4
|
-
const ethers_1 = require("ethers");
|
|
5
|
-
const configs_1 = require("./configs");
|
|
6
|
-
class UnWallet {
|
|
7
|
-
constructor(config, unWalletConfig, ws) {
|
|
8
|
-
this.resolve = null;
|
|
9
|
-
this.reject = null;
|
|
10
|
-
this.config = config;
|
|
11
|
-
this.unWalletConfig = unWalletConfig;
|
|
12
|
-
this.ws = ws;
|
|
13
|
-
this.connectionID = "";
|
|
14
|
-
this.initPromiseArgs();
|
|
15
|
-
}
|
|
16
|
-
initPromiseArgs() {
|
|
17
|
-
this.resolve = (result) => { };
|
|
18
|
-
this.reject = (reason) => { };
|
|
19
|
-
}
|
|
20
|
-
static init(config) {
|
|
21
|
-
return new Promise((resolve, reject) => {
|
|
22
|
-
if (config.env === undefined) {
|
|
23
|
-
config.env = "prod";
|
|
24
|
-
}
|
|
25
|
-
if (!(config.env in configs_1.unWalletConfigs)) {
|
|
26
|
-
throw Error("invalid env");
|
|
27
|
-
}
|
|
28
|
-
const unWalletConfig = configs_1.unWalletConfigs[config.env];
|
|
29
|
-
const ws = new WebSocket(unWalletConfig.xapi.url);
|
|
30
|
-
{
|
|
31
|
-
ws.onerror = (event) => {
|
|
32
|
-
reject("websocket connection failed");
|
|
33
|
-
};
|
|
34
|
-
ws.onopen = (event) => {
|
|
35
|
-
unWallet.getConnectionID();
|
|
36
|
-
};
|
|
37
|
-
ws.onmessage = (event) => {
|
|
38
|
-
const msg = JSON.parse(event.data);
|
|
39
|
-
if (msg.type === "connectionID") {
|
|
40
|
-
unWallet.connectionID = msg.value;
|
|
41
|
-
resolve(unWallet);
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
unWallet.handleWSMessage(msg);
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
// should be run after ws setup
|
|
48
|
-
const unWallet = new UnWallet(config, unWalletConfig, ws);
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
authorize(args) {
|
|
52
|
-
if (!args.responseMode) {
|
|
53
|
-
args.responseMode = "fragment";
|
|
54
|
-
}
|
|
55
|
-
let url = new URL(`${this.unWalletConfig.frontend.baseURL}/${args.isVirtual === false ? "" : "v"}authorize`);
|
|
56
|
-
{
|
|
57
|
-
url.searchParams.set("response_type", "id_token");
|
|
58
|
-
url.searchParams.set("response_mode", args.responseMode);
|
|
59
|
-
url.searchParams.set("client_id", this.config.clientID);
|
|
60
|
-
url.searchParams.set("scope", "openid");
|
|
61
|
-
url.searchParams.set("redirect_uri", args.redirectURL);
|
|
62
|
-
if (args.nonce !== undefined) {
|
|
63
|
-
url.searchParams.set("nonce", args.nonce);
|
|
64
|
-
}
|
|
65
|
-
if (args.chainID !== undefined) {
|
|
66
|
-
url.searchParams.set("chain_id", args.chainID.toString());
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
location.assign(url.toString());
|
|
70
|
-
}
|
|
71
|
-
sign(args) {
|
|
72
|
-
return new Promise((resolve, reject) => {
|
|
73
|
-
this.resolve = (sig) => {
|
|
74
|
-
resolve({
|
|
75
|
-
digest: ethers_1.ethers.sha256(ethers_1.ethers.toUtf8Bytes(args.message)),
|
|
76
|
-
signature: sig,
|
|
77
|
-
});
|
|
78
|
-
};
|
|
79
|
-
this.reject = reject;
|
|
80
|
-
const url = new URL(`${this.unWalletConfig.frontend.baseURL}/x/sign`);
|
|
81
|
-
{
|
|
82
|
-
url.searchParams.set("connectionID", this.connectionID);
|
|
83
|
-
url.searchParams.set("clientID", this.config.clientID);
|
|
84
|
-
url.searchParams.set("message", args.message);
|
|
85
|
-
url.searchParams.set("ticket", args.ticket);
|
|
86
|
-
}
|
|
87
|
-
this.openWindow(url);
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
sendTransaction(args) {
|
|
91
|
-
return new Promise((resolve, reject) => {
|
|
92
|
-
if (args.value === undefined && args.data === undefined) {
|
|
93
|
-
throw new Error("either value or data required");
|
|
94
|
-
}
|
|
95
|
-
this.resolve = (txID) => {
|
|
96
|
-
resolve({ transactionID: txID });
|
|
97
|
-
};
|
|
98
|
-
this.reject = reject;
|
|
99
|
-
const url = new URL(`${this.unWalletConfig.frontend.baseURL}/x/sendTransaction`);
|
|
100
|
-
{
|
|
101
|
-
url.searchParams.set("connectionID", this.connectionID);
|
|
102
|
-
url.searchParams.set("clientID", this.config.clientID);
|
|
103
|
-
url.searchParams.set("chainID", args.chainID.toString());
|
|
104
|
-
url.searchParams.set("toAddress", args.toAddress);
|
|
105
|
-
url.searchParams.set("value", args.value !== undefined ? args.value : "0x0");
|
|
106
|
-
url.searchParams.set("data", args.data !== undefined ? args.data : "0x");
|
|
107
|
-
url.searchParams.set("ticket", args.ticket);
|
|
108
|
-
}
|
|
109
|
-
this.openWindow(url);
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
getConnectionID() {
|
|
113
|
-
this.sendWSMessage({
|
|
114
|
-
action: "getConnectionID",
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
sendWSMessage(msg) {
|
|
118
|
-
this.ws.send(JSON.stringify(msg));
|
|
119
|
-
}
|
|
120
|
-
handleWSMessage(msg) {
|
|
121
|
-
switch (msg.type) {
|
|
122
|
-
case "signature":
|
|
123
|
-
this.resolve(msg.value);
|
|
124
|
-
break;
|
|
125
|
-
case "transactionID":
|
|
126
|
-
this.resolve(msg.value);
|
|
127
|
-
break;
|
|
128
|
-
case "error":
|
|
129
|
-
switch (msg.value) {
|
|
130
|
-
case "rejected":
|
|
131
|
-
this.reject("canceled");
|
|
132
|
-
break;
|
|
133
|
-
default:
|
|
134
|
-
throw new Error(msg.value);
|
|
135
|
-
}
|
|
136
|
-
break;
|
|
137
|
-
default:
|
|
138
|
-
throw new Error(`unexpected message type: ${msg.type}`);
|
|
139
|
-
}
|
|
140
|
-
this.initPromiseArgs();
|
|
141
|
-
}
|
|
142
|
-
openWindow(url) {
|
|
143
|
-
const width = screen.width / 2;
|
|
144
|
-
const height = screen.height;
|
|
145
|
-
const left = screen.width / 4;
|
|
146
|
-
const top = 0;
|
|
147
|
-
window.open(url.toString(), "_blank", `width=${width},height=${height},left=${left},top=${top}`);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
exports.UnWallet = UnWallet;
|
package/docs/functions.md
DELETED
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
# Functions
|
|
2
|
-
|
|
3
|
-
> **Note**\
|
|
4
|
-
> You need to register your application to unWallet Enterprise in advance.
|
|
5
|
-
|
|
6
|
-
## authorize
|
|
7
|
-
|
|
8
|
-
`authorize` requests a user's ID token in accordance with OpenID Connect (response_type: id_token).
|
|
9
|
-
|
|
10
|
-
### Example call
|
|
11
|
-
|
|
12
|
-
```js
|
|
13
|
-
unWallet.authorize({
|
|
14
|
-
redirectURL: "http://your.app.com/callback",
|
|
15
|
-
nonce: "ARBITRARY_STRING_TO_PREVENT_REPLAY_ATTACKS",
|
|
16
|
-
});
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
## sign
|
|
20
|
-
|
|
21
|
-
`sign` requests a signature for a message.
|
|
22
|
-
|
|
23
|
-
### Example call
|
|
24
|
-
|
|
25
|
-
```js
|
|
26
|
-
const result = await unWallet.sign({
|
|
27
|
-
message: "ARBITRARY_MESSAGE",
|
|
28
|
-
});
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
### Example result
|
|
32
|
-
|
|
33
|
-
```json
|
|
34
|
-
{
|
|
35
|
-
"digest": "0xc71ed5b0509d8da72abc9527ed72530743822e8d9b33f9695b42e20ece78c09b",
|
|
36
|
-
"signature": "0xd94388b5d51395c46b00f6197de318ba275cd7f9c5e4dccf2059373a4b41b3975403852e2587f262375e6d2b3318380dcd95535ecebec7e8c7ebbbefdcf22a371b"
|
|
37
|
-
}
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
### How to verify a signature
|
|
41
|
-
|
|
42
|
-
See also [ERC1271](https://eips.ethereum.org/EIPS/eip-1271).
|
|
43
|
-
|
|
44
|
-
```js
|
|
45
|
-
const ethers = require("ethers");
|
|
46
|
-
|
|
47
|
-
(async () => {
|
|
48
|
-
const contract = new ethers.Contract(
|
|
49
|
-
"<CONTRACT_WALLET_ADDRESS>",
|
|
50
|
-
[
|
|
51
|
-
{
|
|
52
|
-
inputs: [
|
|
53
|
-
{
|
|
54
|
-
internalType: "bytes32",
|
|
55
|
-
name: "hash",
|
|
56
|
-
type: "bytes32",
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
internalType: "bytes",
|
|
60
|
-
name: "signature",
|
|
61
|
-
type: "bytes",
|
|
62
|
-
},
|
|
63
|
-
],
|
|
64
|
-
name: "isValidSignature",
|
|
65
|
-
outputs: [
|
|
66
|
-
{
|
|
67
|
-
internalType: "bytes4",
|
|
68
|
-
name: "",
|
|
69
|
-
type: "bytes4",
|
|
70
|
-
},
|
|
71
|
-
],
|
|
72
|
-
stateMutability: "view",
|
|
73
|
-
type: "function",
|
|
74
|
-
},
|
|
75
|
-
],
|
|
76
|
-
new ethers.providers.JsonRpcProvider("<YOUR_RPC_URL>")
|
|
77
|
-
);
|
|
78
|
-
|
|
79
|
-
try {
|
|
80
|
-
await contract.isValidSignature("<DIGEST>", "<SIGNATURE>");
|
|
81
|
-
} catch (e) {
|
|
82
|
-
console.log("invalid");
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
console.log("valid");
|
|
87
|
-
})();
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
## sendTransaction
|
|
91
|
-
|
|
92
|
-
`sendTransaction` requests to send a transaction.
|
|
93
|
-
|
|
94
|
-
### Example call
|
|
95
|
-
|
|
96
|
-
> **Note**\
|
|
97
|
-
> You need to issue a transaction ticket via unWallet Enterprise API in advance.
|
|
98
|
-
|
|
99
|
-
```js
|
|
100
|
-
const result = await unWallet.sendTransaction({
|
|
101
|
-
chainID: 80002,
|
|
102
|
-
toAddress: "0xC2C747E0F7004F9E8817Db2ca4997657a7746928",
|
|
103
|
-
value: "0xde0b6b3a7640000", // the amount of native token to be transferred
|
|
104
|
-
ticket:
|
|
105
|
-
"eyJhbGciOiJFUzI1NiIsImtpZCI6IjEiLCJ0eXAiOiJKV1QifQ.eyJhcGlDbGllbnRJRCI6IlFWQkpRMnhwWlc1ME9qRT0iLCJjaGFpbklEIjo4MDAwMiwiY2xpZW50SUQiOiJDWHFsSnBLWWlYTHpWdXEzbVU0OVVZNVVGbjJOM1VSVnQiLCJleHAiOjE3MTk0OTM3NzEsImlhdCI6MTcxOTQ5MzcxMSwiaWQiOiJkYjA1OTQ1MDI4MDQ4MWQ1ZjMxOWNlZWIwZTJkMjQ4MTNkNjc4OTdlODA1MGU1YTVmNWIyZWJkNzUxYmMwM2Y5IiwicGF5bWVudFR5cGUiOiJ1c2VyIiwidHJhbnNhY3Rpb25EYXRhIjoiMHgiLCJ0cmFuc2FjdGlvbkZyb21BZGRyZXNzIjoiMHgxMDVmNDMxMGIzRDE4RTNEN0YxOWZEN0RGNDg4NzM1YTE1MGVlZDJhIiwidHJhbnNhY3Rpb25Ub0FkZHJlc3MiOiIweEMyQzc0N0UwRjcwMDRGOUU4ODE3RGIyY2E0OTk3NjU3YTc3NDY5MjgiLCJ0cmFuc2FjdGlvblZhbHVlIjoiMHhkZTBiNmIzYTc2NDAwMDAifQ.LIzAe8Ar3c0KNWf0bczVUDodMj6pwwWngESC7AaWI9PHbmeQ6q3zsXgFJm__pi1mLJ79fHZfI0DF4fjreUDZtQ",
|
|
106
|
-
});
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
### Example result
|
|
110
|
-
|
|
111
|
-
```json
|
|
112
|
-
{
|
|
113
|
-
"transactionID": "UXVldWVkVHJhbnNhY3Rpb246MQ=="
|
|
114
|
-
}
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
> **Note**\
|
|
118
|
-
> You can get the transaction detail via unWallet Enterprise API.
|
package/src/configs.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { UnWalletConfig } from "./types";
|
|
2
|
-
|
|
3
|
-
export const unWalletConfigs: { [env: string]: UnWalletConfig } = {
|
|
4
|
-
prod: {
|
|
5
|
-
frontend: {
|
|
6
|
-
baseURL: "https://id.unwallet.world",
|
|
7
|
-
},
|
|
8
|
-
xapi: {
|
|
9
|
-
url: "wss://xapi.id.unwallet.world",
|
|
10
|
-
},
|
|
11
|
-
},
|
|
12
|
-
dev: {
|
|
13
|
-
frontend: {
|
|
14
|
-
baseURL: "http://localhost:4200",
|
|
15
|
-
},
|
|
16
|
-
xapi: {
|
|
17
|
-
url: "wss://xapi.id.test.unwallet.dev",
|
|
18
|
-
},
|
|
19
|
-
},
|
|
20
|
-
};
|
package/src/index.ts
DELETED
package/src/types.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
export interface Config {
|
|
2
|
-
clientID: string;
|
|
3
|
-
env?: string;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
export interface UnWalletConfig {
|
|
7
|
-
frontend: UnWalletFrontendConfig;
|
|
8
|
-
xapi: UnWalletXAPIConfig;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export interface UnWalletFrontendConfig {
|
|
12
|
-
baseURL: string;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export interface UnWalletXAPIConfig {
|
|
16
|
-
url: string;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export interface SignResult {
|
|
20
|
-
digest: string;
|
|
21
|
-
signature: string;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export interface SendTransactionResult {
|
|
25
|
-
transactionID: string;
|
|
26
|
-
}
|
package/tsconfig.json
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"declaration": true,
|
|
4
|
-
"declarationMap": true,
|
|
5
|
-
"forceConsistentCasingInFileNames": true,
|
|
6
|
-
"esModuleInterop": true,
|
|
7
|
-
"lib": ["dom", "es2015"],
|
|
8
|
-
"module": "commonjs",
|
|
9
|
-
"outDir": "./dist",
|
|
10
|
-
"skipLibCheck": true,
|
|
11
|
-
"strict": true,
|
|
12
|
-
"target": "es6"
|
|
13
|
-
},
|
|
14
|
-
"include": ["./src"]
|
|
15
|
-
}
|