@xelis/sdk 0.10.9 → 0.10.11

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.
@@ -259,25 +259,21 @@ var WSRPC = /** @class */ (function () {
259
259
  var onMessage = function (msgEvent) {
260
260
  if (typeof msgEvent.data === "string") {
261
261
  var data = (0, parse_json_1.parseJSON)(msgEvent.data);
262
- var valid = false;
262
+ if (data.error && data.error.message) {
263
+ return reject(new Error(data.error.message));
264
+ }
263
265
  if (Array.isArray(data) && data.length > 0 && data[0].id === id) {
264
266
  //@ts-ignore
265
- resolve(data);
266
- valid = true;
267
+ return resolve(data);
267
268
  }
268
- else if (data.id === id) {
269
- resolve(data);
270
- valid = true;
269
+ if (data.id === id) {
270
+ return resolve(data);
271
271
  }
272
- else if (data.id === null && id === 0) {
272
+ if (data.id === null && id === 0) {
273
273
  // special case with xswd sending first call will return null id
274
- resolve(data);
275
- valid = true;
276
- }
277
- if (valid) {
278
- clearTimeout(timeoutId);
279
- _this.socket && _this.socket.removeEventListener("message", onMessage);
274
+ return resolve(data);
280
275
  }
276
+ reject(new Error("invalid data"));
281
277
  }
282
278
  };
283
279
  _this.socket.addEventListener("message", onMessage);
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  exports.__esModule = true;
3
- exports.Permission = exports.RPCEvent = exports.RPCMethod = exports.ElementType = exports.ValueType = exports.TxRole = void 0;
3
+ exports.RPCEvent = exports.RPCMethod = exports.ElementType = exports.ValueType = exports.TxRole = void 0;
4
4
  var TxRole;
5
5
  (function (TxRole) {
6
6
  TxRole["Sender"] = "sender";
@@ -78,9 +78,3 @@ var RPCEvent;
78
78
  RPCEvent["Online"] = "online";
79
79
  RPCEvent["Offline"] = "offline";
80
80
  })(RPCEvent = exports.RPCEvent || (exports.RPCEvent = {}));
81
- var Permission;
82
- (function (Permission) {
83
- Permission[Permission["Ask"] = 0] = "Ask";
84
- Permission[Permission["AcceptAlways"] = 1] = "AcceptAlways";
85
- Permission[Permission["DenyAlways"] = 2] = "DenyAlways";
86
- })(Permission = exports.Permission || (exports.Permission = {}));
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ exports.__esModule = true;
6
+ exports.App = void 0;
7
+ var qrcode_1 = __importDefault(require("qrcode"));
8
+ var App = /** @class */ (function () {
9
+ function App(relayer) {
10
+ var _this = this;
11
+ this.relayer = relayer;
12
+ this.element = document.createElement("div");
13
+ this.element.classList.add("xelis-xswd-relayer");
14
+ this.contentElement = document.createElement("div");
15
+ this.contentElement.classList.add("xelis-xswd-relayer-content");
16
+ this.element.appendChild(this.contentElement);
17
+ this.loadingElement = document.createElement("div");
18
+ this.loadingElement.innerHTML = "\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M20.0001 12C20.0001 13.3811 19.6425 14.7386 18.9623 15.9405C18.282 17.1424 17.3022 18.1477 16.1182 18.8587C14.9341 19.5696 13.5862 19.9619 12.2056 19.9974C10.825 20.0328 9.45873 19.7103 8.23975 19.0612\" stroke=\"currentColor\" stroke-width=\"3.55556\" stroke-linecap=\"round\"/>\n </svg>\n ";
19
+ this.loadingElement.classList.add("xelis-xswd-relayer-loading");
20
+ this.errElement = document.createElement("div");
21
+ this.errElement.classList.add("xelis-xswd-relayer-error");
22
+ this.qrCodeElement = document.createElement("div");
23
+ this.qrCodeElement.classList.add("xelis-xswd-relayer-qrcode");
24
+ this.qrCodeElement.innerHTML = "\n <div>XSWD Relayer</div>\n <canvas></canvas>\n ";
25
+ this.element.addEventListener("click", function (e) {
26
+ // close the app if clicking outside
27
+ if (_this.element.isEqualNode(e.target)) {
28
+ _this.relayer.close();
29
+ }
30
+ });
31
+ this.relayer.props.parent.appendChild(this.element);
32
+ this.setLoading();
33
+ }
34
+ App.prototype.clear = function () {
35
+ this.loadingElement.remove();
36
+ this.errElement.remove();
37
+ this.qrCodeElement.remove();
38
+ };
39
+ App.prototype.setError = function (msg) {
40
+ this.clear();
41
+ this.errElement.innerHTML = "error: ".concat(msg);
42
+ this.contentElement.appendChild(this.errElement);
43
+ };
44
+ App.prototype.setLoading = function () {
45
+ this.clear();
46
+ this.contentElement.appendChild(this.loadingElement);
47
+ };
48
+ App.prototype.setQRCode = function (channelId) {
49
+ this.clear();
50
+ var canvas = this.qrCodeElement.querySelector("canvas");
51
+ var qrCodeData = JSON.stringify({
52
+ inner: {},
53
+ channel_id: channelId,
54
+ relayer: this.relayer.props.url,
55
+ encryption_mode: this.relayer.props.encryption_mode
56
+ });
57
+ qrcode_1["default"].toCanvas(canvas, qrCodeData);
58
+ this.contentElement.appendChild(this.qrCodeElement);
59
+ };
60
+ return App;
61
+ }());
62
+ exports.App = App;
@@ -0,0 +1,37 @@
1
+ .xelis-xswd-relayer {
2
+ position: fixed;
3
+ top: 0;
4
+ left: 0;
5
+ bottom: 0;
6
+ right: 0;
7
+ background-color: rgba(0, 0, 0, 0.5);
8
+ backdrop-filter: blur(10px);
9
+ }
10
+
11
+ .xelis-xswd-relayer-content {
12
+ position: absolute;
13
+ top: 50%;
14
+ left: 50%;
15
+ translate: -50% -50%;
16
+ background-color: aquamarine;
17
+ filter: drop-shadow(0px 0px 25px black);
18
+ }
19
+
20
+ .xelis-xswd-relayer-error {}
21
+
22
+ .xelis-xswd-relayer-loading {
23
+ width: 50px;
24
+ height: 50px;
25
+ color: black;
26
+ animation: xelis-xswd-relayer-loading-animation .75s infinite;
27
+ }
28
+
29
+ @keyframes xelis-xswd-relayer-loading-animation {
30
+ 100% {
31
+ rotate: 360deg;
32
+ }
33
+ }
34
+
35
+ .xelis-xswd-relayer-qrcode {}
36
+
37
+ .xelis-xswd-relayer-qrcode canvas {}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ var app_1 = require("./app");
4
+ var Relayer = /** @class */ (function () {
5
+ function Relayer(props) {
6
+ var _this = this;
7
+ this.onOpen = function (e) {
8
+ _this.message_timeout = window.setTimeout(function () {
9
+ _this.app.setError("timeout occured (did not receive any message)");
10
+ }, 3000);
11
+ };
12
+ this.onMessage = function (e) {
13
+ window.clearTimeout(_this.message_timeout);
14
+ try {
15
+ console.log(e);
16
+ var data = JSON.parse(e.data);
17
+ if (data.channel_id) {
18
+ _this.app.setQRCode(data.channel_id);
19
+ }
20
+ else {
21
+ _this.app.setError("channel id not found");
22
+ }
23
+ }
24
+ catch (e) {
25
+ _this.app.setError("invalid data format");
26
+ }
27
+ };
28
+ this.onError = function (e) {
29
+ _this.app.setError("connection failed");
30
+ };
31
+ this.onClose = function (e) {
32
+ _this.app.setError("connection closed");
33
+ };
34
+ this.props = props;
35
+ this.app = new app_1.App(this);
36
+ this.ws = new WebSocket(this.props.url);
37
+ this.ws.addEventListener("open", this.onOpen);
38
+ this.ws.addEventListener("message", this.onMessage);
39
+ this.ws.addEventListener("error", this.onError);
40
+ this.ws.addEventListener("close", this.onClose);
41
+ }
42
+ Relayer.prototype.close = function () {
43
+ this.ws.close();
44
+ this.app.element.remove();
45
+ };
46
+ return Relayer;
47
+ }());
48
+ exports["default"] = Relayer;
@@ -1,9 +1,2 @@
1
1
  "use strict";
2
2
  exports.__esModule = true;
3
- exports.Permission = void 0;
4
- var Permission;
5
- (function (Permission) {
6
- Permission[Permission["Ask"] = 0] = "Ask";
7
- Permission[Permission["AcceptAlways"] = 1] = "AcceptAlways";
8
- Permission[Permission["DenyAlways"] = 2] = "DenyAlways";
9
- })(Permission = exports.Permission || (exports.Permission = {}));
@@ -253,25 +253,21 @@ var WSRPC = /** @class */ (function () {
253
253
  var onMessage = function (msgEvent) {
254
254
  if (typeof msgEvent.data === "string") {
255
255
  var data = parseJSON(msgEvent.data);
256
- var valid = false;
256
+ if (data.error && data.error.message) {
257
+ return reject(new Error(data.error.message));
258
+ }
257
259
  if (Array.isArray(data) && data.length > 0 && data[0].id === id) {
258
260
  //@ts-ignore
259
- resolve(data);
260
- valid = true;
261
+ return resolve(data);
261
262
  }
262
- else if (data.id === id) {
263
- resolve(data);
264
- valid = true;
263
+ if (data.id === id) {
264
+ return resolve(data);
265
265
  }
266
- else if (data.id === null && id === 0) {
266
+ if (data.id === null && id === 0) {
267
267
  // special case with xswd sending first call will return null id
268
- resolve(data);
269
- valid = true;
270
- }
271
- if (valid) {
272
- clearTimeout(timeoutId);
273
- _this.socket && _this.socket.removeEventListener("message", onMessage);
268
+ return resolve(data);
274
269
  }
270
+ reject(new Error("invalid data"));
275
271
  }
276
272
  };
277
273
  _this.socket.addEventListener("message", onMessage);
@@ -75,9 +75,3 @@ export var RPCEvent;
75
75
  RPCEvent["Online"] = "online";
76
76
  RPCEvent["Offline"] = "offline";
77
77
  })(RPCEvent || (RPCEvent = {}));
78
- export var Permission;
79
- (function (Permission) {
80
- Permission[Permission["Ask"] = 0] = "Ask";
81
- Permission[Permission["AcceptAlways"] = 1] = "AcceptAlways";
82
- Permission[Permission["DenyAlways"] = 2] = "DenyAlways";
83
- })(Permission || (Permission = {}));
@@ -0,0 +1,56 @@
1
+ import QRCode from 'qrcode';
2
+ var App = /** @class */ (function () {
3
+ function App(relayer) {
4
+ var _this = this;
5
+ this.relayer = relayer;
6
+ this.element = document.createElement("div");
7
+ this.element.classList.add("xelis-xswd-relayer");
8
+ this.contentElement = document.createElement("div");
9
+ this.contentElement.classList.add("xelis-xswd-relayer-content");
10
+ this.element.appendChild(this.contentElement);
11
+ this.loadingElement = document.createElement("div");
12
+ this.loadingElement.innerHTML = "\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M20.0001 12C20.0001 13.3811 19.6425 14.7386 18.9623 15.9405C18.282 17.1424 17.3022 18.1477 16.1182 18.8587C14.9341 19.5696 13.5862 19.9619 12.2056 19.9974C10.825 20.0328 9.45873 19.7103 8.23975 19.0612\" stroke=\"currentColor\" stroke-width=\"3.55556\" stroke-linecap=\"round\"/>\n </svg>\n ";
13
+ this.loadingElement.classList.add("xelis-xswd-relayer-loading");
14
+ this.errElement = document.createElement("div");
15
+ this.errElement.classList.add("xelis-xswd-relayer-error");
16
+ this.qrCodeElement = document.createElement("div");
17
+ this.qrCodeElement.classList.add("xelis-xswd-relayer-qrcode");
18
+ this.qrCodeElement.innerHTML = "\n <div>XSWD Relayer</div>\n <canvas></canvas>\n ";
19
+ this.element.addEventListener("click", function (e) {
20
+ // close the app if clicking outside
21
+ if (_this.element.isEqualNode(e.target)) {
22
+ _this.relayer.close();
23
+ }
24
+ });
25
+ this.relayer.props.parent.appendChild(this.element);
26
+ this.setLoading();
27
+ }
28
+ App.prototype.clear = function () {
29
+ this.loadingElement.remove();
30
+ this.errElement.remove();
31
+ this.qrCodeElement.remove();
32
+ };
33
+ App.prototype.setError = function (msg) {
34
+ this.clear();
35
+ this.errElement.innerHTML = "error: ".concat(msg);
36
+ this.contentElement.appendChild(this.errElement);
37
+ };
38
+ App.prototype.setLoading = function () {
39
+ this.clear();
40
+ this.contentElement.appendChild(this.loadingElement);
41
+ };
42
+ App.prototype.setQRCode = function (channelId) {
43
+ this.clear();
44
+ var canvas = this.qrCodeElement.querySelector("canvas");
45
+ var qrCodeData = JSON.stringify({
46
+ inner: {},
47
+ channel_id: channelId,
48
+ relayer: this.relayer.props.url,
49
+ encryption_mode: this.relayer.props.encryption_mode
50
+ });
51
+ QRCode.toCanvas(canvas, qrCodeData);
52
+ this.contentElement.appendChild(this.qrCodeElement);
53
+ };
54
+ return App;
55
+ }());
56
+ export { App };
@@ -0,0 +1,37 @@
1
+ .xelis-xswd-relayer {
2
+ position: fixed;
3
+ top: 0;
4
+ left: 0;
5
+ bottom: 0;
6
+ right: 0;
7
+ background-color: rgba(0, 0, 0, 0.5);
8
+ backdrop-filter: blur(10px);
9
+ }
10
+
11
+ .xelis-xswd-relayer-content {
12
+ position: absolute;
13
+ top: 50%;
14
+ left: 50%;
15
+ translate: -50% -50%;
16
+ background-color: aquamarine;
17
+ filter: drop-shadow(0px 0px 25px black);
18
+ }
19
+
20
+ .xelis-xswd-relayer-error {}
21
+
22
+ .xelis-xswd-relayer-loading {
23
+ width: 50px;
24
+ height: 50px;
25
+ color: black;
26
+ animation: xelis-xswd-relayer-loading-animation .75s infinite;
27
+ }
28
+
29
+ @keyframes xelis-xswd-relayer-loading-animation {
30
+ 100% {
31
+ rotate: 360deg;
32
+ }
33
+ }
34
+
35
+ .xelis-xswd-relayer-qrcode {}
36
+
37
+ .xelis-xswd-relayer-qrcode canvas {}
@@ -0,0 +1,46 @@
1
+ import { App } from './app.js';
2
+ var Relayer = /** @class */ (function () {
3
+ function Relayer(props) {
4
+ var _this = this;
5
+ this.onOpen = function (e) {
6
+ _this.message_timeout = window.setTimeout(function () {
7
+ _this.app.setError("timeout occured (did not receive any message)");
8
+ }, 3000);
9
+ };
10
+ this.onMessage = function (e) {
11
+ window.clearTimeout(_this.message_timeout);
12
+ try {
13
+ console.log(e);
14
+ var data = JSON.parse(e.data);
15
+ if (data.channel_id) {
16
+ _this.app.setQRCode(data.channel_id);
17
+ }
18
+ else {
19
+ _this.app.setError("channel id not found");
20
+ }
21
+ }
22
+ catch (e) {
23
+ _this.app.setError("invalid data format");
24
+ }
25
+ };
26
+ this.onError = function (e) {
27
+ _this.app.setError("connection failed");
28
+ };
29
+ this.onClose = function (e) {
30
+ _this.app.setError("connection closed");
31
+ };
32
+ this.props = props;
33
+ this.app = new App(this);
34
+ this.ws = new WebSocket(this.props.url);
35
+ this.ws.addEventListener("open", this.onOpen);
36
+ this.ws.addEventListener("message", this.onMessage);
37
+ this.ws.addEventListener("error", this.onError);
38
+ this.ws.addEventListener("close", this.onClose);
39
+ }
40
+ Relayer.prototype.close = function () {
41
+ this.ws.close();
42
+ this.app.element.remove();
43
+ };
44
+ return Relayer;
45
+ }());
46
+ export default Relayer;
@@ -1,6 +1 @@
1
- export var Permission;
2
- (function (Permission) {
3
- Permission[Permission["Ask"] = 0] = "Ask";
4
- Permission[Permission["AcceptAlways"] = 1] = "AcceptAlways";
5
- Permission[Permission["DenyAlways"] = 2] = "DenyAlways";
6
- })(Permission || (Permission = {}));
1
+ export {};
@@ -343,16 +343,3 @@ export declare enum RPCEvent {
343
343
  Online = "online",
344
344
  Offline = "offline"
345
345
  }
346
- export declare enum Permission {
347
- Ask = 0,
348
- AcceptAlways = 1,
349
- DenyAlways = 2
350
- }
351
- export interface ApplicationData {
352
- id: string;
353
- name: string;
354
- description: string;
355
- url?: string;
356
- permissions: Map<string, Permission>;
357
- signature?: string;
358
- }
@@ -0,0 +1,14 @@
1
+ import Relayer from './index';
2
+ export declare class App {
3
+ relayer: Relayer;
4
+ element: HTMLDivElement;
5
+ contentElement: HTMLDivElement;
6
+ qrCodeElement: HTMLDivElement;
7
+ loadingElement: HTMLDivElement;
8
+ errElement: HTMLDivElement;
9
+ constructor(relayer: Relayer);
10
+ clear(): void;
11
+ setError(msg: string): void;
12
+ setLoading(): void;
13
+ setQRCode(channelId: string): void;
14
+ }
@@ -0,0 +1,20 @@
1
+ import { App } from './app';
2
+ export type RelayerEncryptionMode = null | "aes" | "chacha20poly1305";
3
+ export interface RelayerProps {
4
+ url: string;
5
+ encryption_mode: RelayerEncryptionMode;
6
+ parent: HTMLElement;
7
+ }
8
+ declare class Relayer {
9
+ ws: WebSocket;
10
+ app: App;
11
+ props: RelayerProps;
12
+ message_timeout?: number;
13
+ constructor(props: RelayerProps);
14
+ close(): void;
15
+ onOpen: (e: Event) => void;
16
+ onMessage: (e: MessageEvent) => void;
17
+ onError: (e: Event) => void;
18
+ onClose: (e: CloseEvent) => void;
19
+ }
20
+ export default Relayer;
@@ -1,13 +1,7 @@
1
- export declare enum Permission {
2
- Ask = 0,
3
- AcceptAlways = 1,
4
- DenyAlways = 2
5
- }
6
1
  export interface ApplicationData {
7
2
  id: string;
8
3
  name: string;
9
4
  description: string;
10
5
  url?: string;
11
- permissions: Map<string, Permission>;
12
- signature?: string;
6
+ permissions: string[];
13
7
  }
@@ -1,7 +1,7 @@
1
1
  import { WSRPC } from '../rpc/websocket';
2
- import { ApplicationData } from '../wallet/types';
3
2
  import { DaemonMethods } from '../daemon/websocket';
4
3
  import { WalletMethods } from '../wallet/websocket';
4
+ import { ApplicationData } from './types';
5
5
  export declare class WS extends WSRPC {
6
6
  daemon: DaemonMethods;
7
7
  wallet: WalletMethods;
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.10.9",
2
+ "version": "0.10.11",
3
3
  "name": "@xelis/sdk",
4
4
  "description": "Xelis software development kit for JS",
5
5
  "exports": {
@@ -23,24 +23,32 @@
23
23
  "test": "jest",
24
24
  "compile": "tsc -b ./tsconfig.cjs.json ./tsconfig.esm.json ./tsconfig.types.json",
25
25
  "fix-esm": "fix-esm-import-path ./dist/esm",
26
- "clean": "rm -rf ./dist",
27
- "build": "npm run clean && npm run compile && node create_esm_pkg.js && npm run fix-esm",
28
- "prepublishOnly": "npm run build"
26
+ "clean": "rimraf ./dist",
27
+ "copy-css": "copyfiles -u 1 ./src/**/*.css ./dist/cjs && copyfiles -u 1 ./src/**/*.css ./dist/esm",
28
+ "build": "npm run clean && npm run compile && node create_esm_pkg.js && npm run fix-esm && npm run copy-css",
29
+ "prepublishOnly": "npm run build",
30
+ "publish-dev": "npm publish --tag dev",
31
+ "dev-relayer": "vite ./src/xswd/relayer/test"
29
32
  },
30
33
  "devDependencies": {
31
34
  "@types/jest": "^29.4.0",
32
35
  "@types/json-bigint": "^1.0.4",
36
+ "@types/qrcode": "^1.5.5",
33
37
  "@types/react": "^18.2.23",
34
38
  "@types/ws": "^8.5.4",
39
+ "copyfiles": "^2.4.1",
35
40
  "fix-esm-import-path": "^1.10.1",
41
+ "rimraf": "^6.0.1",
36
42
  "ts-jest": "^29.0.5",
37
- "typescript": "^4.9.5"
43
+ "typescript": "^4.9.5",
44
+ "vite": "^7.0.5"
38
45
  },
39
46
  "dependencies": {
40
47
  "await-to-js": "^3.0.0",
41
48
  "isomorphic-ws": "^5.0.0",
42
49
  "js-base64": "^3.7.6",
43
50
  "json-bigint": "^1.0.0",
51
+ "qrcode": "^1.5.4",
44
52
  "react": "^18.2.0",
45
53
  "ws": "^8.12.1"
46
54
  }