unwallet-client-sdk 0.1.3 → 0.4.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 CHANGED
@@ -39,14 +39,55 @@ const sig = await unWallet.sign({
39
39
  });
40
40
  ```
41
41
 
42
+ #### Example return value
43
+
44
+ ```json
45
+ {
46
+ "digest": "0xc71ed5b0509d8da72abc9527ed72530743822e8d9b33f9695b42e20ece78c09b",
47
+ "signature": "0xd94388b5d51395c46b00f6197de318ba275cd7f9c5e4dccf2059373a4b41b3975403852e2587f262375e6d2b3318380dcd95535ecebec7e8c7ebbbefdcf22a371b"
48
+ }
49
+ ```
50
+
51
+ ### Requesting a signature for a transaction
52
+
53
+ ```js
54
+ const metaTx = await unWallet.signTransaction({
55
+ to: "0xB481148EB6A5f6b5b9Cc10cb0C8304B9B179A8e6", // the address the transaction is directed to
56
+ value: "0x0", // the MATIC value sent with this transaction (optional)
57
+ data: "0x...", // the hash of the invoked method signature and encoded parameters (optional)
58
+ });
59
+ ```
60
+
61
+ #### Example return value
62
+
63
+ ```json
64
+ {
65
+ "executor": "0x3ADBDCBa56d70Fc15Dcbe98901432cC07B2aAaeF",
66
+ "data": "0x...",
67
+ "signature": "0x19eb83842bc2d2c55567d4da63981ae9d4ce76ec567b591f18e18f4e030c4389331ba3ce0f1549331cb51710881320982b7b7a3632a7d81ca214690ecf3267c51c"
68
+ }
69
+ ```
70
+
71
+ To execute the transaction, call [POST /metaTransactions of unWallet Enterprise API](https://developers.ent.unwallet.world/ja/latest/unwallet-ent-api.html#post-metatransactions).
72
+
42
73
  ### Requesting a signature for a token transfer transaction
43
74
 
44
75
  ```js
45
76
  const metaTx = await unWallet.signTokenTransfer({
46
- id: 1, // token ID
47
- to: "0x0000000000000000000000000000000000000000", // destination address
77
+ id: 101, // token ID
78
+ to: "0xB481148EB6A5f6b5b9Cc10cb0C8304B9B179A8e6", // destination address
48
79
  amount: 1, // token amount
49
80
  });
