From 640c653f591e487729878acef48f14263ba82656 Mon Sep 17 00:00:00 2001 From: eL1x00r Date: Mon, 29 Jan 2024 16:58:25 +0100 Subject: [PATCH 1/8] added cache control config for fastify, ref #17 --- README.md | 18 +++++++++++------- config/default.json | 4 ++++ package-lock.json | 9 ++++++--- src/RestModule.mjs | 14 ++++++++++++++ 4 files changed, 35 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index f845f7c..17ed793 100644 --- a/README.md +++ b/README.md @@ -96,13 +96,17 @@ Just swap out the given domain in that endpoint example above with your websocke ```json { - "enableRest": true, - "restPort": 5099, - "enableWebsockets": false, - "websocketPort": 5095, - "websocketCORS": "*", - "channel": "53d2e64fa7a09e9dc74fc52ee9e9feb9d59b3e2cff4a25dfb543ec3b0bf4b281", - "channelProduction": "53d2e64fa7a09e9dc74fc52ee9e9feb9d59b3e2cff4a25dfb543ec3b0bf4b281" + "enableRest": true, + "restPort": 5099, + "cacheControl": { + "maxAge": 3600, + "public": true + }, + "enableWebsockets": false, + "websocketPort": 5095, + "websocketCORS": "*", + "channel": "53d2e64fa7a09e9dc74fc52ee9e9feb9d59b3e2cff4a25dfb543ec3b0bf4b281", + "channelTest": "729c91276e20b8e270ea589ac437f24e6c7c66c969b4acfe99bd82faab391e68" } ``` diff --git a/config/default.json b/config/default.json index 33128a3..2cc844f 100644 --- a/config/default.json +++ b/config/default.json @@ -1,6 +1,10 @@ { "enableRest": true, "restPort": 5099, + "cacheControl": { + "maxAge": 3600, + "public": true + }, "enableWebsockets": false, "websocketPort": 5095, "websocketCORS": "*", diff --git a/package-lock.json b/package-lock.json index e1648c1..cb77dd6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { - "name": "@trac-systems/tap-reader", + "name": "@trac-network/tap-reader", "version": "0.13.40-beta", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "@trac-systems/tap-reader", - "version": "0.13.37", + "name": "@trac-network/tap-reader", + "version": "0.13.40-beta", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -41,6 +41,9 @@ "socket.io": "^4.7.4", "tap-reader": "^0.1.0" }, + "bin": { + "myapp": "src/main.mjs" + }, "devDependencies": { "@jest/globals": "^29.7.0", "eslint": "^8.56.0", diff --git a/src/RestModule.mjs b/src/RestModule.mjs index 81968f6..2664c0d 100644 --- a/src/RestModule.mjs +++ b/src/RestModule.mjs @@ -61,6 +61,20 @@ export default class RestModule { }, transformSpecificationClone: true, }); + + // Read cache control settings + const cacheControlConfig = config.get('cacheControl'); + + this.fastify.addHook('onSend', (request, reply, payload, done) => { + const maxAge = cacheControlConfig.maxAge; + const visibility = cacheControlConfig.public ? 'public' : 'private'; + + // Set cache control header + reply.header('Cache-Control', `${visibility}, max-age=${maxAge}`); + done(); + }); + + this.initializeRoutes(); } From 4185af28c01cbf19f005deb5ca3e2713609fc390 Mon Sep 17 00:00:00 2001 From: eL1x00r Date: Mon, 29 Jan 2024 17:12:47 +0100 Subject: [PATCH 2/8] added RestApiDocs enable/disable config flag, ref #18 --- config/default.json | 3 +- src/RestModule.mjs | 91 ++++++++++++++++++++++++--------------------- 2 files changed, 50 insertions(+), 44 deletions(-) diff --git a/config/default.json b/config/default.json index 2cc844f..725508d 100644 --- a/config/default.json +++ b/config/default.json @@ -1,10 +1,11 @@ { "enableRest": true, + "enableRestApiDocs": false, "restPort": 5099, "cacheControl": { "maxAge": 3600, "public": true - }, + }, "enableWebsockets": false, "websocketPort": 5095, "websocketCORS": "*", diff --git a/src/RestModule.mjs b/src/RestModule.mjs index 2664c0d..3434ca3 100644 --- a/src/RestModule.mjs +++ b/src/RestModule.mjs @@ -16,51 +16,56 @@ export default class RestModule { constructor(tracManager) { this.tracManager = tracManager; this.fastify = Fastify({ logger: false }); - // Initialize routes - this.fastify.register(swagger, { - routePrefix: "/docs", - swagger: { - info: { - title: "TAP Protocol API", - description: "API documentation for TAP Protocol", - version: "1.0.1", - }, - // host: "localhost:5099", - // schemes: ["http"], - consumes: ["application/json"], - produces: ["application/json"], - }, - exposeRoute: true, - }); - this.fastify.register(fastifySwaggerUi, { - routePrefix: "/docs", - logo: { - type: "image/png", - content: Buffer.from( - "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", - "base64" - ), - }, - theme: { - favicon: [ - { - filename: "favicon.png", - rel: "icon", - sizes: "32x32", - type: "image/png", - content: Buffer.from( - "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACClBMVEUAAADoF4v3udz86/X/7PLmHIrvf7z75PDiHYnlHIn74fDlHIn71ezlHIrxgr70qNLsYq3oOpvMM5nlGofsYq3kHonmI43lHInlHInjHIn/AP/lHInxh7/nHYflHYnmGor/AIDmG4rlHInlHInkHYnvdbbwh7/nHIjkHInkHInmHIrnHojykMX0ttjsfb3fIIDlHInlHYnmGozvhL/zr9Xvhb//AIDwi8P0p9Ltgb//AKroN5bylcjjHovxo8/lHInxncrlHonwl8jlHYrvjMPvgL/uk8TvkcXwkcTukcblG4nuicLtg77ui8LuisL/qqruhcDshr7mGYnternmHInsdbbvgL/lHInrcbXlHIjpaK/mHYjqZq/sZqzmG4jnXKvmHIjjIIr/K6rkHInkG4nbJJL75fHnK5H63Oz63+7lHIn1rdT62evucbX50+j50ef1r9b0qNLwgLzoOJj4zeX4yuP0qNH3yePlH4v0rtX3x+L2v97zn87vd7nrUKTmJo7rT6P2wd/2w+DveLj1stbxj8XtabHpQp3mIIv1vt32wd71vdzmH4r1utv1u9v0tdj0r9XzqdLrU6Xyo8/udLbxncvvjsTwl8jnNpbvkcXqUqXui8LsbbLuhb/lIYzsfrvtf7znOJfsebjoTqLrc7XpYavqbbLlJo3pZ6/mN5foYazlHorlIIv///+BUoroAAAAZnRSTlMAC3uZKLW/Qxr+Q8tCfv7+154FMct50/XCdwHigGBqMgSW6a9zrHdJ3aJmK57+bAiIThSu/mACy/1XA7F0f4DPs/3nWfEgSYC3Wp797f7NA/43KZ1u8RCzWvHMPvwog4jImQaZhAfSxQAzAAAAAWJLR0StIGLCHQAAAAlwSFlzAAAdhwAAHYcBj+XxZQAAAAd0SU1FB+gBGQk6ItmqpvgAAAE4SURBVDjLY2CgB2BkYsYJWEDyrGxpOAE7UAEHZ3pGJi7ABbKCOys7BxfgASngzcrNQwf5BXz8hUUCgkIgBcJZxSUwUFpWBqLKRUTFKsQlJMHyDFLSWZVVQFBdU1tX39AIZDXJMMjKySvA/amY1dzS2tbeoaSsotrZ1dXVrYYWEOpZPVkamlraUgw6vX19fbp66CGlb2BoBGYY9wOBiSmuEDUznwAEFpa45K2sJ4KADc4osZ00GQTscCqwnzIVBBxwyRs5TpsOAk64FDjPmAkGLq5u7h6eWBR4zZoNAt4+vrNn+/ljUSA9Zy4MBARikQ+aN38BDARjc0LIwkUwEBqGTUH44iUwEIFNXiFy6TIoiJLCpiB6+QooiInFGgpxK1dBQTz2YEpYvQYCEpOwylspJkNASioD/QEAEWipK9sYP+kAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjQtMDEtMjVUMDk6NTg6MzQrMDA6MDC2b/3VAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDI0LTAxLTI1VDA5OjU4OjM0KzAwOjAwxzJFaQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABXelRYdFJhdyBwcm9maWxlIHR5cGUgaXB0YwAAeJzj8gwIcVYoKMpPy8xJ5VIAAyMLLmMLEyMTS5MUAxMgRIA0w2QDI7NUIMvY1MjEzMQcxAfLgEigSi4A6hcRdPJCNZUAAAAASUVORK5CYII=" - ), + if(config.get("enableRestApiDocs")) { + + // Initialize routes + this.fastify.register(swagger, { + routePrefix: "/docs", + swagger: { + info: { + title: "TAP Protocol API", + description: "API documentation for TAP Protocol", + version: "1.0.1", }, - ], - }, - uiConfig: { - // docExpansion: 'full', - // deepLinking: false - }, - transformSpecificationClone: true, - }); + // host: "localhost:5099", + // schemes: ["http"], + consumes: ["application/json"], + produces: ["application/json"], + }, + exposeRoute: true, + }); + + this.fastify.register(fastifySwaggerUi, { + routePrefix: "/docs", + logo: { + type: "image/png", + content: Buffer.from( + "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", + "base64" + ), + }, + theme: { + favicon: [ + { + filename: "favicon.png", + rel: "icon", + sizes: "32x32", + type: "image/png", + content: Buffer.from( + "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACClBMVEUAAADoF4v3udz86/X/7PLmHIrvf7z75PDiHYnlHIn74fDlHIn71ezlHIrxgr70qNLsYq3oOpvMM5nlGofsYq3kHonmI43lHInlHInjHIn/AP/lHInxh7/nHYflHYnmGor/AIDmG4rlHInlHInkHYnvdbbwh7/nHIjkHInkHInmHIrnHojykMX0ttjsfb3fIIDlHInlHYnmGozvhL/zr9Xvhb//AIDwi8P0p9Ltgb//AKroN5bylcjjHovxo8/lHInxncrlHonwl8jlHYrvjMPvgL/uk8TvkcXwkcTukcblG4nuicLtg77ui8LuisL/qqruhcDshr7mGYnternmHInsdbbvgL/lHInrcbXlHIjpaK/mHYjqZq/sZqzmG4jnXKvmHIjjIIr/K6rkHInkG4nbJJL75fHnK5H63Oz63+7lHIn1rdT62evucbX50+j50ef1r9b0qNLwgLzoOJj4zeX4yuP0qNH3yePlH4v0rtX3x+L2v97zn87vd7nrUKTmJo7rT6P2wd/2w+DveLj1stbxj8XtabHpQp3mIIv1vt32wd71vdzmH4r1utv1u9v0tdj0r9XzqdLrU6Xyo8/udLbxncvvjsTwl8jnNpbvkcXqUqXui8LsbbLuhb/lIYzsfrvtf7znOJfsebjoTqLrc7XpYavqbbLlJo3pZ6/mN5foYazlHorlIIv///+BUoroAAAAZnRSTlMAC3uZKLW/Qxr+Q8tCfv7+154FMct50/XCdwHigGBqMgSW6a9zrHdJ3aJmK57+bAiIThSu/mACy/1XA7F0f4DPs/3nWfEgSYC3Wp797f7NA/43KZ1u8RCzWvHMPvwog4jImQaZhAfSxQAzAAAAAWJLR0StIGLCHQAAAAlwSFlzAAAdhwAAHYcBj+XxZQAAAAd0SU1FB+gBGQk6ItmqpvgAAAE4SURBVDjLY2CgB2BkYsYJWEDyrGxpOAE7UAEHZ3pGJi7ABbKCOys7BxfgASngzcrNQwf5BXz8hUUCgkIgBcJZxSUwUFpWBqLKRUTFKsQlJMHyDFLSWZVVQFBdU1tX39AIZDXJMMjKySvA/amY1dzS2tbeoaSsotrZ1dXVrYYWEOpZPVkamlraUgw6vX19fbp66CGlb2BoBGYY9wOBiSmuEDUznwAEFpa45K2sJ4KADc4osZ00GQTscCqwnzIVBBxwyRs5TpsOAk64FDjPmAkGLq5u7h6eWBR4zZoNAt4+vrNn+/ljUSA9Zy4MBARikQ+aN38BDARjc0LIwkUwEBqGTUH44iUwEIFNXiFy6TIoiJLCpiB6+QooiInFGgpxK1dBQTz2YEpYvQYCEpOwylspJkNASioD/QEAEWipK9sYP+kAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjQtMDEtMjVUMDk6NTg6MzQrMDA6MDC2b/3VAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDI0LTAxLTI1VDA5OjU4OjM0KzAwOjAwxzJFaQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABXelRYdFJhdyBwcm9maWxlIHR5cGUgaXB0YwAAeJzj8gwIcVYoKMpPy8xJ5VIAAyMLLmMLEyMTS5MUAxMgRIA0w2QDI7NUIMvY1MjEzMQcxAfLgEigSi4A6hcRdPJCNZUAAAAASUVORK5CYII=" + ), + }, + ], + }, + uiConfig: { + // docExpansion: 'full', + // deepLinking: false + }, + transformSpecificationClone: true, + }); + + } // Read cache control settings const cacheControlConfig = config.get('cacheControl'); From ca30108b22fe4dd574ce6773d41c9c1d433d42d6 Mon Sep 17 00:00:00 2001 From: eL1x00r Date: Mon, 29 Jan 2024 17:15:42 +0100 Subject: [PATCH 3/8] ApiDocs enabled by default --- config/default.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/default.json b/config/default.json index 725508d..7e06157 100644 --- a/config/default.json +++ b/config/default.json @@ -1,6 +1,6 @@ { "enableRest": true, - "enableRestApiDocs": false, + "enableRestApiDocs": true, "restPort": 5099, "cacheControl": { "maxAge": 3600, From 2a20b5c266e08fe627d11a405132d4c5130950d8 Mon Sep 17 00:00:00 2001 From: eL1x00r Date: Tue, 30 Jan 2024 10:09:48 +0100 Subject: [PATCH 4/8] added custom restHeaders, for example for Access-Control-Allow-Origin --- config/default.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/config/default.json b/config/default.json index 7e06157..3e76847 100644 --- a/config/default.json +++ b/config/default.json @@ -2,10 +2,14 @@ "enableRest": true, "enableRestApiDocs": true, "restPort": 5099, - "cacheControl": { + "restCacheControl": { "maxAge": 3600, "public": true }, + "restHeaders": [ + { "name": "X-Powered-By", "value": "TracCore" }, + { "name": "Access-Control-Allow-Origin", "value": "*" } + ], "enableWebsockets": false, "websocketPort": 5095, "websocketCORS": "*", From 503f27c0a6ab45285a44d8cacdcb51ffc5d78f93 Mon Sep 17 00:00:00 2001 From: eL1x00r Date: Tue, 30 Jan 2024 10:17:38 +0100 Subject: [PATCH 5/8] apply config headers --- src/RestModule.mjs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/RestModule.mjs b/src/RestModule.mjs index 3434ca3..936911b 100644 --- a/src/RestModule.mjs +++ b/src/RestModule.mjs @@ -68,7 +68,8 @@ export default class RestModule { } // Read cache control settings - const cacheControlConfig = config.get('cacheControl'); + const cacheControlConfig = config.get('restCacheControl'); + const restHeaders = config.get('restHeaders'); this.fastify.addHook('onSend', (request, reply, payload, done) => { const maxAge = cacheControlConfig.maxAge; @@ -76,6 +77,11 @@ export default class RestModule { // Set cache control header reply.header('Cache-Control', `${visibility}, max-age=${maxAge}`); + // Set each header from the configuration + restHeaders.forEach(header => { + reply.header(header.name, header.value); + }); + done(); }); From 919d7e01e5da36861c6d8fb8689229f5a047b75f Mon Sep 17 00:00:00 2001 From: eL1x00r Date: Tue, 30 Jan 2024 10:56:40 +0100 Subject: [PATCH 6/8] added new config template to README.md --- README.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 17ed793..61978e2 100644 --- a/README.md +++ b/README.md @@ -97,11 +97,16 @@ Just swap out the given domain in that endpoint example above with your websocke ```json { "enableRest": true, + "enableRestApiDocs": true, "restPort": 5099, - "cacheControl": { + "restCacheControl": { "maxAge": 3600, "public": true - }, + }, + "restHeaders": [ + { "name": "X-Powered-By", "value": "TracCore" }, + { "name": "Access-Control-Allow-Origin", "value": "*" } + ], "enableWebsockets": false, "websocketPort": 5095, "websocketCORS": "*", From c337604bee4720ec85176ba3b3dcbd0ef48347ce Mon Sep 17 00:00:00 2001 From: eL1x00r Date: Tue, 30 Jan 2024 11:35:49 +0100 Subject: [PATCH 7/8] removed unused package.json fields --- package.json | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 0a2892a..bbe498e 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,6 @@ { "name": "@trac-network/tap-reader", + "author": "Trac Systems", "version": "0.13.40-beta", "description": "decentralized trac core module", "main": "src/main.mjs", @@ -36,16 +37,10 @@ "@fastify/swagger": "^8.14.0", "@fastify/swagger-ui": "^2.1.0", "@noble/secp256k1": "^2.0.0", - "@stdlib/assert-is-hex-string": "^0.1.1", - "async-await-mutex-lock": "^1.0.10", - "async-key-mutex": "^0.0.4", - "axios": "^1.6.5", - "buff-utils": "^0.0.1", "config": "^3.3.10", "corestore": "6.8.3", "crypto": "^1.0.1", "crypto-utils": "^0.1.3", - "debounceify": "^1.0.0", "fastify": "^4.25.2", "figlet": "^1.7.0", "graceful-fs": "^4.2.11", @@ -57,10 +52,7 @@ "hyperswarm": "4.5.1", "localdrive": "1.7.1", "patch-package": "^8.0.0", - "secp256k1": "^5.0.0", - "sha256": "^0.2.0", - "socket.io": "^4.7.4", - "tap-reader": "^0.1.0" + "socket.io": "^4.7.4" }, "devDependencies": { "@jest/globals": "^29.7.0", @@ -69,6 +61,5 @@ }, "directories": { "test": "test" - }, - "author": "Trac Systems" + } } From 8d12c6b2e7566c874d11e6c219cc18dbce689f88 Mon Sep 17 00:00:00 2001 From: eL1x00r Date: Tue, 30 Jan 2024 11:42:16 +0100 Subject: [PATCH 8/8] package-lock up2date, removed bin for now due to non-patching corestore issue at execution with npx/npm i -g --- package-lock.json | 573 +--------------------------------------------- package.json | 3 - 2 files changed, 7 insertions(+), 569 deletions(-) diff --git a/package-lock.json b/package-lock.json index e1648c1..78b2387 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { - "name": "@trac-systems/tap-reader", + "name": "@trac-network/tap-reader", "version": "0.13.40-beta", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "@trac-systems/tap-reader", - "version": "0.13.37", + "name": "@trac-network/tap-reader", + "version": "0.13.40-beta", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -15,16 +15,10 @@ "@fastify/swagger": "^8.14.0", "@fastify/swagger-ui": "^2.1.0", "@noble/secp256k1": "^2.0.0", - "@stdlib/assert-is-hex-string": "^0.1.1", - "async-await-mutex-lock": "^1.0.10", - "async-key-mutex": "^0.0.4", - "axios": "^1.6.5", - "buff-utils": "^0.0.1", "config": "^3.3.10", "corestore": "6.8.3", "crypto": "^1.0.1", "crypto-utils": "^0.1.3", - "debounceify": "^1.0.0", "fastify": "^4.25.2", "figlet": "^1.7.0", "graceful-fs": "^4.2.11", @@ -36,10 +30,10 @@ "hyperswarm": "4.5.1", "localdrive": "1.7.1", "patch-package": "^8.0.0", - "secp256k1": "^5.0.0", - "sha256": "^0.2.0", - "socket.io": "^4.7.4", - "tap-reader": "^0.1.0" + "socket.io": "^4.7.4" + }, + "bin": { + "myapp": "src/main.mjs" }, "devDependencies": { "@jest/globals": "^29.7.0", @@ -1599,374 +1593,6 @@ "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" }, - "node_modules/@stdlib/assert-has-own-property": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@stdlib/assert-has-own-property/-/assert-has-own-property-0.1.1.tgz", - "integrity": "sha512-Zsylp37i4rz3r0SEknZHDiqRf3StznHRm/tsh4vq6w63C+q8gyFDZVQcwFQ55OrK9OmvWmW+ypAFBUpEFAjX6Q==", - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/stdlib" - } - }, - "node_modules/@stdlib/assert-has-symbol-support": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@stdlib/assert-has-symbol-support/-/assert-has-symbol-support-0.1.1.tgz", - "integrity": "sha512-wQpag9EQENPG+EAel6YuUDvNgT8DlaR9s582xE3ScNTLvjNFCzS9M6tFKbgYojxUP7ZCj9VVnh0BAMg+Cxyrww==", - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/stdlib" - } - }, - "node_modules/@stdlib/assert-has-tostringtag-support": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@stdlib/assert-has-tostringtag-support/-/assert-has-tostringtag-support-0.1.1.tgz", - "integrity": "sha512-EQbfk5kH0rqaL8fFBPjcj3xloZ+vHMLnSM8TvKS0ViMH2adp/qneR+tr9fk3AavxMikrLe8iK/AdTGGDd5xv9A==", - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], - "dependencies": { - "@stdlib/assert-has-symbol-support": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/stdlib" - } - }, - "node_modules/@stdlib/assert-is-hex-string": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@stdlib/assert-is-hex-string/-/assert-is-hex-string-0.1.1.tgz", - "integrity": "sha512-FiXglAGmMO1bGPCYK18xNeVsdyzXOJNRR5BHlXHDNIA++lr05DyHg+lbUa/W6J/SA36frj445imkZyRz/4/chg==", - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], - "dependencies": { - "@stdlib/assert-is-string": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/stdlib" - } - }, - "node_modules/@stdlib/assert-is-string": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@stdlib/assert-is-string/-/assert-is-string-0.1.1.tgz", - "integrity": "sha512-GrQjWcirF4xAAp48e4rWpr0SmmUbdsAsoGse9PdOXSLaGRhAjDziLAgx2GLEJMcBuxCR5n1g2dCicPo6bM1hDw==", - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], - "dependencies": { - "@stdlib/assert-has-tostringtag-support": "^0.1.1", - "@stdlib/utils-define-nonenumerable-read-only-property": "^0.1.1", - "@stdlib/utils-native-class": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/stdlib" - } - }, - "node_modules/@stdlib/error-tools-fmtprodmsg": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@stdlib/error-tools-fmtprodmsg/-/error-tools-fmtprodmsg-0.1.1.tgz", - "integrity": "sha512-gyQsjgr+TacoDXpPUIkL5LxEx+tT7uWycyv92no0Jo4J+mCzxOq47cBNuwTxboeIKtUSuscD5trWpL9oIdYYbQ==", - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], - "dependencies": { - "@stdlib/types": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/stdlib" - } - }, - "node_modules/@stdlib/string-base-format-interpolate": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@stdlib/string-base-format-interpolate/-/string-base-format-interpolate-0.1.1.tgz", - "integrity": "sha512-amSiQPOaKNoMgsgvdOCwLjlhrhcj1wUTnBrKmOcjUl3wSR+kRW1zEmGs92DaeGGf0B/SJMe1D3oq5DPriIPP8Q==", - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/stdlib" - } - }, - "node_modules/@stdlib/string-base-format-tokenize": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@stdlib/string-base-format-tokenize/-/string-base-format-tokenize-0.1.1.tgz", - "integrity": "sha512-Og33cMtG6btAdA9Dwu69rEZ3/piZEGGLsbt1O2kIi1mxsVk34CO5Wr2JE0VetBjtJ+ylyNm5FODBjsObUhiliQ==", - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/stdlib" - } - }, - "node_modules/@stdlib/string-format": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@stdlib/string-format/-/string-format-0.1.1.tgz", - "integrity": "sha512-s/AyPpI2hh2mHcvb/OXrVSv2IQbLlXCL55YSW1HyByVsKRMUgE8RsU2uSuwIIbEczbLIffMugG5ly5QxX7fbCw==", - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], - "dependencies": { - "@stdlib/string-base-format-interpolate": "^0.1.1", - "@stdlib/string-base-format-tokenize": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/stdlib" - } - }, - "node_modules/@stdlib/symbol-ctor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@stdlib/symbol-ctor/-/symbol-ctor-0.1.1.tgz", - "integrity": "sha512-XhhpiWoXwoB6pBkICOlgQsqRbX11TOsA9w18ntv8NAYaimT/dljxuvq258Dq48yuLy/XyFzXYP17uZ92UGFWLg==", - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/stdlib" - } - }, - "node_modules/@stdlib/types": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@stdlib/types/-/types-0.1.0.tgz", - "integrity": "sha512-gnUBNBOoDvA5BRJ11e/mNGasMRQwZrTERt6qICAAwqjCJuMamK+SKELv+GNQP/wX6i7rdqhocJy/7Fq7cGbRLQ==", - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/stdlib" - } - }, - "node_modules/@stdlib/utils-define-nonenumerable-read-only-property": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@stdlib/utils-define-nonenumerable-read-only-property/-/utils-define-nonenumerable-read-only-property-0.1.1.tgz", - "integrity": "sha512-QCSKAflKO3vuljGaNgFNp3hIbe43CGiXiYET/RPCIo5cjIho8EN0rOQtcbT2s2udiGXXusl0t/v5YLiwueC6JQ==", - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], - "dependencies": { - "@stdlib/types": "^0.1.0", - "@stdlib/utils-define-property": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/stdlib" - } - }, - "node_modules/@stdlib/utils-define-property": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@stdlib/utils-define-property/-/utils-define-property-0.1.1.tgz", - "integrity": "sha512-vy6vaNV5aijnGZi1sWY8GPueOPmGc8No39ejXoSrHymMix83vNsk/pNsY2Usg1J80g71cZIlbCxiJjLJiXmOzw==", - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], - "dependencies": { - "@stdlib/error-tools-fmtprodmsg": "^0.1.0", - "@stdlib/string-format": "^0.1.1", - "@stdlib/types": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/stdlib" - } - }, - "node_modules/@stdlib/utils-native-class": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@stdlib/utils-native-class/-/utils-native-class-0.1.1.tgz", - "integrity": "sha512-I8kGJN8T/Fjb+Yew0Asp6bg8Cbb7/XA973UAQ38LCb9uR3uKVsg+mKboMxKrnVkVGvZMp6kfmW8TlowMBzcsrg==", - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], - "dependencies": { - "@stdlib/assert-has-own-property": "^0.1.1", - "@stdlib/assert-has-tostringtag-support": "^0.1.1", - "@stdlib/symbol-ctor": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/stdlib" - } - }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -2269,21 +1895,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/async-await-mutex-lock": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/async-await-mutex-lock/-/async-await-mutex-lock-1.0.10.tgz", - "integrity": "sha512-HJOfObEYDecjNsr6+8TOoUW7biAkexkIIgYTdaAAWZ3Q4N2xFfWL/Avbfp8YQc/7vChuWPF1R9aSpmJPXx2Jkw==" - }, - "node_modules/async-key-mutex": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/async-key-mutex/-/async-key-mutex-0.0.4.tgz", - "integrity": "sha512-ZFqSeZWYyoPG2PJ8uGiWh1U5BUd2VjivBQjS9ZInZLYOK+DR+zkBHxhIFXo3uhg2Sn/73yjouDe9l+h/CzT6Ow==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", @@ -2310,16 +1921,6 @@ "fastq": "^1.6.1" } }, - "node_modules/axios": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz", - "integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==", - "dependencies": { - "follow-redirects": "^1.15.4", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, "node_modules/b4a": { "version": "1.6.4", "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", @@ -2488,11 +2089,6 @@ "nanoassert": "^2.0.0" } }, - "node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, "node_modules/bogon": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/bogon/-/bogon-1.1.0.tgz", @@ -2522,11 +2118,6 @@ "node": ">=8" } }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, "node_modules/browserslist": { "version": "4.22.2", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", @@ -2568,11 +2159,6 @@ "node-int64": "^0.4.0" } }, - "node_modules/buff-utils": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buff-utils/-/buff-utils-0.0.1.tgz", - "integrity": "sha512-+KkkCClN9oi1XNcn+3jpgXgPa7skybMwOs3hqs5E48zWYZVCwePsTWSF9gvgPmecFkShlAMuAGe7en7CIrdMCA==" - }, "node_modules/buffer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", @@ -2759,17 +2345,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/compact-encoding": { "version": "2.13.0", "resolved": "https://registry.npmjs.org/compact-encoding/-/compact-encoding-2.13.0.tgz", @@ -2813,22 +2388,12 @@ "node": ">= 0.6" } }, - "node_modules/convert-hex": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/convert-hex/-/convert-hex-0.1.0.tgz", - "integrity": "sha512-w20BOb1PiR/sEJdS6wNrUjF5CSfscZFUp7R9NSlXH8h2wynzXVEPFPJECAnkNylZ+cvf3p7TyRUHggDmrwXT9A==" - }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, - "node_modules/convert-string": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/convert-string/-/convert-string-0.1.0.tgz", - "integrity": "sha512-1KX9ESmtl8xpT2LN2tFnKSbV4NiarbVi8DVb39ZriijvtTklyrT+4dT1wsGMHKD3CJUjXgvJzstm9qL9ICojGA==" - }, "node_modules/cookie": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", @@ -3002,14 +2567,6 @@ "node": ">= 0.4" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -3072,20 +2629,6 @@ "integrity": "sha512-z/6oZ/Muqk4BaE7P69bXhUhpJbUM9ZJeka43ZwxsDshKtePns4mhBlh8bU5+yrnOnz3fhG82XLzGUXazOmsWnA==", "dev": true }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, "node_modules/emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", @@ -3649,38 +3192,6 @@ "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, - "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -3911,15 +3422,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, "node_modules/hasown": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", @@ -3931,16 +3433,6 @@ "node": ">= 0.4" } }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -5320,16 +4812,6 @@ "node": ">=6" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -5400,11 +4882,6 @@ "node": ">= 0.6" } }, - "node_modules/node-addon-api": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" - }, "node_modules/node-gyp-build": { "version": "4.8.0", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", @@ -5907,11 +5384,6 @@ "node": ">= 0.10" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -6236,20 +5708,6 @@ "resolved": "https://registry.npmjs.org/same-data/-/same-data-1.0.0.tgz", "integrity": "sha512-Eqn7N2yV+aKMlUHTRqUwYG1Iv0cJqjlvLKj/GoP5PozJn361QaOYX14+v87r7NqQUZC22noP/LfLrSQiPwAygw==" }, - "node_modules/secp256k1": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-5.0.0.tgz", - "integrity": "sha512-TKWX8xvoGHrxVdqbYeZM9w+izTF4b9z3NhSaDkdn81btvuh+ivbIMGT/zQvDtTFWhRlThpoz6LEYTr7n8A5GcA==", - "hasInstallScript": true, - "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^5.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/secure-json-parse": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", @@ -6294,15 +5752,6 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, - "node_modules/sha256": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/sha256/-/sha256-0.2.0.tgz", - "integrity": "sha512-kTWMJUaez5iiT9CcMv8jSq6kMhw3ST0uRdcIWl3D77s6AsLXNXRp3heeqqfu5+Dyfu4hwpQnMzhqHh8iNQxw0w==", - "dependencies": { - "convert-hex": "~0.1.0", - "convert-string": "~0.1.0" - } - }, "node_modules/sha256-universal": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/sha256-universal/-/sha256-universal-1.2.1.tgz", @@ -6718,14 +6167,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tap-reader": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/tap-reader/-/tap-reader-0.1.0.tgz", - "integrity": "sha512-d8l2tzfRRBhxISlmPMmsRBiy9cTyBPJv1NX5qFyllD9U5TZUVsFOYcPhorY90+UWevo8gdGEcgWWANtv8l9XKQ==", - "bin": { - "tap-reader": "src/index.js" - } - }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", diff --git a/package.json b/package.json index bbe498e..33939c3 100644 --- a/package.json +++ b/package.json @@ -9,9 +9,6 @@ "start": "node src/main.mjs", "postinstall": "patch-package" }, - "bin": { - "myapp": "./src/main.mjs" - }, "repository": { "type": "git", "url": "git+https://github.com/Trac-Systems/tap-reader.git"