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 CHANGED
@@ -1,23 +1,9 @@
1
1
  # unWallet client-side SDK
2
2
 
3
- :warning: This SDK works correctly only on web browsers.
4
-
5
- ## Installation
6
-
7
- ```
8
- npm install unwallet-client-sdk
9
- ```
3
+ [![npm version](https://badgen.net/npm/v/unwallet-client-sdk)](https://npm.im/unwallet-client-sdk)
10
4
 
11
- ## Initialization
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
- See [Functions](docs/functions.md).
9
+ https://developers.ent.unwallet.world/01_spec/02_client-side-sdk
@@ -1,5 +1,29 @@
1
- import { Config, UnWalletConfig, SignResult, SendTransactionResult } from "./types";
2
- export declare class UnWallet {
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
- ticket: string;
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
- ticket: string;
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
- //# sourceMappingURL=unwallet.d.ts.map
59
+
60
+ export { type Config, type SendTransactionResult, type SignResult, UnWallet };
package/dist/index.d.ts CHANGED
@@ -1,3 +1,60 @@
1
- export { Config, SignResult, SendTransactionResult } from "./types";
2
- export { UnWallet } from "./unwallet";
3
- //# sourceMappingURL=index.d.ts.map
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(exports, "__esModule", { value: true });
3
- exports.UnWallet = void 0;
4
- var unwallet_1 = require("./unwallet");
5
- Object.defineProperty(exports, "UnWallet", { enumerable: true, get: function () { return unwallet_1.UnWallet; } });
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
- import { unWalletConfigs } from "./configs";
4
- import {
5
- Config,
6
- UnWalletConfig,
7
- SignResult,
8
- SendTransactionResult,
9
- } from "./types";
10
-
11
- export class UnWallet {
12
- private config: Config;
13
- private unWalletConfig: UnWalletConfig;
14
-
15
- private ws: WebSocket;
16
- private connectionID: string;
17
-
18
- private resolve: ((result: any) => void) | null = null;
19
- private reject: ((reason: any) => void) | null = null;
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
- constructor(config: Config, unWalletConfig: UnWalletConfig, ws: WebSocket) {
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
- private initPromiseArgs(): void {
32
- this.resolve = (result: any) => {};
33
- this.reject = (reason: any) => {};
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 === undefined) {
41
+ if (config.env === void 0) {
39
42
  config.env = "prod";
40
43
  }
41
- if (!(config.env in unWalletConfigs)) {
42
- throw Error("invalid env");
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 = (event) => {
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 !== undefined) {
89
+ if (args.nonce !== void 0) {
97
90
  url.searchParams.set("nonce", args.nonce);
98
91
  }
99
- if (args.chainID !== undefined) {
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: string) => {
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("ticket", args.ticket);
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 === undefined && args.data === undefined) {
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 !== undefined ? args.value : "0x0"
136
+ args.value !== void 0 ? args.value : "0x0"
157
137
  );
158
138
  url.searchParams.set(
159
139
  "data",
160
- args.data !== undefined ? args.data : "0x"
140
+ args.data !== void 0 ? args.data : "0x"
161
141
  );
162
- url.searchParams.set("ticket", args.ticket);
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!(msg.value);
158
+ this.resolve(msg.value);
183
159
  break;
184
-
185
160
  case "transactionID":
186
- this.resolve!(msg.value);
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!("canceled");
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.13.0",
3
+ "version": "0.15.0",
4
4
  "description": "unWallet client-side SDK",
5
5
  "license": "MIT",
6
6
  "author": "SIVIRA",
7
- "main": "dist/index.js",
8
- "repository": {
9
- "type": "git",
10
- "url": "git://github.com/SIVIRA/unwallet-client-sdk-js.git"
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.13.2"
32
+ "ethers": "6.14.0"
19
33
  },
20
34
  "devDependencies": {
21
- "@commitlint/cli": "19.4.0",
22
- "@commitlint/config-conventional": "19.2.2",
23
- "commitizen": "4.3.0",
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.4",
26
- "typescript": "5.5.4"
41
+ "husky": "9.1.7",
42
+ "tsup": "8.4.0"
27
43
  },
28
44
  "scripts": {
29
- "build": "tsc",
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
@@ -1 +0,0 @@
1
- module.exports = { extends: ["@commitlint/config-conventional"] };
package/dist/configs.d.ts DELETED
@@ -1,5 +0,0 @@
1
- import { UnWalletConfig } from "./types";
2
- export declare const unWalletConfigs: {
3
- [env: string]: UnWalletConfig;
4
- };
5
- //# sourceMappingURL=configs.d.ts.map
@@ -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
- };
@@ -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
@@ -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
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -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
@@ -1,2 +0,0 @@
1
- export { Config, SignResult, SendTransactionResult } from "./types";
2
- export { UnWallet } from "./unwallet";
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
- }