From 6c928690b90415d8dd01a0518f23ab07d1767430 Mon Sep 17 00:00:00 2001 From: Aleksandr Kraiz Date: Thu, 25 May 2023 00:15:05 +0400 Subject: [PATCH] agg ws improvements --- jest.config.js | 43 ++++ jest.config.ts | 23 -- package-lock.json | 338 +++++++++++++--------------- package.json | 29 +-- src/__tests__/aggregator.test.ts | 124 +++++++++- src/services/Aggregator/ws/index.ts | 131 ++++++++--- src/utils/assertError.ts | 6 + 7 files changed, 441 insertions(+), 253 deletions(-) create mode 100644 jest.config.js delete mode 100644 jest.config.ts create mode 100644 src/utils/assertError.ts diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..8fddee8 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,43 @@ +import preset from 'ts-jest/presets/index.js' + +/** @type {import('ts-jest').JestConfigWithTsJest} */ +export default { + ...preset.defaultsESM, + moduleNameMapper: { + '^(\\.{1,2}/.*)\\.js$': '$1', + }, + modulePathIgnorePatterns: ['lib', 'node_modules'], + testMatch: ['**/__tests__/**/*.test.ts'], + transform: { + '^.+\\.tsx?$': [ + 'ts-jest', + { + isolatedModules: true, + // tsconfig: 'tsconfig.json', + useESM: true, + }, + ], + }, +} + +// const config: JestConfigWithTsJest = { +// extensionsToTreatAsEsm: ['.ts'], +// moduleNameMapper: { +// '^(\\.{1,2}/.*)\\.js$': '$1', +// }, +// preset: 'ts-jest/presets/default-esm', +// testEnvironment: 'node', +// testMatch: ['**/__tests__/**/*.test.ts'], +// modulePathIgnorePatterns: ['lib', 'node_modules'], +// transform: { +// // '^.+\\.[tj]sx?$' to process js/ts with `ts-jest` +// // '^.+\\.m?[tj]sx?$' to process js/ts/mjs/mts with `ts-jest` +// '^.+\\.tsx?$': [ +// 'ts-jest', +// { +// useESM: true, +// }, +// ], +// }, +// }; +// export default config; diff --git a/jest.config.ts b/jest.config.ts deleted file mode 100644 index a44abbc..0000000 --- a/jest.config.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type { JestConfigWithTsJest } from 'ts-jest'; - -const config: JestConfigWithTsJest = { - extensionsToTreatAsEsm: ['.ts'], - moduleNameMapper: { - '^(\\.{1,2}/.*)\\.js$': '$1', - }, - preset: 'ts-jest', - testEnvironment: 'node', - testMatch: ['**/__tests__/**/*.test.ts'], - modulePathIgnorePatterns: ['lib', 'node_modules'], - transform: { - // '^.+\\.[tj]sx?$' to process js/ts with `ts-jest` - // '^.+\\.m?[tj]sx?$' to process js/ts/mjs/mts with `ts-jest` - '^.+\\.tsx?$': [ - 'ts-jest', - { - useESM: true, - }, - ], - }, -}; -export default config; diff --git a/package-lock.json b/package-lock.json index 007dbbc..a590360 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,18 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.2", + "version": "0.19.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@orionprotocol/sdk", - "version": "0.19.2", + "version": "0.19.7", "license": "ISC", "dependencies": { "@babel/runtime": "^7.21.0", "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/providers": "^5.7.2", - "@orionprotocol/contracts": "1.0.2", + "@orionprotocol/contracts": "1.3.0", "bignumber.js": "^9.1.1", "bson-objectid": "^2.0.4", "buffer": "^6.0.3", @@ -20,13 +20,12 @@ "express": "^4.18.2", "isomorphic-ws": "^5.0.0", "just-clone": "^6.2.0", - "merge-anything": "^5.1.4", + "merge-anything": "^5.1.7", "neverthrow": "^6.0.0", "simple-typed-fetch": "^0.1.9", "stream-browserify": "^3.0.0", "tiny-invariant": "^1.3.1", "ts-is-present": "^1.2.2", - "ts-node": "^10.9.1", "uuid": "^9.0.0", "ws": "^8.13.0", "zod": "3.21.4" @@ -34,18 +33,18 @@ "devDependencies": { "@babel/core": "^7.21.4", "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@tsconfig/esm": "^1.0.2", - "@tsconfig/strictest": "^2.0.0", + "@tsconfig/esm": "^1.0.3", + "@tsconfig/strictest": "^2.0.1", "@types/express": "^4.17.17", - "@types/jest": "^29.5.0", - "@types/node": "^20.1.1", + "@types/jest": "^29.5.1", + "@types/node": "^20.2.3", "@types/uuid": "^9.0.1", "@types/ws": "^8.5.4", - "@typescript-eslint/eslint-plugin": "^5.57.1", - "@typescript-eslint/parser": "^5.57.1", + "@typescript-eslint/eslint-plugin": "^5.59.7", + "@typescript-eslint/parser": "^5.59.7", "babel-loader": "^9.1.2", "concurrently": "^8.0.1", - "eslint": "^8.38.0", + "eslint": "^8.41.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-config-standard": "^17.0.0", "eslint-config-standard-with-typescript": "^34.0.1", @@ -57,7 +56,8 @@ "is-ci": "^3.0.1", "jest": "^29.5.0", "ts-jest": "^29.1.0", - "ts-loader": "^9.4.2", + "ts-loader": "^9.4.3", + "ts-node": "github:TypeStrong/ts-node#main", "tsup": "^6.7.0", "typescript": "^5.0.4" }, @@ -624,6 +624,7 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -635,6 +636,7 @@ "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -665,14 +667,14 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz", - "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", + "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.5.1", + "espree": "^9.5.2", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -715,9 +717,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.38.0.tgz", - "integrity": "sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.41.0.tgz", + "integrity": "sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2236,6 +2238,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, "engines": { "node": ">=6.0.0" } @@ -2278,7 +2281,8 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.17", @@ -2326,9 +2330,9 @@ } }, "node_modules/@orionprotocol/contracts": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@orionprotocol/contracts/-/contracts-1.0.2.tgz", - "integrity": "sha512-mEf7eh6Udu72xkEX6kvKYM57ckD+G0+J1O0GoB5L6mfobygLfuQkriJr1MTdAsUjfZ2gNfJiMRrIf8HLW5+R/A==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@orionprotocol/contracts/-/contracts-1.3.0.tgz", + "integrity": "sha512-TMbWiH3Fo0b+VqDBVeRRazK1SC6QEGXXVLGXXN6jCxwHD7Fy1eH/xB52CTNgv5m17U5vDWHe4FrcdujOloSQkA==" }, "node_modules/@sinclair/typebox": { "version": "0.25.23", @@ -2355,30 +2359,28 @@ } }, "node_modules/@tsconfig/esm": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@tsconfig/esm/-/esm-1.0.2.tgz", - "integrity": "sha512-awiISx+G4L+7k97nKnfA5QF6rukawiuycMPfASFHG/0fqjrUlYBuNISy3Yjl1SHIpVi57lYf7dc6L/FoQQCKcA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/esm/-/esm-1.0.3.tgz", + "integrity": "sha512-Gp56rIc3R8ab032nXMUitmc7YIb4nAi8DQ6Qt47tuL0Ssn9LIOm+o2FQmqPu3jX4z0TsqgzWwkmVygxcq+yHYg==", "dev": true }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" - }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true }, "node_modules/@tsconfig/node16": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true + }, + "node_modules/@tsconfig/node18": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node18/-/node18-2.0.1.tgz", + "integrity": "sha512-UqdfvuJK0SArA2CxhKWwwAWfnVSXiYe63bVpMutc27vpngCntGUZQETO24pEJ46zU6XM+7SpqYoMgcO3bM11Ew==", + "dev": true }, "node_modules/@tsconfig/strictest": { "version": "2.0.1", @@ -2532,9 +2534,9 @@ } }, "node_modules/@types/jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.0.tgz", - "integrity": "sha512-3Emr5VOl/aoBwnWcH/EFQvlSAmjV+XtV9GGu5mwdYew5vhQh0IUZx/60x0TzHDu09Bi7HMx10t/namdJw5QIcg==", + "version": "29.5.1", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.1.tgz", + "integrity": "sha512-tEuVcHrpaixS36w7hpsfLBLpjtMRJUE09/MHXn923LOVojDwyC14cWcfc0rDs0VEfUyYmt/+iX1kxxp+gZMcaQ==", "dev": true, "dependencies": { "expect": "^29.0.0", @@ -2547,12 +2549,6 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, "node_modules/@types/mime": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", @@ -2560,9 +2556,10 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.1.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.1.1.tgz", - "integrity": "sha512-uKBEevTNb+l6/aCQaKVnUModfEMjAl98lw2Si9P5y4hLu9tm6AlX2ZIoXZX6Wh9lJueYPrGPKk5WMCNHg/u6/A==" + "version": "20.2.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.3.tgz", + "integrity": "sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw==", + "dev": true }, "node_modules/@types/prettier": { "version": "2.7.2", @@ -2583,9 +2580,9 @@ "dev": true }, "node_modules/@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", "dev": true }, "node_modules/@types/serve-static": { @@ -2635,15 +2632,15 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.58.0.tgz", - "integrity": "sha512-vxHvLhH0qgBd3/tW6/VccptSfc8FxPQIkmNTVLWcCOVqSBvqpnKkBTYrhcGlXfSnd78azwe+PsjYFj0X34/njA==", + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.7.tgz", + "integrity": "sha512-BL+jYxUFIbuYwy+4fF86k5vdT9lT0CNJ6HtwrIvGh0PhH8s0yy5rjaKH2fDCrz5ITHy07WCzVGNvAmjJh4IJFA==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.58.0", - "@typescript-eslint/type-utils": "5.58.0", - "@typescript-eslint/utils": "5.58.0", + "@typescript-eslint/scope-manager": "5.59.7", + "@typescript-eslint/type-utils": "5.59.7", + "@typescript-eslint/utils": "5.59.7", "debug": "^4.3.4", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", @@ -2684,14 +2681,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.58.0.tgz", - "integrity": "sha512-ixaM3gRtlfrKzP8N6lRhBbjTow1t6ztfBvQNGuRM8qH1bjFFXIJ35XY+FC0RRBKn3C6cT+7VW1y8tNm7DwPHDQ==", + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.7.tgz", + "integrity": "sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.58.0", - "@typescript-eslint/types": "5.58.0", - "@typescript-eslint/typescript-estree": "5.58.0", + "@typescript-eslint/scope-manager": "5.59.7", + "@typescript-eslint/types": "5.59.7", + "@typescript-eslint/typescript-estree": "5.59.7", "debug": "^4.3.4" }, "engines": { @@ -2711,13 +2708,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.58.0.tgz", - "integrity": "sha512-b+w8ypN5CFvrXWQb9Ow9T4/6LC2MikNf1viLkYTiTbkQl46CnR69w7lajz1icW0TBsYmlpg+mRzFJ4LEJ8X9NA==", + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.7.tgz", + "integrity": "sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.58.0", - "@typescript-eslint/visitor-keys": "5.58.0" + "@typescript-eslint/types": "5.59.7", + "@typescript-eslint/visitor-keys": "5.59.7" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2728,13 +2725,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.58.0.tgz", - "integrity": "sha512-FF5vP/SKAFJ+LmR9PENql7fQVVgGDOS+dq3j+cKl9iW/9VuZC/8CFmzIP0DLKXfWKpRHawJiG70rVH+xZZbp8w==", + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.7.tgz", + "integrity": "sha512-ozuz/GILuYG7osdY5O5yg0QxXUAEoI4Go3Do5xeu+ERH9PorHBPSdvD3Tjp2NN2bNLh1NJQSsQu2TPu/Ly+HaQ==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.58.0", - "@typescript-eslint/utils": "5.58.0", + "@typescript-eslint/typescript-estree": "5.59.7", + "@typescript-eslint/utils": "5.59.7", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -2755,9 +2752,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.58.0.tgz", - "integrity": "sha512-JYV4eITHPzVQMnHZcYJXl2ZloC7thuUHrcUmxtzvItyKPvQ50kb9QXBkgNAt90OYMqwaodQh2kHutWZl1fc+1g==", + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.7.tgz", + "integrity": "sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2768,13 +2765,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.58.0.tgz", - "integrity": "sha512-cRACvGTodA+UxnYM2uwA2KCwRL7VAzo45syNysqlMyNyjw0Z35Icc9ihPJZjIYuA5bXJYiJ2YGUB59BqlOZT1Q==", + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.7.tgz", + "integrity": "sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.58.0", - "@typescript-eslint/visitor-keys": "5.58.0", + "@typescript-eslint/types": "5.59.7", + "@typescript-eslint/visitor-keys": "5.59.7", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2795,9 +2792,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz", - "integrity": "sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -2810,17 +2807,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.58.0.tgz", - "integrity": "sha512-gAmLOTFXMXOC+zP1fsqm3VceKSBQJNzV385Ok3+yzlavNHZoedajjS4UyS21gabJYcobuigQPs/z71A9MdJFqQ==", + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.7.tgz", + "integrity": "sha512-yCX9WpdQKaLufz5luG4aJbOpdXf/fjwGMcLFXZVPUz3QqLirG5QcwwnIHNf8cjLjxK4qtzTO8udUtMQSAToQnQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.58.0", - "@typescript-eslint/types": "5.58.0", - "@typescript-eslint/typescript-estree": "5.58.0", + "@typescript-eslint/scope-manager": "5.59.7", + "@typescript-eslint/types": "5.59.7", + "@typescript-eslint/typescript-estree": "5.59.7", "eslint-scope": "^5.1.1", "semver": "^7.3.7" }, @@ -2836,9 +2833,9 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -2851,12 +2848,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.58.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.58.0.tgz", - "integrity": "sha512-/fBraTlPj0jwdyTwLyrRTxv/3lnU2H96pNTVM6z3esTWLtA5MZ9ghSMJ7Rb+TtUAdtEw9EyJzJ0EydIMKxQ9gA==", + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.7.tgz", + "integrity": "sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.58.0", + "@typescript-eslint/types": "5.59.7", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -3058,6 +3055,7 @@ "version": "8.8.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -3088,6 +3086,7 @@ "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, "engines": { "node": ">=0.4.0" } @@ -3220,7 +3219,8 @@ "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true }, "node_modules/argparse": { "version": "2.0.1", @@ -4094,11 +4094,6 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -4230,6 +4225,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, "engines": { "node": ">=0.3.1" } @@ -4477,15 +4473,15 @@ } }, "node_modules/eslint": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.38.0.tgz", - "integrity": "sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.41.0.tgz", + "integrity": "sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.2", - "@eslint/js": "8.38.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.41.0", "@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -4495,9 +4491,9 @@ "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-visitor-keys": "^3.4.0", - "espree": "^9.5.1", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -4505,13 +4501,12 @@ "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", + "graphemer": "^1.4.0", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", @@ -4828,9 +4823,9 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz", - "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4901,9 +4896,9 @@ } }, "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", @@ -4911,6 +4906,9 @@ }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/estraverse": { @@ -4971,14 +4969,14 @@ } }, "node_modules/espree": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz", - "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==", + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", "dev": true, "dependencies": { "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.0" + "eslint-visitor-keys": "^3.4.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -5674,6 +5672,12 @@ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "dev": true }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -7969,12 +7973,6 @@ "node": ">=10" } }, - "node_modules/js-sdsl": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", - "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", - "dev": true - }, "node_modules/js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", @@ -8179,7 +8177,8 @@ "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true }, "node_modules/makeerror": { "version": "1.0.12", @@ -8199,9 +8198,9 @@ } }, "node_modules/merge-anything": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/merge-anything/-/merge-anything-5.1.4.tgz", - "integrity": "sha512-7PWKwGOs5WWcpw+/OvbiFiAvEP6bv/QHiicigpqMGKIqPPAtGhBLR8LFJW+Zu6m9TXiR/a8+AiPlGG0ko1ruoQ==", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/merge-anything/-/merge-anything-5.1.7.tgz", + "integrity": "sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==", "dependencies": { "is-what": "^4.1.8" }, @@ -8315,9 +8314,9 @@ } }, "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -10022,9 +10021,9 @@ } }, "node_modules/ts-loader": { - "version": "9.4.2", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.2.tgz", - "integrity": "sha512-OmlC4WVmFv5I0PpaxYb+qGeGOdm5giHU7HwDDUjw59emP2UYMHy9fFSDcYgSNoH8sXcj4hGCSEhlDZ9ULeDraA==", + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.3.tgz", + "integrity": "sha512-n3hBnm6ozJYzwiwt5YRiJZkzktftRpMiBApHaJPoWLA+qetQBAXkHqCLM6nwSdRDimqVtA5ocIkcTRLMTt7yzA==", "dev": true, "dependencies": { "chalk": "^4.1.0", @@ -10127,36 +10126,33 @@ }, "node_modules/ts-node": { "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "resolved": "git+ssh://git@github.com/TypeStrong/ts-node.git#7af5c48864b60576e471da03c064f325ce37d850", + "dev": true, + "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", + "@tsconfig/node14": "*", + "@tsconfig/node16": "*", + "@tsconfig/node18": "*", "acorn": "^8.4.1", "acorn-walk": "^8.1.1", "arg": "^4.1.0", - "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" + "v8-compile-cache-lib": "^3.0.1" }, "bin": { "ts-node": "dist/bin.js", "ts-node-cwd": "dist/bin-cwd.js", "ts-node-esm": "dist/bin-esm.js", "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" + "ts-node-transpile-only": "dist/bin-transpile.js" }, "peerDependencies": { "@swc/core": ">=1.2.50", "@swc/wasm": ">=1.2.50", "@types/node": "*", - "typescript": ">=2.7" + "typescript": ">=4.2" }, "peerDependenciesMeta": { "@swc/core": { @@ -10168,27 +10164,17 @@ } }, "node_modules/tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", "dev": true, "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", + "json5": "^2.2.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" }, - "bin": { - "json5": "lib/cli.js" + "engines": { + "node": ">=6" } }, "node_modules/tsconfig-paths/node_modules/strip-bom": { @@ -10342,6 +10328,7 @@ "version": "5.0.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", + "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -10432,7 +10419,8 @@ "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true }, "node_modules/v8-to-istanbul": { "version": "9.1.0", @@ -10761,14 +10749,6 @@ "node": ">=12" } }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "engines": { - "node": ">=6" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 7cf5122..a659451 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@orionprotocol/sdk", - "version": "0.19.7", + "version": "0.19.8", "description": "Orion Protocol SDK", "main": "./lib/index.cjs", "module": "./lib/index.js", @@ -51,18 +51,18 @@ "devDependencies": { "@babel/core": "^7.21.4", "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@tsconfig/esm": "^1.0.2", - "@tsconfig/strictest": "^2.0.0", + "@tsconfig/esm": "^1.0.3", + "@tsconfig/strictest": "^2.0.1", "@types/express": "^4.17.17", - "@types/jest": "^29.5.0", - "@types/node": "^20.1.1", + "@types/jest": "^29.5.1", + "@types/node": "^20.2.3", "@types/uuid": "^9.0.1", "@types/ws": "^8.5.4", - "@typescript-eslint/eslint-plugin": "^5.57.1", - "@typescript-eslint/parser": "^5.57.1", + "@typescript-eslint/eslint-plugin": "^5.59.7", + "@typescript-eslint/parser": "^5.59.7", "babel-loader": "^9.1.2", "concurrently": "^8.0.1", - "eslint": "^8.38.0", + "eslint": "^8.41.0", "eslint-config-airbnb-base": "^15.0.0", "eslint-config-standard": "^17.0.0", "eslint-config-standard-with-typescript": "^34.0.1", @@ -74,7 +74,8 @@ "is-ci": "^3.0.1", "jest": "^29.5.0", "ts-jest": "^29.1.0", - "ts-loader": "^9.4.2", + "ts-loader": "^9.4.3", + "ts-node": "github:TypeStrong/ts-node#main", "tsup": "^6.7.0", "typescript": "^5.0.4" }, @@ -82,7 +83,7 @@ "@babel/runtime": "^7.21.0", "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/providers": "^5.7.2", - "@orionprotocol/contracts": "1.0.2", + "@orionprotocol/contracts": "1.3.0", "bignumber.js": "^9.1.1", "bson-objectid": "^2.0.4", "buffer": "^6.0.3", @@ -90,13 +91,12 @@ "express": "^4.18.2", "isomorphic-ws": "^5.0.0", "just-clone": "^6.2.0", - "merge-anything": "^5.1.4", + "merge-anything": "^5.1.7", "neverthrow": "^6.0.0", "simple-typed-fetch": "^0.1.9", "stream-browserify": "^3.0.0", "tiny-invariant": "^1.3.1", "ts-is-present": "^1.2.2", - "ts-node": "^10.9.1", "uuid": "^9.0.0", "ws": "^8.13.0", "zod": "3.21.4" @@ -104,5 +104,8 @@ "homepage": "https://github.com/orionprotocol/sdk#readme", "files": [ "lib/**/*" - ] + ], + "overrides": { + "tsconfig-paths": "^4.0.0" + } } \ No newline at end of file diff --git a/src/__tests__/aggregator.test.ts b/src/__tests__/aggregator.test.ts index aba9d41..e0d7d49 100644 --- a/src/__tests__/aggregator.test.ts +++ b/src/__tests__/aggregator.test.ts @@ -1,4 +1,10 @@ +import { WebSocket } from 'ws'; import Orion from '../Orion/index.js'; +import { v4 as uuidV4 } from 'uuid'; + +jest.setTimeout(50000); + +const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); describe('Aggregator', () => { test('Handle error aus', async () => { @@ -39,7 +45,7 @@ describe('Aggregator', () => { bscUnit.aggregator.ws.unsubscribe(subId); bscUnit.aggregator.ws.destroy() reject(new Error('Timeout')); - }, 10000); + }, 5000); const payload = 'BTCUSDF'; subId = bscUnit.aggregator.ws.subscribe('aobus', { payload, @@ -53,4 +59,120 @@ describe('Aggregator', () => { }) }); }); + + test('Breaking connection', async () => { + const WS_PORT = 8080; + const wsServer = new WebSocket.Server({ port: WS_PORT }); + + wsServer.on('connection', (ws) => { + ws.on('message', (message) => { // message type — Buffer | ArrayBuffer | Buffer[] + // Parse message json + const parsedMessage = JSON.parse(message.toString()); + console.log('CLIENT -> SERVER', parsedMessage); + + // Respond + + ws.send(JSON.stringify({ + S: 'BTCUSDF', + ob: { + a: [ + ['26287.4', '2.6', ['BINANCE'], [['BUY', 'BTCUSDF']]], + ['26287.3', '0.172', ['BINANCE'], [['BUY', 'BTCUSDF']]], + ['26287.2', '2.33', ['BINANCE'], [['BUY', 'BTCUSDF']]], + ['26287.1', '0.746', ['BINANCE'], [['BUY', 'BTCUSDF']]], + ['26287', '2.635', ['BINANCE'], [['BUY', 'BTCUSDF']]], + ], + b: [ + ['26276.7', '13.397', ['BINANCE'], [['SELL', 'BTCUSDF']]], + ['26276.6', '0.003', ['BINANCE'], [['SELL', 'BTCUSDF']]], + ['26276.5', '0.023', ['BINANCE'], [['SELL', 'BTCUSDF']]], + ['26276.4', '0.001', ['BINANCE'], [['SELL', 'BTCUSDF']]], + ['26276.3', '2.334', ['BINANCE'], [['SELL', 'BTCUSDF']]], + ] + }, + T: 'aobu', + _: 1684941717661 + })); + }) + + // ws.on('close', () => { + // console.log('Connection closed'); + // }) + + ws.on('error', (error) => { + console.log('Error', error); + }) + + // Send initial message + ws.send(JSON.stringify({ + T: 'i', + i: uuidV4(), + _: 1684941718016 + })); + }) + + const orion = new Orion('testing', { + networks: { + 97: { + services: { + aggregator: { + ws: `ws://localhost:${WS_PORT}` + } + } + } + } + }); + + const bscUnit = orion.getUnit('bsc'); + + let subId: string | undefined; + + // Make subscription and wait for response + await new Promise((resolve) => { + subId = bscUnit.aggregator.ws.subscribe('aobus', { + payload: 'BTCUSDF', + callback: () => { + console.log('Received data'); + resolve(true); + } + }); + }) + + const terminateAllClients = () => Promise.all(Array.from(wsServer.clients).map((client) => { + return new Promise((resolve) => { + client.on('close', resolve); + client.terminate(); + }); + })); + + // Disconnect client from server + await terminateAllClients(); + console.log('Disconnected', bscUnit.aggregator.ws.subscriptions); + + expect(wsServer.clients.size).toEqual(0); + await delay(1000); + expect(bscUnit.aggregator.ws.subscriptions).toEqual({}); + + // Await for reconnection + await new Promise((resolve) => { + bscUnit.aggregator.ws.subscribe('aobus', { + payload: 'BTCUSDF', + callback: () => { + console.log('Reconnected', bscUnit.aggregator.ws.subscriptions); + resolve(true); + } + }); + }); + + await new Promise((resolve) => { + if (subId !== undefined) bscUnit.aggregator.ws.unsubscribe(subId); + bscUnit.aggregator.ws.destroy() + wsServer.clients.forEach((client) => { + client.terminate(); + }); + wsServer.close(() => { + resolve(true); + }); + }) + }); }); diff --git a/src/services/Aggregator/ws/index.ts b/src/services/Aggregator/ws/index.ts index bc673f6..88ee0b8 100644 --- a/src/services/Aggregator/ws/index.ts +++ b/src/services/Aggregator/ws/index.ts @@ -19,11 +19,12 @@ import type { fullOrderSchema, orderUpdateSchema } from './schemas/addressUpdate import cfdAddressUpdateSchema from './schemas/cfdAddressUpdateSchema.js'; import futuresTradeInfoSchema from './schemas/futuresTradeInfoSchema.js'; import { objectKeys } from '../../../utils/objectKeys.js'; +// import assertError from '../../../utils/assertError.js'; // import errorSchema from './schemas/errorSchema'; const UNSUBSCRIBE = 'u'; -type SwapSubscriptionRequest = { +type SwapInfoSubscriptionPayload = { // d: string, // swap request UUID, set by client side i: string // asset in o: string // asset out @@ -33,6 +34,13 @@ type SwapSubscriptionRequest = { is?: boolean // instant settlement } +type FuturesTradeInfoPayload = { + s: string // wallet address + i: string // pair + a: number // amount + p?: number // price +} + type BrokerTradableAtomicSwapBalanceSubscription = { callback: (balances: Partial>) => void } @@ -63,17 +71,12 @@ type AggregatedOrderbookSubscription = { } type SwapInfoSubscription = { - payload: SwapSubscriptionRequest + payload: SwapInfoSubscriptionPayload callback: (swapInfo: SwapInfo) => void } type FuturesTradeInfoSubscription = { - payload: { - s: string - i: string - a: number - p?: number - } + payload: FuturesTradeInfoPayload callback: (futuresTradeInfo: FuturesTradeInfo) => void errorCb?: (message: string) => void } @@ -161,6 +164,11 @@ const isSubType = (subType: string): subType is keyof Subscription => Object.val const unknownMessageTypeRegex = /An unknown message type: '(.*)', json: (.*)/; const nonExistentMessageRegex = /Could not cancel nonexistent subscription: (.*)/; + +// type Message = { +// message: Json +// resolve: () => void +// }; class AggregatorWS { private ws?: WebSocket | undefined; @@ -170,7 +178,7 @@ class AggregatorWS { // https://stackoverflow.com/questions/19304157/getting-the-reason-why-websockets-closed-with-close-code-1006 private isClosedIntentionally = false; - private subscriptions: Partial<{ + readonly subscriptions: Partial<{ [K in keyof Subscription]: Partial> }> = {}; @@ -186,6 +194,8 @@ class AggregatorWS { return this.wsUrl; } + readonly instanceId = uuidv4(); + constructor( wsUrl: string, logger?: (msg: string) => void, @@ -196,8 +206,12 @@ class AggregatorWS { this.logger = logger; this.onInit = onInit; this.onError = onError; + + console.log(`Created Aggregator WS instance ${this.instanceId}`); } + // readonly messageQueue: Message[] = []; + private sendRaw(data: BufferLike) { if (this.ws?.readyState === 1) { this.ws.send(data); @@ -224,39 +238,62 @@ class AggregatorWS { type: T, subscription: Subscription[T], ) { - if (!this.ws) this.init(); - const isExclusive = exclusiveSubscriptions.some((t) => t === type); - const subs = this.subscriptions[type]; - if (isExclusive && subs && Object.keys(subs).length > 0) { - throw new Error(`Subscription '${type}' already exists. Please unsubscribe first.`); - } - const id = type === 'aobus' ? ((subscription as any).payload as string) // TODO: Refactor!!! : uuidv4(); - const subRequest: Json = {}; - subRequest['T'] = type; - subRequest['id'] = id; - // TODO Refactor this - if ('payload' in subscription) { - if (typeof subscription.payload === 'string') { - subRequest['S'] = subscription.payload; - } else { - subRequest['S'] = { - d: id, - ...subscription.payload, - }; + const makeSubscription = () => { + const isExclusive = exclusiveSubscriptions.some((t) => t === type); + const subs = this.subscriptions[type]; + if (isExclusive && subs && Object.keys(subs).length > 0) { + throw new Error(`Subscription '${type}' already exists. Please unsubscribe first.`); } + + const subRequest: Json = {}; + subRequest['T'] = type; + subRequest['id'] = id; + + if ('payload' in subscription) { + if (typeof subscription.payload === 'string') { + subRequest['S'] = subscription.payload; + } else { // SwapInfoSubscriptionPayload | FuturesTradeInfoPayload + subRequest['S'] = { ...subscription.payload } + + if (!('s' in subscription.payload)) { // SwapInfoSubscriptionPayload + subRequest['S'] = { + ...subRequest['S'], + d: id, + }; + } + } + } + + this.send(subRequest); + + const subKey = isExclusive ? 'default' : id; + this.subscriptions[type] = { + ...this.subscriptions[type], + [subKey]: subscription, + }; } - this.send(subRequest); + // if (!this.ws) { + // this.initAsync() + // .then(() => { + // console.log(`Aggregator WS ${this.instanceId} is initialized`); + // makeSubscription(); + // }) + // .catch((err) => { + // assertError(err); + // this.onError?.(err.message); + // }); + // } else makeSubscription(); - const subKey = isExclusive ? 'default' : id; - this.subscriptions[type] = { - ...this.subscriptions[type], - [subKey]: subscription, - }; + if (!this.ws) { + this.init(); + console.log(`Aggregator WS ${this.instanceId} is initialized`); + } + makeSubscription(); return id; } @@ -314,6 +351,23 @@ class AggregatorWS { delete this.ws; } + // private initPromise: Promise | null = null; + + // private initAsync() { + // if (!this.initPromise) { + // this.initPromise = new Promise((resolve, reject) => { + // try { + // this.init(); + // resolve(); + // } catch (err) { + // reject(err); + // } + // }); + // } + + // return this.initPromise; + // } + private init(isReconnect = false) { this.isClosedIntentionally = false; this.ws = new WebSocket(this.wsUrl); @@ -328,7 +382,10 @@ class AggregatorWS { // Re-subscribe to all subscriptions if (isReconnect) { const subscriptionsToReconnect = this.subscriptions; - this.subscriptions = {}; + objectKeys(this.subscriptions).forEach((subType) => { + // eslint-disable-next-line @typescript-eslint/no-dynamic-delete + delete this.subscriptions[subType]; + }); Object.keys(subscriptionsToReconnect) .filter(isSubType) .forEach((subType) => { @@ -400,10 +457,10 @@ class AggregatorWS { } break; case MessageType.PING_PONG: - this.sendRaw(data.toString()); + this.sendRaw(data); break; case MessageType.UNSUBSCRIPTION_DONE: - // To implement + // const { id } = json; break; case MessageType.SWAP_INFO: { const baseSwapInfo: SwapInfoBase = { diff --git a/src/utils/assertError.ts b/src/utils/assertError.ts new file mode 100644 index 0000000..c71398f --- /dev/null +++ b/src/utils/assertError.ts @@ -0,0 +1,6 @@ + +export default function assertError(errorCandidate: unknown): asserts errorCandidate is Error { + if (!(errorCandidate instanceof Error)) { + throw Error(`Assertion failed: errorCandidate is not an Error. Content: ${JSON.stringify(errorCandidate)}`); + } +}