From d757e853a2a0a8f0132b7e8fea85a0c14c482540 Mon Sep 17 00:00:00 2001 From: Botrel Kilian Date: Tue, 12 Apr 2022 13:36:17 +0200 Subject: [PATCH 01/17] refactor: infra in dev env (#34) --- dev/local/docker-compose.yml | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/dev/local/docker-compose.yml b/dev/local/docker-compose.yml index 611b2ba..e1f0072 100644 --- a/dev/local/docker-compose.yml +++ b/dev/local/docker-compose.yml @@ -10,11 +10,11 @@ x-logging: &default-logging networks: lnmarkets_backend: external: true - reverse_proxy: + lnmarkets_reverse_proxy: external: true volumes: - lnmarkets_infra_lnd_user: + lnmarkets_lnd_user: external: true services: @@ -24,22 +24,20 @@ services: build: context: ../.. dockerfile: ./apps/api/docker/Dockerfile.dev - dns: 172.81.1.253 ports: - 8001:4242 environment: - - NODE_TLS_REJECT_UNAUTHORIZED=0 - NODE_ENV=development - LND_IP=lnmarkets_lnd_user - - LNMARKETS_API_HOSTNAME=api.lnmarkets.test + - LNMARKETS_API_HOSTNAME=api.kibotrel.lnmarkets.dev - BITCOIN_NETWORK=regtest - APP_PASSWORD=lnmarkets volumes: - ${PWD}/../../apps/api/src:/usr/src/apps/api/src:cached - - lnmarkets_infra_lnd_user:/lnd/:ro + - lnmarkets_lnd_user:/lnd/:ro networks: - lnmarkets_backend - - reverse_proxy + - lnmarkets_reverse_proxy logging: *default-logging front: @@ -69,19 +67,17 @@ services: build: context: ../.. dockerfile: ./Dockerfile - dns: 172.81.1.253 user: root ports: - 4242:4242 environment: - - NODE_TLS_REJECT_UNAUTHORIZED=0 - LND_IP=lnmarkets_lnd_user - - LNMARKETS_API_HOSTNAME=api.lnmarkets.test + - LNMARKETS_API_HOSTNAME=api.kibotrel.lnmarkets.dev - BITCOIN_NETWORK=regtest - APP_PASSWORD=lnmarkets volumes: - - lnmarkets_infra_lnd_user:/lnd/:ro + - lnmarkets_lnd_user:/lnd/:ro networks: - lnmarkets_backend - - reverse_proxy + - lnmarkets_reverse_proxy logging: *default-logging From c21699595ec510a542c33e8b3f32ec602cbf646d Mon Sep 17 00:00:00 2001 From: Botrel Kilian Date: Tue, 12 Apr 2022 15:02:29 +0200 Subject: [PATCH 02/17] chore: dependencies update --- apps/api/package.json | 2 +- package.json | 14 +- pnpm-lock.yaml | 766 +++++++++++++++++++++++++----------------- 3 files changed, 461 insertions(+), 321 deletions(-) diff --git a/apps/api/package.json b/apps/api/package.json index 5efdf75..3fbdf30 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -7,7 +7,7 @@ "license": "MIT", "private": true, "engines": { - "node": ">=14" + "node": ">=16" }, "scripts": { "eslint": "eslint --fix", diff --git a/package.json b/package.json index 01298e7..c607f18 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "author": "BOTREL Kilian ", "private": true, "engines": { - "node": ">=14", + "node": ">=16", "pnpm": ">=6" }, "scripts": { @@ -25,18 +25,18 @@ "devDependencies": { "@commitlint/cli": "^15.0.0", "@commitlint/config-conventional": "^15.0.0", - "eslint": "^8.3.0", - "eslint-config-prettier": "^8.3.0", + "eslint": "^8.13.0", + "eslint-config-prettier": "^8.5.0", "eslint-config-standard": "^16.0.3", "eslint-import-resolver-alias": "^1.1.2", - "eslint-plugin-import": "^2.25.3", + "eslint-plugin-import": "^2.26.0", "eslint-plugin-node": "^11.1.0", "eslint-plugin-prettier": "^4.0.0", - "eslint-plugin-promise": "^5.1.1", + "eslint-plugin-promise": "^5.2.0", "eslint-plugin-tailwindcss": "^1.17.2", - "eslint-plugin-vue": "^8.1.1", + "eslint-plugin-vue": "^8.6.0", "husky": "^7.0.4", - "lint-staged": "^12.1.2", + "lint-staged": "^12.3.7", "nodemon": "^2.0.15", "prettier": "2.2.1" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b5c4cec..51fc4f6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,35 +6,35 @@ importers: specifiers: '@commitlint/cli': ^15.0.0 '@commitlint/config-conventional': ^15.0.0 - eslint: ^8.3.0 - eslint-config-prettier: ^8.3.0 + eslint: ^8.13.0 + eslint-config-prettier: ^8.5.0 eslint-config-standard: ^16.0.3 eslint-import-resolver-alias: ^1.1.2 - eslint-plugin-import: ^2.25.3 + eslint-plugin-import: ^2.26.0 eslint-plugin-node: ^11.1.0 eslint-plugin-prettier: ^4.0.0 - eslint-plugin-promise: ^5.1.1 + eslint-plugin-promise: ^5.2.0 eslint-plugin-tailwindcss: ^1.17.2 - eslint-plugin-vue: ^8.1.1 + eslint-plugin-vue: ^8.6.0 husky: ^7.0.4 - lint-staged: ^12.1.2 + lint-staged: ^12.3.7 nodemon: ^2.0.15 prettier: 2.2.1 devDependencies: '@commitlint/cli': 15.0.0 '@commitlint/config-conventional': 15.0.0 - eslint: 8.3.0 - eslint-config-prettier: 8.3.0_eslint@8.3.0 - eslint-config-standard: 16.0.3_a91986cd61f51e0cdba75303fb12b37d - eslint-import-resolver-alias: 1.1.2_eslint-plugin-import@2.25.3 - eslint-plugin-import: 2.25.3_eslint@8.3.0 - eslint-plugin-node: 11.1.0_eslint@8.3.0 - eslint-plugin-prettier: 4.0.0_843edcb3cc71540567de9d6fc0b08253 - eslint-plugin-promise: 5.1.1_eslint@8.3.0 + eslint: 8.13.0 + eslint-config-prettier: 8.5.0_eslint@8.13.0 + eslint-config-standard: 16.0.3_6960c0c20e52186dd03aaccb5866d131 + eslint-import-resolver-alias: 1.1.2_eslint-plugin-import@2.26.0 + eslint-plugin-import: 2.26.0_eslint@8.13.0 + eslint-plugin-node: 11.1.0_eslint@8.13.0 + eslint-plugin-prettier: 4.0.0_7b849999f0285322972e7e593f1ec452 + eslint-plugin-promise: 5.2.0_eslint@8.13.0 eslint-plugin-tailwindcss: 1.17.2 - eslint-plugin-vue: 8.1.1_eslint@8.3.0 + eslint-plugin-vue: 8.6.0_eslint@8.13.0 husky: 7.0.4 - lint-staged: 12.1.2 + lint-staged: 12.3.7 nodemon: 2.0.15 prettier: 2.2.1 @@ -117,23 +117,23 @@ importers: packages: - /@babel/code-frame/7.15.8: - resolution: {integrity: sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==} + /@babel/code-frame/7.16.7: + resolution: {integrity: sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.14.5 + '@babel/highlight': 7.17.9 dev: true - /@babel/helper-validator-identifier/7.15.7: - resolution: {integrity: sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==} + /@babel/helper-validator-identifier/7.16.7: + resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==} engines: {node: '>=6.9.0'} dev: true - /@babel/highlight/7.14.5: - resolution: {integrity: sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==} + /@babel/highlight/7.17.9: + resolution: {integrity: sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.15.7 + '@babel/helper-validator-identifier': 7.16.7 chalk: 2.4.2 js-tokens: 4.0.0 dev: true @@ -156,14 +156,14 @@ packages: lodash: 4.17.21 resolve-from: 5.0.0 resolve-global: 1.0.0 - yargs: 17.2.1 + yargs: 17.4.1 dev: true /@commitlint/config-conventional/15.0.0: resolution: {integrity: sha512-eZBRL8Lk3hMNHp1wUMYj0qrZQEsST1ai7KHR8J1IDD9aHgT7L2giciibuQ+Og7vxVhR5WtYDvh9xirXFVPaSkQ==} engines: {node: '>=v12'} dependencies: - conventional-changelog-conventionalcommits: 4.6.1 + conventional-changelog-conventionalcommits: 4.6.3 dev: true /@commitlint/ensure/15.0.0: @@ -212,12 +212,12 @@ packages: '@commitlint/execute-rule': 15.0.0 '@commitlint/resolve-extends': 15.0.0 '@commitlint/types': 15.0.0 - '@endemolshinegroup/cosmiconfig-typescript-loader': 3.0.2_b67f536f129c730ed129a6d21d223ba9 + '@endemolshinegroup/cosmiconfig-typescript-loader': 3.0.2_ec5c0ebd3030a0a5109338876648df1b chalk: 4.1.2 cosmiconfig: 7.0.1 lodash: 4.17.21 resolve-from: 5.0.0 - typescript: 4.5.2 + typescript: 4.6.3 dev: true /@commitlint/message/15.0.0: @@ -231,7 +231,7 @@ packages: dependencies: '@commitlint/types': 15.0.0 conventional-changelog-angular: 5.0.13 - conventional-commits-parser: 3.2.3 + conventional-commits-parser: 3.2.4 dev: true /@commitlint/read/15.0.0: @@ -240,8 +240,8 @@ packages: dependencies: '@commitlint/top-level': 15.0.0 '@commitlint/types': 15.0.0 - fs-extra: 10.0.0 - git-raw-commits: 2.0.10 + fs-extra: 10.0.1 + git-raw-commits: 2.0.11 dev: true /@commitlint/resolve-extends/15.0.0: @@ -292,7 +292,7 @@ packages: kuler: 2.0.0 dev: false - /@endemolshinegroup/cosmiconfig-typescript-loader/3.0.2_b67f536f129c730ed129a6d21d223ba9: + /@endemolshinegroup/cosmiconfig-typescript-loader/3.0.2_ec5c0ebd3030a0a5109338876648df1b: resolution: {integrity: sha512-QRVtqJuS1mcT56oHpVegkKBlgtWjXw/gHNWO3eL9oyB5Sc7HBoc2OLG/nYpVfT/Jejvo3NUrD0Udk7XgoyDKkA==} engines: {node: '>=10.0.0'} peerDependencies: @@ -301,24 +301,24 @@ packages: cosmiconfig: 7.0.1 lodash.get: 4.4.2 make-error: 1.3.6 - ts-node: 9.1.1_typescript@4.5.2 + ts-node: 9.1.1_typescript@4.6.3 tslib: 2.3.1 transitivePeerDependencies: - typescript dev: true - /@eslint/eslintrc/1.0.4: - resolution: {integrity: sha512-h8Vx6MdxwWI2WM8/zREHMoqdgLNXEL4QX3MWSVMdyNJGvXVOs+6lp+m2hc3FnuMHDc4poxFNI20vCk0OmI4G0Q==} + /@eslint/eslintrc/1.2.1: + resolution: {integrity: sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.2 - espree: 9.1.0 - globals: 13.12.0 - ignore: 4.0.6 + debug: 4.3.4 + espree: 9.3.1 + globals: 13.13.0 + ignore: 5.2.0 import-fresh: 3.3.0 js-yaml: 4.1.0 - minimatch: 3.0.4 + minimatch: 3.1.2 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color @@ -392,13 +392,13 @@ packages: yargs: 16.2.0 dev: false - /@humanwhocodes/config-array/0.6.0: - resolution: {integrity: sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==} + /@humanwhocodes/config-array/0.9.5: + resolution: {integrity: sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==} engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.2 - minimatch: 3.0.4 + debug: 4.3.4 + minimatch: 3.1.2 transitivePeerDependencies: - supports-color dev: true @@ -766,12 +766,12 @@ packages: negotiator: 0.6.2 dev: false - /acorn-jsx/5.3.2_acorn@8.6.0: + /acorn-jsx/5.3.2_acorn@8.7.0: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.6.0 + acorn: 8.7.0 dev: true /acorn-node/1.8.2: @@ -793,8 +793,8 @@ packages: hasBin: true dev: true - /acorn/8.6.0: - resolution: {integrity: sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==} + /acorn/8.7.0: + resolution: {integrity: sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==} engines: {node: '>=0.4.0'} hasBin: true dev: true @@ -822,11 +822,6 @@ packages: string-width: 4.2.3 dev: true - /ansi-colors/4.1.1: - resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} - engines: {node: '>=6'} - dev: true - /ansi-escapes/4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} @@ -865,7 +860,7 @@ packages: engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 - picomatch: 2.3.0 + picomatch: 2.3.1 dev: true /arg/4.1.3: @@ -894,18 +889,19 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.3 - es-abstract: 1.19.1 + es-abstract: 1.19.3 get-intrinsic: 1.1.1 is-string: 1.0.7 dev: true - /array.prototype.flat/1.2.5: - resolution: {integrity: sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==} + /array.prototype.flat/1.3.0: + resolution: {integrity: sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.1.3 - es-abstract: 1.19.1 + es-abstract: 1.19.3 + es-shim-unscopables: 1.0.0 dev: true /arrify/1.0.1: @@ -1107,7 +1103,7 @@ packages: engines: {node: '>=10'} dependencies: ansi-align: 3.0.1 - camelcase: 6.2.0 + camelcase: 6.3.0 chalk: 4.1.2 cli-boxes: 2.2.1 string-width: 4.2.3 @@ -1168,6 +1164,11 @@ packages: resolution: {integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==} engines: {node: '>= 0.8'} + /bytes/3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + dev: true + /cacheable-request/6.1.0: resolution: {integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==} engines: {node: '>=8'} @@ -1212,8 +1213,8 @@ packages: engines: {node: '>=6'} dev: true - /camelcase/6.2.0: - resolution: {integrity: sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==} + /camelcase/6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} dev: true @@ -1259,6 +1260,21 @@ packages: fsevents: 2.3.2 dev: true + /chokidar/3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.2 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 + dev: true + /ci-info/2.0.0: resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} dev: true @@ -1300,7 +1316,7 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: slice-ansi: 5.0.0 - string-width: 5.0.1 + string-width: 5.1.2 dev: true /cliui/7.0.4: @@ -1339,6 +1355,13 @@ packages: color-name: 1.1.4 simple-swizzle: 0.2.2 + /color-string/1.9.0: + resolution: {integrity: sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==} + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + dev: true + /color/3.2.1: resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} dependencies: @@ -1353,6 +1376,14 @@ packages: color-string: 1.6.0 dev: true + /color/4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + dependencies: + color-convert: 2.0.1 + color-string: 1.9.0 + dev: true + /colorette/2.0.16: resolution: {integrity: sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==} dev: true @@ -1402,7 +1433,7 @@ packages: engines: {node: '>=8'} dependencies: dot-prop: 5.3.0 - graceful-fs: 4.2.8 + graceful-fs: 4.2.10 make-dir: 3.1.0 unique-string: 2.0.0 write-file-atomic: 3.0.3 @@ -1429,8 +1460,8 @@ packages: q: 1.5.1 dev: true - /conventional-changelog-conventionalcommits/4.6.1: - resolution: {integrity: sha512-lzWJpPZhbM1R0PIzkwzGBCnAkH5RKJzJfFQZcl/D+2lsJxAwGnDKBqn/F4C1RD31GJNn8NuKWQzAZDAVXPp2Mw==} + /conventional-changelog-conventionalcommits/4.6.3: + resolution: {integrity: sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==} engines: {node: '>=10'} dependencies: compare-func: 2.0.0 @@ -1438,8 +1469,8 @@ packages: q: 1.5.1 dev: true - /conventional-commits-parser/3.2.3: - resolution: {integrity: sha512-YyRDR7On9H07ICFpRm/igcdjIqebXbvf4Cff+Pf0BrBys1i1EOzx9iFXNlAbdrLAR8jf7bkUYkDAr8pEy0q4Pw==} + /conventional-commits-parser/3.2.4: + resolution: {integrity: sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==} engines: {node: '>=10'} hasBin: true dependencies: @@ -1565,8 +1596,8 @@ packages: ms: 2.1.3 dev: true - /debug/4.3.2: - resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==} + /debug/4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -1577,8 +1608,8 @@ packages: ms: 2.1.2 dev: true - /debug/4.3.2_supports-color@9.2.1: - resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==} + /debug/4.3.4_supports-color@9.2.2: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -1587,7 +1618,7 @@ packages: optional: true dependencies: ms: 2.1.2 - supports-color: 9.2.1 + supports-color: 9.2.2 dev: true /decamelize-keys/1.1.0: @@ -1665,7 +1696,7 @@ packages: dependencies: acorn-node: 1.8.2 defined: 1.0.0 - minimist: 1.2.5 + minimist: 1.2.6 dev: true /didyoumean/1.2.2: @@ -1706,6 +1737,10 @@ packages: resolution: {integrity: sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=} dev: true + /eastasianwidth/0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dev: true + /ee-first/1.1.1: resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=} dev: false @@ -1748,21 +1783,14 @@ packages: once: 1.4.0 dev: true - /enquirer/2.3.6: - resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} - engines: {node: '>=8.6'} - dependencies: - ansi-colors: 4.1.1 - dev: true - /error-ex/1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 dev: true - /es-abstract/1.19.1: - resolution: {integrity: sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==} + /es-abstract/1.19.3: + resolution: {integrity: sha512-4axXLNovnMYf0+csS5rVnS5hLmV1ek+ecx9MuCjByL1E5Nn54avf6CHQxIjgQIHBnfX9AMxTRIy0q+Yu5J/fXA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 @@ -1771,15 +1799,15 @@ packages: get-intrinsic: 1.1.1 get-symbol-description: 1.0.0 has: 1.0.3 - has-symbols: 1.0.2 + has-symbols: 1.0.3 internal-slot: 1.0.3 is-callable: 1.2.4 - is-negative-zero: 2.0.1 + is-negative-zero: 2.0.2 is-regex: 1.1.4 - is-shared-array-buffer: 1.0.1 + is-shared-array-buffer: 1.0.2 is-string: 1.0.7 - is-weakref: 1.0.1 - object-inspect: 1.11.0 + is-weakref: 1.0.2 + object-inspect: 1.12.0 object-keys: 1.1.1 object.assign: 4.1.2 string.prototype.trimend: 1.0.4 @@ -1787,6 +1815,12 @@ packages: unbox-primitive: 1.0.1 dev: true + /es-shim-unscopables/1.0.0: + resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} + dependencies: + has: 1.0.3 + dev: true + /es-to-primitive/1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} @@ -1978,16 +2012,16 @@ packages: engines: {node: '>=10'} dev: true - /eslint-config-prettier/8.3.0_eslint@8.3.0: - resolution: {integrity: sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==} + /eslint-config-prettier/8.5.0_eslint@8.13.0: + resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.3.0 + eslint: 8.13.0 dev: true - /eslint-config-standard/16.0.3_a91986cd61f51e0cdba75303fb12b37d: + /eslint-config-standard/16.0.3_6960c0c20e52186dd03aaccb5866d131: resolution: {integrity: sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==} peerDependencies: eslint: ^7.12.1 @@ -1995,86 +2029,85 @@ packages: eslint-plugin-node: ^11.1.0 eslint-plugin-promise: ^4.2.1 || ^5.0.0 dependencies: - eslint: 8.3.0 - eslint-plugin-import: 2.25.3_eslint@8.3.0 - eslint-plugin-node: 11.1.0_eslint@8.3.0 - eslint-plugin-promise: 5.1.1_eslint@8.3.0 + eslint: 8.13.0 + eslint-plugin-import: 2.26.0_eslint@8.13.0 + eslint-plugin-node: 11.1.0_eslint@8.13.0 + eslint-plugin-promise: 5.2.0_eslint@8.13.0 dev: true - /eslint-import-resolver-alias/1.1.2_eslint-plugin-import@2.25.3: + /eslint-import-resolver-alias/1.1.2_eslint-plugin-import@2.26.0: resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} engines: {node: '>= 4'} peerDependencies: eslint-plugin-import: '>=1.4.0' dependencies: - eslint-plugin-import: 2.25.3_eslint@8.3.0 + eslint-plugin-import: 2.26.0_eslint@8.13.0 dev: true /eslint-import-resolver-node/0.3.6: resolution: {integrity: sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==} dependencies: debug: 3.2.7 - resolve: 1.20.0 + resolve: 1.22.0 dev: true - /eslint-module-utils/2.7.1: - resolution: {integrity: sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ==} + /eslint-module-utils/2.7.3: + resolution: {integrity: sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==} engines: {node: '>=4'} dependencies: debug: 3.2.7 find-up: 2.1.0 - pkg-dir: 2.0.0 dev: true - /eslint-plugin-es/3.0.1_eslint@8.3.0: + /eslint-plugin-es/3.0.1_eslint@8.13.0: resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} engines: {node: '>=8.10.0'} peerDependencies: eslint: '>=4.19.1' dependencies: - eslint: 8.3.0 + eslint: 8.13.0 eslint-utils: 2.1.0 regexpp: 3.2.0 dev: true - /eslint-plugin-import/2.25.3_eslint@8.3.0: - resolution: {integrity: sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg==} + /eslint-plugin-import/2.26.0_eslint@8.13.0: + resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} engines: {node: '>=4'} peerDependencies: eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 dependencies: array-includes: 3.1.4 - array.prototype.flat: 1.2.5 + array.prototype.flat: 1.3.0 debug: 2.6.9 doctrine: 2.1.0 - eslint: 8.3.0 + eslint: 8.13.0 eslint-import-resolver-node: 0.3.6 - eslint-module-utils: 2.7.1 + eslint-module-utils: 2.7.3 has: 1.0.3 - is-core-module: 2.8.0 + is-core-module: 2.8.1 is-glob: 4.0.3 - minimatch: 3.0.4 + minimatch: 3.1.2 object.values: 1.1.5 - resolve: 1.20.0 - tsconfig-paths: 3.11.0 + resolve: 1.22.0 + tsconfig-paths: 3.14.1 dev: true - /eslint-plugin-node/11.1.0_eslint@8.3.0: + /eslint-plugin-node/11.1.0_eslint@8.13.0: resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} engines: {node: '>=8.10.0'} peerDependencies: eslint: '>=5.16.0' dependencies: - eslint: 8.3.0 - eslint-plugin-es: 3.0.1_eslint@8.3.0 + eslint: 8.13.0 + eslint-plugin-es: 3.0.1_eslint@8.13.0 eslint-utils: 2.1.0 - ignore: 5.1.9 - minimatch: 3.0.4 - resolve: 1.20.0 + ignore: 5.2.0 + minimatch: 3.1.2 + resolve: 1.22.0 semver: 6.3.0 dev: true - /eslint-plugin-prettier/4.0.0_843edcb3cc71540567de9d6fc0b08253: + /eslint-plugin-prettier/4.0.0_7b849999f0285322972e7e593f1ec452: resolution: {integrity: sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==} engines: {node: '>=6.0.0'} peerDependencies: @@ -2085,58 +2118,50 @@ packages: eslint-config-prettier: optional: true dependencies: - eslint: 8.3.0 - eslint-config-prettier: 8.3.0_eslint@8.3.0 + eslint: 8.13.0 + eslint-config-prettier: 8.5.0_eslint@8.13.0 prettier: 2.2.1 prettier-linter-helpers: 1.0.0 dev: true - /eslint-plugin-promise/5.1.1_eslint@8.3.0: - resolution: {integrity: sha512-XgdcdyNzHfmlQyweOPTxmc7pIsS6dE4MvwhXWMQ2Dxs1XAL2GJDilUsjWen6TWik0aSI+zD/PqocZBblcm9rdA==} + /eslint-plugin-promise/5.2.0_eslint@8.13.0: + resolution: {integrity: sha512-SftLb1pUG01QYq2A/hGAWfDRXqYD82zE7j7TopDOyNdU+7SvvoXREls/+PRTY17vUXzXnZA/zfnyKgRH6x4JJw==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: eslint: ^7.0.0 dependencies: - eslint: 8.3.0 + eslint: 8.13.0 dev: true /eslint-plugin-tailwindcss/1.17.2: resolution: {integrity: sha512-cQWP7bSdJHcnBIv/eCXqerMYiwn7qfpyRvqzCiGhttWBhjr+h5q6XsAgg967mdUeJzzQr+68ETXNHLkCK7KJQA==} engines: {node: '>=12.13.0'} dependencies: - fast-glob: 3.2.7 - postcss: 8.3.11 - tailwindcss: 2.2.19_postcss@8.3.11 + fast-glob: 3.2.11 + postcss: 8.4.12 + tailwindcss: 2.2.19_postcss@8.4.12 transitivePeerDependencies: - autoprefixer - ts-node dev: true - /eslint-plugin-vue/8.1.1_eslint@8.3.0: - resolution: {integrity: sha512-rx64IrlhdfPya6u2V5ukOGiLCTgaCBdMSpczLVqyo8A0l+Vbo+lzvIfEUfAQ2auj+MF6y0TwxLorzdCIzHunnw==} + /eslint-plugin-vue/8.6.0_eslint@8.13.0: + resolution: {integrity: sha512-abXiF2J18n/7ZPy9foSlJyouKf54IqpKlNvNmzhM93N0zs3QUxZG/oBd3tVPOJTKg7SlhBUtPxugpqzNbgGpQQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 dependencies: - eslint: 8.3.0 - eslint-utils: 3.0.0_eslint@8.3.0 + eslint: 8.13.0 + eslint-utils: 3.0.0_eslint@8.13.0 natural-compare: 1.4.0 - semver: 7.3.5 - vue-eslint-parser: 8.0.1_eslint@8.3.0 + semver: 7.3.6 + vue-eslint-parser: 8.3.0_eslint@8.13.0 transitivePeerDependencies: - supports-color dev: true - /eslint-scope/6.0.0: - resolution: {integrity: sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - dev: true - - /eslint-scope/7.1.0: - resolution: {integrity: sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==} + /eslint-scope/7.1.1: + resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: esrecurse: 4.3.0 @@ -2150,13 +2175,13 @@ packages: eslint-visitor-keys: 1.3.0 dev: true - /eslint-utils/3.0.0_eslint@8.3.0: + /eslint-utils/3.0.0_eslint@8.13.0: resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: eslint: '>=5' dependencies: - eslint: 8.3.0 + eslint: 8.13.0 eslint-visitor-keys: 2.1.0 dev: true @@ -2170,37 +2195,36 @@ packages: engines: {node: '>=10'} dev: true - /eslint-visitor-keys/3.1.0: - resolution: {integrity: sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==} + /eslint-visitor-keys/3.3.0: + resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint/8.3.0: - resolution: {integrity: sha512-aIay56Ph6RxOTC7xyr59Kt3ewX185SaGnAr8eWukoPLeriCrvGjvAubxuvaXOfsxhtwV5g0uBOsyhAom4qJdww==} + /eslint/8.13.0: + resolution: {integrity: sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint/eslintrc': 1.0.4 - '@humanwhocodes/config-array': 0.6.0 + '@eslint/eslintrc': 1.2.1 + '@humanwhocodes/config-array': 0.9.5 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.2 + debug: 4.3.4 doctrine: 3.0.0 - enquirer: 2.3.6 escape-string-regexp: 4.0.0 - eslint-scope: 7.1.0 - eslint-utils: 3.0.0_eslint@8.3.0 - eslint-visitor-keys: 3.1.0 - espree: 9.1.0 + eslint-scope: 7.1.1 + eslint-utils: 3.0.0_eslint@8.13.0 + eslint-visitor-keys: 3.3.0 + espree: 9.3.1 esquery: 1.4.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 functional-red-black-tree: 1.0.1 glob-parent: 6.0.2 - globals: 13.12.0 - ignore: 4.0.6 + globals: 13.13.0 + ignore: 5.2.0 import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 @@ -2208,12 +2232,10 @@ packages: json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 lodash.merge: 4.6.2 - minimatch: 3.0.4 + minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.1 - progress: 2.0.3 regexpp: 3.2.0 - semver: 7.3.5 strip-ansi: 6.0.1 strip-json-comments: 3.1.1 text-table: 0.2.0 @@ -2222,13 +2244,13 @@ packages: - supports-color dev: true - /espree/9.1.0: - resolution: {integrity: sha512-ZgYLvCS1wxOczBYGcQT9DDWgicXwJ4dbocr9uYN+/eresBAUuBu+O4WzB21ufQ/JqQT8gyp7hJ3z8SHii32mTQ==} + /espree/9.3.1: + resolution: {integrity: sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.6.0 - acorn-jsx: 5.3.2_acorn@8.6.0 - eslint-visitor-keys: 3.1.0 + acorn: 8.7.0 + acorn-jsx: 5.3.2_acorn@8.7.0 + eslint-visitor-keys: 3.3.0 dev: true /esquery/1.4.0: @@ -2278,7 +2300,7 @@ packages: merge-stream: 2.0.0 npm-run-path: 4.0.1 onetime: 5.1.2 - signal-exit: 3.0.6 + signal-exit: 3.0.7 strip-final-newline: 2.0.0 dev: true @@ -2351,6 +2373,17 @@ packages: resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} dev: true + /fast-glob/3.2.11: + resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + /fast-glob/3.2.7: resolution: {integrity: sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==} engines: {node: '>=8'} @@ -2438,12 +2471,12 @@ packages: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flatted: 3.2.2 + flatted: 3.2.5 rimraf: 3.0.2 dev: true - /flatted/3.2.2: - resolution: {integrity: sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==} + /flatted/3.2.5: + resolution: {integrity: sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==} dev: true /fn.name/1.1.0: @@ -2482,6 +2515,15 @@ packages: universalify: 2.0.0 dev: true + /fs-extra/10.0.1: + resolution: {integrity: sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==} + engines: {node: '>=12'} + dependencies: + graceful-fs: 4.2.10 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: true + /fs.realpath/1.0.0: resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} dev: true @@ -2511,7 +2553,7 @@ packages: dependencies: function-bind: 1.1.1 has: 1.0.3 - has-symbols: 1.0.2 + has-symbols: 1.0.3 dev: true /get-stream/4.1.0: @@ -2541,8 +2583,8 @@ packages: get-intrinsic: 1.1.1 dev: true - /git-raw-commits/2.0.10: - resolution: {integrity: sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==} + /git-raw-commits/2.0.11: + resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} engines: {node: '>=10'} hasBin: true dependencies: @@ -2573,7 +2615,7 @@ packages: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.0.4 + minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 dev: true @@ -2592,8 +2634,8 @@ packages: ini: 2.0.0 dev: true - /globals/13.12.0: - resolution: {integrity: sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==} + /globals/13.13.0: + resolution: {integrity: sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 @@ -2616,6 +2658,10 @@ packages: url-parse-lax: 3.0.0 dev: true + /graceful-fs/4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + dev: true + /graceful-fs/4.2.8: resolution: {integrity: sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==} dev: true @@ -2638,8 +2684,8 @@ packages: engines: {node: '>=8'} dev: true - /has-symbols/1.0.2: - resolution: {integrity: sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==} + /has-symbols/1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} dev: true @@ -2647,7 +2693,7 @@ packages: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} dependencies: - has-symbols: 1.0.2 + has-symbols: 1.0.3 dev: true /has-yarn/2.1.0: @@ -2699,8 +2745,8 @@ packages: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true - /hosted-git-info/4.0.2: - resolution: {integrity: sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==} + /hosted-git-info/4.1.0: + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} engines: {node: '>=10'} dependencies: lru-cache: 6.0.0 @@ -2719,6 +2765,11 @@ packages: engines: {node: '>=8'} dev: true + /html-tags/3.2.0: + resolution: {integrity: sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==} + engines: {node: '>=8'} + dev: true + /http-cache-semantics/4.1.0: resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==} dev: true @@ -2767,13 +2818,8 @@ packages: resolution: {integrity: sha1-SMptcvbGo68Aqa1K5odr44ieKwk=} dev: true - /ignore/4.0.6: - resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} - engines: {node: '>= 4'} - dev: true - - /ignore/5.1.9: - resolution: {integrity: sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==} + /ignore/5.2.0: + resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} engines: {node: '>= 4'} dev: true @@ -2920,6 +2966,12 @@ packages: has: 1.0.3 dev: true + /is-core-module/2.8.1: + resolution: {integrity: sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==} + dependencies: + has: 1.0.3 + dev: true + /is-date-object/1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} @@ -2956,8 +3008,8 @@ packages: is-path-inside: 3.0.3 dev: true - /is-negative-zero/2.0.1: - resolution: {integrity: sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==} + /is-negative-zero/2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} dev: true @@ -2966,8 +3018,8 @@ packages: engines: {node: '>=10'} dev: true - /is-number-object/1.0.6: - resolution: {integrity: sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==} + /is-number-object/1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 @@ -3001,8 +3053,10 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-shared-array-buffer/1.0.1: - resolution: {integrity: sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==} + /is-shared-array-buffer/1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + dependencies: + call-bind: 1.0.2 dev: true /is-stream/2.0.1: @@ -3020,7 +3074,7 @@ packages: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} dependencies: - has-symbols: 1.0.2 + has-symbols: 1.0.3 dev: true /is-text-path/1.0.1: @@ -3034,8 +3088,8 @@ packages: resolution: {integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=} dev: true - /is-weakref/1.0.1: - resolution: {integrity: sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==} + /is-weakref/1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.2 dev: true @@ -3083,7 +3137,7 @@ packages: resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==} hasBin: true dependencies: - minimist: 1.2.5 + minimist: 1.2.6 dev: true /jsonfile/6.1.0: @@ -3091,7 +3145,7 @@ packages: dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: 4.2.8 + graceful-fs: 4.2.10 dev: true /jsonparse/1.3.1: @@ -3163,34 +3217,41 @@ packages: engines: {node: '>=10'} dev: true - /lines-and-columns/1.1.6: - resolution: {integrity: sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=} + /lilconfig/2.0.5: + resolution: {integrity: sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==} + engines: {node: '>=10'} + dev: true + + /lines-and-columns/1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true - /lint-staged/12.1.2: - resolution: {integrity: sha512-bSMcQVqMW98HLLLR2c2tZ+vnDCnx4fd+0QJBQgN/4XkdspGRPc8DGp7UuOEBe1ApCfJ+wXXumYnJmU+wDo7j9A==} + /lint-staged/12.3.7: + resolution: {integrity: sha512-/S4D726e2GIsDVWIk1XGvheCaDm1SJRQp8efamZFWJxQMVEbOwSysp7xb49Oo73KYCdy97mIWinhlxcoNqIfIQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true dependencies: cli-truncate: 3.1.0 colorette: 2.0.16 commander: 8.3.0 - debug: 4.3.2_supports-color@9.2.1 - enquirer: 2.3.6 + debug: 4.3.4_supports-color@9.2.2 execa: 5.1.1 lilconfig: 2.0.4 - listr2: 3.13.5_enquirer@2.3.6 - micromatch: 4.0.4 + listr2: 4.0.5 + micromatch: 4.0.5 normalize-path: 3.0.0 - object-inspect: 1.11.0 + object-inspect: 1.12.0 + pidtree: 0.5.0 string-argv: 0.3.1 - supports-color: 9.2.1 + supports-color: 9.2.2 yaml: 1.10.2 + transitivePeerDependencies: + - enquirer dev: true - /listr2/3.13.5_enquirer@2.3.6: - resolution: {integrity: sha512-3n8heFQDSk+NcwBn3CgxEibZGaRzx+pC64n3YjpMD1qguV4nWus3Al+Oo3KooqFKTQEJ1v7MmnbnyyNspgx3NA==} - engines: {node: '>=10.0.0'} + /listr2/4.0.5: + resolution: {integrity: sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==} + engines: {node: '>=12'} peerDependencies: enquirer: '>= 2.3.0 < 3' peerDependenciesMeta: @@ -3199,11 +3260,10 @@ packages: dependencies: cli-truncate: 2.1.0 colorette: 2.0.16 - enquirer: 2.3.6 log-update: 4.0.0 p-map: 4.0.0 rfdc: 1.3.0 - rxjs: 7.4.0 + rxjs: 7.5.5 through: 2.3.8 wrap-ansi: 7.0.0 dev: true @@ -3307,6 +3367,11 @@ packages: yallist: 4.0.0 dev: true + /lru-cache/7.8.1: + resolution: {integrity: sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==} + engines: {node: '>=12'} + dev: true + /macaroon/3.0.4: resolution: {integrity: sha512-Tja2jvupseKxltPZbu5RPSz2Pgh6peYA3O46YCTcYL8PI1VqtGwDqRhGfP8pows26xx9wTiygk+en62Bq+Y8JA==} dependencies: @@ -3401,6 +3466,14 @@ packages: picomatch: 2.3.0 dev: true + /micromatch/4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + /mime-db/1.51.0: resolution: {integrity: sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==} engines: {node: '>= 0.6'} @@ -3442,8 +3515,8 @@ packages: resolution: {integrity: sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=} dev: false - /minimatch/3.0.4: - resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} + /minimatch/3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 dev: true @@ -3457,8 +3530,8 @@ packages: kind-of: 6.0.3 dev: true - /minimist/1.2.5: - resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==} + /minimist/1.2.6: + resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==} dev: true /mitt/3.0.0: @@ -3508,6 +3581,12 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + /nanoid/3.3.2: + resolution: {integrity: sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + /natural-compare/1.4.0: resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=} dev: true @@ -3542,10 +3621,10 @@ packages: hasBin: true requiresBuild: true dependencies: - chokidar: 3.5.2 + chokidar: 3.5.3 debug: 3.2.7 ignore-by-default: 1.0.1 - minimatch: 3.0.4 + minimatch: 3.1.2 pstree.remy: 1.1.8 semver: 5.7.1 supports-color: 5.5.0 @@ -3570,7 +3649,7 @@ packages: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: hosted-git-info: 2.8.9 - resolve: 1.20.0 + resolve: 1.22.0 semver: 5.7.1 validate-npm-package-license: 3.0.4 dev: true @@ -3579,9 +3658,9 @@ packages: resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} engines: {node: '>=10'} dependencies: - hosted-git-info: 4.0.2 - is-core-module: 2.8.0 - semver: 7.3.5 + hosted-git-info: 4.1.0 + is-core-module: 2.8.1 + semver: 7.3.6 validate-npm-package-license: 3.0.4 dev: true @@ -3617,8 +3696,8 @@ packages: engines: {node: '>= 6'} dev: true - /object-inspect/1.11.0: - resolution: {integrity: sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==} + /object-inspect/1.12.0: + resolution: {integrity: sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==} dev: true /object-keys/1.1.1: @@ -3632,7 +3711,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.3 - has-symbols: 1.0.2 + has-symbols: 1.0.3 object-keys: 1.1.1 dev: true @@ -3642,7 +3721,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.3 - es-abstract: 1.19.1 + es-abstract: 1.19.3 dev: true /on-finished/2.3.0: @@ -3773,10 +3852,10 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.15.8 + '@babel/code-frame': 7.16.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.1.6 + lines-and-columns: 1.2.4 dev: true /parseurl/1.3.3: @@ -3836,11 +3915,15 @@ packages: engines: {node: '>=8.6'} dev: true - /pkg-dir/2.0.0: - resolution: {integrity: sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=} - engines: {node: '>=4'} - dependencies: - find-up: 2.1.0 + /picomatch/2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /pidtree/0.5.0: + resolution: {integrity: sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==} + engines: {node: '>=0.10'} + hasBin: true dev: true /postcss-js/3.0.3: @@ -3848,7 +3931,7 @@ packages: engines: {node: '>=10.0'} dependencies: camelcase-css: 2.0.1 - postcss: 8.4.1 + postcss: 8.4.12 dev: true /postcss-load-config/3.1.0: @@ -3865,24 +3948,49 @@ packages: yaml: 1.10.2 dev: true - /postcss-nested/5.0.6_postcss@8.3.11: + /postcss-load-config/3.1.4_postcss@8.4.12: + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} + engines: {node: '>= 10'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.0.5 + postcss: 8.4.12 + yaml: 1.10.2 + dev: true + + /postcss-nested/5.0.6_postcss@8.4.1: resolution: {integrity: sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 dependencies: - postcss: 8.3.11 + postcss: 8.4.1 postcss-selector-parser: 6.0.6 dev: true - /postcss-nested/5.0.6_postcss@8.4.1: + /postcss-nested/5.0.6_postcss@8.4.12: resolution: {integrity: sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 dependencies: - postcss: 8.4.1 - postcss-selector-parser: 6.0.6 + postcss: 8.4.12 + postcss-selector-parser: 6.0.10 + dev: true + + /postcss-selector-parser/6.0.10: + resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 dev: true /postcss-selector-parser/6.0.6: @@ -3901,13 +4009,8 @@ packages: resolution: {integrity: sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==} dev: true - /postcss/8.3.11: - resolution: {integrity: sha512-hCmlUAIlUiav8Xdqw3Io4LcpA1DOt7h3LSTAC4G6JGHFFaWzI6qvFt9oilvl8BmkbBRX1IhM90ZAmpk68zccQA==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.1.30 - picocolors: 1.0.0 - source-map-js: 0.6.2 + /postcss-value-parser/4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} dev: true /postcss/8.4.1: @@ -3918,6 +4021,15 @@ packages: picocolors: 1.0.0 source-map-js: 1.0.1 + /postcss/8.4.12: + resolution: {integrity: sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.2 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + /prelude-ls/1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -3950,11 +4062,6 @@ packages: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: false - /progress/2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} - dev: true - /protobufjs/6.11.2: resolution: {integrity: sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==} hasBin: true @@ -4027,6 +4134,16 @@ packages: postcss-selector-parser: 6.0.6 dev: true + /purgecss/4.1.3: + resolution: {integrity: sha512-99cKy4s+VZoXnPxaoM23e5ABcP851nC2y2GROkkjS8eJaJtlciGavd7iYAw2V84WeBqggZ12l8ef44G99HmTaw==} + hasBin: true + dependencies: + commander: 8.3.0 + glob: 7.2.0 + postcss: 8.4.12 + postcss-selector-parser: 6.0.10 + dev: true + /pushdata-bitcoin/1.0.1: resolution: {integrity: sha1-FZMdPNlnreUiBvUjqnMxrvfUOvc=} dependencies: @@ -4089,7 +4206,7 @@ packages: dependencies: deep-extend: 0.6.0 ini: 1.3.8 - minimist: 1.2.5 + minimist: 1.2.6 strip-json-comments: 2.0.1 dev: true @@ -4136,7 +4253,7 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} dependencies: - picomatch: 2.3.0 + picomatch: 2.3.1 dev: true /redent/3.0.0: @@ -4201,6 +4318,15 @@ packages: path-parse: 1.0.7 dev: true + /resolve/1.22.0: + resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==} + hasBin: true + dependencies: + is-core-module: 2.8.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + /responselike/1.0.2: resolution: {integrity: sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=} dependencies: @@ -4212,7 +4338,7 @@ packages: engines: {node: '>=8'} dependencies: onetime: 5.1.2 - signal-exit: 3.0.6 + signal-exit: 3.0.7 dev: true /reusify/1.0.4: @@ -4260,10 +4386,10 @@ packages: queue-microtask: 1.2.3 dev: true - /rxjs/7.4.0: - resolution: {integrity: sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==} + /rxjs/7.5.5: + resolution: {integrity: sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==} dependencies: - tslib: 2.1.0 + tslib: 2.3.1 dev: true /safe-buffer/5.1.2: @@ -4316,6 +4442,14 @@ packages: lru-cache: 6.0.0 dev: true + /semver/7.3.6: + resolution: {integrity: sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==} + engines: {node: ^10.0.0 || ^12.0.0 || ^14.0.0 || >=16.0.0} + hasBin: true + dependencies: + lru-cache: 7.8.1 + dev: true + /send/0.17.1: resolution: {integrity: sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==} engines: {node: '>= 0.8.0'} @@ -4378,11 +4512,11 @@ packages: dependencies: call-bind: 1.0.2 get-intrinsic: 1.1.1 - object-inspect: 1.11.0 + object-inspect: 1.12.0 dev: true - /signal-exit/3.0.6: - resolution: {integrity: sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==} + /signal-exit/3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true /simple-swizzle/0.2.2: @@ -4420,15 +4554,15 @@ packages: is-fullwidth-code-point: 4.0.0 dev: true - /source-map-js/0.6.2: - resolution: {integrity: sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==} - engines: {node: '>=0.10.0'} - dev: true - /source-map-js/1.0.1: resolution: {integrity: sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==} engines: {node: '>=0.10.0'} + /source-map-js/1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + dev: true + /source-map-support/0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: @@ -4493,12 +4627,12 @@ packages: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - /string-width/5.0.1: - resolution: {integrity: sha512-5ohWO/M4//8lErlUUtrFy3b11GtNOuMOU0ysKCDXFcfXuuvUXu95akgj/i8ofmaGdN0hCqyl6uu9i8dS/mQp5g==} + /string-width/5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} dependencies: + eastasianwidth: 0.2.0 emoji-regex: 9.2.2 - is-fullwidth-code-point: 4.0.0 strip-ansi: 7.0.1 dev: true @@ -4580,11 +4714,16 @@ packages: has-flag: 4.0.0 dev: true - /supports-color/9.2.1: - resolution: {integrity: sha512-Obv7ycoCTG51N7y175StI9BlAXrmgZrFhZOb0/PyjHBher/NmsdBgbbQ1Inhq+gIhz6+7Gb+jWF2Vqi7Mf1xnQ==} + /supports-color/9.2.2: + resolution: {integrity: sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA==} engines: {node: '>=12'} dev: true + /supports-preserve-symlinks-flag/1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + /tailwindcss/2.2.19_343577c3dd31b4e787406ab8c6576ff6: resolution: {integrity: sha512-6Ui7JSVtXadtTUo2NtkBBacobzWiQYVjYW0ZnKaP9S1ZCKQ0w7KVNz+YSDI/j7O7KCMHbOkz94ZMQhbT9pOqjw==} engines: {node: '>=12.13.0'} @@ -4631,7 +4770,7 @@ packages: - ts-node dev: true - /tailwindcss/2.2.19_postcss@8.3.11: + /tailwindcss/2.2.19_postcss@8.4.12: resolution: {integrity: sha512-6Ui7JSVtXadtTUo2NtkBBacobzWiQYVjYW0ZnKaP9S1ZCKQ0w7KVNz+YSDI/j7O7KCMHbOkz94ZMQhbT9pOqjw==} engines: {node: '>=12.13.0'} hasBin: true @@ -4640,18 +4779,18 @@ packages: postcss: ^8.0.9 dependencies: arg: 5.0.1 - bytes: 3.1.0 + bytes: 3.1.2 chalk: 4.1.2 - chokidar: 3.5.2 - color: 4.0.1 + chokidar: 3.5.3 + color: 4.2.3 cosmiconfig: 7.0.1 detective: 5.2.0 didyoumean: 1.2.2 dlv: 1.1.3 - fast-glob: 3.2.7 - fs-extra: 10.0.0 + fast-glob: 3.2.11 + fs-extra: 10.0.1 glob-parent: 6.0.2 - html-tags: 3.1.0 + html-tags: 3.2.0 is-color-stop: 1.1.0 is-glob: 4.0.3 lodash: 4.17.21 @@ -4660,17 +4799,17 @@ packages: node-emoji: 1.11.0 normalize-path: 3.0.0 object-hash: 2.2.0 - postcss: 8.3.11 + postcss: 8.4.12 postcss-js: 3.0.3 - postcss-load-config: 3.1.0 - postcss-nested: 5.0.6_postcss@8.3.11 - postcss-selector-parser: 6.0.6 - postcss-value-parser: 4.1.0 + postcss-load-config: 3.1.4_postcss@8.4.12 + postcss-nested: 5.0.6_postcss@8.4.12 + postcss-selector-parser: 6.0.10 + postcss-value-parser: 4.2.0 pretty-hrtime: 1.0.3 - purgecss: 4.0.3 + purgecss: 4.1.3 quick-lru: 5.1.1 reduce-css-calc: 2.1.8 - resolve: 1.20.0 + resolve: 1.22.0 tmp: 0.2.1 transitivePeerDependencies: - ts-node @@ -4758,7 +4897,7 @@ packages: resolution: {integrity: sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==} dev: false - /ts-node/9.1.1_typescript@4.5.2: + /ts-node/9.1.1_typescript@4.6.3: resolution: {integrity: sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==} engines: {node: '>=10.0.0'} hasBin: true @@ -4770,23 +4909,19 @@ packages: diff: 4.0.2 make-error: 1.3.6 source-map-support: 0.5.21 - typescript: 4.5.2 + typescript: 4.6.3 yn: 3.1.1 dev: true - /tsconfig-paths/3.11.0: - resolution: {integrity: sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA==} + /tsconfig-paths/3.14.1: + resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==} dependencies: '@types/json5': 0.0.29 json5: 1.0.1 - minimist: 1.2.5 + minimist: 1.2.6 strip-bom: 3.0.0 dev: true - /tslib/2.1.0: - resolution: {integrity: sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==} - dev: true - /tslib/2.3.1: resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==} dev: true @@ -4854,8 +4989,8 @@ packages: resolution: {integrity: sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==} dev: false - /typescript/4.5.2: - resolution: {integrity: sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==} + /typescript/4.6.3: + resolution: {integrity: sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==} engines: {node: '>=4.2.0'} hasBin: true dev: true @@ -4877,7 +5012,7 @@ packages: dependencies: function-bind: 1.1.1 has-bigints: 1.0.1 - has-symbols: 1.0.2 + has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 dev: true @@ -4917,7 +5052,7 @@ packages: is-yarn-global: 0.3.0 latest-version: 5.1.0 pupa: 2.1.1 - semver: 7.3.5 + semver: 7.3.6 semver-diff: 3.1.1 xdg-basedir: 4.0.0 dev: true @@ -4989,20 +5124,20 @@ packages: fsevents: 2.3.2 dev: true - /vue-eslint-parser/8.0.1_eslint@8.3.0: - resolution: {integrity: sha512-lhWjDXJhe3UZw2uu3ztX51SJAPGPey1Tff2RK3TyZURwbuI4vximQLzz4nQfCv8CZq4xx7uIiogHMMoSJPr33A==} + /vue-eslint-parser/8.3.0_eslint@8.13.0: + resolution: {integrity: sha512-dzHGG3+sYwSf6zFBa0Gi9ZDshD7+ad14DGOdTLjruRVgZXe2J+DcZ9iUhyR48z5g1PqRa20yt3Njna/veLJL/g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' dependencies: - debug: 4.3.2 - eslint: 8.3.0 - eslint-scope: 6.0.0 - eslint-visitor-keys: 3.1.0 - espree: 9.1.0 + debug: 4.3.4 + eslint: 8.13.0 + eslint-scope: 7.1.1 + eslint-visitor-keys: 3.3.0 + espree: 9.3.1 esquery: 1.4.0 lodash: 4.17.21 - semver: 7.3.5 + semver: 7.3.6 transitivePeerDependencies: - supports-color dev: true @@ -5054,7 +5189,7 @@ packages: dependencies: is-bigint: 1.0.4 is-boolean-object: 1.1.2 - is-number-object: 1.0.6 + is-number-object: 1.0.7 is-string: 1.0.7 is-symbol: 1.0.4 dev: true @@ -5134,7 +5269,7 @@ packages: dependencies: imurmurhash: 0.1.4 is-typedarray: 1.0.0 - signal-exit: 3.0.6 + signal-exit: 3.0.7 typedarray-to-buffer: 3.1.5 dev: true @@ -5191,6 +5326,11 @@ packages: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} + /yargs-parser/21.0.1: + resolution: {integrity: sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==} + engines: {node: '>=12'} + dev: true + /yargs/16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} engines: {node: '>=10'} @@ -5204,8 +5344,8 @@ packages: yargs-parser: 20.2.9 dev: false - /yargs/17.2.1: - resolution: {integrity: sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q==} + /yargs/17.4.1: + resolution: {integrity: sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==} engines: {node: '>=12'} dependencies: cliui: 7.0.4 @@ -5214,7 +5354,7 @@ packages: require-directory: 2.1.1 string-width: 4.2.3 y18n: 5.0.8 - yargs-parser: 20.2.9 + yargs-parser: 21.0.1 dev: true /yn/3.1.1: From 667ef342d8465c2d5fcd8ad8ca30466266930970 Mon Sep 17 00:00:00 2001 From: Botrel Kilian Date: Tue, 12 Apr 2022 15:04:24 +0200 Subject: [PATCH 03/17] refactor: new logo everywhere (#33) --- .../public/favicon/android-chrome-192x192.png | Bin 13026 -> 7575 bytes .../public/favicon/android-chrome-512x512.png | Bin 49196 -> 22353 bytes .../front/public/favicon/apple-touch-icon.png | Bin 12088 -> 6890 bytes apps/front/public/favicon/favicon-16x16.png | Bin 1189 -> 486 bytes apps/front/public/favicon/favicon-32x32.png | Bin 1714 -> 1043 bytes apps/front/public/favicon/favicon.ico | Bin 15086 -> 15406 bytes apps/front/src/layout/Footer.vue | 11 +-------- apps/front/src/layout/Header.vue | 22 ++++++++---------- apps/front/src/views/auth/Index.vue | 2 +- 9 files changed, 12 insertions(+), 23 deletions(-) mode change 100644 => 100755 apps/front/public/favicon/android-chrome-192x192.png mode change 100644 => 100755 apps/front/public/favicon/android-chrome-512x512.png mode change 100644 => 100755 apps/front/public/favicon/apple-touch-icon.png mode change 100644 => 100755 apps/front/public/favicon/favicon-16x16.png mode change 100644 => 100755 apps/front/public/favicon/favicon-32x32.png mode change 100644 => 100755 apps/front/public/favicon/favicon.ico diff --git a/apps/front/public/favicon/android-chrome-192x192.png b/apps/front/public/favicon/android-chrome-192x192.png old mode 100644 new mode 100755 index 545bf362bab3ac8dc4bf0f6129bf395db6ed4aaf..1abb38d1cc3233c7f62101ea75dd912d2c35feac GIT binary patch literal 7575 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 literal 13026 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�`Zuf5i+9v@Jt7V<>zMEw? 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 QstVw#!gKl0vSuOw4{dVG%K!iX diff --git a/apps/front/public/favicon/android-chrome-512x512.png b/apps/front/public/favicon/android-chrome-512x512.png old mode 100644 new mode 100755 index c008021cbf3faeaad3900251b1f49e3e30c83f24..c81ce3b8b09b4bc38d5ca7e8fc9368c6cf8b79d4 GIT binary patch literal 22353 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 literal 49196 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

Xr~GXf)?`(-Ufjqm=+<0*Og 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

H?BvE>HYqn+YSK7mBWR ztZZXx5M=anlUxDIp7D~+hr5l+p<`&YY9mLnT@S(UJhi>q=Zy5D0;EiAorGfGP)jm6lwOoCCs!!(t6{LKZ)61TNY`_;+* zz8;}S;9#xoN-i4-L&JTFQinc}rxX@xdy@5O%%ersePov*?6IAX!^J^K^PUD2()jq< zy@|rYu1sQRP-j-B{r=E5iN~CbL=HXyYZms2PZhHkA=*GhaGU}uR+z%*-{fR;v10%_r_!u&mt+2Usr`uFRj%AOJoog`*a1cvs3;1wYd^|so%G|`8-$-rm7@uSV729 zho1M7m1|HIqmUc$Y2@gO(kD7e75I>&r1YW`u)%lomwln!7+1luB}@VTH(g6XndPu?ycn{h3hw6}8UUa$eHBHL;o z=F9RxKh=DaWq+WYtG8ZfT_e_&?Hly6AUOi(fRd^)%IpmDt2JfPNN*2i%#m$Z#XFBOg~6Y9&b zybcrM)~&{Y^l@$WS0$2T@YSG@oF?a|j-g`=Xm+U`j=11p5%n?5s_2~fW)hy&F&(uc zct{NHh4z4v%XH}bBR_rZD)-Yhe19Qm2YbVTemP5~G9|c1{OU&`=00X-x8`e-$C_>p zCNgKDL67JL+&{c;q3Myd3SJF~=*m?%c%8cDrt)JiZs97$y#XL3a(W@+qXi@TFNW-g zM&~>Q5)PMA+X0r6Fp14_flyt@=U9EQB(cS2=Lb&3o5MQQ+8_^4{P?@`K=OPeyFtUX z(vAbsndKJK6e%|v!yoi?0_S?6!1h%cqs98NM121%z8#W@8ECH%V8bf-T1?SE*kfzQ z7)zE#T6+CQ2(^WCaX}uPawRyN)W6VK_>0|c=K9uQw~y$CXXnhZ4!Yd^t!>rwgD+l~ zZ-or#)of;{!X!OP(Gh~;RFhVnjXR}fRxc$Ft)&_0O|nP|!~fal_Q7-T{KbU)h95VB z=jG$o65wp0-TQuOnpe8WRR236;?e7n@}jO3MX96M^1~#1$zsncvC8b6!miGuW|aiq zIe7DGh2r@d$20>|YVQ{T@$1AEM(;go7se{lbWY*h6bfM;G9`~6all~xp}6+iq~$XV z?(^Y{!GQ-;^xDf2{%SsEv8?V4u2&(VO0L1c22_K-$?2YHn;c}fSwfVCnTY^;RJIdf ze%mUew#h-lW|V|oay3nK?yi?<z z&I-P7C9+R2jM+ZCZup(vIM32@1y|1Raj>uA*UiB

t0Tbe;pnRw57h@N-&{;I~CK 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 diff --git a/apps/front/public/favicon/apple-touch-icon.png b/apps/front/public/favicon/apple-touch-icon.png old mode 100644 new mode 100755 index fc8d78f692415444125defb56f2d0b703983ed04..829feee5948c18e037aecbfcf0a31cbdf18ccc15 GIT binary patch literal 6890 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 literal 12088 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 a01%{v?x*kglb%fgKFF!cmcKLo^1lF`&pT)U diff --git a/apps/front/public/favicon/favicon-16x16.png b/apps/front/public/favicon/favicon-16x16.png old mode 100644 new mode 100755 index 65e0a202c529c7ce246b19bcde95a6ead47fb8b2..25b171e2e9f06657890e6f0295dd3dec2b06f04e GIT binary patch delta 471 zcmV;|0Vw{Z3FZTk8Gi-<001BJ|6u?C00DDSM?wIu&K&6g00E#$L_t(IPh+%joA#f9 z0>C(G00T-Gq&eN3AnZWSn>o11b zjFk-2dIA`vCHWXq3)V4Qx&9JiK$yj0hE#`L3?5yL42>1;3}(i%3|yS746_!VVn~fQ zWBB*)Kf~wGKN&bUSQ!5Q|IgqNGN0k^zyAmWdZOkr{QbwoP`)C8AuZmF;rh*23$~1nEx{DEU#nu{GE&8`3FIU z@4wg>YS+Xtc(|D`l;qel%w2q%Vc(H^3@=}OX4tqij$!(|6AWuNUqu+e&-InT+u$@< zz)9;e!}g2D3~NtYF|f0-Fa-N)GaNd0pW(@~PYis#>`)9o?ivic_T6T9^X?nM0OXWh z14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>q!I-@RD8i7p3&gOQ#%?@;-Jq9UuZKgsi$kM>L#>TNxrI})nNz-zQ?`Lq zx{gb-7GemyaX-6mH-~m7hiV(AViTuqJ*)i;pb4x_vshf`GC9m-wVc9iJb}%qpGCWi zU8|E-wT%^MlyVEZd=sm5J%>!aaL7`h%B_N)vsmnA2)WJs4C8UqRWsYjxio<8`Bv;P5c;m^_=Wm>V>bG93 zZeO%%*O}akX$Oy8*0!tGD%^VQ!K=mF&Q4f&F}i8<;j_0?eA+VFx4(Y-!6~M9#r8`H zMKi_B8+1Inwe70~lh=i}Zb)lik=nA%G-0w=;Q|4dZf@5ZzWEDfTw0w{=BvB6Fza;* zTTS#$o*`mT$rQhiA#52#zyb!}xlBIu7(M2&c+6#So6Bf7mBn@{v*jcfvwn87i7YxD zY&xAx$(xuGHZaAkWsX?I9I}EXa4C!LA{NgDtZs8zooBP!&tx~~V@%)52viooo;hSW zOTbd5g!N3(Yna1Vu>>q(@tptv|Npm21$Tf6h`S`nFL>jhKO27o0g%3MsBRrlm@&!Q z-DUHw-2Zhz4rhT!WHC^wFbFd;%$g$s6l5>)^mS!_%Erjgz&yyG!UUmg;eqd4f z9vB3wC9V-ADTyViR>?)FK#IZ0z{pV7z)aV`FvQT*%D}+Nz*HMV8vK%YT7;q@H$Npa ztrE9}Zr9jzKn>wlArU1(iRB6fMfqu&IjIUIl?AB^nFS@u3=9=>9)IHDC=AokIOTu( zjOWuJ24-b$y<~1-Wnu5hBFw@HE)6D!Q<#-EhbWxBaplC3Ge=~Ou%B-5Sm33{@Jd{; URG<|Mp00i_>zopr0G#^C4gdfE diff --git a/apps/front/public/favicon/favicon-32x32.png b/apps/front/public/favicon/favicon-32x32.png old mode 100644 new mode 100755 index ee0fe192a9149eb19843051ee1cd160d5de429d2..23806efc67ede949a6ea0a14f81fc893382eff73 GIT binary patch delta 1021 zcmVV6n<_Ct)uAB3Da3+ zf#JvqiN(N>5tWEw7FL_}hAVoh{YOcXWoqlhF(DWX)FR`C-SevFl{>6B$G z_<eULiKg8&do?p-Vp68tRdCz<9$$w=cgj14t;`S9`TgZ_apQi|47KtfzFHhvdF`0P(NP_XwGK9O>J0wShP zr1cJ^4rgkv^MAg)-07H~5JKy_9X(i-dCa+h&&PM-P?nNN+RIVcT{Dkx{)Sk@#RL)N zZlAP7gZtfmbn`mxGKj?<QY#Q1CdKCUv%qk{&rGqU z77Z8MoeL;TFF|;~9k5mb=IqSJqbDOUIdCj0iWl&K9O&;KK%%^oZke`F=HRQVzm1sa z0C;-Z`+_r;wIV*boOjPq7PHv9=n2UAyO8z~L2p5H!v}B+aigVP*vm0lFKZXf;Uj z(HJkBsz~F%eU6lzp+T3yh=T9qQLMg%j;@C&FG@mikRQGKoaAy?SnKNrjFI%>{JO2w z@qa^E+y5V9>A}?)u-J!@V)YCpe*FdEe+@a85^Qb4G*9alU3VZ&=ai(!!Ev;qulZ}o7O r6&QvKx=i7+30-D*LxNktJFmb~$y|Mq@H!I000000NkvXXu0mjf=b`V^ delta 1698 zcmV;T23`4+2(k^3B!2{FK}|sb0I`n?{9y$E001CkNK#Dz0D2|>0Dy!50Qvv`0D$NK z0Cg|`0P0`>06Lfe02gqax=}m;000JJOGiWi{{a60|De66lK=n!32;bRa{vGf6951U z69E94oEQKA00(qQO+^Rg1_2KM1;&>F<^TW%K1oDDR9M5smVaA_R#gFq#=$`Nf$DFiXO5HQBV&VN!m-4T}&tiyVyfEkVa(SEse?| z5{-(Y3sFg9?oxT6-ve$n}an5rcn61NGr+6!2 z9=w4iuQwzoV}Io2@Mi1j+CPjXlL2fHV>|GWLu4JW96?M$yn=f0gh#f(RN3cdxjV*PmRsn?_ zZ+|APRZjsB#C-=oW#{gXxN7bNJoV^Jlp2(co3_z?>^PEm-9*w5f0Lu#y;NGp@z&dW+1j-q(I{tZT8L5) zShybMjo6ZFn{Ez>2m^7EHJc7_{}Tcmm+-_h zZ*VehLDYe-1w%z}`4|_A1umU2nfAd7T5Luzx{sg4*J{}z>I(eaBRur{9=1MSVbX+3 z=yW70N_kJZ1~zpa=7UeZRX-SGEMK%iL|o8I{v{dF`E9f8t!ko4XFN`hTT8 zbqWOCsO6}!{2h^&mP|U@GE4fkNzP;B8Rvpw(kCcGh22sYkDg`9qole1K~eq}od~cnt5s8ro2CXtf(Z)Q`FGNa6HQ|Gj~)p|xJD+JjL>3geRy z;HWjVK|>1?d$P_r>4F6z_6EfYm|!Skfy*dWhzsLF_l#l&u}pwsU@t=uPk$gV9Nx8n zHj@^dkc0wA0n~xd9iGaT$m+5+GoNHi6so3Ani?~p2x@g*wK|L9K%(GXpEe}fBEh;m z*Wv>+N?j*ZQ^hm^@gJz%rBzV=4a6xr{}+f50t~~C2?&=}!O%vGI*7yre#}5PQyCDn zJVqb}6p6r>Yk9y zD#T~}Es|Q1Yqq^)WEB3%jXfE~=NjEXgzdn?e*t?}Nh($07*qoM6N<$f`J?KK>z>% diff --git a/apps/front/public/favicon/favicon.ico b/apps/front/public/favicon/favicon.ico old mode 100644 new mode 100755 index 0c5c8f731ac110b9a835a695881962c57f8acefe..f948556560883f8512d7680c0bbb52ff9d9cbadc GIT binary patch literal 15406 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 F{{mMiW|If@BPxg#MVg`rND~BW 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

- +
LN Markets App v1.2.0
- - + + - - diff --git a/apps/front/src/views/auth/Index.vue b/apps/front/src/views/auth/Index.vue index 3ff76f3..70dad7e 100644 --- a/apps/front/src/views/auth/Index.vue +++ b/apps/front/src/views/auth/Index.vue @@ -1,7 +1,7 @@
- +

Welcome to LN Markets

From 85a6ed2ed7ebf0e3be7f381f133795d9890d89e0 Mon Sep 17 00:00:00 2001 From: Botrel Kilian Date: Wed, 13 Apr 2022 16:46:01 +0200 Subject: [PATCH 04/17] chore: update dependencies --- apps/api/package.json | 22 +- pnpm-lock.yaml | 464 ++++++++++++++++++++++++++++++------------ 2 files changed, 347 insertions(+), 139 deletions(-) diff --git a/apps/api/package.json b/apps/api/package.json index 3fbdf30..dff50b0 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -16,27 +16,29 @@ "format": "prettier --write 'src/**/*.js'", "dev": "nodemon" }, + "type": "module", + "imports": { + "#src/*": "./src/*" + }, "dependencies": { - "@ln-markets/api": "^1.4.2", + "@ln-markets/api": "^1.6.1", "bech32": "^2.0.0", "bip32": "^3.0.1", "bip39": "^3.0.4", - "body-parser": "^1.19.0", + "body-parser": "^1.20.0", "cors": "^2.8.5", "cuid": "^2.1.8", - "express": "^4.17.1", + "express": "^4.17.3", "express-session": "^1.17.2", "express-winston": "^4.2.0", "helmet": "^4.6.0", "ln-service": "53.0.1", "module-alias": "^2.2.2", - "secp256k1": "^4.0.2", - "tiny-secp256k1": "^2.1.2", - "winston": "^3.3.3", - "ws": "^8.3.0" - }, - "_moduleAliases": { - "@": "src/" + "node-fetch": "^3.2.3", + "secp256k1": "^4.0.3", + "tiny-secp256k1": "^2.2.1", + "winston": "^3.7.2", + "ws": "^8.5.0" }, "nodemonConfig": { "exec": "node src/index.js", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 51fc4f6..9ecded3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -40,41 +40,43 @@ importers: apps/api: specifiers: - '@ln-markets/api': ^1.4.2 + '@ln-markets/api': ^1.6.1 bech32: ^2.0.0 bip32: ^3.0.1 bip39: ^3.0.4 - body-parser: ^1.19.0 + body-parser: ^1.20.0 cors: ^2.8.5 cuid: ^2.1.8 - express: ^4.17.1 + express: ^4.17.3 express-session: ^1.17.2 express-winston: ^4.2.0 helmet: ^4.6.0 ln-service: 53.0.1 module-alias: ^2.2.2 - secp256k1: ^4.0.2 - tiny-secp256k1: ^2.1.2 - winston: ^3.3.3 - ws: ^8.3.0 + node-fetch: ^3.2.3 + secp256k1: ^4.0.3 + tiny-secp256k1: ^2.2.1 + winston: ^3.7.2 + ws: ^8.5.0 dependencies: - '@ln-markets/api': 1.4.2 + '@ln-markets/api': 1.6.1 bech32: 2.0.0 bip32: 3.0.1 bip39: 3.0.4 - body-parser: 1.19.0 + body-parser: 1.20.0 cors: 2.8.5 cuid: 2.1.8 - express: 4.17.1 + express: 4.17.3 express-session: 1.17.2 - express-winston: 4.2.0_winston@3.3.3 + express-winston: 4.2.0_winston@3.7.2 helmet: 4.6.0 ln-service: 53.0.1 module-alias: 2.2.2 - secp256k1: 4.0.2 - tiny-secp256k1: 2.1.2 - winston: 3.3.3 - ws: 8.3.0 + node-fetch: 3.2.3 + secp256k1: 4.0.3 + tiny-secp256k1: 2.2.1 + winston: 3.7.2 + ws: 8.5.0 apps/front: specifiers: @@ -143,6 +145,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + /@colors/colors/1.5.0: + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + dev: false + /@commitlint/cli/15.0.0: resolution: {integrity: sha512-Y5xmDCweytqzo4N4lOI2YRiuX35xTjcs8n5hUceBH8eyK0YbwtgWX50BJOH2XbkwEmII9blNhlBog6AdQsqicg==} engines: {node: '>=v12'} @@ -284,8 +291,8 @@ packages: chalk: 4.1.2 dev: true - /@dabh/diagnostics/2.0.2: - resolution: {integrity: sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==} + /@dabh/diagnostics/2.0.3: + resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} dependencies: colorspace: 1.1.4 enabled: 2.0.0 @@ -407,12 +414,12 @@ packages: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true - /@ln-markets/api/1.4.2: - resolution: {integrity: sha512-Aniem77l1pebEQ7RzHblFrcraXmEWFHU+zcE9ebNAJTwznVlm4iYRLVZfhUq1COb914ye7tMEPLGX4rV7TFzWQ==} + /@ln-markets/api/1.6.1: + resolution: {integrity: sha512-WPxdWyMhF+g8dPelR4BmSH5fF5IJdyG2ne3sy/B8dOPdCBlLH/6oOMftio7YwYpBz+AbKIjYGvLB6lULGvleqQ==} engines: {node: '>=14', pnpm: '>=6'} dependencies: eventemitter3: 4.0.7 - ws: 8.3.0 + ws: 8.5.0 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -511,8 +518,8 @@ packages: '@types/node': 16.11.9 dev: false - /@types/express-serve-static-core/4.17.25: - resolution: {integrity: sha512-OUJIVfRMFijZukGGwTpKNFprqCCXk5WjNGvUgB/CxxBR40QWSjsNK86+yvGKlCOGc7sbwfHLaXhkG+NsytwBaQ==} + /@types/express-serve-static-core/4.17.28: + resolution: {integrity: sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==} dependencies: '@types/node': 16.11.9 '@types/qs': 6.9.7 @@ -523,7 +530,7 @@ packages: resolution: {integrity: sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==} dependencies: '@types/body-parser': 1.19.2 - '@types/express-serve-static-core': 4.17.25 + '@types/express-serve-static-core': 4.17.28 '@types/qs': 6.9.7 '@types/serve-static': 1.13.10 dev: false @@ -758,12 +765,12 @@ packages: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} dev: true - /accepts/1.3.7: - resolution: {integrity: sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==} + /accepts/1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} dependencies: - mime-types: 2.1.34 - negotiator: 0.6.2 + mime-types: 2.1.35 + negotiator: 0.6.3 dev: false /acorn-jsx/5.3.2_acorn@8.7.0: @@ -889,7 +896,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.3 - es-abstract: 1.19.3 + es-abstract: 1.19.4 get-intrinsic: 1.1.1 is-string: 1.0.7 dev: true @@ -900,7 +907,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.3 - es-abstract: 1.19.3 + es-abstract: 1.19.4 es-shim-unscopables: 1.0.0 dev: true @@ -918,6 +925,10 @@ packages: resolution: {integrity: sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g==} dev: false + /async/3.2.3: + resolution: {integrity: sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==} + dev: false + /asyncjs-util/1.2.7: resolution: {integrity: sha512-+NoBU9in09GHOWgRv+HhF3kDxqgJ6KowRA7xwHZKxajnh+ybBJhp24i2nOyulZtpdn+4eyrfLvTD6VoRk7TWyQ==} dependencies: @@ -1087,6 +1098,40 @@ packages: type-is: 1.6.18 dev: false + /body-parser/1.19.2: + resolution: {integrity: sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.2 + content-type: 1.0.4 + debug: 2.6.9 + depd: 1.1.2 + http-errors: 1.8.1 + iconv-lite: 0.4.24 + on-finished: 2.3.0 + qs: 6.9.7 + raw-body: 2.4.3 + type-is: 1.6.18 + dev: false + + /body-parser/1.20.0: + resolution: {integrity: sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dependencies: + bytes: 3.1.2 + content-type: 1.0.4 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.10.3 + raw-body: 2.5.1 + type-is: 1.6.18 + unpipe: 1.0.0 + dev: false + /bolt07/1.7.4: resolution: {integrity: sha512-y82Na9vEBY+rqjJhjYMFAch70nWvbL5OiEPFqNf7cGTtQfG7g/Vui2KnemrX1mxEw2SgccF+Rn1NSRm9HFtu3w==} dependencies: @@ -1167,7 +1212,6 @@ packages: /bytes/3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} - dev: true /cacheable-request/6.1.0: resolution: {integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==} @@ -1187,7 +1231,6 @@ packages: dependencies: function-bind: 1.1.1 get-intrinsic: 1.1.1 - dev: true /callsites/3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} @@ -1354,19 +1397,19 @@ packages: dependencies: color-name: 1.1.4 simple-swizzle: 0.2.2 + dev: true /color-string/1.9.0: resolution: {integrity: sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==} dependencies: color-name: 1.1.4 simple-swizzle: 0.2.2 - dev: true /color/3.2.1: resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} dependencies: color-convert: 1.9.3 - color-string: 1.6.0 + color-string: 1.9.0 dev: false /color/4.0.1: @@ -1388,11 +1431,6 @@ packages: resolution: {integrity: sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==} dev: true - /colors/1.4.0: - resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} - engines: {node: '>=0.1.90'} - dev: false - /colorspace/1.1.4: resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} dependencies: @@ -1447,6 +1485,13 @@ packages: safe-buffer: 5.1.2 dev: false + /content-disposition/0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + dependencies: + safe-buffer: 5.2.1 + dev: false + /content-type/1.0.4: resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} engines: {node: '>= 0.6'} @@ -1496,8 +1541,9 @@ packages: engines: {node: '>= 0.6'} dev: false - /core-util-is/1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + /cookie/0.4.2: + resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} + engines: {node: '>= 0.6'} dev: false /cors/2.8.5: @@ -1585,6 +1631,11 @@ packages: engines: {node: '>=8'} dev: true + /data-uri-to-buffer/4.0.0: + resolution: {integrity: sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==} + engines: {node: '>= 12'} + dev: false + /debug/2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} dependencies: @@ -1689,6 +1740,11 @@ packages: resolution: {integrity: sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=} dev: false + /destroy/1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dev: false + /detective/5.2.0: resolution: {integrity: sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==} engines: {node: '>=0.8.0'} @@ -1789,8 +1845,8 @@ packages: is-arrayish: 0.2.1 dev: true - /es-abstract/1.19.3: - resolution: {integrity: sha512-4axXLNovnMYf0+csS5rVnS5hLmV1ek+ecx9MuCjByL1E5Nn54avf6CHQxIjgQIHBnfX9AMxTRIy0q+Yu5J/fXA==} + /es-abstract/1.19.4: + resolution: {integrity: sha512-flV8e5g9/xulChMG48Fygk1ptpo4lQRJ0eJYtxJFgi7pklLx7EFcOJ34jnvr8pbWlaFN/AT1cZpe0hiFel9Hqg==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 @@ -2154,7 +2210,7 @@ packages: eslint: 8.13.0 eslint-utils: 3.0.0_eslint@8.13.0 natural-compare: 1.4.0 - semver: 7.3.6 + semver: 7.3.7 vue-eslint-parser: 8.3.0_eslint@8.13.0 transitivePeerDependencies: - supports-color @@ -2318,7 +2374,7 @@ packages: uid-safe: 2.1.5 dev: false - /express-winston/4.2.0_winston@3.3.3: + /express-winston/4.2.0_winston@3.7.2: resolution: {integrity: sha512-EMD74g63nVHi7pFleQw7KHCxiA1pjF5uCwbCfzGqmFxs9KvlDPIVS3cMGpULm6MshExMT9TjC3SqmRGB9kb7yw==} engines: {node: '>= 6'} peerDependencies: @@ -2326,14 +2382,14 @@ packages: dependencies: chalk: 2.4.2 lodash: 4.17.21 - winston: 3.3.3 + winston: 3.7.2 dev: false /express/4.17.1: resolution: {integrity: sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==} engines: {node: '>= 0.10.0'} dependencies: - accepts: 1.3.7 + accepts: 1.3.8 array-flatten: 1.1.1 body-parser: 1.19.0 content-disposition: 0.5.3 @@ -2365,6 +2421,42 @@ packages: vary: 1.1.2 dev: false + /express/4.17.3: + resolution: {integrity: sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==} + engines: {node: '>= 0.10.0'} + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.19.2 + content-disposition: 0.5.4 + content-type: 1.0.4 + cookie: 0.4.2 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 1.1.2 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.1.2 + fresh: 0.5.2 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.3.0 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.7 + qs: 6.9.7 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.17.2 + serve-static: 1.14.2 + setprototypeof: 1.2.0 + statuses: 1.5.0 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + dev: false + /fast-deep-equal/3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true @@ -2409,8 +2501,16 @@ packages: reusify: 1.0.4 dev: true - /fecha/4.2.1: - resolution: {integrity: sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==} + /fecha/4.2.2: + resolution: {integrity: sha512-5rOQWkBVz3FnYWTi/ELZmq4CoK1Pb+xKNZWuJRsOwo0+8DrP43CrWJtyLVvb5U7z7ggE5llahfDbLjaVNzXVJQ==} + dev: false + + /fetch-blob/3.1.5: + resolution: {integrity: sha512-N64ZpKqoLejlrwkIAnb9iLSA3Vx/kjgzpcDhygcqJ2KKjky8nCgUQ+dzXtbrLaWZGZNmNfQTsiQ0weZ1svglHg==} + engines: {node: ^12.20 || >= 14.13} + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.2.1 dev: false /file-entry-cache/6.0.1: @@ -2489,7 +2589,14 @@ packages: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 - mime-types: 2.1.34 + mime-types: 2.1.35 + dev: false + + /formdata-polyfill/4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + dependencies: + fetch-blob: 3.1.5 dev: false /forwarded/0.2.0: @@ -2538,7 +2645,6 @@ packages: /function-bind/1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: true /functional-red-black-tree/1.0.1: resolution: {integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=} @@ -2554,7 +2660,6 @@ packages: function-bind: 1.1.1 has: 1.0.3 has-symbols: 1.0.3 - dev: true /get-stream/4.1.0: resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} @@ -2687,7 +2792,6 @@ packages: /has-symbols/1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} - dev: true /has-tostringtag/1.0.0: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} @@ -2706,7 +2810,6 @@ packages: engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 - dev: true /hash-base/3.1.0: resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} @@ -2796,6 +2899,28 @@ packages: toidentifier: 1.0.0 dev: false + /http-errors/1.8.1: + resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} + engines: {node: '>= 0.6'} + dependencies: + depd: 1.1.2 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 1.5.0 + toidentifier: 1.0.1 + dev: false + + /http-errors/2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + dev: false + /human-signals/2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -3098,10 +3223,6 @@ packages: resolution: {integrity: sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==} dev: true - /isarray/1.0.0: - resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=} - dev: false - /isexe/2.0.0: resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} dev: true @@ -3336,13 +3457,13 @@ packages: wrap-ansi: 6.2.0 dev: true - /logform/2.3.0: - resolution: {integrity: sha512-graeoWUH2knKbGthMtuG1EfaSPMZFZBIrhuJHhkS5ZseFBrc7DupCzihOQAzsK/qIKPQaPJ/lFQFctILUY5ARQ==} + /logform/2.4.0: + resolution: {integrity: sha512-CPSJw4ftjf517EhXZGGvTHHkYobo7ZCc0kvwUoOYcjfR2UVrI66RHj8MCrfAdEitdmFqbu2BYdYs8FHHZSb6iw==} dependencies: - colors: 1.4.0 - fecha: 4.2.1 + '@colors/colors': 1.5.0 + fecha: 4.2.2 ms: 2.1.3 - safe-stable-stringify: 1.1.1 + safe-stable-stringify: 2.3.1 triple-beam: 1.3.0 dev: false @@ -3367,11 +3488,6 @@ packages: yallist: 4.0.0 dev: true - /lru-cache/7.8.1: - resolution: {integrity: sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==} - engines: {node: '>=12'} - dev: true - /macaroon/3.0.4: resolution: {integrity: sha512-Tja2jvupseKxltPZbu5RPSz2Pgh6peYA3O46YCTcYL8PI1VqtGwDqRhGfP8pows26xx9wTiygk+en62Bq+Y8JA==} dependencies: @@ -3474,16 +3590,16 @@ packages: picomatch: 2.3.1 dev: true - /mime-db/1.51.0: - resolution: {integrity: sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==} + /mime-db/1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} dev: false - /mime-types/2.1.34: - resolution: {integrity: sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==} + /mime-types/2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} dependencies: - mime-db: 1.51.0 + mime-db: 1.52.0 dev: false /mime/1.6.0: @@ -3591,8 +3707,8 @@ packages: resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=} dev: true - /negotiator/0.6.2: - resolution: {integrity: sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==} + /negotiator/0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} dev: false @@ -3600,14 +3716,28 @@ packages: resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} dev: false + /node-domexception/1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + dev: false + /node-emoji/1.11.0: resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} dependencies: lodash: 4.17.21 dev: true - /node-gyp-build/4.3.0: - resolution: {integrity: sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==} + /node-fetch/3.2.3: + resolution: {integrity: sha512-AXP18u4pidSZ1xYXRDPY/8jdv3RAozIt/WLNR/MBGZAz+xjtlr90RvCnsvHQRiXyWliZF/CpytExp32UU67/SA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + data-uri-to-buffer: 4.0.0 + fetch-blob: 3.1.5 + formdata-polyfill: 4.0.10 + dev: false + + /node-gyp-build/4.4.0: + resolution: {integrity: sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==} hasBin: true dev: false @@ -3660,7 +3790,7 @@ packages: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.8.1 - semver: 7.3.6 + semver: 7.3.7 validate-npm-package-license: 3.0.4 dev: true @@ -3698,7 +3828,6 @@ packages: /object-inspect/1.12.0: resolution: {integrity: sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==} - dev: true /object-keys/1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} @@ -3721,7 +3850,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.3 - es-abstract: 1.19.3 + es-abstract: 1.19.4 dev: true /on-finished/2.3.0: @@ -3731,6 +3860,13 @@ packages: ee-first: 1.1.1 dev: false + /on-finished/2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + dev: false + /on-headers/1.0.2: resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} engines: {node: '>= 0.8'} @@ -4058,10 +4194,6 @@ packages: engines: {node: '>= 0.8'} dev: true - /process-nextick-args/2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: false - /protobufjs/6.11.2: resolution: {integrity: sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==} hasBin: true @@ -4155,11 +4287,23 @@ packages: engines: {node: '>=0.6.0', teleport: '>=0.2.0'} dev: true + /qs/6.10.3: + resolution: {integrity: sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 + dev: false + /qs/6.7.0: resolution: {integrity: sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==} engines: {node: '>=0.6'} dev: false + /qs/6.9.7: + resolution: {integrity: sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==} + engines: {node: '>=0.6'} + dev: false + /queue-microtask/1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true @@ -4200,6 +4344,26 @@ packages: unpipe: 1.0.0 dev: false + /raw-body/2.4.3: + resolution: {integrity: sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.2 + http-errors: 1.8.1 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + dev: false + + /raw-body/2.5.1: + resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + dev: false + /rc/1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true @@ -4229,18 +4393,6 @@ packages: type-fest: 0.6.0 dev: true - /readable-stream/2.3.7: - resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - dev: false - /readable-stream/3.6.0: resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} engines: {node: '>= 6'} @@ -4399,8 +4551,9 @@ packages: /safe-buffer/5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - /safe-stable-stringify/1.1.1: - resolution: {integrity: sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==} + /safe-stable-stringify/2.3.1: + resolution: {integrity: sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg==} + engines: {node: '>=10'} dev: false /safer-buffer/2.1.2: @@ -4414,7 +4567,17 @@ packages: dependencies: elliptic: 6.5.4 node-addon-api: 2.0.2 - node-gyp-build: 4.3.0 + node-gyp-build: 4.4.0 + dev: false + + /secp256k1/4.0.3: + resolution: {integrity: sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==} + engines: {node: '>=10.0.0'} + requiresBuild: true + dependencies: + elliptic: 6.5.4 + node-addon-api: 2.0.2 + node-gyp-build: 4.4.0 dev: false /semver-diff/3.1.1: @@ -4442,12 +4605,12 @@ packages: lru-cache: 6.0.0 dev: true - /semver/7.3.6: - resolution: {integrity: sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==} - engines: {node: ^10.0.0 || ^12.0.0 || ^14.0.0 || >=16.0.0} + /semver/7.3.7: + resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==} + engines: {node: '>=10'} hasBin: true dependencies: - lru-cache: 7.8.1 + lru-cache: 6.0.0 dev: true /send/0.17.1: @@ -4469,6 +4632,25 @@ packages: statuses: 1.5.0 dev: false + /send/0.17.2: + resolution: {integrity: sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==} + engines: {node: '>= 0.8.0'} + dependencies: + debug: 2.6.9 + depd: 1.1.2 + destroy: 1.0.4 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 1.8.1 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.3.0 + range-parser: 1.2.1 + statuses: 1.5.0 + dev: false + /serve-static/1.14.1: resolution: {integrity: sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==} engines: {node: '>= 0.8.0'} @@ -4479,10 +4661,24 @@ packages: send: 0.17.1 dev: false + /serve-static/1.14.2: + resolution: {integrity: sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==} + engines: {node: '>= 0.8.0'} + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.17.2 + dev: false + /setprototypeof/1.1.1: resolution: {integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==} dev: false + /setprototypeof/1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + dev: false + /sha.js/2.4.11: resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} hasBin: true @@ -4513,7 +4709,6 @@ packages: call-bind: 1.0.2 get-intrinsic: 1.1.1 object-inspect: 1.12.0 - dev: true /signal-exit/3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -4614,6 +4809,11 @@ packages: engines: {node: '>= 0.6'} dev: false + /statuses/2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + dev: false + /string-argv/0.3.1: resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} engines: {node: '>=0.6.19'} @@ -4650,12 +4850,6 @@ packages: define-properties: 1.1.3 dev: true - /string_decoder/1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - dependencies: - safe-buffer: 5.1.2 - dev: false - /string_decoder/1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: @@ -4850,11 +5044,11 @@ packages: nan: 2.15.0 dev: false - /tiny-secp256k1/2.1.2: - resolution: {integrity: sha512-8qPw7zDK6Hco2tVGYGQeOmOPp/hZnREwy2iIkcq0ygAuqc9WHo29vKN94lNymh1QbB3nthtAMF6KTIrdbsIotA==} + /tiny-secp256k1/2.2.1: + resolution: {integrity: sha512-/U4xfVqnVxJXN4YVsru0E6t5wVncu2uunB8+RVR40fYUxkKYUPS10f+ePQZgFBoE/Jbf9H1NBveupF2VmB58Ng==} engines: {node: '>=14.0.0'} dependencies: - uint8array-tools: 0.0.6 + uint8array-tools: 0.0.7 dev: false /tmp/0.2.1: @@ -4881,6 +5075,11 @@ packages: engines: {node: '>=0.6'} dev: false + /toidentifier/1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + dev: false + /touch/3.1.0: resolution: {integrity: sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==} hasBin: true @@ -4976,7 +5175,7 @@ packages: engines: {node: '>= 0.6'} dependencies: media-typer: 0.3.0 - mime-types: 2.1.34 + mime-types: 2.1.35 dev: false /typedarray-to-buffer/3.1.5: @@ -5002,8 +5201,8 @@ packages: random-bytes: 1.0.0 dev: false - /uint8array-tools/0.0.6: - resolution: {integrity: sha512-aIvEHNRX1AlOYAr6qSUjQBn4mCduxx6MtC967aRDTb2UUBPj0Ix2ZFQDcmXUUO/UxRPHcw1f5a5nVbCSKDSOqA==} + /uint8array-tools/0.0.7: + resolution: {integrity: sha512-vrrNZJiusLWoFWBqz5Y5KMCgP9W9hnjZHzZiZRT8oNAkq3d5Z5Oe76jAvVVSRh4U8GGR90N2X1dWtrhvx6L8UQ==} engines: {node: '>=14.0.0'} dev: false @@ -5052,7 +5251,7 @@ packages: is-yarn-global: 0.3.0 latest-version: 5.1.0 pupa: 2.1.1 - semver: 7.3.6 + semver: 7.3.7 semver-diff: 3.1.1 xdg-basedir: 4.0.0 dev: true @@ -5137,7 +5336,7 @@ packages: espree: 9.3.1 esquery: 1.4.0 lodash: 4.17.21 - semver: 7.3.6 + semver: 7.3.7 transitivePeerDependencies: - supports-color dev: true @@ -5184,6 +5383,11 @@ packages: vue: 3.2.20 dev: false + /web-streams-polyfill/3.2.1: + resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} + engines: {node: '>= 8'} + dev: false + /which-boxed-primitive/1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: @@ -5215,27 +5419,29 @@ packages: bs58check: 2.1.2 dev: false - /winston-transport/4.4.0: - resolution: {integrity: sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==} + /winston-transport/4.5.0: + resolution: {integrity: sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==} engines: {node: '>= 6.4.0'} dependencies: - readable-stream: 2.3.7 + logform: 2.4.0 + readable-stream: 3.6.0 triple-beam: 1.3.0 dev: false - /winston/3.3.3: - resolution: {integrity: sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==} - engines: {node: '>= 6.4.0'} + /winston/3.7.2: + resolution: {integrity: sha512-QziIqtojHBoyzUOdQvQiar1DH0Xp9nF1A1y7NVy2DGEsz82SBDtOalS0ulTRGVT14xPX3WRWkCsdcJKqNflKng==} + engines: {node: '>= 12.0.0'} dependencies: - '@dabh/diagnostics': 2.0.2 - async: 3.2.2 + '@dabh/diagnostics': 2.0.3 + async: 3.2.3 is-stream: 2.0.1 - logform: 2.3.0 + logform: 2.4.0 one-time: 1.0.0 readable-stream: 3.6.0 + safe-stable-stringify: 2.3.1 stack-trace: 0.0.10 triple-beam: 1.3.0 - winston-transport: 4.4.0 + winston-transport: 4.5.0 dev: false /word-wrap/1.2.3: @@ -5286,8 +5492,8 @@ packages: optional: true dev: false - /ws/8.3.0: - resolution: {integrity: sha512-Gs5EZtpqZzLvmIM59w4igITU57lrtYVFneaa434VROv4thzJyV6UjIL3D42lslWlI+D4KzLYnxSwtfuiO79sNw==} + /ws/8.5.0: + resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 From 31d9b3fe2fca4a0dcd472d5722f30bb296dbc14f Mon Sep 17 00:00:00 2001 From: Botrel Kilian Date: Wed, 13 Apr 2022 19:16:39 +0200 Subject: [PATCH 05/17] refactor: es module syntax + more linting (#37) --- apps/api/.eslintrc.cjs | 125 ++++++++++++++++ apps/api/.eslintrc.js | 62 -------- apps/api/jsconfig.json | 4 +- apps/api/src/classes/lnd.js | 12 +- apps/api/src/express.js | 34 +++-- apps/api/src/helpers/context.js | 4 +- apps/api/src/helpers/errors.js | 2 +- apps/api/src/helpers/lnurl.js | 25 ++-- apps/api/src/index.js | 13 +- apps/api/src/logger/format.js | 9 +- apps/api/src/logger/index.js | 9 +- apps/api/src/logger/loki.js | 10 +- apps/api/src/middleware/auth.js | 4 +- apps/api/src/middleware/cors.js | 4 +- apps/api/src/middleware/errors.js | 7 +- apps/api/src/middleware/log-request.js | 13 +- apps/api/src/middleware/session.js | 4 +- apps/api/src/routes/futures/get.js | 4 +- apps/api/src/routes/index.js | 20 ++- apps/api/src/routes/login/post.js | 4 +- apps/api/src/routes/user/deposit/post.js | 9 +- apps/api/src/routes/user/get.js | 4 +- apps/api/src/routes/user/index.js | 17 ++- apps/api/src/routes/user/withdraw/post.js | 6 +- apps/api/src/websockets.js | 12 +- apps/front/.eslintrc.js | 28 ++++ package.json | 7 + pnpm-lock.yaml | 167 ++++++++++++++++++++++ 28 files changed, 455 insertions(+), 164 deletions(-) create mode 100644 apps/api/.eslintrc.cjs delete mode 100644 apps/api/.eslintrc.js diff --git a/apps/api/.eslintrc.cjs b/apps/api/.eslintrc.cjs new file mode 100644 index 0000000..ef1489d --- /dev/null +++ b/apps/api/.eslintrc.cjs @@ -0,0 +1,125 @@ +module.exports = { + root: true, + env: { + es6: true, + node: true, + }, + globals: { + require: true, + module: true, + }, + parserOptions: { + ecmaVersion: 'latest', + sourceType: 'module', + }, + ignorePatterns: ['node_modules/**'], + plugins: ['no-autofix', 'prefer-arrow'], + extends: [ + 'eslint:recommended', + 'plugin:prettier/recommended', + 'plugin:import/recommended', + 'plugin:promise/recommended', + 'plugin:sonarjs/recommended', + 'plugin:eslint-comments/recommended', + ], + rules: { + 'space-before-function-paren': 'off', + 'no-empty': ['error', { allowEmptyCatch: true }], + camelcase: 'off', + 'prefer-destructuring': [ + 'error', + { + VariableDeclarator: { + array: false, + object: true, + }, + AssignmentExpression: { + array: true, + object: false, + }, + }, + { + enforceForRenamedProperties: false, + }, + ], + 'require-await': 'error', + 'no-return-await': 'error', + 'no-return-assign': 'error', + eqeqeq: 'error', + 'no-var': 'error', + 'prefer-const': 'error', + 'prefer-arrow-callback': 'error', + + 'eslint-comments/disable-enable-pair': ['error', { allowWholeFile: true }], + + 'sonarjs/no-duplicate-string': 'off', + 'sonarjs/cognitive-complexity': 'off', + 'sonarjs/no-identical-functions': 'off', + + 'import/first': 'error', + 'import/newline-after-import': 'error', + 'import/no-duplicates': 'error', + 'import/order': [ + 'error', + { + groups: ['builtin', 'external', 'internal', 'parent', 'sibling', 'index'], + alphabetize: { + order: 'asc', + caseInsensitive: true, + }, + 'newlines-between': 'always', + pathGroups: [ + { + pattern: '@ln-markets/**', + group: 'internal', + }, + { + pattern: '#src/**', + group: 'internal', + }, + ], + }, + ], + + 'no-autofix/jsdoc/require-jsdoc': 'off', + + 'prefer-arrow/prefer-arrow-functions': [ + 'error', + { + disallowPrototype: true, + singleReturnOnly: false, + classPropertiesAllowed: false, + }, + ], + }, + settings: { + 'import/core-modules': [ + 'node:process', + 'node:async_hooks', + 'node:console', + 'node:os', + 'node:net', + 'node:crypto', + 'node:buffer', + 'node:timers', + 'node:querystring', + 'node:url', + 'node:http', + 'node:path', + 'node:fs', + 'node:fs/promises', + 'node:https', + 'node:v8', + 'node:worker_threads', + 'zx/globals', + ], + 'import/resolver': { + alias: { + map: [ + ['#src', './src'], + ], + extensions: ['.js', '.json'], + }, + }, + }, +} diff --git a/apps/api/.eslintrc.js b/apps/api/.eslintrc.js deleted file mode 100644 index 5bd2496..0000000 --- a/apps/api/.eslintrc.js +++ /dev/null @@ -1,62 +0,0 @@ -module.exports = { - extends: [ - 'standard', - 'prettier', - 'plugin:prettier/recommended', - 'plugin:import/errors', - 'plugin:import/warnings', - 'plugin:node/recommended', - 'plugin:promise/recommended', - ], - plugins: ['import', 'prettier', 'promise'], - env: { - node: true, - es2020: true, - }, - parserOptions: { - ecmaVersion: 2020, - sourceType: 'module', - }, - rules: { - 'space-before-function-paren': 'off', - 'new-cap': 'off', - camelcase: 'off', - 'import/no-unresolved': ['error', { commonjs: true }], - 'import/no-extraneous-dependencies': 'error', - 'node/shebang': 'off', - 'node/no-unsupported-features/es-syntax': 'off', - 'node/no-missing-require': 'off', - 'no-global-assign': ['error', { exceptions: ['require'] }], - 'prefer-destructuring': [ - 'error', - { - VariableDeclarator: { - array: false, - object: true, - }, - AssignmentExpression: { - array: true, - object: false, - }, - }, - { - enforceForRenamedProperties: false, - }, - ], - 'require-await': 'error', - 'no-return-await': 'error', - 'no-return-assign': 'error', - eqeqeq: 'error', - 'no-var': 'error', - 'prefer-const': 'error', - 'prefer-arrow-callback': 'error', - }, - settings: { - 'import/resolver': { - alias: { - map: [['@', './src']], - extensions: ['.js', '.json'], - }, - }, - }, -} diff --git a/apps/api/jsconfig.json b/apps/api/jsconfig.json index dd988d9..e73cb96 100644 --- a/apps/api/jsconfig.json +++ b/apps/api/jsconfig.json @@ -1,10 +1,10 @@ { "compilerOptions": { - "module": "commonjs", + "module": "CommonJS", "target": "es2020", "baseUrl": ".", "paths": { - "@/*": [ + "#src/*": [ "src/*" ], } diff --git a/apps/api/src/classes/lnd.js b/apps/api/src/classes/lnd.js index 2e9d757..1f1ae4b 100644 --- a/apps/api/src/classes/lnd.js +++ b/apps/api/src/classes/lnd.js @@ -1,14 +1,16 @@ -const fs = require('fs') -const net = require('net') +import Buffer from 'node:buffer' +import fs from 'node:fs' +import net from 'node:net' +import process from 'node:process' -const { +import { authenticatedLndGrpc, getWalletInfo, diffieHellmanComputeSecret, decodePaymentRequest, pay, createInvoice, -} = require('ln-service') +} from 'ln-service' const isPortOpen = async (opt = {}) => { const { host, port } = opt @@ -105,4 +107,4 @@ class LND { } } -module.exports = new LND() +export default new LND() diff --git a/apps/api/src/express.js b/apps/api/src/express.js index 290d651..6dc9067 100644 --- a/apps/api/src/express.js +++ b/apps/api/src/express.js @@ -1,11 +1,18 @@ -const express = require('express') -const cuid = require('cuid') -const routes = require('@/routes/index.js') -const path = require('path') -const bodyParser = require('body-parser') -const helmet = require('helmet') -const context = require('@/helpers/context.js') -const HttpError = require('@/helpers/errors.js') +import path from 'node:path' +import process from 'node:process' + +import bodyParser from 'body-parser' +import cuid from 'cuid' +import express from 'express' +import helmet from 'helmet' + +import context from '#src/helpers/context.js' +import HttpError from '#src/helpers/errors.js' +import cors from '#src/middleware/cors.js' +import errors from '#src/middleware/errors.js' +import logRequest from '#src/middleware/log-request.js' +import session from '#src/middleware/session.js' +import routes from '#src/routes/index.js' const setRequestId = (req, res, next) => { const requestId = cuid() @@ -29,7 +36,7 @@ const asyncContext = (req, res, next) => { } } -module.exports = () => { +export default () => { const app = express() app.use(helmet.dnsPrefetchControl()) @@ -46,12 +53,12 @@ module.exports = () => { app.use(bodyParser.text()) app.use(bodyParser.urlencoded({ extended: false })) - app.use(require('@/middleware/cors.js')) + app.use(cors) app.use(setRequestId) app.use(asyncContext) - app.use(require('@/middleware/session.js')) + app.use(session) app.get('/status', (req, res) => { res.status(200).end() @@ -67,18 +74,19 @@ module.exports = () => { ) }) - app.use(require('@/middleware/log-request.js')(['password'])) + app.use(logRequest(['password'])) app.use('/api', routes) if (process.env.NODE_ENV === 'production') { app.use(express.static(path.join(__dirname, '../public'))) + // eslint-disable-next-line no-unused-vars app.get('*', (req, res, next) => { res.sendFile('index.html', { root: path.join(__dirname, '../public') }) }) } - app.use(require('@/middleware/errors.js')) + app.use(errors) return app } diff --git a/apps/api/src/helpers/context.js b/apps/api/src/helpers/context.js index 1f2ed45..5e36fa7 100644 --- a/apps/api/src/helpers/context.js +++ b/apps/api/src/helpers/context.js @@ -1,3 +1,3 @@ -const { AsyncLocalStorage } = require('async_hooks') +import { AsyncLocalStorage } from 'node:async_hooks' -module.exports = new AsyncLocalStorage() +export default new AsyncLocalStorage() diff --git a/apps/api/src/helpers/errors.js b/apps/api/src/helpers/errors.js index 0bfec27..f265a4a 100644 --- a/apps/api/src/helpers/errors.js +++ b/apps/api/src/helpers/errors.js @@ -1,4 +1,4 @@ -module.exports = class HttpError extends Error { +export default class HttpError extends Error { constructor(status, code, message, details) { if (!status) throw new Error('An HTTP Error need a status') if (!code) throw new Error('An HTTP Error need a code') diff --git a/apps/api/src/helpers/lnurl.js b/apps/api/src/helpers/lnurl.js index 153e929..73ee938 100644 --- a/apps/api/src/helpers/lnurl.js +++ b/apps/api/src/helpers/lnurl.js @@ -1,10 +1,12 @@ -const LND = require('@/classes/lnd.js') -const bip39 = require('bip39') -const { bech32 } = require('bech32') -const secp256k1 = require('secp256k1') -const BIP32Factory = require('bip32') -const ecc = require('tiny-secp256k1') -const { createHmac } = require('crypto') +import { createHmac } from 'crypto' + +import { bech32 } from 'bech32' +import BIP32Factory from 'bip32' +import bip39 from 'bip39' +import secp256k1 from 'secp256k1' +import * as ecc from 'tiny-secp256k1' + +import LND from '#src/classes/lnd.js' const bip32 = BIP32Factory.default(ecc) @@ -21,7 +23,7 @@ const arrayToHexString = (array) => { ) } -const createLnurlAuthPubkeyAndSignature = async ({ lnurl }) => { +export const createLnurlAuthPubkeyAndSignature = async ({ lnurl }) => { try { if (!lnurl) { throw new Error('lnurlNotFound') @@ -70,8 +72,9 @@ const createLnurlAuthPubkeyAndSignature = async ({ lnurl }) => { throw new Error('ErrorGeneratingKey') } - // Generates url parameters to get a JWT to communicate with lnmarkets api - // by signing a message with the given lnurl. + // Generates url parameters to get a cookie to communicate + // with lnmarkets api and JWT for the "Trade" button redirection by + // signing a message with the given lnurl. const sign = secp256k1.ecdsaSign( hexStringToArray(k1), @@ -93,5 +96,3 @@ const createLnurlAuthPubkeyAndSignature = async ({ lnurl }) => { return Promise.reject(error) } } - -module.exports = { createLnurlAuthPubkeyAndSignature } diff --git a/apps/api/src/index.js b/apps/api/src/index.js index e037772..4d439b9 100644 --- a/apps/api/src/index.js +++ b/apps/api/src/index.js @@ -1,12 +1,10 @@ -const path = require('path') -require('module-alias')(path.join(__dirname, '..')) -const http = require('http') +import http from 'node:http' -const log = require('@/logger/index.js') -const LND = require('@/classes/lnd.js') -const WebsocketServer = require('./websockets.js') +import LND from '#src/classes/lnd.js' +import log from '#src/logger/index.js' -const createExpressApp = require('./express.js') +import createExpressApp from './express.js' +import WebsocketServer from './websockets.js' process.on('unchaughtException', (error) => { log.error(error) @@ -17,6 +15,7 @@ const main = async () => { await LND.connect() const app = createExpressApp() const server = http.createServer(app) + WebsocketServer(server) server.on('error', (error) => { diff --git a/apps/api/src/logger/format.js b/apps/api/src/logger/format.js index 4f30ddf..2e7a256 100644 --- a/apps/api/src/logger/format.js +++ b/apps/api/src/logger/format.js @@ -1,5 +1,8 @@ -const { format } = require('winston') -const context = require('@/helpers/context.js') +import winston from 'winston' + +import context from '#src/helpers/context.js' + +const { format } = winston const getContext = format((info) => { const store = context.getStore() @@ -32,4 +35,4 @@ const isError = format((info) => { return info }) -module.exports = format.combine(getContext(), isHttpError(), isError()) +export default format.combine(getContext(), isHttpError(), isError()) diff --git a/apps/api/src/logger/index.js b/apps/api/src/logger/index.js index 419a98f..3eccffd 100644 --- a/apps/api/src/logger/index.js +++ b/apps/api/src/logger/index.js @@ -1,6 +1,7 @@ -const winston = require('winston') -const loki = require('./loki.js') -const format = require('./format.js') +import winston from 'winston' + +import format from './format.js' +import loki from './loki.js' const { createLogger, transports } = winston @@ -37,4 +38,4 @@ const loggerOptions = { transports: [new transports.Console(loki())], } -module.exports = createLogger(loggerOptions) +export default createLogger(loggerOptions) diff --git a/apps/api/src/logger/loki.js b/apps/api/src/logger/loki.js index 7a95cf0..920b231 100644 --- a/apps/api/src/logger/loki.js +++ b/apps/api/src/logger/loki.js @@ -1,7 +1,9 @@ -const { format } = require('winston') +import winston from 'winston' + +const { format } = winston const { combine, timestamp, printf, colorize } = format -module.exports = () => { +export default () => { const loki = printf((info) => { const { timestamp, level, message, reqid, uid, ip } = info @@ -33,9 +35,7 @@ module.exports = () => { } }) - const consoleOptions = { + return { format: combine(colorize(), timestamp(), loki), } - - return consoleOptions } diff --git a/apps/api/src/middleware/auth.js b/apps/api/src/middleware/auth.js index 8914dad..c986466 100644 --- a/apps/api/src/middleware/auth.js +++ b/apps/api/src/middleware/auth.js @@ -1,6 +1,6 @@ -const HttpError = require('@/helpers/errors.js') +import HttpError from '#src/helpers/errors.js' -module.exports = (req, res, next) => { +export default (req, res, next) => { if (!req.session || !req.session.auth) { throw new HttpError( 401, diff --git a/apps/api/src/middleware/cors.js b/apps/api/src/middleware/cors.js index bba70dc..d20c614 100644 --- a/apps/api/src/middleware/cors.js +++ b/apps/api/src/middleware/cors.js @@ -1,6 +1,6 @@ -const cors = require('cors') +import cors from 'cors' -module.exports = cors({ +export default cors({ credentials: true, exposedHeaders: ['Set-Cookie', 'Cookie', 'X-RequestId'], origin: (origin, callback) => { diff --git a/apps/api/src/middleware/errors.js b/apps/api/src/middleware/errors.js index 582fe5e..b6454e8 100644 --- a/apps/api/src/middleware/errors.js +++ b/apps/api/src/middleware/errors.js @@ -1,5 +1,5 @@ -const HttpError = require('@/helpers/errors.js') -const log = require('@/logger/index.js') +import HttpError from '#src/helpers/errors.js' +import log from '#src/logger/index.js' const handleLNMarketsRestError = (error) => { const { message, statusCode, code } = error @@ -39,7 +39,8 @@ const parseHttpError = ({ status, code, message }) => { } } -module.exports = (error, req, res, next) => { +// eslint-disable-next-line no-unused-vars +export default (error, req, res, next) => { let response log.error(error) diff --git a/apps/api/src/middleware/log-request.js b/apps/api/src/middleware/log-request.js index d4e9f32..fc94aa3 100644 --- a/apps/api/src/middleware/log-request.js +++ b/apps/api/src/middleware/log-request.js @@ -1,6 +1,6 @@ -const log = require('@/logger/index.js') +import log from '#src/logger/index.js' -module.exports = (doNotLogParams) => { +export default (doNotLogParams) => { return (req, res, next) => { const { path, method } = req @@ -9,10 +9,11 @@ module.exports = (doNotLogParams) => { if (Object.keys(clone).length > 0) { for (const key in clone) { - if (process.env.NODE_ENV !== 'development') { - if (doNotLogParams.indexOf(key) > -1) { - delete clone[key] - } + if ( + process.env.NODE_ENV !== 'development' && + doNotLogParams.indexOf(key) > -1 + ) { + delete clone[key] } } diff --git a/apps/api/src/middleware/session.js b/apps/api/src/middleware/session.js index a2cc396..9207acf 100644 --- a/apps/api/src/middleware/session.js +++ b/apps/api/src/middleware/session.js @@ -1,6 +1,6 @@ -const session = require('express-session') +import session from 'express-session' -module.exports = session({ +export default session({ secret: process.env.APP_PASSWORD, resave: false, saveUninitialized: true, diff --git a/apps/api/src/routes/futures/get.js b/apps/api/src/routes/futures/get.js index cfa5ea1..47545dc 100644 --- a/apps/api/src/routes/futures/get.js +++ b/apps/api/src/routes/futures/get.js @@ -1,6 +1,6 @@ -const LNMarketsAPI = require('@/classes/lnmarkets-api.js') +import LNMarketsAPI from '#src/classes/lnmarkets-api.js' -module.exports = async (req, res, next) => { +export default async (req, res, next) => { try { const positions = await LNMarketsAPI.futuresGetPositions({ type: 'running', diff --git a/apps/api/src/routes/index.js b/apps/api/src/routes/index.js index 43add0b..82f165c 100644 --- a/apps/api/src/routes/index.js +++ b/apps/api/src/routes/index.js @@ -1,11 +1,17 @@ -const express = require('express') -const isAuth = require('@/middleware/auth.js') +import express from 'express' + +import isAuth from '#src/middleware/auth.js' + +import auth from './auth/get.js' +import futures from './futures/get.js' +import login from './login/post.js' +import user from './user/index.js' const router = express.Router() -router.get('/auth', [isAuth], require('./auth/get.js')) -router.get('/futures', [isAuth], require('./futures/get.js')) -router.post('/login', require('./login/post.js')) -router.use('/user', require('./user/index.js')) +router.get('/auth', [isAuth], auth) +router.get('/futures', [isAuth], futures) +router.post('/login', login) +router.use('/user', user) -module.exports = router +export default router diff --git a/apps/api/src/routes/login/post.js b/apps/api/src/routes/login/post.js index 3b740da..15e6c7a 100644 --- a/apps/api/src/routes/login/post.js +++ b/apps/api/src/routes/login/post.js @@ -1,6 +1,6 @@ -const HttpError = require('@/helpers/errors.js') +import HttpError from '#src/helpers/errors.js' -module.exports = (req, res, next) => { +export default (req, res, next) => { try { if (req.body.password === process.env.APP_PASSWORD) { req.session.auth = true diff --git a/apps/api/src/routes/user/deposit/post.js b/apps/api/src/routes/user/deposit/post.js index b001a06..016d93b 100644 --- a/apps/api/src/routes/user/deposit/post.js +++ b/apps/api/src/routes/user/deposit/post.js @@ -1,9 +1,8 @@ -const LNMarketsAPI = require('@/classes/lnmarkets-api.js') -const LND = require('@/classes/lnd.js') +import LND from '#src/classes/lnd.js' +import LNMarketsAPI from '#src/classes/lnmarkets-api.js' +import HttpError from '#src/helpers/errors.js' -const HttpError = require('@/helpers/errors.js') - -module.exports = async (req, res, next) => { +export default async (req, res, next) => { try { const { amount } = req.body diff --git a/apps/api/src/routes/user/get.js b/apps/api/src/routes/user/get.js index 5472e8b..cb69b60 100644 --- a/apps/api/src/routes/user/get.js +++ b/apps/api/src/routes/user/get.js @@ -1,6 +1,6 @@ -const LNMarketsAPI = require('@/classes/lnmarkets-api.js') +import LNMarketsAPI from '#src/classes/lnmarkets-api.js' -module.exports = async (req, res, next) => { +export default async (req, res, next) => { try { const { uid, diff --git a/apps/api/src/routes/user/index.js b/apps/api/src/routes/user/index.js index 6718e07..13e73a9 100644 --- a/apps/api/src/routes/user/index.js +++ b/apps/api/src/routes/user/index.js @@ -1,10 +1,15 @@ -const express = require('express') -const isAuth = require('@/middleware/auth.js') +import express from 'express' + +import isAuth from '#src/middleware/auth.js' + +import deposit from './deposit/post.js' +import user from './get.js' +import withdraw from './withdraw/post.js' const router = express.Router() -router.get('/', [isAuth], require('./get.js')) -router.post('/deposit', [isAuth], require('./deposit/post.js')) -router.post('/withdraw', [isAuth], require('./withdraw/post.js')) +router.get('/', [isAuth], user) +router.post('/deposit', [isAuth], deposit) +router.post('/withdraw', [isAuth], withdraw) -module.exports = router +export default router diff --git a/apps/api/src/routes/user/withdraw/post.js b/apps/api/src/routes/user/withdraw/post.js index b4aa117..9b985a1 100644 --- a/apps/api/src/routes/user/withdraw/post.js +++ b/apps/api/src/routes/user/withdraw/post.js @@ -1,7 +1,7 @@ -const LNMarketsAPI = require('@/classes/lnmarkets-api.js') -const LND = require('@/classes/lnd.js') +import LND from '#src/classes/lnd.js' +import LNMarketsAPI from '#src/classes/lnmarkets-api.js' -module.exports = async (req, res, next) => { +export default async (req, res, next) => { try { const { amount } = req.body diff --git a/apps/api/src/websockets.js b/apps/api/src/websockets.js index 0b753f3..91bd001 100644 --- a/apps/api/src/websockets.js +++ b/apps/api/src/websockets.js @@ -1,20 +1,20 @@ -const { LNMarketsWebsocket } = require('@ln-markets/api') -const { Server } = require('ws') +import { LNMarketsWebsocket } from '@ln-markets/api' +import Websocket from 'ws' -const log = require('@/logger/index.js') +import log from '#src/logger/index.js' const OPEN = 1 -module.exports = async (server) => { +export default async (server) => { try { const lnm = new LNMarketsWebsocket({ network: process.env.BITCOIN_NETWORK }) - const ws = new Server({ + const ws = new Websocket.Server({ server, maxPayload: 1024, clientTracking: true, }) - lnm.on('connected', (message) => { + lnm.on('connected', () => { log.info(`Connected to ${lnm.hostname} websockets`) }) diff --git a/apps/front/.eslintrc.js b/apps/front/.eslintrc.js index c5517e1..b361303 100644 --- a/apps/front/.eslintrc.js +++ b/apps/front/.eslintrc.js @@ -45,4 +45,32 @@ module.exports = { 'prefer-const': 'error', 'prefer-arrow-callback': 'error', }, + settings: { + 'import/core-modules': [ + 'node:process', + 'node:async_hooks', + 'node:console', + 'node:os', + 'node:net', + 'node:crypto', + 'node:buffer', + 'node:timers', + 'node:querystring', + 'node:url', + 'node:http', + 'node:path', + 'node:fs', + 'node:fs/promises', + 'node:https', + 'node:v8', + 'node:worker_threads', + 'zx/globals', + ], + 'import/resolver': { + alias: { + map: [['#src', './src']], + extensions: ['.js', '.json'], + }, + }, + }, } diff --git a/package.json b/package.json index c607f18..738a698 100644 --- a/package.json +++ b/package.json @@ -28,12 +28,19 @@ "eslint": "^8.13.0", "eslint-config-prettier": "^8.5.0", "eslint-config-standard": "^16.0.3", + "eslint-formatter-gitlab": "^3.0.0", "eslint-import-resolver-alias": "^1.1.2", + "eslint-plugin-eslint-comments": "^3.2.0", "eslint-plugin-import": "^2.26.0", + "eslint-plugin-jsdoc": "^39.2.1", + "eslint-plugin-no-autofix": "^1.2.3", "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prefer-arrow": "^1.2.3", "eslint-plugin-prettier": "^4.0.0", "eslint-plugin-promise": "^5.2.0", + "eslint-plugin-sonarjs": "^0.13.0", "eslint-plugin-tailwindcss": "^1.17.2", + "eslint-plugin-unicorn": "^42.0.0", "eslint-plugin-vue": "^8.6.0", "husky": "^7.0.4", "lint-staged": "^12.3.7", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9ecded3..4fd2ea1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,12 +9,19 @@ importers: eslint: ^8.13.0 eslint-config-prettier: ^8.5.0 eslint-config-standard: ^16.0.3 + eslint-formatter-gitlab: ^3.0.0 eslint-import-resolver-alias: ^1.1.2 + eslint-plugin-eslint-comments: ^3.2.0 eslint-plugin-import: ^2.26.0 + eslint-plugin-jsdoc: ^39.2.1 + eslint-plugin-no-autofix: ^1.2.3 eslint-plugin-node: ^11.1.0 + eslint-plugin-prefer-arrow: ^1.2.3 eslint-plugin-prettier: ^4.0.0 eslint-plugin-promise: ^5.2.0 + eslint-plugin-sonarjs: ^0.13.0 eslint-plugin-tailwindcss: ^1.17.2 + eslint-plugin-unicorn: ^42.0.0 eslint-plugin-vue: ^8.6.0 husky: ^7.0.4 lint-staged: ^12.3.7 @@ -26,12 +33,19 @@ importers: eslint: 8.13.0 eslint-config-prettier: 8.5.0_eslint@8.13.0 eslint-config-standard: 16.0.3_6960c0c20e52186dd03aaccb5866d131 + eslint-formatter-gitlab: 3.0.0_eslint@8.13.0 eslint-import-resolver-alias: 1.1.2_eslint-plugin-import@2.26.0 + eslint-plugin-eslint-comments: 3.2.0_eslint@8.13.0 eslint-plugin-import: 2.26.0_eslint@8.13.0 + eslint-plugin-jsdoc: 39.2.1_eslint@8.13.0 + eslint-plugin-no-autofix: 1.2.3_eslint@8.13.0 eslint-plugin-node: 11.1.0_eslint@8.13.0 + eslint-plugin-prefer-arrow: 1.2.3_eslint@8.13.0 eslint-plugin-prettier: 4.0.0_7b849999f0285322972e7e593f1ec452 eslint-plugin-promise: 5.2.0_eslint@8.13.0 + eslint-plugin-sonarjs: 0.13.0_eslint@8.13.0 eslint-plugin-tailwindcss: 1.17.2 + eslint-plugin-unicorn: 42.0.0_eslint@8.13.0 eslint-plugin-vue: 8.6.0_eslint@8.13.0 husky: 7.0.4 lint-staged: 12.3.7 @@ -314,6 +328,15 @@ packages: - typescript dev: true + /@es-joy/jsdoccomment/0.22.1: + resolution: {integrity: sha512-/WMkqLYfwCf0waCAMC8Eddt3iAOdghkDF5vmyKEu8pfO66KRFY1L15yks8mfgURiwOAOJpAQ3blvB3Znj6ZwBw==} + engines: {node: ^12 || ^14 || ^16 || ^17} + dependencies: + comment-parser: 1.3.1 + esquery: 1.4.0 + jsdoc-type-pratt-parser: 2.2.5 + dev: true + /@eslint/eslintrc/1.2.1: resolution: {integrity: sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1205,6 +1228,11 @@ packages: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true + /builtin-modules/3.2.0: + resolution: {integrity: sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==} + engines: {node: '>=6'} + dev: true + /bytes/3.1.0: resolution: {integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==} engines: {node: '>= 0.8'} @@ -1322,6 +1350,10 @@ packages: resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} dev: true + /ci-info/3.3.0: + resolution: {integrity: sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==} + dev: true + /cipher-base/1.0.4: resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} dependencies: @@ -1329,6 +1361,13 @@ packages: safe-buffer: 5.2.1 dev: false + /clean-regexp/1.0.0: + resolution: {integrity: sha1-jffHquUf02h06PjQW5GAvBGj/tc=} + engines: {node: '>=4'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + /clean-stack/2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} @@ -1455,6 +1494,11 @@ packages: engines: {node: '>= 12'} dev: true + /comment-parser/1.3.1: + resolution: {integrity: sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==} + engines: {node: '>= 12.0.0'} + dev: true + /compare-func/2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} dependencies: @@ -2091,6 +2135,16 @@ packages: eslint-plugin-promise: 5.2.0_eslint@8.13.0 dev: true + /eslint-formatter-gitlab/3.0.0_eslint@8.13.0: + resolution: {integrity: sha512-fqZ2G45rgbrHcFunqmwuG5Qo6QAOlxEsR+KdOP08T1Xegw5tJhHh9KFWMSct8q6x8xCMUyYGHypZd342bLUttA==} + peerDependencies: + eslint: ^5 || ^6 || ^7 || ^8 + dependencies: + chalk: 4.1.2 + eslint: 8.13.0 + js-yaml: 4.1.0 + dev: true + /eslint-import-resolver-alias/1.1.2_eslint-plugin-import@2.26.0: resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} engines: {node: '>= 4'} @@ -2126,6 +2180,17 @@ packages: regexpp: 3.2.0 dev: true + /eslint-plugin-eslint-comments/3.2.0_eslint@8.13.0: + resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} + engines: {node: '>=6.5.0'} + peerDependencies: + eslint: '>=4.19.1' + dependencies: + escape-string-regexp: 1.0.5 + eslint: 8.13.0 + ignore: 5.2.0 + dev: true + /eslint-plugin-import/2.26.0_eslint@8.13.0: resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} engines: {node: '>=4'} @@ -2148,6 +2213,35 @@ packages: tsconfig-paths: 3.14.1 dev: true + /eslint-plugin-jsdoc/39.2.1_eslint@8.13.0: + resolution: {integrity: sha512-bNNAJPhFUKVBHJMKU7zAQ1LvlVWoDbxAA/Ty9hwSI2hy+AVpc9wq16W6YHXd0PuMhXlv4FgYtjizHMu8Mnc4GA==} + engines: {node: ^14 || ^16 || ^17} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@es-joy/jsdoccomment': 0.22.1 + comment-parser: 1.3.1 + debug: 4.3.4 + escape-string-regexp: 4.0.0 + eslint: 8.13.0 + esquery: 1.4.0 + semver: 7.3.7 + spdx-expression-parse: 3.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-no-autofix/1.2.3_eslint@8.13.0: + resolution: {integrity: sha512-JFSYe82Da2A8Krh+Gfq7+3X2pchTScKgmrlMKIA4HmV6t5xGBF/kgjiFL3YTWRQXQ0NB9eOqpcxh6SuLtQUFjQ==} + engines: {node: '>=8'} + peerDependencies: + eslint: '>= 5.12.1' + dependencies: + eslint: 8.13.0 + eslint-rule-composer: 0.3.0 + find-up: 5.0.0 + dev: true + /eslint-plugin-node/11.1.0_eslint@8.13.0: resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} engines: {node: '>=8.10.0'} @@ -2163,6 +2257,14 @@ packages: semver: 6.3.0 dev: true + /eslint-plugin-prefer-arrow/1.2.3_eslint@8.13.0: + resolution: {integrity: sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ==} + peerDependencies: + eslint: '>=2.0.0' + dependencies: + eslint: 8.13.0 + dev: true + /eslint-plugin-prettier/4.0.0_7b849999f0285322972e7e593f1ec452: resolution: {integrity: sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==} engines: {node: '>=6.0.0'} @@ -2189,6 +2291,15 @@ packages: eslint: 8.13.0 dev: true + /eslint-plugin-sonarjs/0.13.0_eslint@8.13.0: + resolution: {integrity: sha512-t3m7ta0EspzDxSOZh3cEOJIJVZgN/TlJYaBGnQlK6W/PZNbWep8q4RQskkJkA7/zwNpX0BaoEOSUUrqaADVoqA==} + engines: {node: '>=12'} + peerDependencies: + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + eslint: 8.13.0 + dev: true + /eslint-plugin-tailwindcss/1.17.2: resolution: {integrity: sha512-cQWP7bSdJHcnBIv/eCXqerMYiwn7qfpyRvqzCiGhttWBhjr+h5q6XsAgg967mdUeJzzQr+68ETXNHLkCK7KJQA==} engines: {node: '>=12.13.0'} @@ -2201,6 +2312,29 @@ packages: - ts-node dev: true + /eslint-plugin-unicorn/42.0.0_eslint@8.13.0: + resolution: {integrity: sha512-ixBsbhgWuxVaNlPTT8AyfJMlhyC5flCJFjyK3oKE8TRrwBnaHvUbuIkCM1lqg8ryYrFStL/T557zfKzX4GKSlg==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=8.8.0' + dependencies: + '@babel/helper-validator-identifier': 7.16.7 + ci-info: 3.3.0 + clean-regexp: 1.0.0 + eslint: 8.13.0 + eslint-utils: 3.0.0_eslint@8.13.0 + esquery: 1.4.0 + indent-string: 4.0.0 + is-builtin-module: 3.1.0 + lodash: 4.17.21 + pluralize: 8.0.0 + read-pkg-up: 7.0.1 + regexp-tree: 0.1.24 + safe-regex: 2.1.1 + semver: 7.3.7 + strip-indent: 3.0.0 + dev: true + /eslint-plugin-vue/8.6.0_eslint@8.13.0: resolution: {integrity: sha512-abXiF2J18n/7ZPy9foSlJyouKf54IqpKlNvNmzhM93N0zs3QUxZG/oBd3tVPOJTKg7SlhBUtPxugpqzNbgGpQQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2216,6 +2350,11 @@ packages: - supports-color dev: true + /eslint-rule-composer/0.3.0: + resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==} + engines: {node: '>=4.0.0'} + dev: true + /eslint-scope/7.1.1: resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -3062,6 +3201,13 @@ packages: has-tostringtag: 1.0.0 dev: true + /is-builtin-module/3.1.0: + resolution: {integrity: sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg==} + engines: {node: '>=6'} + dependencies: + builtin-modules: 3.2.0 + dev: true + /is-callable/1.2.4: resolution: {integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==} engines: {node: '>= 0.4'} @@ -3238,6 +3384,11 @@ packages: argparse: 2.0.1 dev: true + /jsdoc-type-pratt-parser/2.2.5: + resolution: {integrity: sha512-2a6eRxSxp1BW040hFvaJxhsCMI9lT8QB8t14t+NY5tC5rckIR0U9cr2tjOeaFirmEOy6MHvmJnY7zTBHq431Lw==} + engines: {node: '>=12.0.0'} + dev: true + /json-buffer/3.0.0: resolution: {integrity: sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=} dev: true @@ -4062,6 +4213,11 @@ packages: hasBin: true dev: true + /pluralize/8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + dev: true + /postcss-js/3.0.3: resolution: {integrity: sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==} engines: {node: '>=10.0'} @@ -4423,6 +4579,11 @@ packages: postcss-value-parser: 3.3.1 dev: true + /regexp-tree/0.1.24: + resolution: {integrity: sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==} + hasBin: true + dev: true + /regexpp/3.2.0: resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} engines: {node: '>=8'} @@ -4551,6 +4712,12 @@ packages: /safe-buffer/5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + /safe-regex/2.1.1: + resolution: {integrity: sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==} + dependencies: + regexp-tree: 0.1.24 + dev: true + /safe-stable-stringify/2.3.1: resolution: {integrity: sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg==} engines: {node: '>=10'} From 1bc83141d0c3b9079f36ce5db0c87ed495a9f65b Mon Sep 17 00:00:00 2001 From: Botrel Kilian Date: Wed, 13 Apr 2022 19:18:16 +0200 Subject: [PATCH 06/17] chore: remove console.log --- apps/front/src/views/auth/Index.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/front/src/views/auth/Index.vue b/apps/front/src/views/auth/Index.vue index 70dad7e..4a521e3 100644 --- a/apps/front/src/views/auth/Index.vue +++ b/apps/front/src/views/auth/Index.vue @@ -59,7 +59,6 @@ export default { const password = ref('') const updateIcon = () => { - console.log(passwordType.value) if (passwordType.value === 'text') { passwordType.value = 'password' } else { From fb98d7efaf728dde4e5fcd6056fa2390d35c1a18 Mon Sep 17 00:00:00 2001 From: Botrel Kilian Date: Wed, 13 Apr 2022 20:01:58 +0200 Subject: [PATCH 07/17] refactor: switch from JWT to cookies for authentication (#36) --- apps/api/src/classes/lnd.js | 2 +- apps/api/src/classes/lnmarkets-api.js | 100 ++++++++++++++++---------- apps/api/src/helpers/lnurl.js | 7 +- apps/api/src/routes/auth/get.js | 8 ++- 4 files changed, 74 insertions(+), 43 deletions(-) diff --git a/apps/api/src/classes/lnd.js b/apps/api/src/classes/lnd.js index 1f1ae4b..346b2fa 100644 --- a/apps/api/src/classes/lnd.js +++ b/apps/api/src/classes/lnd.js @@ -1,4 +1,4 @@ -import Buffer from 'node:buffer' +import { Buffer } from 'node:buffer' import fs from 'node:fs' import net from 'node:net' import process from 'node:process' diff --git a/apps/api/src/classes/lnmarkets-api.js b/apps/api/src/classes/lnmarkets-api.js index 088a7b3..55e2382 100644 --- a/apps/api/src/classes/lnmarkets-api.js +++ b/apps/api/src/classes/lnmarkets-api.js @@ -1,29 +1,18 @@ -const { LNMarketsRest } = require('@ln-markets/api') -const { createLnurlAuthPubkeyAndSignature } = require('@/helpers/lnurl.js') +import { LNMarketsRest } from '@ln-markets/api' +import fetch from 'node-fetch' -const isTokenExpired = (token) => { - const convertBase64 = (input) => { - input = input.replace(/-/g, '+').replace(/_/g, '/') +import { createLnurlAuthPubkeyAndSignature } from '#src/helpers/lnurl.js' - const pad = input.length % 4 +const isCookieExpired = (cookie) => { + const expiry = Date.parse( + cookie + .split('; ') + .find((property) => property.startsWith('Expires=')) + .substring(8) // Lenght of Expires=, to only get the date. + ) + const now = Date.now() - if (pad) { - if (pad === 1) { - throw new Error('InvalidLengthError') - } - input += new Array(5 - pad).join('=') - } - - return input - } - - const convertedString = convertBase64(token.split('.')[1]) - const payload = Buffer.from(convertedString, 'base64').toString() - - const { exp } = JSON.parse(payload) - const now = Math.floor(Date.now() / 1000) - - return now >= exp + return now > expiry } const network = process.env.BITCOIN_NETWORK @@ -34,20 +23,23 @@ const customHeaders = { class LNMarketsAPI extends LNMarketsRest { constructor() { - super({ network, customHeaders }) + super({ network, customHeaders, skipApiKey: true }) - this.doNotCheckToken = false + this.doNotCheckCookie = false } async beforeRequestApi(options) { try { - if (!this.doNotCheckToken) { - if (!this.token || isTokenExpired(this.token)) { - // Mutex du pauvre - this.doNotCheckToken = true - this.token = await this.createToken() + if ( + !this.doNotCheckCookie && + (!this.cookie || isCookieExpired(this.cookie)) + ) { + await this.authenticate() + } - this.doNotCheckToken = false + if (options.credentials) { + options.headers = { + Cookie: this.cookie, } } @@ -57,16 +49,50 @@ class LNMarketsAPI extends LNMarketsRest { } } - async createToken() { + async authenticate(opt = {}) { try { - const { lnurl } = await this.getLnurlAuth() - const params = await createLnurlAuthPubkeyAndSignature({ lnurl }) - const { token } = await this.lnurlAuth(params) - return token + const { withJWT = false } = opt + + this.doNotCheckCookie = true + + const authResponse = await fetch( + 'https://api.kibotrel.lnmarkets.dev/v1/lnurl/auth', + { + method: 'post', + body: JSON.stringify({}), + headers: { 'Content-Type': 'application/json' }, + credentials: true, + } + ) + + const cookie = authResponse.headers.get('set-cookie') + const { lnurl } = await authResponse.json() + + const params = new URLSearchParams( + await createLnurlAuthPubkeyAndSignature({ lnurl, withJWT }) + ) + + const response = await fetch( + `https://${this.hostname}/${ + this.version + }/lnurl/auth?${params.toString()}`, + { + credentials: true, + headers: { Cookie: cookie }, + } + ) + + if (!withJWT) { + this.cookie = cookie + } + + this.doNotCheckCookie = false + + return response.json() } catch (error) { return Promise.reject(error) } } } -module.exports = new LNMarketsAPI() +export default new LNMarketsAPI() diff --git a/apps/api/src/helpers/lnurl.js b/apps/api/src/helpers/lnurl.js index 73ee938..1e5c75b 100644 --- a/apps/api/src/helpers/lnurl.js +++ b/apps/api/src/helpers/lnurl.js @@ -23,7 +23,10 @@ const arrayToHexString = (array) => { ) } -export const createLnurlAuthPubkeyAndSignature = async ({ lnurl }) => { +export const createLnurlAuthPubkeyAndSignature = async ({ + lnurl, + withJWT = false, +}) => { try { if (!lnurl) { throw new Error('lnurlNotFound') @@ -90,7 +93,7 @@ export const createLnurlAuthPubkeyAndSignature = async ({ lnurl }) => { hmac, sig: hexStringSignature, key: publicKey, - jwt: true, + jwt: withJWT, } } catch (error) { return Promise.reject(error) diff --git a/apps/api/src/routes/auth/get.js b/apps/api/src/routes/auth/get.js index e4ed923..6094816 100644 --- a/apps/api/src/routes/auth/get.js +++ b/apps/api/src/routes/auth/get.js @@ -1,10 +1,12 @@ -const LNMarketsAPI = require('@/classes/lnmarkets-api.js') +import LNMarketsAPI from '#src/classes/lnmarkets-api.js' -module.exports = async (req, res, next) => { +export default async (req, res, next) => { try { const parts = LNMarketsAPI.hostname.split('.') + parts.shift() - const token = await LNMarketsAPI.createToken() + + const { token } = await LNMarketsAPI.authenticate({ withJWT: true }) res.json({ hostname: parts.join('.'), token }) } catch (error) { From 114abb90c443e259c8f16f1ef3f977a6742e439e Mon Sep 17 00:00:00 2001 From: Botrel Kilian Date: Wed, 13 Apr 2022 20:45:37 +0200 Subject: [PATCH 08/17] docs: update screen --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ae07922..ec66860 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ As a regular user you must use the official integrated application through [Umbrel](https://github.com/getumbrel/umbrel). This way you could switch between mainnet and testnet network. -![Umbrel](https://user-images.githubusercontent.com/45034541/140373859-66b7fa6d-5eeb-4fc5-8608-d139e8677267.png) +![Umbrel](https://user-images.githubusercontent.com/45034541/163248849-69ba8bde-4654-4145-838f-9cdb4d04a4d5.png) You can find the information about how to build an app for Umbrel [here](https://github.com/getumbrel/umbrel/tree/b768bcf9e90e51cb6cc13ddb8a8a2a905ac2017b/apps) From 1c7b3d1a0fea2455cc2628b526283b9eedde1888 Mon Sep 17 00:00:00 2001 From: Botrel Kilian Date: Thu, 14 Apr 2022 10:34:10 +0200 Subject: [PATCH 09/17] docs: section for api hostname configuration --- dev/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/README.md b/dev/README.md index e029f96..4b55047 100644 --- a/dev/README.md +++ b/dev/README.md @@ -20,6 +20,8 @@ You must launch LN Markets local env beforehand. $> pnpm local:start ``` +> Be sure to edit `dev/local/docker-compose.yml` to put your own dev domain in `LNMARKETS_API_HOSTNAME` for both `api` and `app` services. + ## Install testnet env This environment is linked to the **testnet** version of LN Markets. **Meant for development use only**. @@ -39,7 +41,6 @@ This command will output you a wallet address that you must use to get tBTC in o | https://coinfaucet.eu/en/btc-testnet/ | | https://testnet-faucet.mempool.co/ | | https://bitcoinfaucet.uo1.net/ | -| | You can check how much your wallet contains. @@ -74,4 +75,3 @@ These following services ar now accessible on any web browser no matter which en | :-----: | :-----------------------: | | API | http://localhost:8001/api | | Front | http://localhost:3000 | -| | | From f3ef84d86560df90d60d2fb41b964ad65e21fbd5 Mon Sep 17 00:00:00 2001 From: Botrel Kilian Date: Thu, 14 Apr 2022 16:38:59 +0200 Subject: [PATCH 10/17] feat: display volatility (#38) --- apps/api/src/websockets.js | 6 +++++- .../front/src/store/options/modules/market.js | 20 +++++++++++++++++++ apps/front/src/views/profile/MarketData.vue | 5 +++++ 3 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 apps/front/src/store/options/modules/market.js diff --git a/apps/api/src/websockets.js b/apps/api/src/websockets.js index 91bd001..2d53a5c 100644 --- a/apps/api/src/websockets.js +++ b/apps/api/src/websockets.js @@ -28,7 +28,11 @@ export default async (server) => { await lnm.connect() await lnm.subscribe({ - params: ['futures/market/index', 'futures/market/bid-offer'], + params: [ + 'futures/market/index', + 'futures/market/bid-offer', + 'options/market/volatility', + ], }) } catch (error) { return Promise.reject(error) diff --git a/apps/front/src/store/options/modules/market.js b/apps/front/src/store/options/modules/market.js new file mode 100644 index 0000000..7054655 --- /dev/null +++ b/apps/front/src/store/options/modules/market.js @@ -0,0 +1,20 @@ +const defaultState = () => { + return { + volatility: 0.5, + } +} + +export default { + namespaced: true, + state: defaultState(), + actions: { + volatility({ commit }, data) { + commit('NEW_VOLATILITY', data) + }, + }, + mutations: { + NEW_VOLATILITY(state, { volatility }) { + state.volatility = parseFloat(volatility) + }, + }, +} diff --git a/apps/front/src/views/profile/MarketData.vue b/apps/front/src/views/profile/MarketData.vue index 4bb813c..572e394 100644 --- a/apps/front/src/views/profile/MarketData.vue +++ b/apps/front/src/views/profile/MarketData.vue @@ -12,6 +12,10 @@ Offer: {{ withCommasAndFixed(offer) }} + Volatility: {{ withCommasAndFixed(volatility * 100) }}%
@@ -29,6 +33,7 @@ export default { index: computed(() => store.getters['futures/market/fixedIndex']), bid: computed(() => store.state.futures.market.bid), offer: computed(() => store.state.futures.market.offer), + volatility: computed(() => store.state.options.market.volatility), } }, methods: { From 7a75b6f9eb9c9420af4069fe0f5cb32173b27e3d Mon Sep 17 00:00:00 2001 From: Botrel Kilian Date: Thu, 14 Apr 2022 16:41:24 +0200 Subject: [PATCH 11/17] refactor: risk breakdown WIP (#38) --- apps/api/src/routes/user/get.js | 26 +---- apps/front/src/store/index.js | 2 + apps/front/src/store/options/index.js | 39 +++++++ apps/front/src/views/profile/Account.vue | 22 +++- apps/front/src/views/profile/Index.vue | 8 +- apps/front/src/views/profile/Positions.vue | 63 ----------- apps/front/src/views/profile/Profile.vue | 2 +- apps/front/src/views/profile/Risk.vue | 126 +++++++++++++++++++++ 8 files changed, 195 insertions(+), 93 deletions(-) create mode 100644 apps/front/src/store/options/index.js delete mode 100644 apps/front/src/views/profile/Positions.vue create mode 100644 apps/front/src/views/profile/Risk.vue diff --git a/apps/api/src/routes/user/get.js b/apps/api/src/routes/user/get.js index cb69b60..f262115 100644 --- a/apps/api/src/routes/user/get.js +++ b/apps/api/src/routes/user/get.js @@ -2,31 +2,9 @@ import LNMarketsAPI from '#src/classes/lnmarkets-api.js' export default async (req, res, next) => { try { - const { - uid, - balance, - username, - linkingpublickey, - total_deposit_success_count, - total_withdraw_success_count, - total_open_positions, - total_running_positions, - total_closed_positions, - total_canceled_positions, - } = await LNMarketsAPI.getUser() + const response = await LNMarketsAPI.getUser() - res.json({ - uid, - balance, - username, - linkingpublickey, - total_deposit_success_count, - total_withdraw_success_count, - total_open_positions, - total_running_positions, - total_closed_positions, - total_canceled_positions, - }) + res.json(response) } catch (error) { next(error) } diff --git a/apps/front/src/store/index.js b/apps/front/src/store/index.js index a4fa8f2..123d1bb 100644 --- a/apps/front/src/store/index.js +++ b/apps/front/src/store/index.js @@ -6,6 +6,7 @@ import router from '@/router/index.js' import user from './user/index.js' import futures from './futures/index.js' +import options from './options/index.js' import websockets from './websockets/index.js' import ModalDisclaimer from '@/modals/Disclaimer.vue' @@ -63,5 +64,6 @@ export default createStore({ user, futures, websockets, + options, }, }) diff --git a/apps/front/src/store/options/index.js b/apps/front/src/store/options/index.js new file mode 100644 index 0000000..c5664a6 --- /dev/null +++ b/apps/front/src/store/options/index.js @@ -0,0 +1,39 @@ +import api from '@/plugins/api.js' +import market from './modules/market.js' + +const defaultState = () => { + return { + options: [], + } +} + +export default { + namespaced: true, + state: defaultState(), + actions: { + async get({ commit, dispatch }) { + try { + const options = await api.get({ + path: '/api/options', + }) + + commit('OPTIONS', options) + } catch (error) { + return dispatch('error', error, { root: true }) + } + }, + }, + mutations: { + OPTIONS(state, options) { + state.options = options + }, + }, + getters: { + computePL: (state) => { + return state.options.reduce((a, b) => ({ pl: a.pl + b.pl }), { pl: 0 }).pl + }, //WIP + }, + modules: { + market, + }, +} diff --git a/apps/front/src/views/profile/Account.vue b/apps/front/src/views/profile/Account.vue index 414f524..806af5f 100644 --- a/apps/front/src/views/profile/Account.vue +++ b/apps/front/src/views/profile/Account.vue @@ -8,6 +8,18 @@ >{{ balance.toLocaleString('en') }} sats
+
+ Margin available: + {{ margin_available.toLocaleString('en') }} sats +
+
+ Margin used: + {{ margin_used.toLocaleString('en') }} sats +

UID: @@ -27,7 +39,15 @@ export default { const store = useStore() return { uid: computed(() => store.state.user.uid), - balance: computed(() => store.state.user.balance), + margin_available: computed(() => store.state.user.balance), + balance: computed( + () => + store.state.user.balance + + store.getters['user/usedMargin'] + + store.getters['futures/computePL'] + + store.getters['options/computePL'] + ), + margin_used: computed(() => store.getters['user/usedMargin']), //WIP } }, } diff --git a/apps/front/src/views/profile/Index.vue b/apps/front/src/views/profile/Index.vue index 3667b7f..e41e00f 100644 --- a/apps/front/src/views/profile/Index.vue +++ b/apps/front/src/views/profile/Index.vue @@ -4,7 +4,7 @@
- +
@@ -17,7 +17,7 @@ import { useStore } from 'vuex' import MarketData from './MarketData.vue' import Account from './Account.vue' import Profile from './Profile.vue' -import Positions from './Positions.vue' +import Risk from './Risk.vue' import Actions from './Actions.vue' export default { @@ -26,7 +26,7 @@ export default { MarketData, Account, Profile, - Positions, + Risk, Actions, }, @@ -87,7 +87,7 @@ hr { } .category-row { - @apply flex flex-row justify-between text-xs px-2; + @apply text-center flex flex-row justify-between text-xs px-2; @apply sm:px-8 md:text-sm 2xl:text-base; } diff --git a/apps/front/src/views/profile/Positions.vue b/apps/front/src/views/profile/Positions.vue deleted file mode 100644 index 5210d84..0000000 --- a/apps/front/src/views/profile/Positions.vue +++ /dev/null @@ -1,63 +0,0 @@ - - - diff --git a/apps/front/src/views/profile/Profile.vue b/apps/front/src/views/profile/Profile.vue index 771abac..e8479aa 100644 --- a/apps/front/src/views/profile/Profile.vue +++ b/apps/front/src/views/profile/Profile.vue @@ -45,7 +45,7 @@ export default { total_withdraw_success_count: computed( () => store.state.user.total_withdraw_success_count ), - total_positions: computed(() => store.getters['user/positionCount']), + total_positions: computed(() => store.getters['user/positionCount'] + 0), //WIP } }, } diff --git a/apps/front/src/views/profile/Risk.vue b/apps/front/src/views/profile/Risk.vue new file mode 100644 index 0000000..df7b503 --- /dev/null +++ b/apps/front/src/views/profile/Risk.vue @@ -0,0 +1,126 @@ + + + + + From c0c77d9d995261ee471ad7145a06b0353bdbce56 Mon Sep 17 00:00:00 2001 From: Botrel Kilian Date: Thu, 14 Apr 2022 16:43:12 +0200 Subject: [PATCH 12/17] refactor: compute PL by hand. removed from running positions soon --- apps/front/src/plugins/utils.js | 20 ++++++++++++++++++++ apps/front/src/store/futures/index.js | 15 ++++++++++++--- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/apps/front/src/plugins/utils.js b/apps/front/src/plugins/utils.js index a74e5b0..39520df 100644 --- a/apps/front/src/plugins/utils.js +++ b/apps/front/src/plugins/utils.js @@ -1,3 +1,5 @@ +export const SATOSHI = 100000000 + export const isInteger = (event) => { event = event || window.event @@ -20,3 +22,21 @@ export const withCommasAndFixed = (number, fixed = 1) => { parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',') return parts.join('.') } + +export const getSign = ({ side, sign }) => { + if (!side && !sign) throw new Error('getSign missing sign or side') + + if (side === -1 || side === 1) return side + if (side === 'b') return 1 + else if (side === 's') return -1 + else if (sign) return sign + else throw new Error('toto') +} + +export const calcFuturesPL = ({ side, sign, quantity, price }, lastPrice) => { + sign = getSign({ sign, side }) + + if (!lastPrice) throw new Error('calcPL missing lastPrice') + + return Math.round(sign * quantity * SATOSHI * (1 / price - 1 / lastPrice)) +} diff --git a/apps/front/src/store/futures/index.js b/apps/front/src/store/futures/index.js index 0eebf33..cca0b06 100644 --- a/apps/front/src/store/futures/index.js +++ b/apps/front/src/store/futures/index.js @@ -1,5 +1,6 @@ import api from '@/plugins/api.js' import market from './modules/market.js' +import { calcFuturesPL } from '@/plugins/utils.js' const defaultState = () => { return { @@ -29,9 +30,17 @@ export default { }, }, getters: { - computePL: (state) => { - return state.positions.reduce((a, b) => ({ pl: a.pl + b.pl }), { pl: 0 }) - .pl + computePL: (state, getters, rootState) => { + const { bid, offer } = rootState.futures.market + + let pl = 0 + for (const position of state.positions) { + const lastPrice = position.side === 'b' ? bid : offer + + pl += calcFuturesPL(position, lastPrice) + } + + return pl }, }, modules: { From 3cb577a3c809e90cd9697abeaf26f12fba73999b Mon Sep 17 00:00:00 2001 From: Botrel Kilian Date: Thu, 14 Apr 2022 16:44:04 +0200 Subject: [PATCH 13/17] refactor: margin / quantity computation (#38) --- apps/front/src/store/user/index.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/apps/front/src/store/user/index.js b/apps/front/src/store/user/index.js index 999048e..fc7d4b5 100644 --- a/apps/front/src/store/user/index.js +++ b/apps/front/src/store/user/index.js @@ -1,6 +1,6 @@ import actions from './actions.js' -const MAX_DEPOSIT_AMOUNT = 1000000 +const MAX_DEPOSIT_AMOUNT = 2000000 const defaultState = () => { return { @@ -10,10 +10,8 @@ const defaultState = () => { linkingpublickey: '', total_deposit_success_count: 0, total_withdraw_success_count: 0, - total_open_positions: 0, - total_running_positions: 0, - total_closed_positions: 0, - total_canceled_positions: 0, + total_running_margin: 0, + total_running_quantity: 0, } } @@ -50,5 +48,13 @@ export default { state.total_canceled_positions ) }, + + totalQuantity: (state) => { + return state.total_running_quantity + state.total_open_quantity + }, + + usedMargin: (state) => { + return state.total_running_margin + state.total_open_margin + }, }, } From d10d89e4a1452d602d09a97061f9590e89685db2 Mon Sep 17 00:00:00 2001 From: Botrel Kilian Date: Tue, 19 Apr 2022 16:01:14 +0200 Subject: [PATCH 14/17] fix: cors for private ip access (#39) --- apps/api/src/middleware/cors.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/api/src/middleware/cors.js b/apps/api/src/middleware/cors.js index d20c614..5497d99 100644 --- a/apps/api/src/middleware/cors.js +++ b/apps/api/src/middleware/cors.js @@ -8,6 +8,8 @@ export default cors({ !origin || origin.match(/^http:\/\/localhost:\d+$/) || origin.match(/^http:\/\/umbrel(.*?).local(:\d+)?$/) || + // eslint-disable-next-line prettier/prettier, no-useless-escape + origin.match('/^http://192.168.d{1,3}.d{1,3}(:d+)?$/') || origin.match(`http://${process.env.APP_HIDDEN_SERVICE}`) || origin.match(`http://${process.env.APP_DOMAIN}`) ) { From b2b6f9372e473001f90e0da21f21f570b4155d11 Mon Sep 17 00:00:00 2001 From: Botrel Kilian Date: Thu, 21 Apr 2022 14:43:18 +0200 Subject: [PATCH 15/17] refactor: front store + pl computation (#38) --- apps/api/package.json | 3 +- apps/api/src/routes/index.js | 2 + apps/api/src/routes/options/get.js | 11 ++ apps/api/src/routes/user/get.js | 64 ++++++- apps/front/package.json | 1 + apps/front/src/store/futures/index.js | 8 +- apps/front/src/store/options/index.js | 34 +++- apps/front/src/store/user/actions.js | 1 + apps/front/src/store/user/index.js | 90 +++++++--- apps/front/src/views/profile/Account.vue | 17 +- apps/front/src/views/profile/Actions.vue | 6 +- apps/front/src/views/profile/Index.vue | 3 + apps/front/src/views/profile/Profile.vue | 24 +-- apps/front/src/views/profile/Risk.vue | 12 +- package.json | 4 +- pnpm-lock.yaml | 207 +++++++++-------------- 16 files changed, 300 insertions(+), 187 deletions(-) create mode 100644 apps/api/src/routes/options/get.js diff --git a/apps/api/package.json b/apps/api/package.json index dff50b0..03cec2e 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -21,7 +21,8 @@ "#src/*": "./src/*" }, "dependencies": { - "@ln-markets/api": "^1.6.1", + "@ln-markets/api": "^1.7.0", + "@ln-markets/maths": "^1.0.1", "bech32": "^2.0.0", "bip32": "^3.0.1", "bip39": "^3.0.4", diff --git a/apps/api/src/routes/index.js b/apps/api/src/routes/index.js index 82f165c..bb87a35 100644 --- a/apps/api/src/routes/index.js +++ b/apps/api/src/routes/index.js @@ -5,12 +5,14 @@ import isAuth from '#src/middleware/auth.js' import auth from './auth/get.js' import futures from './futures/get.js' import login from './login/post.js' +import options from './options/get.js' import user from './user/index.js' const router = express.Router() router.get('/auth', [isAuth], auth) router.get('/futures', [isAuth], futures) +router.get('/options', [isAuth], options) router.post('/login', login) router.use('/user', user) diff --git a/apps/api/src/routes/options/get.js b/apps/api/src/routes/options/get.js new file mode 100644 index 0000000..a93ec5a --- /dev/null +++ b/apps/api/src/routes/options/get.js @@ -0,0 +1,11 @@ +import LNMarketsAPI from '#src/classes/lnmarkets-api.js' + +export default async (req, res, next) => { + try { + const positions = await LNMarketsAPI.optionsGetPositions() + + res.json(positions) + } catch (error) { + next(error) + } +} diff --git a/apps/api/src/routes/user/get.js b/apps/api/src/routes/user/get.js index f262115..b82be25 100644 --- a/apps/api/src/routes/user/get.js +++ b/apps/api/src/routes/user/get.js @@ -2,7 +2,69 @@ import LNMarketsAPI from '#src/classes/lnmarkets-api.js' export default async (req, res, next) => { try { - const response = await LNMarketsAPI.getUser() + const { + uid, + balance, + username, + linkingpublickey, + total_deposit_success_count, + total_withdraw_success_count, + total_open_positions, + total_open_quantity, + total_open_margin, + total_canceled_positions, + total_running_quantity, + total_running_positions, + total_running_margin, + total_closed_positions, + options: { + total_running_quantity: total_option_running_quantity, + total_running_trades, + total_closed_trades, + }, + } = await LNMarketsAPI.getUser() + + const response = { + account: { + uid, + available_balance: balance, + username, + linkingpublickey, + }, + stats: { + transactions: { + deposits: total_deposit_success_count, + withdrawals: total_withdraw_success_count, + }, + futures: { + opened: { + quantity: total_open_quantity, + positions: total_open_positions, + margin: total_open_margin, + }, + running: { + quantity: total_running_quantity, + positions: total_running_positions, + margin: total_running_margin, + }, + canceled: { + positions: total_canceled_positions, + }, + closed: { + positions: total_closed_positions, + }, + }, + options: { + running: { + quantity: total_option_running_quantity, + positions: total_running_trades, + }, + closed: { + positions: total_closed_trades, + }, + }, + }, + } res.json(response) } catch (error) { diff --git a/apps/front/package.json b/apps/front/package.json index e38c72c..c3f24af 100644 --- a/apps/front/package.json +++ b/apps/front/package.json @@ -21,6 +21,7 @@ "@fortawesome/free-regular-svg-icons": "^5.15.4", "@fortawesome/free-solid-svg-icons": "^5.15.3", "@fortawesome/vue-fontawesome": "^3.0.0-4", + "@ln-markets/maths": "^1.0.1", "mitt": "^3.0.0", "vue": "^3.2.20", "vue-final-modal": "^3.4.3", diff --git a/apps/front/src/store/futures/index.js b/apps/front/src/store/futures/index.js index cca0b06..b881aaf 100644 --- a/apps/front/src/store/futures/index.js +++ b/apps/front/src/store/futures/index.js @@ -1,6 +1,6 @@ import api from '@/plugins/api.js' import market from './modules/market.js' -import { calcFuturesPL } from '@/plugins/utils.js' +import { computeFuturesPositionPl } from '@ln-markets/maths' const defaultState = () => { return { @@ -31,13 +31,9 @@ export default { }, getters: { computePL: (state, getters, rootState) => { - const { bid, offer } = rootState.futures.market - let pl = 0 for (const position of state.positions) { - const lastPrice = position.side === 'b' ? bid : offer - - pl += calcFuturesPL(position, lastPrice) + pl += computeFuturesPositionPl(position, rootState.futures.market) } return pl diff --git a/apps/front/src/store/options/index.js b/apps/front/src/store/options/index.js index c5664a6..822f009 100644 --- a/apps/front/src/store/options/index.js +++ b/apps/front/src/store/options/index.js @@ -1,6 +1,9 @@ import api from '@/plugins/api.js' import market from './modules/market.js' - +import { + computeVanillaOptionMarketToMarket, + computeVanillaOptionDelta, +} from '@ln-markets/maths' const defaultState = () => { return { options: [], @@ -29,9 +32,32 @@ export default { }, }, getters: { - computePL: (state) => { - return state.options.reduce((a, b) => ({ pl: a.pl + b.pl }), { pl: 0 }).pl - }, //WIP + computePL: (state, getters, rootState) => { + let pl = 0 + for (const position of state.options) { + pl += computeVanillaOptionMarketToMarket( + position, + rootState.futures.market + ) + } + + return pl + }, + + computeDelta: (state, getters, rootState) => { + let delta = 0 + for (const position of state.options) { + delta += computeVanillaOptionDelta(position, rootState.futures.market) + } + + return delta + }, + + usedMargin: (state) => { + return state.options.reduce((a, b) => ({ margin: a.margin + b.margin }), { + margin: 0, + }).margin + }, }, modules: { market, diff --git a/apps/front/src/store/user/actions.js b/apps/front/src/store/user/actions.js index a91890a..6c9ed7f 100644 --- a/apps/front/src/store/user/actions.js +++ b/apps/front/src/store/user/actions.js @@ -7,6 +7,7 @@ export default { setInterval(async () => { await dispatch('get') await dispatch('futures/get', undefined, { root: true }) + await dispatch('options/get', undefined, { root: true }) }, UPDATE_INTERVAL * 1000) }, diff --git a/apps/front/src/store/user/index.js b/apps/front/src/store/user/index.js index fc7d4b5..3f2adec 100644 --- a/apps/front/src/store/user/index.js +++ b/apps/front/src/store/user/index.js @@ -2,16 +2,51 @@ import actions from './actions.js' const MAX_DEPOSIT_AMOUNT = 2000000 +// Check in api/src/routes/user/get.js in order to +// understand the structure bellow. Some properties +// got renamed for clarity. + const defaultState = () => { return { - uid: '', - balance: 0, - username: '', - linkingpublickey: '', - total_deposit_success_count: 0, - total_withdraw_success_count: 0, - total_running_margin: 0, - total_running_quantity: 0, + account: { + uid: '', + available_balance: 0, + username: '', + linkingpublickey: '', + }, + stats: { + transactions: { + deposits: 0, + withdrawals: 0, + }, + futures: { + opened: { + quantity: 0, + positions: 0, + margin: 0, + }, + running: { + quantity: 0, + positions: 0, + margin: 0, + }, + canceled: { + positions: 0, + }, + closed: { + positions: 0, + }, + }, + options: { + running: { + quantity: 0, + positions: 0, + }, + closed: { + positions: 0, + }, + }, + }, } } @@ -26,35 +61,44 @@ export default { } }, WITHDRAW_SUCCESS(state, amount) { - state.balance = state.balance - parseInt(amount) - state.total_withdraw_success_count = - state.total_withdraw_success_count + 1 + state.account.available_balance -= parseInt(amount) + state.stats.transactions.withdrawals += 1 }, DEPOSIT_SUCCESS(state, amount) { - state.balance = state.balance + parseInt(amount) - state.total_deposit_success_count = state.total_deposit_success_count + 1 + state.account.available_balance += parseInt(amount) + state.stats.transactions.deposits += 1 }, }, getters: { maxDeposit: (state) => { - return MAX_DEPOSIT_AMOUNT - state.balance + return MAX_DEPOSIT_AMOUNT - state.account.available_balance }, - positionCount: (state) => { + positionsCount: (state) => { return ( - state.total_open_positions + - state.total_running_positions + - state.total_closed_positions + - state.total_canceled_positions + state.stats.futures.running.positions + + state.stats.futures.opened.positions + + state.stats.futures.closed.positions + + state.stats.futures.canceled.positions + + state.stats.options.running.positions + + state.stats.options.closed.positions ) }, - totalQuantity: (state) => { - return state.total_running_quantity + state.total_open_quantity + globalQuantity: (state, getters, rootState, rootGetters) => { + return ( + state.stats.futures.opened.quantity + + state.stats.futures.running.quantity + + Math.round(rootGetters['options/computeDelta']) + ) }, - usedMargin: (state) => { - return state.total_running_margin + state.total_open_margin + usedMargin: (state, getters, rootState, rootGetters) => { + return ( + state.stats.futures.opened.margin + + state.stats.futures.running.margin + + rootGetters['options/usedMargin'] + ) }, }, } diff --git a/apps/front/src/views/profile/Account.vue b/apps/front/src/views/profile/Account.vue index 806af5f..2f0e4fc 100644 --- a/apps/front/src/views/profile/Account.vue +++ b/apps/front/src/views/profile/Account.vue @@ -11,7 +11,7 @@
Margin available: {{ margin_available.toLocaleString('en') }} sats{{ available_balance.toLocaleString('en') }} sats
@@ -37,17 +37,22 @@ export default { setup() { const store = useStore() + const margin_used = computed(() => store.getters['user/usedMargin']) // WIP + const available_balance = computed( + () => store.state.user.account.available_balance + ) + return { - uid: computed(() => store.state.user.uid), - margin_available: computed(() => store.state.user.balance), + available_balance, + margin_used, + uid: computed(() => store.state.user.account.uid), balance: computed( () => - store.state.user.balance + - store.getters['user/usedMargin'] + + available_balance.value + + margin_used.value + store.getters['futures/computePL'] + store.getters['options/computePL'] ), - margin_used: computed(() => store.getters['user/usedMargin']), //WIP } }, } diff --git a/apps/front/src/views/profile/Actions.vue b/apps/front/src/views/profile/Actions.vue index afd828b..5f4b5d0 100644 --- a/apps/front/src/views/profile/Actions.vue +++ b/apps/front/src/views/profile/Actions.vue @@ -5,7 +5,7 @@
Withdraw @@ -41,7 +41,9 @@ export default { setup() { const store = useStore() return { - balance: computed(() => store.state.user.balance), + available_balance: computed( + () => store.state.user.account.available_balance + ), maxDeposit: computed(() => store.getters['user/maxDeposit']), loginToLNMarkets: () => store.dispatch('user/loginToLNMarkets'), } diff --git a/apps/front/src/views/profile/Index.vue b/apps/front/src/views/profile/Index.vue index e41e00f..c4027aa 100644 --- a/apps/front/src/views/profile/Index.vue +++ b/apps/front/src/views/profile/Index.vue @@ -35,6 +35,7 @@ export default { const getUser = () => store.dispatch('user/get') const getFutures = () => store.dispatch('futures/get') + const getOptions = () => store.dispatch('options/get') const showDisclaimer = () => store.dispatch('showDisclaimer') const updateProfileInterval = () => store.dispatch('user/updateProfileInterval') @@ -43,11 +44,13 @@ export default { showDisclaimer() await getUser() await getFutures() + await getOptions() updateProfileInterval() }) return { getUser, getFutures, + getOptions, } }, } diff --git a/apps/front/src/views/profile/Profile.vue b/apps/front/src/views/profile/Profile.vue index e8479aa..169a7f7 100644 --- a/apps/front/src/views/profile/Profile.vue +++ b/apps/front/src/views/profile/Profile.vue @@ -6,21 +6,15 @@
  • - {{ - total_positions.toLocaleString('en') - }} + {{ positions.toLocaleString('en') }} Positions
  • - {{ - total_deposit_success_count.toLocaleString('en') - }} + {{ deposits.toLocaleString('en') }} Deposits
  • - {{ - total_withdraw_success_count.toLocaleString('en') - }} + {{ withdrawals.toLocaleString('en') }} Withdrawals
@@ -38,14 +32,12 @@ export default { setup() { const store = useStore() return { - username: computed(() => store.state.user.username), - total_deposit_success_count: computed( - () => store.state.user.total_deposit_success_count + username: computed(() => store.state.user.account.username), + deposits: computed(() => store.state.user.stats.transactions.deposits), + withdrawals: computed( + () => store.state.user.stats.transactions.withdrawals ), - total_withdraw_success_count: computed( - () => store.state.user.total_withdraw_success_count - ), - total_positions: computed(() => store.getters['user/positionCount'] + 0), //WIP + positions: computed(() => store.getters['user/positionsCount']), } }, } diff --git a/apps/front/src/views/profile/Risk.vue b/apps/front/src/views/profile/Risk.vue index df7b503..9280590 100644 --- a/apps/front/src/views/profile/Risk.vue +++ b/apps/front/src/views/profile/Risk.vue @@ -100,9 +100,15 @@ export default { ), pl_futures: computed(() => store.getters['futures/computePL']), pl_options: computed(() => store.getters['options/computePL']), - quantity_global: computed(() => store.getters['user/totalQuantity']), - quantity_futures: computed(() => store.getters['user/totalQuantity']), - quantity_options: 0, //WIP + quantity_global: computed(() => store.getters['user/globalQuantity']), + quantity_futures: computed( + () => + store.state.user.stats.futures.opened.quantity + + store.state.user.stats.futures.running.quantity + ), + quantity_options: computed(() => + Math.round(store.getters['options/computeDelta']) + ), } }, diff --git a/package.json b/package.json index 738a698..6af6b08 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "eslint-import-resolver-alias": "^1.1.2", "eslint-plugin-eslint-comments": "^3.2.0", "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsdoc": "^39.2.1", + "eslint-plugin-jsdoc": "^39.2.7", "eslint-plugin-no-autofix": "^1.2.3", "eslint-plugin-node": "^11.1.0", "eslint-plugin-prefer-arrow": "^1.2.3", @@ -43,7 +43,7 @@ "eslint-plugin-unicorn": "^42.0.0", "eslint-plugin-vue": "^8.6.0", "husky": "^7.0.4", - "lint-staged": "^12.3.7", + "lint-staged": "^12.4.0", "nodemon": "^2.0.15", "prettier": "2.2.1" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4fd2ea1..d188273 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,7 +13,7 @@ importers: eslint-import-resolver-alias: ^1.1.2 eslint-plugin-eslint-comments: ^3.2.0 eslint-plugin-import: ^2.26.0 - eslint-plugin-jsdoc: ^39.2.1 + eslint-plugin-jsdoc: ^39.2.7 eslint-plugin-no-autofix: ^1.2.3 eslint-plugin-node: ^11.1.0 eslint-plugin-prefer-arrow: ^1.2.3 @@ -24,7 +24,7 @@ importers: eslint-plugin-unicorn: ^42.0.0 eslint-plugin-vue: ^8.6.0 husky: ^7.0.4 - lint-staged: ^12.3.7 + lint-staged: ^12.4.0 nodemon: ^2.0.15 prettier: 2.2.1 devDependencies: @@ -37,7 +37,7 @@ importers: eslint-import-resolver-alias: 1.1.2_eslint-plugin-import@2.26.0 eslint-plugin-eslint-comments: 3.2.0_eslint@8.13.0 eslint-plugin-import: 2.26.0_eslint@8.13.0 - eslint-plugin-jsdoc: 39.2.1_eslint@8.13.0 + eslint-plugin-jsdoc: 39.2.7_eslint@8.13.0 eslint-plugin-no-autofix: 1.2.3_eslint@8.13.0 eslint-plugin-node: 11.1.0_eslint@8.13.0 eslint-plugin-prefer-arrow: 1.2.3_eslint@8.13.0 @@ -48,13 +48,14 @@ importers: eslint-plugin-unicorn: 42.0.0_eslint@8.13.0 eslint-plugin-vue: 8.6.0_eslint@8.13.0 husky: 7.0.4 - lint-staged: 12.3.7 + lint-staged: 12.4.0 nodemon: 2.0.15 prettier: 2.2.1 apps/api: specifiers: - '@ln-markets/api': ^1.6.1 + '@ln-markets/api': ^1.7.0 + '@ln-markets/maths': ^1.0.1 bech32: ^2.0.0 bip32: ^3.0.1 bip39: ^3.0.4 @@ -73,7 +74,8 @@ importers: winston: ^3.7.2 ws: ^8.5.0 dependencies: - '@ln-markets/api': 1.6.1 + '@ln-markets/api': 1.7.0 + '@ln-markets/maths': 1.0.1 bech32: 2.0.0 bip32: 3.0.1 bip39: 3.0.4 @@ -99,6 +101,7 @@ importers: '@fortawesome/free-regular-svg-icons': ^5.15.4 '@fortawesome/free-solid-svg-icons': ^5.15.3 '@fortawesome/vue-fontawesome': ^3.0.0-4 + '@ln-markets/maths': ^1.0.1 '@vitejs/plugin-vue': ^1.10.1 '@vue/compiler-sfc': ^3.2.23 autoprefixer: ^10.4.0 @@ -117,6 +120,7 @@ importers: '@fortawesome/free-regular-svg-icons': 5.15.4 '@fortawesome/free-solid-svg-icons': 5.15.4 '@fortawesome/vue-fontawesome': 3.0.0-5_33491c0562c6fa409d94218bdac8a819 + '@ln-markets/maths': 1.0.1 mitt: 3.0.0 vue: 3.2.20 vue-final-modal: 3.4.3 @@ -261,7 +265,7 @@ packages: dependencies: '@commitlint/top-level': 15.0.0 '@commitlint/types': 15.0.0 - fs-extra: 10.0.1 + fs-extra: 10.1.0 git-raw-commits: 2.0.11 dev: true @@ -328,13 +332,13 @@ packages: - typescript dev: true - /@es-joy/jsdoccomment/0.22.1: - resolution: {integrity: sha512-/WMkqLYfwCf0waCAMC8Eddt3iAOdghkDF5vmyKEu8pfO66KRFY1L15yks8mfgURiwOAOJpAQ3blvB3Znj6ZwBw==} - engines: {node: ^12 || ^14 || ^16 || ^17} + /@es-joy/jsdoccomment/0.28.0: + resolution: {integrity: sha512-qXqur4077IrMLZIY0YKpGQvpuSBsiH5dY67HkjINspFgzl/i0rytmSuD8s/hen9+h7Sww3Vg+U01Q/dgxJeFcQ==} + engines: {node: ^12 || ^14 || ^16 || ^17 || ^18} dependencies: comment-parser: 1.3.1 esquery: 1.4.0 - jsdoc-type-pratt-parser: 2.2.5 + jsdoc-type-pratt-parser: 3.0.1 dev: true /@eslint/eslintrc/1.2.1: @@ -437,8 +441,8 @@ packages: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true - /@ln-markets/api/1.6.1: - resolution: {integrity: sha512-WPxdWyMhF+g8dPelR4BmSH5fF5IJdyG2ne3sy/B8dOPdCBlLH/6oOMftio7YwYpBz+AbKIjYGvLB6lULGvleqQ==} + /@ln-markets/api/1.7.0: + resolution: {integrity: sha512-y/0IN4wqZqIGytioq8te0uEoo+1z+S0lnPrSiAq1ipUPNPV/H4Uxlm2wXEhyYZVQ5rpWhPlLVCV59+ZA1zDxwg==} engines: {node: '>=14', pnpm: '>=6'} dependencies: eventemitter3: 4.0.7 @@ -448,6 +452,11 @@ packages: - utf-8-validate dev: false + /@ln-markets/maths/1.0.1: + resolution: {integrity: sha512-WdVjcfUr2AhKf3qV7urD6NK5NDrOQXm7ax15hr0IHS/b5sFlsrTN1fZhdFLcumZlBG+XvrIJ96YNj/0Q4JaYvQ==} + engines: {node: '>=14', pnpm: '>=6'} + dev: false + /@nodelib/fs.scandir/2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -607,7 +616,7 @@ packages: dependencies: '@types/caseless': 0.12.2 '@types/node': 16.11.9 - '@types/tough-cookie': 4.0.1 + '@types/tough-cookie': 4.0.2 form-data: 2.5.1 dev: false @@ -618,8 +627,8 @@ packages: '@types/node': 16.11.9 dev: false - /@types/tough-cookie/4.0.1: - resolution: {integrity: sha512-Y0K95ThC3esLEYD6ZuqNek29lNX2EM1qxV8y2FTLUB0ff5wWrk7az+mLrnNFUnaXcgKye22+sFBRXOgpPILZNg==} + /@types/tough-cookie/4.0.2: + resolution: {integrity: sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==} dev: false /@types/ws/8.2.0: @@ -918,8 +927,8 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.3 - es-abstract: 1.19.4 + define-properties: 1.1.4 + es-abstract: 1.19.5 get-intrinsic: 1.1.1 is-string: 1.0.7 dev: true @@ -929,8 +938,8 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.3 - es-abstract: 1.19.4 + define-properties: 1.1.4 + es-abstract: 1.19.5 es-shim-unscopables: 1.0.0 dev: true @@ -1240,6 +1249,7 @@ packages: /bytes/3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} + dev: false /cacheable-request/6.1.0: resolution: {integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==} @@ -1443,6 +1453,7 @@ packages: dependencies: color-name: 1.1.4 simple-swizzle: 0.2.2 + dev: false /color/3.2.1: resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} @@ -1458,14 +1469,6 @@ packages: color-string: 1.6.0 dev: true - /color/4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} - dependencies: - color-convert: 2.0.1 - color-string: 1.9.0 - dev: true - /colorette/2.0.16: resolution: {integrity: sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==} dev: true @@ -1754,10 +1757,11 @@ packages: resolution: {integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==} dev: true - /define-properties/1.1.3: - resolution: {integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==} + /define-properties/1.1.4: + resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} engines: {node: '>= 0.4'} dependencies: + has-property-descriptors: 1.0.0 object-keys: 1.1.1 dev: true @@ -1889,8 +1893,8 @@ packages: is-arrayish: 0.2.1 dev: true - /es-abstract/1.19.4: - resolution: {integrity: sha512-flV8e5g9/xulChMG48Fygk1ptpo4lQRJ0eJYtxJFgi7pklLx7EFcOJ34jnvr8pbWlaFN/AT1cZpe0hiFel9Hqg==} + /es-abstract/1.19.5: + resolution: {integrity: sha512-Aa2G2+Rd3b6kxEUKTF4TaW67czBLyAv3z7VOhYRU50YBx+bbsYZ9xQP4lMNazePuFlybXI0V4MruPos7qUo5fA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 @@ -2205,7 +2209,7 @@ packages: eslint-import-resolver-node: 0.3.6 eslint-module-utils: 2.7.3 has: 1.0.3 - is-core-module: 2.8.1 + is-core-module: 2.9.0 is-glob: 4.0.3 minimatch: 3.1.2 object.values: 1.1.5 @@ -2213,13 +2217,13 @@ packages: tsconfig-paths: 3.14.1 dev: true - /eslint-plugin-jsdoc/39.2.1_eslint@8.13.0: - resolution: {integrity: sha512-bNNAJPhFUKVBHJMKU7zAQ1LvlVWoDbxAA/Ty9hwSI2hy+AVpc9wq16W6YHXd0PuMhXlv4FgYtjizHMu8Mnc4GA==} - engines: {node: ^14 || ^16 || ^17} + /eslint-plugin-jsdoc/39.2.7_eslint@8.13.0: + resolution: {integrity: sha512-vLaNFVbhoUrAX2f7gKpzALEWaDCiGGydlPYzrZLVlWXdUm6UZdJq3GKlYEoI9Q/eL66cPbHukaQHD4MQ1/T8rg==} + engines: {node: ^14 || ^16 || ^17 || ^18} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - '@es-joy/jsdoccomment': 0.22.1 + '@es-joy/jsdoccomment': 0.28.0 comment-parser: 1.3.1 debug: 4.3.4 escape-string-regexp: 4.0.0 @@ -2640,8 +2644,8 @@ packages: reusify: 1.0.4 dev: true - /fecha/4.2.2: - resolution: {integrity: sha512-5rOQWkBVz3FnYWTi/ELZmq4CoK1Pb+xKNZWuJRsOwo0+8DrP43CrWJtyLVvb5U7z7ggE5llahfDbLjaVNzXVJQ==} + /fecha/4.2.3: + resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} dev: false /fetch-blob/3.1.5: @@ -2761,8 +2765,8 @@ packages: universalify: 2.0.0 dev: true - /fs-extra/10.0.1: - resolution: {integrity: sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==} + /fs-extra/10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} dependencies: graceful-fs: 4.2.10 @@ -2915,8 +2919,8 @@ packages: engines: {node: '>=6'} dev: true - /has-bigints/1.0.1: - resolution: {integrity: sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==} + /has-bigints/1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} dev: true /has-flag/3.0.0: @@ -2928,6 +2932,12 @@ packages: engines: {node: '>=8'} dev: true + /has-property-descriptors/1.0.0: + resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + dependencies: + get-intrinsic: 1.1.1 + dev: true + /has-symbols/1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} @@ -3007,11 +3017,6 @@ packages: engines: {node: '>=8'} dev: true - /html-tags/3.2.0: - resolution: {integrity: sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==} - engines: {node: '>=8'} - dev: true - /http-cache-semantics/4.1.0: resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==} dev: true @@ -3183,7 +3188,7 @@ packages: /is-bigint/1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: - has-bigints: 1.0.1 + has-bigints: 1.0.2 dev: true /is-binary-path/2.1.0: @@ -3237,8 +3242,8 @@ packages: has: 1.0.3 dev: true - /is-core-module/2.8.1: - resolution: {integrity: sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==} + /is-core-module/2.9.0: + resolution: {integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==} dependencies: has: 1.0.3 dev: true @@ -3384,8 +3389,8 @@ packages: argparse: 2.0.1 dev: true - /jsdoc-type-pratt-parser/2.2.5: - resolution: {integrity: sha512-2a6eRxSxp1BW040hFvaJxhsCMI9lT8QB8t14t+NY5tC5rckIR0U9cr2tjOeaFirmEOy6MHvmJnY7zTBHq431Lw==} + /jsdoc-type-pratt-parser/3.0.1: + resolution: {integrity: sha512-vqMCdAFVIiFhVgBYE/X8naf3L/7qiJsaYWTfUJZZZ124dR3OUz9HrmaMUGpYIYAN4VSuodf6gIZY0e8ktPw9cg==} engines: {node: '>=12.0.0'} dev: true @@ -3489,17 +3494,12 @@ packages: engines: {node: '>=10'} dev: true - /lilconfig/2.0.5: - resolution: {integrity: sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==} - engines: {node: '>=10'} - dev: true - /lines-and-columns/1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true - /lint-staged/12.3.7: - resolution: {integrity: sha512-/S4D726e2GIsDVWIk1XGvheCaDm1SJRQp8efamZFWJxQMVEbOwSysp7xb49Oo73KYCdy97mIWinhlxcoNqIfIQ==} + /lint-staged/12.4.0: + resolution: {integrity: sha512-3X7MR0h9b7qf4iXf/1n7RlVAx+EzpAZXoCEMhVSpaBlgKDfH2ewf+QUm7BddFyq29v4dgPP+8+uYpWuSWx035A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true dependencies: @@ -3612,7 +3612,7 @@ packages: resolution: {integrity: sha512-CPSJw4ftjf517EhXZGGvTHHkYobo7ZCc0kvwUoOYcjfR2UVrI66RHj8MCrfAdEitdmFqbu2BYdYs8FHHZSb6iw==} dependencies: '@colors/colors': 1.5.0 - fecha: 4.2.2 + fecha: 4.2.3 ms: 2.1.3 safe-stable-stringify: 2.3.1 triple-beam: 1.3.0 @@ -3848,8 +3848,8 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - /nanoid/3.3.2: - resolution: {integrity: sha512-CuHBogktKwpm5g2sRgv83jEy2ijFzBwMoYA60orPDR7ynsLijJDqgsi4RDGj3OJpy3Ieb+LYwiRmIOGyytgITA==} + /nanoid/3.3.3: + resolution: {integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true dev: true @@ -3940,7 +3940,7 @@ packages: engines: {node: '>=10'} dependencies: hosted-git-info: 4.1.0 - is-core-module: 2.8.1 + is-core-module: 2.9.0 semver: 7.3.7 validate-npm-package-license: 3.0.4 dev: true @@ -3990,7 +3990,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.3 + define-properties: 1.1.4 has-symbols: 1.0.3 object-keys: 1.1.1 dev: true @@ -4000,8 +4000,8 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.3 - es-abstract: 1.19.4 + define-properties: 1.1.4 + es-abstract: 1.19.5 dev: true /on-finished/2.3.0: @@ -4240,23 +4240,6 @@ packages: yaml: 1.10.2 dev: true - /postcss-load-config/3.1.4_postcss@8.4.12: - resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} - engines: {node: '>= 10'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - dependencies: - lilconfig: 2.0.5 - postcss: 8.4.12 - yaml: 1.10.2 - dev: true - /postcss-nested/5.0.6_postcss@8.4.1: resolution: {integrity: sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==} engines: {node: '>=12.0'} @@ -4274,15 +4257,7 @@ packages: postcss: ^8.2.14 dependencies: postcss: 8.4.12 - postcss-selector-parser: 6.0.10 - dev: true - - /postcss-selector-parser/6.0.10: - resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} - engines: {node: '>=4'} - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 + postcss-selector-parser: 6.0.6 dev: true /postcss-selector-parser/6.0.6: @@ -4301,10 +4276,6 @@ packages: resolution: {integrity: sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==} dev: true - /postcss-value-parser/4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - dev: true - /postcss/8.4.1: resolution: {integrity: sha512-WqLs/TTzXdG+/A4ZOOK9WDZiikrRaiA+eoEb/jz2DT9KUhMNHgP7yKPO8vwi62ZCsb703Gwb7BMZwDzI54Y2Ag==} engines: {node: ^10 || ^12 || >=14} @@ -4317,7 +4288,7 @@ packages: resolution: {integrity: sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==} engines: {node: ^10 || ^12 || >=14} dependencies: - nanoid: 3.3.2 + nanoid: 3.3.3 picocolors: 1.0.0 source-map-js: 1.0.2 dev: true @@ -4422,16 +4393,6 @@ packages: postcss-selector-parser: 6.0.6 dev: true - /purgecss/4.1.3: - resolution: {integrity: sha512-99cKy4s+VZoXnPxaoM23e5ABcP851nC2y2GROkkjS8eJaJtlciGavd7iYAw2V84WeBqggZ12l8ef44G99HmTaw==} - hasBin: true - dependencies: - commander: 8.3.0 - glob: 7.2.0 - postcss: 8.4.12 - postcss-selector-parser: 6.0.10 - dev: true - /pushdata-bitcoin/1.0.1: resolution: {integrity: sha1-FZMdPNlnreUiBvUjqnMxrvfUOvc=} dependencies: @@ -4635,7 +4596,7 @@ packages: resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==} hasBin: true dependencies: - is-core-module: 2.8.1 + is-core-module: 2.9.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: true @@ -5007,14 +4968,14 @@ packages: resolution: {integrity: sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==} dependencies: call-bind: 1.0.2 - define-properties: 1.1.3 + define-properties: 1.1.4 dev: true /string.prototype.trimstart/1.0.4: resolution: {integrity: sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==} dependencies: call-bind: 1.0.2 - define-properties: 1.1.3 + define-properties: 1.1.4 dev: true /string_decoder/1.3.0: @@ -5140,18 +5101,18 @@ packages: postcss: ^8.0.9 dependencies: arg: 5.0.1 - bytes: 3.1.2 + bytes: 3.1.0 chalk: 4.1.2 - chokidar: 3.5.3 - color: 4.2.3 + chokidar: 3.5.2 + color: 4.0.1 cosmiconfig: 7.0.1 detective: 5.2.0 didyoumean: 1.2.2 dlv: 1.1.3 - fast-glob: 3.2.11 - fs-extra: 10.0.1 + fast-glob: 3.2.7 + fs-extra: 10.0.0 glob-parent: 6.0.2 - html-tags: 3.2.0 + html-tags: 3.1.0 is-color-stop: 1.1.0 is-glob: 4.0.3 lodash: 4.17.21 @@ -5162,15 +5123,15 @@ packages: object-hash: 2.2.0 postcss: 8.4.12 postcss-js: 3.0.3 - postcss-load-config: 3.1.4_postcss@8.4.12 + postcss-load-config: 3.1.0 postcss-nested: 5.0.6_postcss@8.4.12 - postcss-selector-parser: 6.0.10 - postcss-value-parser: 4.2.0 + postcss-selector-parser: 6.0.6 + postcss-value-parser: 4.1.0 pretty-hrtime: 1.0.3 - purgecss: 4.1.3 + purgecss: 4.0.3 quick-lru: 5.1.1 reduce-css-calc: 2.1.8 - resolve: 1.22.0 + resolve: 1.20.0 tmp: 0.2.1 transitivePeerDependencies: - ts-node @@ -5377,7 +5338,7 @@ packages: resolution: {integrity: sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==} dependencies: function-bind: 1.1.1 - has-bigints: 1.0.1 + has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 dev: true From 6102bc162c6a4bf7f846ca22318551d553a53fa4 Mon Sep 17 00:00:00 2001 From: Botrel Kilian Date: Thu, 21 Apr 2022 14:54:57 +0200 Subject: [PATCH 16/17] fix: option pl and delta (#38) --- apps/front/package.json | 26 +- apps/front/src/store/options/index.js | 7 +- apps/front/src/store/user/index.js | 2 +- apps/front/src/views/profile/Risk.vue | 4 +- pnpm-lock.yaml | 704 +++++++++++--------------- 5 files changed, 308 insertions(+), 435 deletions(-) diff --git a/apps/front/package.json b/apps/front/package.json index c3f24af..5f7c78a 100644 --- a/apps/front/package.json +++ b/apps/front/package.json @@ -16,25 +16,25 @@ "format": "prettier --write 'src/**/*.js'" }, "dependencies": { - "@fortawesome/fontawesome-svg-core": "^1.2.35", - "@fortawesome/free-brands-svg-icons": "^5.15.3", + "@fortawesome/fontawesome-svg-core": "^1.2.36", + "@fortawesome/free-brands-svg-icons": "^5.15.4", "@fortawesome/free-regular-svg-icons": "^5.15.4", - "@fortawesome/free-solid-svg-icons": "^5.15.3", - "@fortawesome/vue-fontawesome": "^3.0.0-4", - "@ln-markets/maths": "^1.0.1", + "@fortawesome/free-solid-svg-icons": "^5.15.4", + "@fortawesome/vue-fontawesome": "^3.0.0-5", + "@ln-markets/maths": "^1.0.2", "mitt": "^3.0.0", - "vue": "^3.2.20", + "vue": "^3.2.33", "vue-final-modal": "^3.4.3", - "vue-router": "^4.0.12", + "vue-router": "^4.0.14", "vuex": "^4.0.2", - "vuex-persistedstate": "^4.0.0" + "vuex-persistedstate": "^4.1.0" }, "devDependencies": { - "@vitejs/plugin-vue": "^1.10.1", - "@vue/compiler-sfc": "^3.2.23", - "autoprefixer": "^10.4.0", - "postcss": "^8.4.1", + "@vitejs/plugin-vue": "^1.10.2", + "@vue/compiler-sfc": "^3.2.33", + "autoprefixer": "^10.4.4", + "postcss": "^8.4.12", "tailwindcss": "^2.2.19", - "vite": "^2.6.14" + "vite": "^2.9.5" } } diff --git a/apps/front/src/store/options/index.js b/apps/front/src/store/options/index.js index 822f009..e4192bd 100644 --- a/apps/front/src/store/options/index.js +++ b/apps/front/src/store/options/index.js @@ -1,7 +1,7 @@ import api from '@/plugins/api.js' import market from './modules/market.js' import { - computeVanillaOptionMarketToMarket, + computeVanillaOptionPl, computeVanillaOptionDelta, } from '@ln-markets/maths' const defaultState = () => { @@ -35,10 +35,7 @@ export default { computePL: (state, getters, rootState) => { let pl = 0 for (const position of state.options) { - pl += computeVanillaOptionMarketToMarket( - position, - rootState.futures.market - ) + pl += computeVanillaOptionPl(position, rootState.futures.market) } return pl diff --git a/apps/front/src/store/user/index.js b/apps/front/src/store/user/index.js index 3f2adec..328ee08 100644 --- a/apps/front/src/store/user/index.js +++ b/apps/front/src/store/user/index.js @@ -89,7 +89,7 @@ export default { return ( state.stats.futures.opened.quantity + state.stats.futures.running.quantity + - Math.round(rootGetters['options/computeDelta']) + rootGetters['options/computeDelta'] ) }, diff --git a/apps/front/src/views/profile/Risk.vue b/apps/front/src/views/profile/Risk.vue index 9280590..435f283 100644 --- a/apps/front/src/views/profile/Risk.vue +++ b/apps/front/src/views/profile/Risk.vue @@ -106,9 +106,7 @@ export default { store.state.user.stats.futures.opened.quantity + store.state.user.stats.futures.running.quantity ), - quantity_options: computed(() => - Math.round(store.getters['options/computeDelta']) - ), + quantity_options: computed(() => store.getters['options/computeDelta']), } }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d188273..385af42 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -96,44 +96,44 @@ importers: apps/front: specifiers: - '@fortawesome/fontawesome-svg-core': ^1.2.35 - '@fortawesome/free-brands-svg-icons': ^5.15.3 + '@fortawesome/fontawesome-svg-core': ^1.2.36 + '@fortawesome/free-brands-svg-icons': ^5.15.4 '@fortawesome/free-regular-svg-icons': ^5.15.4 - '@fortawesome/free-solid-svg-icons': ^5.15.3 - '@fortawesome/vue-fontawesome': ^3.0.0-4 - '@ln-markets/maths': ^1.0.1 - '@vitejs/plugin-vue': ^1.10.1 - '@vue/compiler-sfc': ^3.2.23 - autoprefixer: ^10.4.0 + '@fortawesome/free-solid-svg-icons': ^5.15.4 + '@fortawesome/vue-fontawesome': ^3.0.0-5 + '@ln-markets/maths': ^1.0.2 + '@vitejs/plugin-vue': ^1.10.2 + '@vue/compiler-sfc': ^3.2.33 + autoprefixer: ^10.4.4 mitt: ^3.0.0 - postcss: ^8.4.1 + postcss: ^8.4.12 tailwindcss: ^2.2.19 - vite: ^2.6.14 - vue: ^3.2.20 + vite: ^2.9.5 + vue: ^3.2.33 vue-final-modal: ^3.4.3 - vue-router: ^4.0.12 + vue-router: ^4.0.14 vuex: ^4.0.2 - vuex-persistedstate: ^4.0.0 + vuex-persistedstate: ^4.1.0 dependencies: '@fortawesome/fontawesome-svg-core': 1.2.36 '@fortawesome/free-brands-svg-icons': 5.15.4 '@fortawesome/free-regular-svg-icons': 5.15.4 '@fortawesome/free-solid-svg-icons': 5.15.4 - '@fortawesome/vue-fontawesome': 3.0.0-5_33491c0562c6fa409d94218bdac8a819 - '@ln-markets/maths': 1.0.1 + '@fortawesome/vue-fontawesome': 3.0.0-5_7e74aab82fa1e3a604ad95c83c4d60ed + '@ln-markets/maths': 1.0.2 mitt: 3.0.0 - vue: 3.2.20 + vue: 3.2.33 vue-final-modal: 3.4.3 - vue-router: 4.0.12_vue@3.2.20 - vuex: 4.0.2_vue@3.2.20 + vue-router: 4.0.14_vue@3.2.33 + vuex: 4.0.2_vue@3.2.33 vuex-persistedstate: 4.1.0_vuex@4.0.2 devDependencies: - '@vitejs/plugin-vue': 1.10.1_vite@2.6.14 - '@vue/compiler-sfc': 3.2.23 - autoprefixer: 10.4.0_postcss@8.4.1 - postcss: 8.4.1 - tailwindcss: 2.2.19_343577c3dd31b4e787406ab8c6576ff6 - vite: 2.6.14 + '@vitejs/plugin-vue': 1.10.2_vite@2.9.5 + '@vue/compiler-sfc': 3.2.33 + autoprefixer: 10.4.4_postcss@8.4.12 + postcss: 8.4.12 + tailwindcss: 2.2.19_081650f2f4dba35b17265937ab2a2ec0 + vite: 2.9.5 packages: @@ -158,8 +158,8 @@ packages: js-tokens: 4.0.0 dev: true - /@babel/parser/7.16.4: - resolution: {integrity: sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng==} + /@babel/parser/7.17.9: + resolution: {integrity: sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==} engines: {node: '>=6.0.0'} hasBin: true @@ -396,14 +396,14 @@ packages: '@fortawesome/fontawesome-common-types': 0.2.36 dev: false - /@fortawesome/vue-fontawesome/3.0.0-5_33491c0562c6fa409d94218bdac8a819: + /@fortawesome/vue-fontawesome/3.0.0-5_7e74aab82fa1e3a604ad95c83c4d60ed: resolution: {integrity: sha512-aNmBT4bOecrFsZTog1l6AJDQHPP3ocXV+WQ3Ogy8WZCqstB/ahfhH4CPu5i4N9Hw0MBKXqE+LX+NbUxcj8cVTw==} peerDependencies: '@fortawesome/fontawesome-svg-core': ~1 || >=1.3.0-beta1 vue: '>= 3.0.0 < 4' dependencies: '@fortawesome/fontawesome-svg-core': 1.2.36 - vue: 3.2.20 + vue: 3.2.33 dev: false /@grpc/grpc-js/1.4.4: @@ -457,6 +457,11 @@ packages: engines: {node: '>=14', pnpm: '>=6'} dev: false + /@ln-markets/maths/1.0.2: + resolution: {integrity: sha512-46tDMmyrPcxzr9AR0B11yBqYOKs0U2oVM1c+RPBFvklZZGFcKs9F4N9nlFtVIjp0jd5UHJ4v5/bETjHe7IFgVQ==} + engines: {node: '>=14', pnpm: '>=6'} + dev: false + /@nodelib/fs.scandir/2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -637,153 +642,95 @@ packages: '@types/node': 16.11.9 dev: false - /@vitejs/plugin-vue/1.10.1_vite@2.6.14: - resolution: {integrity: sha512-oL76QETMSpVE9jIScirGB2bYJEVU/+r+g+K7oG+sXPs9TZljqveoVRsmLyXlMZTjpQkLL8gz527cW80NMGVKJg==} + /@vitejs/plugin-vue/1.10.2_vite@2.9.5: + resolution: {integrity: sha512-/QJ0Z9qfhAFtKRY+r57ziY4BSbGUTGsPRMpB/Ron3QPwBZM4OZAZHdTa4a8PafCwU5DTatXG8TMDoP8z+oDqJw==} engines: {node: '>=12.0.0'} peerDependencies: vite: ^2.5.10 dependencies: - vite: 2.6.14 + vite: 2.9.5 dev: true - /@vue/compiler-core/3.2.20: - resolution: {integrity: sha512-vcEXlKXoPwBXFP5aUTHN9GTZaDfwCofa9Yu9bbW2C5O/QSa9Esdt7OG4+0RRd3EHEMxUvEdj4RZrd/KpQeiJbA==} + /@vue/compiler-core/3.2.33: + resolution: {integrity: sha512-AAmr52ji3Zhk7IKIuigX2osWWsb2nQE5xsdFYjdnmtQ4gymmqXbjLvkSE174+fF3A3kstYrTgGkqgOEbsdLDpw==} dependencies: - '@babel/parser': 7.16.4 - '@vue/shared': 3.2.20 + '@babel/parser': 7.17.9 + '@vue/shared': 3.2.33 estree-walker: 2.0.2 source-map: 0.6.1 - dev: false - /@vue/compiler-core/3.2.23: - resolution: {integrity: sha512-4ZhiI/orx+7EJ1B+0zjgvXMV2uRN+XBfG06UN2sJfND9rH5gtEQT3QmO4erum1o6Irl7y754W8/KSaDJh4EUQg==} + /@vue/compiler-dom/3.2.33: + resolution: {integrity: sha512-GhiG1C8X98Xz9QUX/RlA6/kgPBWJkjq0Rq6//5XTAGSYrTMBgcLpP9+CnlUg1TFxnnCVughAG+KZl28XJqw8uQ==} dependencies: - '@babel/parser': 7.16.4 - '@vue/shared': 3.2.23 - estree-walker: 2.0.2 - source-map: 0.6.1 - dev: true + '@vue/compiler-core': 3.2.33 + '@vue/shared': 3.2.33 - /@vue/compiler-dom/3.2.20: - resolution: {integrity: sha512-QnI77ec/JtV7R0YBbcVayYTDCRcI9OCbxiUQK6izVyqQO0658n0zQuoNwe+bYgtqnvGAIqTR3FShTd5y4oOjdg==} + /@vue/compiler-sfc/3.2.33: + resolution: {integrity: sha512-H8D0WqagCr295pQjUYyO8P3IejM3vEzeCO1apzByAEaAR/WimhMYczHfZVvlCE/9yBaEu/eu9RdiWr0kF8b71Q==} dependencies: - '@vue/compiler-core': 3.2.20 - '@vue/shared': 3.2.20 - dev: false - - /@vue/compiler-dom/3.2.23: - resolution: {integrity: sha512-X2Nw8QFc5lgoK3kio5ktM95nqmLUH+q+N/PbV4kCHzF1avqv/EGLnAhaaF0Iu4bewNvHJAAhhwPZFeoV/22nbw==} - dependencies: - '@vue/compiler-core': 3.2.23 - '@vue/shared': 3.2.23 - dev: true - - /@vue/compiler-sfc/3.2.20: - resolution: {integrity: sha512-03aZo+6tQKiFLfunHKSPZvdK4Jsn/ftRCyaro8AQIWkuxJbvSosbKK6HTTn+D2c3nPScG155akJoxKENw7rftQ==} - dependencies: - '@babel/parser': 7.16.4 - '@vue/compiler-core': 3.2.20 - '@vue/compiler-dom': 3.2.20 - '@vue/compiler-ssr': 3.2.20 - '@vue/ref-transform': 3.2.20 - '@vue/shared': 3.2.20 + '@babel/parser': 7.17.9 + '@vue/compiler-core': 3.2.33 + '@vue/compiler-dom': 3.2.33 + '@vue/compiler-ssr': 3.2.33 + '@vue/reactivity-transform': 3.2.33 + '@vue/shared': 3.2.33 estree-walker: 2.0.2 - magic-string: 0.25.7 - postcss: 8.4.1 - source-map: 0.6.1 - dev: false - - /@vue/compiler-sfc/3.2.23: - resolution: {integrity: sha512-Aw+pb50Q5zTjyvWod8mNKmYZDRGHJBptmNNWE+84ZxrzEztPgMz8cNYIzWGbwcFVkmJlhvioAMvKnB+LM/sjSA==} - dependencies: - '@babel/parser': 7.16.4 - '@vue/compiler-core': 3.2.23 - '@vue/compiler-dom': 3.2.23 - '@vue/compiler-ssr': 3.2.23 - '@vue/ref-transform': 3.2.23 - '@vue/shared': 3.2.23 - estree-walker: 2.0.2 - magic-string: 0.25.7 - postcss: 8.4.1 + magic-string: 0.25.9 + postcss: 8.4.12 source-map: 0.6.1 - dev: true - /@vue/compiler-ssr/3.2.20: - resolution: {integrity: sha512-rzzVVYivm+EjbfiGQvNeyiYZWzr6Hkej97RZLZvcumacQlnKv9176Xo9rRyeWwFbBlxmtNdrVMslRXtipMXk2w==} + /@vue/compiler-ssr/3.2.33: + resolution: {integrity: sha512-XQh1Xdk3VquDpXsnoCd7JnMoWec9CfAzQDQsaMcSU79OrrO2PNR0ErlIjm/mGq3GmBfkQjzZACV+7GhfRB8xMQ==} dependencies: - '@vue/compiler-dom': 3.2.20 - '@vue/shared': 3.2.20 - dev: false - - /@vue/compiler-ssr/3.2.23: - resolution: {integrity: sha512-Bqzn4jFyXPK1Ehqiq7e/czS8n62gtYF1Zfeu0DrR5uv+SBllh7LIvZjZU6+c8qbocAd3/T3I3gn2cZGmnDb6zg==} - dependencies: - '@vue/compiler-dom': 3.2.23 - '@vue/shared': 3.2.23 - dev: true - - /@vue/devtools-api/6.0.0-beta.19: - resolution: {integrity: sha512-ObzQhgkoVeoyKv+e8+tB/jQBL2smtk/NmC9OmFK8UqdDpoOdv/Kf9pyDWL+IFyM7qLD2C75rszJujvGSPSpGlw==} - dev: false + '@vue/compiler-dom': 3.2.33 + '@vue/shared': 3.2.33 - /@vue/reactivity/3.2.20: - resolution: {integrity: sha512-nSmoLojUTk+H8HNTAkrUduB4+yIUBK2HPihJo2uXVSH4Spry6oqN6lFzE5zpLK+F27Sja+UqR9R1+/kIOsHV5w==} - dependencies: - '@vue/shared': 3.2.20 + /@vue/devtools-api/6.1.4: + resolution: {integrity: sha512-IiA0SvDrJEgXvVxjNkHPFfDx6SXw0b/TUkqMcDZWNg9fnCAHbTpoo59YfJ9QLFkwa3raau5vSlRVzMSLDnfdtQ==} dev: false - /@vue/ref-transform/3.2.20: - resolution: {integrity: sha512-Y42d3PGlYZ1lXcF3dbd3+qU/C/a3wYEZ949fyOI5ptzkjDWlkfU6vn74fmOjsLjEcjs10BXK2qO99FqQIK2r1Q==} + /@vue/reactivity-transform/3.2.33: + resolution: {integrity: sha512-4UL5KOIvSQb254aqenW4q34qMXbfZcmEsV/yVidLUgvwYQQ/D21bGX3DlgPUGI3c4C+iOnNmDCkIxkILoX/Pyw==} dependencies: - '@babel/parser': 7.16.4 - '@vue/compiler-core': 3.2.20 - '@vue/shared': 3.2.20 + '@babel/parser': 7.17.9 + '@vue/compiler-core': 3.2.33 + '@vue/shared': 3.2.33 estree-walker: 2.0.2 - magic-string: 0.25.7 - dev: false + magic-string: 0.25.9 - /@vue/ref-transform/3.2.23: - resolution: {integrity: sha512-gW0GD2PSAs/th7mC7tPB/UwpIQxclbApVtsDtscDmOJXb2+cdu60ny+SuHNgfrlUT/JqWKQHq7jFKO4woxLNaA==} + /@vue/reactivity/3.2.33: + resolution: {integrity: sha512-62Sq0mp9/0bLmDuxuLD5CIaMG2susFAGARLuZ/5jkU1FCf9EDbwUuF+BO8Ub3Rbodx0ziIecM/NsmyjardBxfQ==} dependencies: - '@babel/parser': 7.16.4 - '@vue/compiler-core': 3.2.23 - '@vue/shared': 3.2.23 - estree-walker: 2.0.2 - magic-string: 0.25.7 - dev: true + '@vue/shared': 3.2.33 + dev: false - /@vue/runtime-core/3.2.20: - resolution: {integrity: sha512-d1xfUGhZPfiZzAN7SatStD4vRtT8deJSXib2+Cz3x0brjMWKxe32asQc154FF1E2fFgMCHtnfd4A90bQEzV4GQ==} + /@vue/runtime-core/3.2.33: + resolution: {integrity: sha512-N2D2vfaXsBPhzCV3JsXQa2NECjxP3eXgZlFqKh4tgakp3iX6LCGv76DLlc+IfFZq+TW10Y8QUfeihXOupJ1dGw==} dependencies: - '@vue/reactivity': 3.2.20 - '@vue/shared': 3.2.20 + '@vue/reactivity': 3.2.33 + '@vue/shared': 3.2.33 dev: false - /@vue/runtime-dom/3.2.20: - resolution: {integrity: sha512-4TCvZMLhESWCFHFYgqN4QmMA/onnINAlUovhopjlS8ST27G1A8Z0tyxPzLoXLa+b5JrOpbMPheEMPvdKExTJig==} + /@vue/runtime-dom/3.2.33: + resolution: {integrity: sha512-LSrJ6W7CZTSUygX5s8aFkraDWlO6K4geOwA3quFF2O+hC3QuAMZt/0Xb7JKE3C4JD4pFwCSO7oCrZmZ0BIJUnw==} dependencies: - '@vue/runtime-core': 3.2.20 - '@vue/shared': 3.2.20 - csstype: 2.6.18 + '@vue/runtime-core': 3.2.33 + '@vue/shared': 3.2.33 + csstype: 2.6.20 dev: false - /@vue/server-renderer/3.2.20_vue@3.2.20: - resolution: {integrity: sha512-viIbZGep9XabnrRcaxWIi00cOh1x21QYm2upIL5W0zqzTJ54VdTzpI+zi1osNp+VfRQDTHpV2U7H3Kn4ljYJvg==} + /@vue/server-renderer/3.2.33_vue@3.2.33: + resolution: {integrity: sha512-4jpJHRD4ORv8PlbYi+/MfP8ec1okz6rybe36MdpkDrGIdEItHEUyaHSKvz+ptNEyQpALmmVfRteHkU9F8vxOew==} peerDependencies: - vue: 3.2.20 + vue: 3.2.33 dependencies: - '@vue/compiler-ssr': 3.2.20 - '@vue/shared': 3.2.20 - vue: 3.2.20 + '@vue/compiler-ssr': 3.2.33 + '@vue/shared': 3.2.33 + vue: 3.2.33 dev: false - /@vue/shared/3.2.20: - resolution: {integrity: sha512-FbpX+hD5BvXCQerEYO7jtAGHlhAkhTQ4KIV73kmLWNlawWhTiVuQxizgVb0BOkX5oG9cIRZ42EG++d/k/Efp0w==} - dev: false - - /@vue/shared/3.2.23: - resolution: {integrity: sha512-U+/Jefa0QfXUF2qVy9Dqlrb6HKJSr9/wJcM66wXmWcTOoqg7hOWzF4qruDle51pyF4x3wMn6TSH54UdjKjCKMA==} - dev: true + /@vue/shared/3.2.33: + resolution: {integrity: sha512-UBc1Pg1T3yZ97vsA2ueER0F6GbJebLHYlEi4ou1H5YL4KWvMOOWwpYo9/QpWq93wxKG6Wo13IY74Hcn/f7c7Bg==} /JSONStream/1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} @@ -971,20 +918,20 @@ packages: resolution: {integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k=} dev: false - /autoprefixer/10.4.0_postcss@8.4.1: - resolution: {integrity: sha512-7FdJ1ONtwzV1G43GDD0kpVMn/qbiNqyOPMFTX5nRffI+7vgWoFEc6DcXOxHJxrWNDXrZh18eDsZjvZGUljSRGA==} + /autoprefixer/10.4.4_postcss@8.4.12: + resolution: {integrity: sha512-Tm8JxsB286VweiZ5F0anmbyGiNI3v3wGv3mz9W+cxEDYB/6jbnj6GM9H9mK3wIL8ftgl+C07Lcwb8PG5PCCPzA==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 dependencies: - browserslist: 4.17.5 - caniuse-lite: 1.0.30001272 - fraction.js: 4.1.1 + browserslist: 4.20.2 + caniuse-lite: 1.0.30001332 + fraction.js: 4.2.0 normalize-range: 0.1.2 picocolors: 1.0.0 - postcss: 8.4.1 - postcss-value-parser: 4.1.0 + postcss: 8.4.12 + postcss-value-parser: 4.2.0 dev: true /balanced-match/1.0.2: @@ -1207,15 +1154,15 @@ packages: resolution: {integrity: sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=} dev: false - /browserslist/4.17.5: - resolution: {integrity: sha512-I3ekeB92mmpctWBoLXe0d5wPS2cBuRvvW0JyyJHMrk9/HmP2ZjrTboNAZ8iuGqaEIlKguljbQY32OkOJIRrgoA==} + /browserslist/4.20.2: + resolution: {integrity: sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001272 - electron-to-chromium: 1.3.884 + caniuse-lite: 1.0.30001332 + electron-to-chromium: 1.4.117 escalade: 3.1.1 - node-releases: 2.0.1 + node-releases: 2.0.3 picocolors: 1.0.0 dev: true @@ -1245,11 +1192,11 @@ packages: /bytes/3.1.0: resolution: {integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==} engines: {node: '>= 0.8'} + dev: false /bytes/3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} - dev: false /cacheable-request/6.1.0: resolution: {integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==} @@ -1299,8 +1246,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite/1.0.30001272: - resolution: {integrity: sha512-DV1j9Oot5dydyH1v28g25KoVm7l8MTxazwuiH3utWiAS6iL/9Nh//TGwqFEeqqN8nnWYQ8HHhUq+o4QPt9kvYw==} + /caniuse-lite/1.0.30001332: + resolution: {integrity: sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw==} dev: true /cbor/8.1.0: @@ -1326,21 +1273,6 @@ packages: supports-color: 7.2.0 dev: true - /chokidar/3.5.2: - resolution: {integrity: sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.2 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.2 - dev: true - /chokidar/3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} @@ -1441,19 +1373,11 @@ packages: /color-name/1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - /color-string/1.6.0: - resolution: {integrity: sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==} - dependencies: - color-name: 1.1.4 - simple-swizzle: 0.2.2 - dev: true - /color-string/1.9.0: resolution: {integrity: sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==} dependencies: color-name: 1.1.4 simple-swizzle: 0.2.2 - dev: false /color/3.2.1: resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} @@ -1462,11 +1386,12 @@ packages: color-string: 1.9.0 dev: false - /color/4.0.1: - resolution: {integrity: sha512-rpZjOKN5O7naJxkH2Rx1sZzzBgaiWECc6BYXjeCE6kF0kcASJYbUq02u7JqIHwCb/j3NhV+QhRL2683aICeGZA==} + /color/4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} dependencies: color-convert: 2.0.1 - color-string: 1.6.0 + color-string: 1.9.0 dev: true /colorette/2.0.16: @@ -1487,11 +1412,6 @@ packages: delayed-stream: 1.0.0 dev: false - /commander/6.2.1: - resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} - engines: {node: '>= 6'} - dev: true - /commander/8.3.0: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} @@ -1665,8 +1585,8 @@ packages: hasBin: true dev: true - /csstype/2.6.18: - resolution: {integrity: sha512-RSU6Hyeg14am3Ah4VZEmeX8H7kLwEEirXe6aU2IPfKNvhXwTflK5HQRDNI0ypQXoqmm+QPyG2IaPuQE5zMwSIQ==} + /csstype/2.6.20: + resolution: {integrity: sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==} dev: false /cuid/2.1.8: @@ -1849,8 +1769,8 @@ packages: resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=} dev: false - /electron-to-chromium/1.3.884: - resolution: {integrity: sha512-kOaCAa+biA98PwH5BpCkeUeTL6mCeg8p3Q3OhqzPyqhu/5QUnWAN2wr/3IK8xMQxIV76kfoQpP+Bn/wij/jXrg==} + /electron-to-chromium/1.4.117: + resolution: {integrity: sha512-ypZHxY+Sf/PXu7LVN+xoeanyisnJeSOy8Ki439L/oLueZb4c72FI45zXcK3gPpmTwyufh9m6NnbMLXnJh/0Fxg==} dev: true /elliptic/6.5.4: @@ -1934,164 +1854,212 @@ packages: is-symbol: 1.0.4 dev: true - /esbuild-android-arm64/0.13.15: - resolution: {integrity: sha512-m602nft/XXeO8YQPUDVoHfjyRVPdPgjyyXOxZ44MK/agewFFkPa8tUo6lAzSWh5Ui5PB4KR9UIFTSBKh/RrCmg==} + /esbuild-android-64/0.14.37: + resolution: {integrity: sha512-Jb61ihbS3iSj3+PhURe7sEuBg4h16CeT4CiT3W4Aop6rr5p/N6IvNXNWFX0gzUaRWtGoAFfCXFBEIn6zWUU3hQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.14.37: + resolution: {integrity: sha512-wwcI+EUHWe1LlxBE7vjdqZ53DEiCllD6XsYOIiGxzL8KaG7eOLXNS7tNhdK0QIR4wwMNTPLDB40ZKuAXZ8zv6Q==} + engines: {node: '>=12'} cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /esbuild-darwin-64/0.13.15: - resolution: {integrity: sha512-ihOQRGs2yyp7t5bArCwnvn2Atr6X4axqPpEdCFPVp7iUj4cVSdisgvEKdNR7yH3JDjW6aQDw40iQFoTqejqxvQ==} + /esbuild-darwin-64/0.14.37: + resolution: {integrity: sha512-gg/UZ/FZrRzPq+tAOiMwyBoa6eNxX6bcjuivZ8v2Tny83RhIyeDhvC84dgVcPinqK39u8pOYw6a7nffotUrjKQ==} + engines: {node: '>=12'} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /esbuild-darwin-arm64/0.13.15: - resolution: {integrity: sha512-i1FZssTVxUqNlJ6cBTj5YQj4imWy3m49RZRnHhLpefFIh0To05ow9DTrXROTE1urGTQCloFUXTX8QfGJy1P8dQ==} + /esbuild-darwin-arm64/0.14.37: + resolution: {integrity: sha512-eFwy5il5yvIHAVau97kWoNYfxuCd1X7hfgKc4Ns5ymlYXhyRzRywwJfknHax5rDyZxfDXtnFaT/nftUiYwsHIQ==} + engines: {node: '>=12'} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /esbuild-freebsd-64/0.13.15: - resolution: {integrity: sha512-G3dLBXUI6lC6Z09/x+WtXBXbOYQZ0E8TDBqvn7aMaOCzryJs8LyVXKY4CPnHFXZAbSwkCbqiPuSQ1+HhrNk7EA==} + /esbuild-freebsd-64/0.14.37: + resolution: {integrity: sha512-4iFbdmohve6wyPwsVPe/1j5rVwg5uPTopmgIUiJBbnPKMmo8NecUSbz3HwddsDHLrvGoIs5aOiETPWo9rg3wyg==} + engines: {node: '>=12'} cpu: [x64] os: [freebsd] requiresBuild: true dev: true optional: true - /esbuild-freebsd-arm64/0.13.15: - resolution: {integrity: sha512-KJx0fzEDf1uhNOZQStV4ujg30WlnwqUASaGSFPhznLM/bbheu9HhqZ6mJJZM32lkyfGJikw0jg7v3S0oAvtvQQ==} + /esbuild-freebsd-arm64/0.14.37: + resolution: {integrity: sha512-MGmZ9akBdqcIH7FcWhUrVTmTW18Xz/EVrvBcV6BHSFDQci0YnOhPAGCrV54t1JNG/5poHNBnaG3R2zNxnmJT5Q==} + engines: {node: '>=12'} cpu: [arm64] os: [freebsd] requiresBuild: true dev: true optional: true - /esbuild-linux-32/0.13.15: - resolution: {integrity: sha512-ZvTBPk0YWCLMCXiFmD5EUtB30zIPvC5Itxz0mdTu/xZBbbHJftQgLWY49wEPSn2T/TxahYCRDWun5smRa0Tu+g==} + /esbuild-linux-32/0.14.37: + resolution: {integrity: sha512-UCyQrn3n3dHXHDQTPO3gWxfoqtEpGObBdAgevuUtw0//TSyNftnaLcQYyBiGC6J85sM8f/c+Minz5jUFOKrmOA==} + engines: {node: '>=12'} cpu: [ia32] os: [linux] requiresBuild: true dev: true optional: true - /esbuild-linux-64/0.13.15: - resolution: {integrity: sha512-eCKzkNSLywNeQTRBxJRQ0jxRCl2YWdMB3+PkWFo2BBQYC5mISLIVIjThNtn6HUNqua1pnvgP5xX0nHbZbPj5oA==} + /esbuild-linux-64/0.14.37: + resolution: {integrity: sha512-UURL6k1Ffr6K4faFgdP6lKVvMKYwq8JmAh+odCukzIWN4EpjIzgmhBUzyFVU+VQLh1+K3tlE1SPJ057PNpayUQ==} + engines: {node: '>=12'} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /esbuild-linux-arm/0.13.15: - resolution: {integrity: sha512-wUHttDi/ol0tD8ZgUMDH8Ef7IbDX+/UsWJOXaAyTdkT7Yy9ZBqPg8bgB/Dn3CZ9SBpNieozrPRHm0BGww7W/jA==} + /esbuild-linux-arm/0.14.37: + resolution: {integrity: sha512-SgWcdAivyK2z2kcYAGwLTBSTECXXj/lC0S/BiayyHLYJHA6C3aEGexB6ZDMgffj4Quy/l3Tyr9ktZh8bgcmJrA==} + engines: {node: '>=12'} cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /esbuild-linux-arm64/0.13.15: - resolution: {integrity: sha512-bYpuUlN6qYU9slzr/ltyLTR9YTBS7qUDymO8SV7kjeNext61OdmqFAzuVZom+OLW1HPHseBfJ/JfdSlx8oTUoA==} + /esbuild-linux-arm64/0.14.37: + resolution: {integrity: sha512-vDHyuFsDpz6nquJO7CAxU2CBj+PB+BJhGawzBrHtcM249fXK4GfVNVArgWFKkSGMZW1ZpKSeef7FeOvM6juhPg==} + engines: {node: '>=12'} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /esbuild-linux-mips64le/0.13.15: - resolution: {integrity: sha512-KlVjIG828uFPyJkO/8gKwy9RbXhCEUeFsCGOJBepUlpa7G8/SeZgncUEz/tOOUJTcWMTmFMtdd3GElGyAtbSWg==} + /esbuild-linux-mips64le/0.14.37: + resolution: {integrity: sha512-azRAGYGKg3dxbYE7C+L35/2Oyg1RCuXvT3Z8M76JZF2N1ZNEA9g01zbuw3GtXWLyI6mhhoHxQL0H1SQUL0At1w==} + engines: {node: '>=12'} cpu: [mips64el] os: [linux] requiresBuild: true dev: true optional: true - /esbuild-linux-ppc64le/0.13.15: - resolution: {integrity: sha512-h6gYF+OsaqEuBjeesTBtUPw0bmiDu7eAeuc2OEH9S6mV9/jPhPdhOWzdeshb0BskRZxPhxPOjqZ+/OqLcxQwEQ==} + /esbuild-linux-ppc64le/0.14.37: + resolution: {integrity: sha512-SyNitGH/h7Hti7A+a5rkRDHhjra1TM1JnJJymRndOzw5Vd+AkWpoSQxxTfvmRw62g42zoeHBgcyrvGfT053l5w==} + engines: {node: '>=12'} cpu: [ppc64] os: [linux] requiresBuild: true dev: true optional: true - /esbuild-netbsd-64/0.13.15: - resolution: {integrity: sha512-3+yE9emwoevLMyvu+iR3rsa+Xwhie7ZEHMGDQ6dkqP/ndFzRHkobHUKTe+NCApSqG5ce2z4rFu+NX/UHnxlh3w==} + /esbuild-linux-riscv64/0.14.37: + resolution: {integrity: sha512-IgEwVXYGC3HpCmZ1nl+vZw1h72i9WEf4mx+JBZ1s+Z0QVGww/8LI6oYZVboPtr7Lok1gKdg5tUZdFukGn5Fr/A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.14.37: + resolution: {integrity: sha512-X105T1x7PV9pZ/rDpOeNiTWGBd1A0BGUbi6hK9BW7X8IxzQZNwAsaahLOlAFf+OKezoSQrhHfNdBwIu9UZMmtw==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.14.37: + resolution: {integrity: sha512-93mHLGTTFWAemDNGxlx0RJyNQ4E2OnnUGNHpNhKu/zzYw/Imf6dWGB6h7e9axtce8yOg5rOnx8BMhRu0NwQnKA==} + engines: {node: '>=12'} cpu: [x64] os: [netbsd] requiresBuild: true dev: true optional: true - /esbuild-openbsd-64/0.13.15: - resolution: {integrity: sha512-wTfvtwYJYAFL1fSs8yHIdf5GEE4NkbtbXtjLWjM3Cw8mmQKqsg8kTiqJ9NJQe5NX/5Qlo7Xd9r1yKMMkHllp5g==} + /esbuild-openbsd-64/0.14.37: + resolution: {integrity: sha512-jdhv2koRbF69artwD4aaSS72b+syfcdVHKs1SqjyfPvi/MsL7OC+jWGOSCZ329RmnECAwCOaL4dO7ZaJiLLj3Q==} + engines: {node: '>=12'} cpu: [x64] os: [openbsd] requiresBuild: true dev: true optional: true - /esbuild-sunos-64/0.13.15: - resolution: {integrity: sha512-lbivT9Bx3t1iWWrSnGyBP9ODriEvWDRiweAs69vI+miJoeKwHWOComSRukttbuzjZ8r1q0mQJ8Z7yUsDJ3hKdw==} + /esbuild-sunos-64/0.14.37: + resolution: {integrity: sha512-YvQsr++g0ZBHJUjPeR1Ui81eFcZTH5qJp8s5GP8jur0BwBM+2wCTNutXSh/ZKYp+4ejOo54PFTy3tGo36q7D6g==} + engines: {node: '>=12'} cpu: [x64] os: [sunos] requiresBuild: true dev: true optional: true - /esbuild-windows-32/0.13.15: - resolution: {integrity: sha512-fDMEf2g3SsJ599MBr50cY5ve5lP1wyVwTe6aLJsM01KtxyKkB4UT+fc5MXQFn3RLrAIAZOG+tHC+yXObpSn7Nw==} + /esbuild-windows-32/0.14.37: + resolution: {integrity: sha512-aQlHyME09dWo2FVAniTXLurr/xYZre5bJrnW8yALPUu09ExCC7LzlFQFoJuuSyCdMDHcxYLc6HcrJLwRdR3b/Q==} + engines: {node: '>=12'} cpu: [ia32] os: [win32] requiresBuild: true dev: true optional: true - /esbuild-windows-64/0.13.15: - resolution: {integrity: sha512-9aMsPRGDWCd3bGjUIKG/ZOJPKsiztlxl/Q3C1XDswO6eNX/Jtwu4M+jb6YDH9hRSUflQWX0XKAfWzgy5Wk54JQ==} + /esbuild-windows-64/0.14.37: + resolution: {integrity: sha512-4mJjpS71AV4rj5PXrOn19uQwiASiyziJwyZT+qQ3M/hc/fIWS2Pgv5gbgytC1O8jptMB6NIpgrauCw56lKgckA==} + engines: {node: '>=12'} cpu: [x64] os: [win32] requiresBuild: true dev: true optional: true - /esbuild-windows-arm64/0.13.15: - resolution: {integrity: sha512-zzvyCVVpbwQQATaf3IG8mu1IwGEiDxKkYUdA4FpoCHi1KtPa13jeScYDjlW0Qh+ebWzpKfR2ZwvqAQkSWNcKjA==} + /esbuild-windows-arm64/0.14.37: + resolution: {integrity: sha512-wQy+sAKD7/d6vDrgH+i+ZdbRLVHGG5BjBpBRStvGgLiuIo46/QEQCaHbBy2LOtXu/o1JYchxilzeQ+ExZdYkeA==} + engines: {node: '>=12'} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /esbuild/0.13.15: - resolution: {integrity: sha512-raCxt02HBKv8RJxE8vkTSCXGIyKHdEdGfUmiYb8wnabnaEmHzyW7DCHb5tEN0xU8ryqg5xw54mcwnYkC4x3AIw==} + /esbuild/0.14.37: + resolution: {integrity: sha512-sPlTpEkjzgFjWjYdve5xM1A3fpKXWNc+0yh0u9tqdER992OEpvde1c/+5rbRFsaSEEjQM9qXRcYn3EvNwgLF9w==} + engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - esbuild-android-arm64: 0.13.15 - esbuild-darwin-64: 0.13.15 - esbuild-darwin-arm64: 0.13.15 - esbuild-freebsd-64: 0.13.15 - esbuild-freebsd-arm64: 0.13.15 - esbuild-linux-32: 0.13.15 - esbuild-linux-64: 0.13.15 - esbuild-linux-arm: 0.13.15 - esbuild-linux-arm64: 0.13.15 - esbuild-linux-mips64le: 0.13.15 - esbuild-linux-ppc64le: 0.13.15 - esbuild-netbsd-64: 0.13.15 - esbuild-openbsd-64: 0.13.15 - esbuild-sunos-64: 0.13.15 - esbuild-windows-32: 0.13.15 - esbuild-windows-64: 0.13.15 - esbuild-windows-arm64: 0.13.15 + esbuild-android-64: 0.14.37 + esbuild-android-arm64: 0.14.37 + esbuild-darwin-64: 0.14.37 + esbuild-darwin-arm64: 0.14.37 + esbuild-freebsd-64: 0.14.37 + esbuild-freebsd-arm64: 0.14.37 + esbuild-linux-32: 0.14.37 + esbuild-linux-64: 0.14.37 + esbuild-linux-arm: 0.14.37 + esbuild-linux-arm64: 0.14.37 + esbuild-linux-mips64le: 0.14.37 + esbuild-linux-ppc64le: 0.14.37 + esbuild-linux-riscv64: 0.14.37 + esbuild-linux-s390x: 0.14.37 + esbuild-netbsd-64: 0.14.37 + esbuild-openbsd-64: 0.14.37 + esbuild-sunos-64: 0.14.37 + esbuild-windows-32: 0.14.37 + esbuild-windows-64: 0.14.37 + esbuild-windows-arm64: 0.14.37 dev: true /escalade/3.1.1: @@ -2619,17 +2587,6 @@ packages: micromatch: 4.0.5 dev: true - /fast-glob/3.2.7: - resolution: {integrity: sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==} - engines: {node: '>=8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.4 - dev: true - /fast-json-stable-stringify/2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} dev: true @@ -2747,8 +2704,8 @@ packages: engines: {node: '>= 0.6'} dev: false - /fraction.js/4.1.1: - resolution: {integrity: sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==} + /fraction.js/4.2.0: + resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true /fresh/0.5.2: @@ -2756,15 +2713,6 @@ packages: engines: {node: '>= 0.6'} dev: false - /fs-extra/10.0.0: - resolution: {integrity: sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==} - engines: {node: '>=12'} - dependencies: - graceful-fs: 4.2.8 - jsonfile: 6.1.0 - universalify: 2.0.0 - dev: true - /fs-extra/10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} @@ -2910,10 +2858,6 @@ packages: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} dev: true - /graceful-fs/4.2.8: - resolution: {integrity: sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==} - dev: true - /hard-rejection/2.1.0: resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} engines: {node: '>=6'} @@ -3012,8 +2956,8 @@ packages: resolution: {integrity: sha1-wc56MWjIxmFAM6S194d/OyJfnDg=} dev: true - /html-tags/3.1.0: - resolution: {integrity: sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==} + /html-tags/3.2.0: + resolution: {integrity: sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==} engines: {node: '>=8'} dev: true @@ -3092,13 +3036,6 @@ packages: engines: {node: '>= 4'} dev: true - /import-cwd/3.0.0: - resolution: {integrity: sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==} - engines: {node: '>=8'} - dependencies: - import-from: 3.0.0 - dev: true - /import-fresh/3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -3107,13 +3044,6 @@ packages: resolve-from: 4.0.0 dev: true - /import-from/3.0.0: - resolution: {integrity: sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==} - engines: {node: '>=8'} - dependencies: - resolve-from: 5.0.0 - dev: true - /import-lazy/2.1.0: resolution: {integrity: sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=} engines: {node: '>=4'} @@ -3236,12 +3166,6 @@ packages: rgba-regex: 1.0.0 dev: true - /is-core-module/2.8.0: - resolution: {integrity: sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==} - dependencies: - has: 1.0.3 - dev: true - /is-core-module/2.9.0: resolution: {integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==} dependencies: @@ -3484,13 +3408,13 @@ packages: type-fest: 2.6.0 dev: false - /lilconfig/2.0.3: - resolution: {integrity: sha512-EHKqr/+ZvdKCifpNrJCKxBTgk5XupZA3y/aCPY9mxfgBzmgh93Mt/WqjjQ38oMxXuvDokaKiM3lAgvSH2sjtHg==} + /lilconfig/2.0.4: + resolution: {integrity: sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==} engines: {node: '>=10'} dev: true - /lilconfig/2.0.4: - resolution: {integrity: sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==} + /lilconfig/2.0.5: + resolution: {integrity: sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==} engines: {node: '>=10'} dev: true @@ -3647,8 +3571,8 @@ packages: tweetnacl-util: 0.15.1 dev: false - /magic-string/0.25.7: - resolution: {integrity: sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==} + /magic-string/0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} dependencies: sourcemap-codec: 1.4.8 @@ -3725,14 +3649,6 @@ packages: engines: {node: '>= 0.6'} dev: false - /micromatch/4.0.4: - resolution: {integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==} - engines: {node: '>=8.6'} - dependencies: - braces: 3.0.2 - picomatch: 2.3.0 - dev: true - /micromatch/4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} @@ -3843,16 +3759,10 @@ packages: resolution: {integrity: sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==} dev: false - /nanoid/3.1.30: - resolution: {integrity: sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - /nanoid/3.3.3: resolution: {integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - dev: true /natural-compare/1.4.0: resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=} @@ -3892,8 +3802,8 @@ packages: hasBin: true dev: false - /node-releases/2.0.1: - resolution: {integrity: sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==} + /node-releases/2.0.3: + resolution: {integrity: sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw==} dev: true /nodemon/2.0.15: @@ -4197,11 +4107,6 @@ packages: /picocolors/1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - /picomatch/2.3.0: - resolution: {integrity: sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==} - engines: {node: '>=8.6'} - dev: true - /picomatch/2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -4226,30 +4131,23 @@ packages: postcss: 8.4.12 dev: true - /postcss-load-config/3.1.0: - resolution: {integrity: sha512-ipM8Ds01ZUophjDTQYSVP70slFSYg3T0/zyfII5vzhN6V57YSxMgG5syXuwi5VtS8wSf3iL30v0uBdoIVx4Q0g==} + /postcss-load-config/3.1.4_postcss@8.4.12: + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} peerDependencies: + postcss: '>=8.0.9' ts-node: '>=9.0.0' peerDependenciesMeta: + postcss: + optional: true ts-node: optional: true dependencies: - import-cwd: 3.0.0 - lilconfig: 2.0.3 + lilconfig: 2.0.5 + postcss: 8.4.12 yaml: 1.10.2 dev: true - /postcss-nested/5.0.6_postcss@8.4.1: - resolution: {integrity: sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - dependencies: - postcss: 8.4.1 - postcss-selector-parser: 6.0.6 - dev: true - /postcss-nested/5.0.6_postcss@8.4.12: resolution: {integrity: sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==} engines: {node: '>=12.0'} @@ -4257,11 +4155,11 @@ packages: postcss: ^8.2.14 dependencies: postcss: 8.4.12 - postcss-selector-parser: 6.0.6 + postcss-selector-parser: 6.0.10 dev: true - /postcss-selector-parser/6.0.6: - resolution: {integrity: sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==} + /postcss-selector-parser/6.0.10: + resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} engines: {node: '>=4'} dependencies: cssesc: 3.0.0 @@ -4272,18 +4170,10 @@ packages: resolution: {integrity: sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==} dev: true - /postcss-value-parser/4.1.0: - resolution: {integrity: sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==} + /postcss-value-parser/4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} dev: true - /postcss/8.4.1: - resolution: {integrity: sha512-WqLs/TTzXdG+/A4ZOOK9WDZiikrRaiA+eoEb/jz2DT9KUhMNHgP7yKPO8vwi62ZCsb703Gwb7BMZwDzI54Y2Ag==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.1.30 - picocolors: 1.0.0 - source-map-js: 1.0.1 - /postcss/8.4.12: resolution: {integrity: sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==} engines: {node: ^10 || ^12 || >=14} @@ -4291,7 +4181,6 @@ packages: nanoid: 3.3.3 picocolors: 1.0.0 source-map-js: 1.0.2 - dev: true /prelude-ls/1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} @@ -4383,14 +4272,14 @@ packages: escape-goat: 2.1.1 dev: true - /purgecss/4.0.3: - resolution: {integrity: sha512-PYOIn5ibRIP34PBU9zohUcCI09c7drPJJtTDAc0Q6QlRz2/CHQ8ywGLdE7ZhxU2VTqB7p5wkvj5Qcm05Rz3Jmw==} + /purgecss/4.1.3: + resolution: {integrity: sha512-99cKy4s+VZoXnPxaoM23e5ABcP851nC2y2GROkkjS8eJaJtlciGavd7iYAw2V84WeBqggZ12l8ef44G99HmTaw==} hasBin: true dependencies: - commander: 6.2.1 + commander: 8.3.0 glob: 7.2.0 - postcss: 8.4.1 - postcss-selector-parser: 6.0.6 + postcss: 8.4.12 + postcss-selector-parser: 6.0.10 dev: true /pushdata-bitcoin/1.0.1: @@ -4585,13 +4474,6 @@ packages: global-dirs: 0.1.1 dev: true - /resolve/1.20.0: - resolution: {integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==} - dependencies: - is-core-module: 2.8.0 - path-parse: 1.0.7 - dev: true - /resolve/1.22.0: resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==} hasBin: true @@ -4646,8 +4528,8 @@ packages: inherits: 2.0.4 dev: false - /rollup/2.60.1: - resolution: {integrity: sha512-akwfnpjY0rXEDSn1UTVfKXJhPsEBu+imi1gqBA1ZkHGydUnkV/fWCC90P7rDaLEW8KTwBcS1G3N4893Ndz+jwg==} + /rollup/2.70.2: + resolution: {integrity: sha512-EitogNZnfku65I1DD5Mxe8JYRUCy0hkK5X84IlDtUs+O6JRMpRciXTzyCUuX11b5L5pvjH+OmFXiQ3XjabcXgg==} engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: @@ -4877,14 +4759,9 @@ packages: is-fullwidth-code-point: 4.0.0 dev: true - /source-map-js/1.0.1: - resolution: {integrity: sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==} - engines: {node: '>=0.10.0'} - /source-map-js/1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} - dev: true /source-map-support/0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} @@ -5046,7 +4923,7 @@ packages: engines: {node: '>= 0.4'} dev: true - /tailwindcss/2.2.19_343577c3dd31b4e787406ab8c6576ff6: + /tailwindcss/2.2.19_081650f2f4dba35b17265937ab2a2ec0: resolution: {integrity: sha512-6Ui7JSVtXadtTUo2NtkBBacobzWiQYVjYW0ZnKaP9S1ZCKQ0w7KVNz+YSDI/j7O7KCMHbOkz94ZMQhbT9pOqjw==} engines: {node: '>=12.13.0'} hasBin: true @@ -5055,19 +4932,19 @@ packages: postcss: ^8.0.9 dependencies: arg: 5.0.1 - autoprefixer: 10.4.0_postcss@8.4.1 - bytes: 3.1.0 + autoprefixer: 10.4.4_postcss@8.4.12 + bytes: 3.1.2 chalk: 4.1.2 - chokidar: 3.5.2 - color: 4.0.1 + chokidar: 3.5.3 + color: 4.2.3 cosmiconfig: 7.0.1 detective: 5.2.0 didyoumean: 1.2.2 dlv: 1.1.3 - fast-glob: 3.2.7 - fs-extra: 10.0.0 + fast-glob: 3.2.11 + fs-extra: 10.1.0 glob-parent: 6.0.2 - html-tags: 3.1.0 + html-tags: 3.2.0 is-color-stop: 1.1.0 is-glob: 4.0.3 lodash: 4.17.21 @@ -5076,17 +4953,17 @@ packages: node-emoji: 1.11.0 normalize-path: 3.0.0 object-hash: 2.2.0 - postcss: 8.4.1 + postcss: 8.4.12 postcss-js: 3.0.3 - postcss-load-config: 3.1.0 - postcss-nested: 5.0.6_postcss@8.4.1 - postcss-selector-parser: 6.0.6 - postcss-value-parser: 4.1.0 + postcss-load-config: 3.1.4_postcss@8.4.12 + postcss-nested: 5.0.6_postcss@8.4.12 + postcss-selector-parser: 6.0.10 + postcss-value-parser: 4.2.0 pretty-hrtime: 1.0.3 - purgecss: 4.0.3 + purgecss: 4.1.3 quick-lru: 5.1.1 reduce-css-calc: 2.1.8 - resolve: 1.20.0 + resolve: 1.22.0 tmp: 0.2.1 transitivePeerDependencies: - ts-node @@ -5101,18 +4978,18 @@ packages: postcss: ^8.0.9 dependencies: arg: 5.0.1 - bytes: 3.1.0 + bytes: 3.1.2 chalk: 4.1.2 - chokidar: 3.5.2 - color: 4.0.1 + chokidar: 3.5.3 + color: 4.2.3 cosmiconfig: 7.0.1 detective: 5.2.0 didyoumean: 1.2.2 dlv: 1.1.3 - fast-glob: 3.2.7 - fs-extra: 10.0.0 + fast-glob: 3.2.11 + fs-extra: 10.1.0 glob-parent: 6.0.2 - html-tags: 3.1.0 + html-tags: 3.2.0 is-color-stop: 1.1.0 is-glob: 4.0.3 lodash: 4.17.21 @@ -5123,15 +5000,15 @@ packages: object-hash: 2.2.0 postcss: 8.4.12 postcss-js: 3.0.3 - postcss-load-config: 3.1.0 + postcss-load-config: 3.1.4_postcss@8.4.12 postcss-nested: 5.0.6_postcss@8.4.12 - postcss-selector-parser: 6.0.6 - postcss-value-parser: 4.1.0 + postcss-selector-parser: 6.0.10 + postcss-value-parser: 4.2.0 pretty-hrtime: 1.0.3 - purgecss: 4.0.3 + purgecss: 4.1.3 quick-lru: 5.1.1 reduce-css-calc: 2.1.8 - resolve: 1.20.0 + resolve: 1.22.0 tmp: 0.2.1 transitivePeerDependencies: - ts-node @@ -5427,8 +5304,8 @@ packages: engines: {node: '>= 0.8'} dev: false - /vite/2.6.14: - resolution: {integrity: sha512-2HA9xGyi+EhY2MXo0+A2dRsqsAG3eFNEVIo12olkWhOmc8LfiM+eMdrXf+Ruje9gdXgvSqjLI9freec1RUM5EA==} + /vite/2.9.5: + resolution: {integrity: sha512-dvMN64X2YEQgSXF1lYabKXw3BbN6e+BL67+P3Vy4MacnY+UzT1AfkHiioFSi9+uiDUiaDy7Ax/LQqivk6orilg==} engines: {node: '>=12.2.0'} hasBin: true peerDependencies: @@ -5443,10 +5320,10 @@ packages: stylus: optional: true dependencies: - esbuild: 0.13.15 - postcss: 8.4.1 - resolve: 1.20.0 - rollup: 2.60.1 + esbuild: 0.14.37 + postcss: 8.4.12 + resolve: 1.22.0 + rollup: 2.70.2 optionalDependencies: fsevents: 2.3.2 dev: true @@ -5473,42 +5350,43 @@ packages: resolution: {integrity: sha512-sp6M09oXGcRM3d3Jr80UywWx4C9I18nH/549fgNrs8qbCcw+DJc8QSUFkJ91lqWndGQ1q5rYen4i4IIrpHPVYA==} dev: false - /vue-router/4.0.12_vue@3.2.20: - resolution: {integrity: sha512-CPXvfqe+mZLB1kBWssssTiWg4EQERyqJZes7USiqfW9B5N2x+nHlnsM1D3b5CaJ6qgCvMmYJnz+G0iWjNCvXrg==} + /vue-router/4.0.14_vue@3.2.33: + resolution: {integrity: sha512-wAO6zF9zxA3u+7AkMPqw9LjoUCjSxfFvINQj3E/DceTt6uEz1XZLraDhdg2EYmvVwTBSGlLYsUw8bDmx0754Mw==} peerDependencies: - vue: ^3.0.0 + vue: ^3.2.0 dependencies: - '@vue/devtools-api': 6.0.0-beta.19 - vue: 3.2.20 + '@vue/devtools-api': 6.1.4 + vue: 3.2.33 dev: false - /vue/3.2.20: - resolution: {integrity: sha512-81JjEP4OGk9oO8+CU0h2nFPGgJBm9mNa3kdCX2k6FuRdrWrC+CNe+tOnuIeTg8EWwQuI+wwdra5Q7vSzp7p4Iw==} + /vue/3.2.33: + resolution: {integrity: sha512-si1ExAlDUrLSIg/V7D/GgA4twJwfsfgG+t9w10z38HhL/HA07132pUQ2KuwAo8qbCyMJ9e6OqrmWrOCr+jW7ZQ==} dependencies: - '@vue/compiler-dom': 3.2.20 - '@vue/compiler-sfc': 3.2.20 - '@vue/runtime-dom': 3.2.20 - '@vue/server-renderer': 3.2.20_vue@3.2.20 - '@vue/shared': 3.2.20 + '@vue/compiler-dom': 3.2.33 + '@vue/compiler-sfc': 3.2.33 + '@vue/runtime-dom': 3.2.33 + '@vue/server-renderer': 3.2.33_vue@3.2.33 + '@vue/shared': 3.2.33 dev: false /vuex-persistedstate/4.1.0_vuex@4.0.2: resolution: {integrity: sha512-3SkEj4NqwM69ikJdFVw6gObeB0NHyspRYMYkR/EbhR0hbvAKyR5gksVhtAfY1UYuWUOCCA0QNGwv9pOwdj+XUQ==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. peerDependencies: vuex: ^3.0 || ^4.0.0-rc dependencies: deepmerge: 4.2.2 shvl: 2.0.3 - vuex: 4.0.2_vue@3.2.20 + vuex: 4.0.2_vue@3.2.33 dev: false - /vuex/4.0.2_vue@3.2.20: + /vuex/4.0.2_vue@3.2.33: resolution: {integrity: sha512-M6r8uxELjZIK8kTKDGgZTYX/ahzblnzC4isU1tpmEuOIIKmV+TRdc+H4s8ds2NuZ7wpUTdGRzJRtoj+lI+pc0Q==} peerDependencies: vue: ^3.0.2 dependencies: - '@vue/devtools-api': 6.0.0-beta.19 - vue: 3.2.20 + '@vue/devtools-api': 6.1.4 + vue: 3.2.33 dev: false /web-streams-polyfill/3.2.1: From cfd13bac17ce2cccddccf20f8c4a5e4e8d2105e4 Mon Sep 17 00:00:00 2001 From: Botrel Kilian Date: Thu, 21 Apr 2022 15:00:19 +0200 Subject: [PATCH 17/17] refactor: rename stats to metrics --- apps/api/src/routes/user/get.js | 2 +- apps/front/src/store/user/index.js | 26 ++++++++++++------------ apps/front/src/views/profile/Profile.vue | 4 ++-- apps/front/src/views/profile/Risk.vue | 4 ++-- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/apps/api/src/routes/user/get.js b/apps/api/src/routes/user/get.js index b82be25..4858493 100644 --- a/apps/api/src/routes/user/get.js +++ b/apps/api/src/routes/user/get.js @@ -31,7 +31,7 @@ export default async (req, res, next) => { username, linkingpublickey, }, - stats: { + metrics: { transactions: { deposits: total_deposit_success_count, withdrawals: total_withdraw_success_count, diff --git a/apps/front/src/store/user/index.js b/apps/front/src/store/user/index.js index 328ee08..d57ab1d 100644 --- a/apps/front/src/store/user/index.js +++ b/apps/front/src/store/user/index.js @@ -14,7 +14,7 @@ const defaultState = () => { username: '', linkingpublickey: '', }, - stats: { + metrics: { transactions: { deposits: 0, withdrawals: 0, @@ -62,11 +62,11 @@ export default { }, WITHDRAW_SUCCESS(state, amount) { state.account.available_balance -= parseInt(amount) - state.stats.transactions.withdrawals += 1 + state.metrics.transactions.withdrawals += 1 }, DEPOSIT_SUCCESS(state, amount) { state.account.available_balance += parseInt(amount) - state.stats.transactions.deposits += 1 + state.metrics.transactions.deposits += 1 }, }, getters: { @@ -76,27 +76,27 @@ export default { positionsCount: (state) => { return ( - state.stats.futures.running.positions + - state.stats.futures.opened.positions + - state.stats.futures.closed.positions + - state.stats.futures.canceled.positions + - state.stats.options.running.positions + - state.stats.options.closed.positions + state.metrics.futures.running.positions + + state.metrics.futures.opened.positions + + state.metrics.futures.closed.positions + + state.metrics.futures.canceled.positions + + state.metrics.options.running.positions + + state.metrics.options.closed.positions ) }, globalQuantity: (state, getters, rootState, rootGetters) => { return ( - state.stats.futures.opened.quantity + - state.stats.futures.running.quantity + + state.metrics.futures.opened.quantity + + state.metrics.futures.running.quantity + rootGetters['options/computeDelta'] ) }, usedMargin: (state, getters, rootState, rootGetters) => { return ( - state.stats.futures.opened.margin + - state.stats.futures.running.margin + + state.metrics.futures.opened.margin + + state.metrics.futures.running.margin + rootGetters['options/usedMargin'] ) }, diff --git a/apps/front/src/views/profile/Profile.vue b/apps/front/src/views/profile/Profile.vue index 169a7f7..650872d 100644 --- a/apps/front/src/views/profile/Profile.vue +++ b/apps/front/src/views/profile/Profile.vue @@ -33,9 +33,9 @@ export default { const store = useStore() return { username: computed(() => store.state.user.account.username), - deposits: computed(() => store.state.user.stats.transactions.deposits), + deposits: computed(() => store.state.user.metrics.transactions.deposits), withdrawals: computed( - () => store.state.user.stats.transactions.withdrawals + () => store.state.user.metrics.transactions.withdrawals ), positions: computed(() => store.getters['user/positionsCount']), } diff --git a/apps/front/src/views/profile/Risk.vue b/apps/front/src/views/profile/Risk.vue index 435f283..434b823 100644 --- a/apps/front/src/views/profile/Risk.vue +++ b/apps/front/src/views/profile/Risk.vue @@ -103,8 +103,8 @@ export default { quantity_global: computed(() => store.getters['user/globalQuantity']), quantity_futures: computed( () => - store.state.user.stats.futures.opened.quantity + - store.state.user.stats.futures.running.quantity + store.state.user.metrics.futures.opened.quantity + + store.state.user.metrics.futures.running.quantity ), quantity_options: computed(() => store.getters['options/computeDelta']), }