50
81
  ```
51
82
 
83
+ #### Example return value
84
+
85
+ ```json
86
+ {
87
+ "executor": "0x3ADBDCBa56d70Fc15Dcbe98901432cC07B2aAaeF",
88
+ "data": "0x...",
89
+ "signature": "0x19eb83842bc2d2c55567d4da63981ae9d4ce76ec567b591f18e18f4e030c4389331ba3ce0f1549331cb51710881320982b7b7a3632a7d81ca214690ecf3267c51c"
90
+ }
91
+ ```
92
+
52
93
  To execute the transaction, call [POST /metaTransactions of unWallet Enterprise API](https://developers.ent.unwallet.world/ja/latest/unwallet-ent-api.html#post-metatransactions).
package/dist/types.d.ts CHANGED
@@ -7,6 +7,10 @@ export interface UnWalletConfig {
7
7
  authURL: string;
8
8
  wsAPIURL: string;
9
9
  }
10
+ export interface DigestAndSignature {
11
+ digest: string;
12
+ signature: string;
13
+ }
10
14
  export interface MetaTransaction {
11
15
  executor: string;
12
16
  data: string;
@@ -1 +1 @@
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,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB"}
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,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB"}
@@ -1,4 +1,4 @@
1
- import { Config, UnWalletConfig, MetaTransaction } from "./types";
1
+ import { Config, UnWalletConfig, DigestAndSignature, MetaTransaction } from "./types";
2
2
  export declare class UnWallet {
3
3
  private config;
4
4
  private unWalletConfig;
@@ -16,7 +16,12 @@ export declare class UnWallet {
16
16
  }): void;
17
17
  sign(args: {
18
18
  message: string;
19
- }): Promise<string>;
19
+ }): Promise<DigestAndSignature>;
20
+ signTransaction(args: {
21
+ to: string;
22
+ value?: string;
23
+ data?: string;
24
+ }): Promise<MetaTransaction>;
20
25
  signTokenTransfer(args: {
21
26
  id: number;
22
27
  to: string;
@@ -1 +1 @@
1
- {"version":3,"file":"unwallet.d.ts","sourceRoot":"","sources":["../src/unwallet.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAElE,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;IAiC9C,SAAS,CAAC,IAAI,EAAE;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;KACf,GAAG,IAAI;IAgBD,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAYhD,iBAAiB,CAAC,IAAI,EAAE;QAC7B,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,eAAe,CAAC;IAcrB,kBAAkB,CAAC,IAAI,EAAE;QAC9B,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,MAAM,CAAC;IAenB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,UAAU;CAYnB"}
1
+ {"version":3,"file":"unwallet.d.ts","sourceRoot":"","sources":["../src/unwallet.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,MAAM,EACN,cAAc,EACd,kBAAkB,EAClB,eAAe,EAChB,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;IAiC9C,SAAS,CAAC,IAAI,EAAE;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;KACf,GAAG,IAAI;IAgBD,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAmB5D,eAAe,CAAC,IAAI,EAAE;QAC3B,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC,eAAe,CAAC;IAcrB,iBAAiB,CAAC,IAAI,EAAE;QAC7B,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,eAAe,CAAC;IAgBrB,kBAAkB,CAAC,IAAI,EAAE;QAC9B,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBnB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,eAAe;IAgCvB,OAAO,CAAC,UAAU;CAYnB"}
package/dist/unwallet.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.UnWallet = void 0;
4
+ const ethers_1 = require("ethers");
4
5
  const configs_1 = require("./configs");
5
6
  class UnWallet {
6
7
  constructor(config, unWalletConfig, ws) {
@@ -35,7 +36,7 @@ class UnWallet {
35
36
  ws.onmessage = (event) => {
36
37
  const msg = JSON.parse(event.data);
37
38
  if (msg.type === "connectionID") {
38
- unWallet.connectionID = msg.data.value;
39
+ unWallet.connectionID = msg.value;
39
40
  resolve(unWallet);
40
41
  return;
41
42
  }
@@ -60,20 +61,38 @@ class UnWallet {
60
61
  }
61
62
  sign(args) {
62
63
  return new Promise((resolve, reject) => {
63
- this.resolve = resolve;
64
+ this.resolve = (sig) => {
65
+ resolve({
66
+ digest: ethers_1.ethers.utils.sha256(ethers_1.ethers.utils.toUtf8Bytes(args.message)),
67
+ signature: sig,
68
+ });
69
+ };
64
70
  this.reject = reject;
65
71
  const url = new URL(`${this.unWalletConfig.baseURL}/x/sign`);
66
72
  url.searchParams.set("connectionID", this.connectionID);
73
+ url.searchParams.set("clientID", this.config.clientID);
67
74
  url.searchParams.set("message", args.message);
68
75
  this.openWindow(url);
69
76
  });
70
77
  }
78
+ signTransaction(args) {
79
+ return new Promise((resolve, reject) => {
80
+ this.resolve = resolve;
81
+ this.reject = reject;
82
+ const url = new URL(`${this.unWalletConfig.baseURL}/x/signTransaction`);
83
+ url.searchParams.set("connectionID", this.connectionID);
84
+ url.searchParams.set("clientID", this.config.clientID);
85
+ url.searchParams.set("transaction", JSON.stringify(args));
86
+ this.openWindow(url);
87
+ });
88
+ }
71
89
  signTokenTransfer(args) {
72
90
  return new Promise((resolve, reject) => {
73
91
  this.resolve = resolve;
74
92
  this.reject = reject;
75
93
  const url = new URL(`${this.unWalletConfig.baseURL}/x/signTokenTransfer`);
76
94
  url.searchParams.set("connectionID", this.connectionID);
95
+ url.searchParams.set("clientID", this.config.clientID);
77
96
  url.searchParams.set("id", args.id.toString());
78
97
  url.searchParams.set("to", args.to);
79
98
  url.searchParams.set("amount", args.amount.toString());
@@ -86,6 +105,7 @@ class UnWallet {
86
105
  this.reject = reject;
87
106
  const url = new URL(`${this.unWalletConfig.baseURL}/x/createPresentation`);
88
107
  url.searchParams.set("connectionID", this.connectionID);
108
+ url.searchParams.set("clientID", this.config.clientID);
89
109
  url.searchParams.set("credential", args.credential);
90
110
  url.searchParams.set("challenge", args.challenge);
91
111
  this.openWindow(url);
@@ -102,17 +122,27 @@ class UnWallet {
102
122
  handleWSMessage(msg) {
103
123
  switch (msg.type) {
104
124
  case "signature":
125
+ this.resolve(msg.value);
126
+ break;
105
127
  case "metaTransaction":
128
+ this.resolve(msg.value);
129
+ break;
106
130
  case "presentation":
107
- if (msg.data.value === null) {
108
- this.reject("canceled");
109
- }
110
- else {
111
- this.resolve(msg.data.value);
131
+ this.resolve(msg.value);
132
+ break;
133
+ case "error":
134
+ switch (msg.value) {
135
+ case "rejected":
136
+ this.reject("canceled");
137
+ break;
138
+ default:
139
+ throw new Error(msg.value);
112
140
  }
113
- this.initPromiseArgs();
114
141
  break;
142
+ default:
143
+ throw new Error(`unknown message type: ${msg.type}`);
115
144
  }
145
+ this.initPromiseArgs();
116
146
  }
117
147
  openWindow(url) {
118
148
  const width = screen.width / 2;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "unwallet-client-sdk",
3
- "version": "0.1.3",
3
+ "version": "0.4.0",
4
4
  "description": "unWallet client-side SDK",
5
5
  "license": "MIT",
6
6
  "author": "SIVIRA",
@@ -12,6 +12,9 @@
12
12
  "scripts": {
13
13
  "build": "tsc"
14
14
  },
15
+ "dependencies": {
16
+ "ethers": "^5.6.9"
17
+ },
15
18
  "devDependencies": {
16
19
  "typescript": "^4.3.4"
17
20
  }
package/src/types.ts CHANGED
@@ -9,6 +9,11 @@ export interface UnWalletConfig {
9
9
  wsAPIURL: string;
10
10
  }
11
11
 
12
+ export interface DigestAndSignature {
13
+ digest: string;
14
+ signature: string;
15
+ }
16
+
12
17
  export interface MetaTransaction {
13
18
  executor: string;
14
19
  data: string;
package/src/unwallet.ts CHANGED
@@ -1,5 +1,12 @@
1
+ import { ethers } from "ethers";
2
+
1
3
  import { unWalletConfigs } from "./configs";
2
- import { Config, UnWalletConfig, MetaTransaction } from "./types";
4
+ import {
5
+ Config,
6
+ UnWalletConfig,
7
+ DigestAndSignature,
8
+ MetaTransaction,
9
+ } from "./types";
3
10
 
4
11
  export class UnWallet {
5
12
  private config: Config;
@@ -47,7 +54,7 @@ export class UnWallet {
47
54
  ws.onmessage = (event) => {
48
55
  const msg = JSON.parse(event.data);
49
56
  if (msg.type === "connectionID") {
50
- unWallet.connectionID = msg.data.value;
57
+ unWallet.connectionID = msg.value;
51
58
  resolve(unWallet);
52
59
  return;
53
60
  }
@@ -79,14 +86,39 @@ export class UnWallet {
79
86
  location.assign(url.toString());
80
87
  }
81
88
 
82
- public sign(args: { message: string }): Promise<string> {
89
+ public sign(args: { message: string }): Promise<DigestAndSignature> {
83
90
  return new Promise((resolve, reject) => {
84
- this.resolve = resolve;
91
+ this.resolve = (sig: string) => {
92
+ resolve({
93
+ digest: ethers.utils.sha256(ethers.utils.toUtf8Bytes(args.message)),
94
+ signature: sig,
95
+ });
96
+ };
85
97
  this.reject = reject;
86
98
 
87
99
  const url = new URL(`${this.unWalletConfig.baseURL}/x/sign`);
88
100
  url.searchParams.set("connectionID", this.connectionID);
101
+ url.searchParams.set("clientID", this.config.clientID);
89
102
  url.searchParams.set("message", args.message);
103
+
104
+ this.openWindow(url);
105
+ });
106
+ }
107
+
108
+ public signTransaction(args: {
109
+ to: string;
110
+ value?: string;
111
+ data?: string;
112
+ }): Promise<MetaTransaction> {
113
+ return new Promise((resolve, reject) => {
114
+ this.resolve = resolve;
115
+ this.reject = reject;
116
+
117
+ const url = new URL(`${this.unWalletConfig.baseURL}/x/signTransaction`);
118
+ url.searchParams.set("connectionID", this.connectionID);
119
+ url.searchParams.set("clientID", this.config.clientID);
120
+ url.searchParams.set("transaction", JSON.stringify(args));
121
+
90
122
  this.openWindow(url);
91
123
  });
92
124
  }
@@ -102,9 +134,11 @@ export class UnWallet {
102
134
 
103
135
  const url = new URL(`${this.unWalletConfig.baseURL}/x/signTokenTransfer`);
104
136
  url.searchParams.set("connectionID", this.connectionID);
137
+ url.searchParams.set("clientID", this.config.clientID);
105
138
  url.searchParams.set("id", args.id.toString());
106
139
  url.searchParams.set("to", args.to);
107
140
  url.searchParams.set("amount", args.amount.toString());
141
+
108
142
  this.openWindow(url);
109
143
  });
110
144
  }
@@ -121,8 +155,10 @@ export class UnWallet {
121
155
  `${this.unWalletConfig.baseURL}/x/createPresentation`
122
156
  );
123
157
  url.searchParams.set("connectionID", this.connectionID);
158
+ url.searchParams.set("clientID", this.config.clientID);
124
159
  url.searchParams.set("credential", args.credential);
125
160
  url.searchParams.set("challenge", args.challenge);
161
+
126
162
  this.openWindow(url);
127
163
  });
128
164
  }
@@ -140,16 +176,33 @@ export class UnWallet {
140
176
  private handleWSMessage(msg: any): void {
141
177
  switch (msg.type) {
142
178
  case "signature":
179
+ this.resolve!(msg.value);
180
+ break;
181
+
143
182
  case "metaTransaction":
183
+ this.resolve!(msg.value);
184
+ break;
185
+
144
186
  case "presentation":
145
- if (msg.data.value === null) {
146
- this.reject!("canceled");
147
- } else {
148
- this.resolve!(msg.data.value);
187
+ this.resolve!(msg.value);
188
+ break;
189
+
190
+ case "error":
191
+ switch (msg.value) {
192
+ case "rejected":
193
+ this.reject!("canceled");
194
+ break;
195
+
196
+ default:
197
+ throw new Error(msg.value);
149
198
  }
150
- this.initPromiseArgs();
151
199
  break;
200
+
201
+ default:
202
+ throw new Error(`unknown message type: ${msg.type}`);
152
203
  }
204
+
205
+ this.initPromiseArgs();
153
206
  }
154
207
 
155
208
  private openWindow(url: URL): void {