diff --git a/dist/server.js b/dist/server.js index 9de1de8..66399b8 100644 --- a/dist/server.js +++ b/dist/server.js @@ -1,2 +1,2 @@ #!/usr/bin/env node -!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=13)}([function(e,t){e.exports=require("protobufjs/minimal")},function(e,t){e.exports=require("rxjs/operators")},function(e,t){e.exports=require("fs")},function(e,t){e.exports=require("commander")},function(e,t){e.exports=require("http")},function(e,t){e.exports=require("https")},function(e,t){e.exports=require("bunyan")},function(e,t){e.exports=require("url")},function(e,t){e.exports=require("ws")},function(e,t){e.exports=require("rxjs")},function(e,t){e.exports=require("crypto")},function(e,t){e.exports=require("../package.json")},function(e,t){e.exports=require("./package.json")},function(e,t,n){"use strict";n.r(t);var r=n(3),o=n.n(r),i=n(2),s=n.n(i),a=n(4),c=n.n(a),u=n(5),l=n.n(u),d=n(6);const p=n.n(d).a.createLogger({name:"sigver",level:"trace"});var h=n(7),f=n(8),b=n.n(f),m=n(9),g=n(1),y=n(10);const v=new Set;class I extends Error{constructor(e,t=""){super(),this.name=this.constructor.name,this.code=e,this.message=`${e}: ${t}`}}function k(){let e=y.randomBytes(4).readUInt32BE(0);return e>2147483647&&(e-=2147483647),0===e||v.has(e)?k():(v.add(e),e)}function M(e){v.delete(e)}const w=new Map;class x{constructor(e){this.key=e,this.members=new Set}get size(){return this.members.size}getFirstMember(){return this.members.values().next().value}hasMembersInCommon(e){if(0!==e.length)for(const t of this.members)if(e.includes(t.netfluxId))return!0;return!1}addMember(e,t){return e.becomeMember(this,t),this.members.add(e),!0}removeMember(e){e.noLongerAMember(),this.members.delete(e),0===this.size&&w.delete(this.key)}selectMemberFor(e){let t;for(const n of this.members){const r=n.netfluxId;if(void 0!==r&&!e.triedMembers.includes(r)){if(n.favored)return n;void 0===t&&(t=n)}}return void 0!==t?t:(e.triedMembers=[],this.selectMemberFor(e))}}var S=n(0);const O=S.Reader,j=S.Writer,T=S.util,P=S.roots.default||(S.roots.default={}),q=P.Message=(()=>{function e(e){if(e)for(let t=Object.keys(e),n=0;n>>3){case 1:r.heartbeat=e.bool();break;case 2:r.content=P.Content.decode(e,e.uint32());break;case 3:r.connect=P.GroupData.decode(e,e.uint32());break;case 4:r.connected=e.bool();break;default:e.skipType(7&t)}}return r},e})(),F=(P.Content=(()=>{function e(e){if(e)for(let t=Object.keys(e),n=0;n>>3){case 1:r.senderId=e.uint32();break;case 2:r.recipientId=e.uint32();break;case 3:r.lastData=e.bool();break;case 4:r.data=e.bytes();break;default:e.skipType(7&t)}}return r},e})(),P.GroupData=(()=>{function e(e){if(this.members=[],e)for(let t=Object.keys(e),n=0;n>>3){case 1:r.id=e.uint32();break;case 2:if(r.members&&r.members.length||(r.members=[]),2==(7&t)){let t=e.uint32()+e.pos;for(;e.pos{switch(t.type){case"connect":{const{id:r,members:o}=t.connect;!function(e,t,n,r){let o=e.group||w.get(r);if(void 0===o)return o=new x(r),o.addMember(e,t),w.set(r,o),!0;if(1===o.size){if(void 0!==e.group)return!0;if(o.hasMembersInCommon(n))return o.addMember(e,t),!0;const r=o.getFirstMember();if(e.triedMembers.includes(r.netfluxId))return o.addMember(e,t),o.removeMember(r),r.close(4744,"replaced by a peer as prevented him from joining the group"),!0}return o.hasMembersInCommon(n)?(o.addMember(e,t),!0):(o.removeMember(e),e.bindWith(o.selectMemberFor(e)),!1)}(this,r,o,e)?n(C):n(D);break}case"heartbeat":o=0;break;case void 0:this.close(4743,"Wrong message format or unknown message")}});let o=0;this.heartbeatInterval=setInterval(()=>{o++,o>=3&&(clearInterval(this.heartbeatInterval),this.close(4742,"Too many missed hearbeats")),n(F)},5e3)}send(e){this.sendFunc(q.encode(q.create(e)).finish())}close(e,t){this.closeFunc(e,t)}onMessage(e){try{this.next(q.decode(e))}catch(e){this.close(4743,e.message)}}becomeMember(e,t){this.group=e,this.triedMembers=[],this.netfluxId=t}noLongerAMember(){this.group=void 0,this.netfluxId=void 0}onClose(){clearInterval(this.heartbeatInterval),void 0!==this.group&&this.group.removeMember(this),this.complete(),M(this.signalingId)}bindWith(e){void 0!==this.subToMember&&this.subToMember.unsubscribe(),void 0!==this.subToJoining&&this.subToJoining.unsubscribe(),M(this.signalingId),this.signalingId=k(),this.triedMembers.push(e.netfluxId),this.subToMember=e.pipe(Object(g.filter)(({content:e})=>null!=e&&e.recipientId===this.signalingId),Object(g.pluck)("content")).subscribe(({lastData:e,data:t})=>{this.send({content:{recipientId:this.signalingId,senderId:0,data:t}}),e&&this.subToMember.unsubscribe()},()=>this.send({content:{recipientId:this.signalingId,senderId:0}}),()=>this.send({content:{recipientId:this.signalingId,senderId:0}})),this.subToJoining=this.pipe(Object(g.filter)(({content:e})=>null!=e),Object(g.pluck)("content")).subscribe(({lastData:t,data:n})=>{e.send({content:{recipientId:0,senderId:this.signalingId,data:n}}),t&&this.subToJoining.unsubscribe()},()=>e.send({content:{recipientId:0,senderId:this.signalingId}}),()=>e.send({content:{recipientId:0,senderId:this.signalingId}}))}}let $;try{$=n(11).version}catch(e){try{$=n(12).version}catch(e){}$=""}o.a.version($).description("Signaling server for WebRTC. Used by Netflux API (https://coast-team.github.io/netflux/)").option("-h, --host ","Select host address to bind to","0.0.0.0").option("-p, --port ","Select port to use","8000").option("-k, --key ","Private key for the certificate.").option("-c, --cert ","The server certificate.").option("-a, --ca ","The additional intermediate certificate or certificates that web browsers will need in order to validate the server certificate.").on("--help",()=>{console.log("\nExamples:\n\n $ sigver # Signaling server is listening on 0.0.0.0:8000\n $ sigver -h 192.168.0.1 -p 80 # Signaling server is listening on 192.168.0.1:80\n $ sigver --key ./private.key --cert ./primary.crt --ca ./intermediate.crt --port 443 # Signaling server is listening on 0.0.0.0:443")}).parse(process.argv);const{host:_,port:A,key:E,cert:G,ca:L}=o.a;let U;U=E&&G&&L?l.a.createServer({key:s.a.readFileSync(E),cert:s.a.readFileSync(G),ca:s.a.readFileSync(L)}):c.a.createServer(),function(e){const t=new b.a.Server({perMessageDeflate:!1,server:e});t.on("error",e=>p.fatal("WebSocketServer error",e)),t.on("connection",(e,t)=>{try{if(void 0===t.url)throw new Error("URL is undefined");const{key:n,favored:r}=function(e){const{pathname:t,query:n}=h.parse(e,!0);if(null==t)throw new I(4745,"URL pathname is undefined");return{key:t.substr(1),favored:"favored"in n}}(t.url);!function(e){if(""===e)throw new I(4741,`The key ${e} is an empty string`);if(e.length>512)throw new I(4741,"The key length exceeds the limit of 512 characters")}(n);const o=new W(n,r,t=>{try{e.send(t)}catch(t){p.error("Fail to send data",t.message),e.close(4745,t.message)}},(t,n)=>e.close(t,n));e.onmessage=({data:e})=>{e instanceof Uint8Array?o.onMessage(e):(p.error("Wrong data type"),o.close(4743,"Wrong data type"))},e.onerror=e=>o.error(e),e.onclose=()=>o.onClose()}catch(t){p.error("WebSocket connection error: ",t.message),e.close(t.code,t.message)}})}(U),U.on("clientError",(e,t)=>{p.fatal("Client error: ",e),t.end()}),U.listen(A,_,()=>{const e=U.address();null==e?p.fatal("Signaling server has no address"):"string"==typeof e?console.log(`Signaling server is listening on ${e}`):console.log(`Signaling server is listening on ${e.address}:${e.port}`)})}]); \ No newline at end of file +!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=13)}([function(e,t){e.exports=require("protobufjs/minimal")},function(e,t){e.exports=require("rxjs/operators")},function(e,t){e.exports=require("fs")},function(e,t){e.exports=require("commander")},function(e,t){e.exports=require("http")},function(e,t){e.exports=require("https")},function(e,t){e.exports=require("pino")},function(e,t){e.exports=require("url")},function(e,t){e.exports=require("ws")},function(e,t){e.exports=require("rxjs")},function(e,t){e.exports=require("crypto")},function(e,t){e.exports=require("../package.json")},function(e,t){e.exports=require("./package.json")},function(e,t,n){"use strict";n.r(t);var r=n(3),o=n.n(r),i=n(2),s=n.n(i),a=n(4),c=n.n(a),u=n(5),l=n.n(u),d=n(6);const p=n.n(d)()({name:"sigver",level:"info"});var h=n(7),f=n(8),b=n.n(f),m=n(9),g=n(1),y=n(10);const v=new Set;class I extends Error{constructor(e,t=""){super(),this.name=this.constructor.name,this.code=e,this.message=`${e}: ${t}`}}function k(){let e=y.randomBytes(4).readUInt32BE(0);return e>2147483647&&(e-=2147483647),0===e||v.has(e)?k():(v.add(e),e)}function M(e){v.delete(e)}const w=new Map;class x{constructor(e){this.key=e,this.members=new Set}get size(){return this.members.size}getFirstMember(){return this.members.values().next().value}hasMembersInCommon(e){if(0!==e.length)for(const t of this.members)if(e.includes(t.netfluxId))return!0;return!1}addMember(e,t){return e.becomeMember(this,t),this.members.add(e),!0}removeMember(e){e.noLongerAMember(),this.members.delete(e),0===this.size&&w.delete(this.key)}selectMemberFor(e){let t;for(const n of this.members){const r=n.netfluxId;if(void 0!==r&&!e.triedMembers.includes(r)){if(n.favored)return n;void 0===t&&(t=n)}}return void 0!==t?t:(e.triedMembers=[],this.selectMemberFor(e))}}var S=n(0);const O=S.Reader,j=S.Writer,T=S.util,P=S.roots.default||(S.roots.default={}),q=P.Message=(()=>{function e(e){if(e)for(let t=Object.keys(e),n=0;n>>3){case 1:r.heartbeat=e.bool();break;case 2:r.content=P.Content.decode(e,e.uint32());break;case 3:r.connect=P.GroupData.decode(e,e.uint32());break;case 4:r.connected=e.bool();break;default:e.skipType(7&t)}}return r},e})(),F=(P.Content=(()=>{function e(e){if(e)for(let t=Object.keys(e),n=0;n>>3){case 1:r.senderId=e.uint32();break;case 2:r.recipientId=e.uint32();break;case 3:r.lastData=e.bool();break;case 4:r.data=e.bytes();break;default:e.skipType(7&t)}}return r},e})(),P.GroupData=(()=>{function e(e){if(this.members=[],e)for(let t=Object.keys(e),n=0;n>>3){case 1:r.id=e.uint32();break;case 2:if(r.members&&r.members.length||(r.members=[]),2==(7&t)){let t=e.uint32()+e.pos;for(;e.pos{switch(t.type){case"connect":{const{id:r,members:o}=t.connect;!function(e,t,n,r){let o=e.group||w.get(r);if(void 0===o)return o=new x(r),o.addMember(e,t),w.set(r,o),!0;if(1===o.size){if(void 0!==e.group)return!0;if(o.hasMembersInCommon(n))return o.addMember(e,t),!0;const r=o.getFirstMember();if(e.triedMembers.includes(r.netfluxId))return o.addMember(e,t),o.removeMember(r),r.close(4744,"replaced by a peer as prevented him from joining the group"),!0}return o.hasMembersInCommon(n)?(o.addMember(e,t),!0):(o.removeMember(e),e.bindWith(o.selectMemberFor(e)),!1)}(this,r,o,e)?n(C):n(D);break}case"heartbeat":o=0;break;case void 0:this.close(4743,"Wrong message format or unknown message")}});let o=0;this.heartbeatInterval=setInterval(()=>{o++,o>=3&&(clearInterval(this.heartbeatInterval),this.close(4742,"Too many missed hearbeats")),n(F)},5e3)}send(e){this.sendFunc(q.encode(q.create(e)).finish())}close(e,t){this.closeFunc(e,t)}onMessage(e){try{this.next(q.decode(e))}catch(e){this.close(4743,e.message)}}becomeMember(e,t){this.group=e,this.triedMembers=[],this.netfluxId=t}noLongerAMember(){this.group=void 0,this.netfluxId=void 0}onClose(){clearInterval(this.heartbeatInterval),void 0!==this.group&&this.group.removeMember(this),this.complete(),M(this.signalingId)}bindWith(e){void 0!==this.subToMember&&this.subToMember.unsubscribe(),void 0!==this.subToJoining&&this.subToJoining.unsubscribe(),M(this.signalingId),this.signalingId=k(),this.triedMembers.push(e.netfluxId),this.subToMember=e.pipe(Object(g.filter)(({content:e})=>null!=e&&e.recipientId===this.signalingId),Object(g.pluck)("content")).subscribe(({lastData:e,data:t})=>{this.send({content:{recipientId:this.signalingId,senderId:0,data:t}}),e&&this.subToMember.unsubscribe()},()=>this.send({content:{recipientId:this.signalingId,senderId:0}}),()=>this.send({content:{recipientId:this.signalingId,senderId:0}})),this.subToJoining=this.pipe(Object(g.filter)(({content:e})=>null!=e),Object(g.pluck)("content")).subscribe(({lastData:t,data:n})=>{e.send({content:{recipientId:0,senderId:this.signalingId,data:n}}),t&&this.subToJoining.unsubscribe()},()=>e.send({content:{recipientId:0,senderId:this.signalingId}}),()=>e.send({content:{recipientId:0,senderId:this.signalingId}}))}}let $;try{$=n(11).version}catch(e){try{$=n(12).version}catch(e){}$=""}o.a.version($).description("Signaling server for WebRTC. Used by Netflux API (https://coast-team.github.io/netflux/)").option("-h, --host ","Select host address to bind to","0.0.0.0").option("-p, --port ","Select port to use","8000").option("-k, --key ","Private key for the certificate.").option("-c, --cert ","The server certificate.").option("-a, --ca ","The additional intermediate certificate or certificates that web browsers will need in order to validate the server certificate.").on("--help",()=>{console.log("\nExamples:\n\n $ sigver # Signaling server is listening on 0.0.0.0:8000\n $ sigver -h 192.168.0.1 -p 80 # Signaling server is listening on 192.168.0.1:80\n $ sigver --key ./private.key --cert ./primary.crt --ca ./intermediate.crt --port 443 # Signaling server is listening on 0.0.0.0:443")}).parse(process.argv);const{host:_,port:A,key:E,cert:G,ca:U}=o.a;let z;z=E&&G&&U?l.a.createServer({key:s.a.readFileSync(E),cert:s.a.readFileSync(G),ca:s.a.readFileSync(U)}):c.a.createServer(),function(e){const t=new b.a.Server({perMessageDeflate:!1,server:e});t.on("error",e=>p.fatal("WebSocketServer error",e)),t.on("connection",(e,t)=>{try{if(void 0===t.url)throw new Error("URL is undefined");const{key:n,favored:r}=function(e){const{pathname:t,query:n}=h.parse(e,!0);if(null==t)throw new I(4745,"URL pathname is undefined");return{key:t.substr(1),favored:"favored"in n}}(t.url);!function(e){if(""===e)throw new I(4741,`The key ${e} is an empty string`);if(e.length>512)throw new I(4741,"The key length exceeds the limit of 512 characters")}(n);const o=new W(n,r,t=>{try{e.send(t)}catch(t){p.error("Fail to send data",t.message),e.close(4745,t.message)}},(t,n)=>e.close(t,n));e.onmessage=({data:e})=>{e instanceof Uint8Array?o.onMessage(e):(p.error("Wrong data type"),o.close(4743,"Wrong data type"))},e.onerror=e=>o.error(e),e.onclose=()=>o.onClose()}catch(t){p.error("WebSocket connection error: ",t.message),e.close(t.code,t.message)}})}(z),z.on("clientError",(e,t)=>{p.fatal("Client error: ",e),t.end()}),z.listen(A,_,()=>{const e=z.address();null==e?p.fatal("Signaling server has no address"):"string"==typeof e?console.log(`Signaling server is listening on ${e}`):console.log(`Signaling server is listening on ${e.address}:${e.port}`)})}]); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index dd2fe85..5763e93 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1180,15 +1180,6 @@ "integrity": "sha512-KYyTT/T6ALPkIRd2Ge080X/BsXvy9O0hcWTtMWkPvwAwF99+vn6Dv4GzrFT/Nn1LePr+FFDbRXXlqmsy9lw2zA==", "dev": true }, - "@types/bunyan": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@types/bunyan/-/bunyan-1.8.6.tgz", - "integrity": "sha512-YiozPOOsS6bIuz31ilYqR5SlLif4TBWsousN2aCWLi5233nZSX19tFbcQUPdR7xJ8ypPyxkCGNxg0CIV5n9qxQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@types/color-name": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", @@ -1227,12 +1218,38 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, + "@types/pino": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@types/pino/-/pino-5.17.0.tgz", + "integrity": "sha512-L5DBGFBRY4DKc7ufjZqV4J61ji9FSn4zKvQ5CUBbWi0gE0uOSNwDBpj1t7VwRwdmrpG3QlFxAeXgpViGUOS5Bg==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/pino-std-serializers": "*", + "@types/sonic-boom": "*" + } + }, + "@types/pino-std-serializers": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/pino-std-serializers/-/pino-std-serializers-2.4.0.tgz", + "integrity": "sha512-eAdu+NW1IkCdmp85SnhyKha+OOREQMT9lXaoICQxa7bhSauRiLzu3WSNt9Mf2piuJvWeXF/G0hGWHr63xNpIRA==", + "dev": true + }, "@types/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", "dev": true }, + "@types/sonic-boom": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@types/sonic-boom/-/sonic-boom-0.7.0.tgz", + "integrity": "sha512-AfqR0fZMoUXUNwusgXKxcE9DPlHNDHQp6nKYUd4PSRpLobF5CCevSpyTEBcVZreqaWKCnGBr9KI1fHMTttoB7A==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/ws": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.2.3.tgz", @@ -1920,6 +1937,11 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, + "atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==" + }, "axios": { "version": "0.19.2", "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", @@ -1987,7 +2009,8 @@ "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true }, "base": { "version": "0.11.2", @@ -2234,6 +2257,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2392,17 +2416,6 @@ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, - "bunyan": { - "version": "1.8.12", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.12.tgz", - "integrity": "sha1-8VDw9nSKvdcq6uhPBEA74u8RN5c=", - "requires": { - "dtrace-provider": "~0.8", - "moment": "^2.10.6", - "mv": "~2", - "safe-json-stringify": "~1" - } - }, "bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", @@ -3009,7 +3022,8 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "concat-stream": { "version": "1.6.2", @@ -3620,15 +3634,6 @@ "is-obj": "^1.0.0" } }, - "dtrace-provider": { - "version": "0.8.7", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz", - "integrity": "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ=", - "optional": true, - "requires": { - "nan": "^2.10.0" - } - }, "duplexer2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", @@ -4252,6 +4257,16 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "fast-redact": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-2.0.0.tgz", + "integrity": "sha512-zxpkULI9W9MNTK2sJ3BpPQrTEXFNESd2X6O1tXMFpK/XM0G5c5Rll2EVYZH2TqI3xRGK/VaJ+eEOt7pnENJpeA==" + }, + "fast-safe-stringify": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" + }, "fastq": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.1.tgz", @@ -4477,6 +4492,11 @@ } } }, + "flatstr": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz", + "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==" + }, "flatted": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", @@ -5334,19 +5354,6 @@ "integrity": "sha1-WZrBkrcYdYJeE6RF86bgURjC90U=", "dev": true }, - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "optional": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, "glob-parent": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", @@ -5952,6 +5959,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -5960,7 +5968,8 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true }, "ini": { "version": "1.3.5", @@ -7547,6 +7556,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -7554,7 +7564,8 @@ "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true }, "minimist-options": { "version": "3.0.2", @@ -7621,6 +7632,7 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, "requires": { "minimist": "0.0.8" } @@ -7640,7 +7652,8 @@ "moment": { "version": "2.22.2", "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz", - "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=" + "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=", + "dev": true }, "moment-timezone": { "version": "0.5.28", @@ -7702,23 +7715,6 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, - "mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=", - "optional": true, - "requires": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - } - }, - "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", - "optional": true - }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -7738,12 +7734,6 @@ "to-regex": "^3.0.1" } }, - "ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", - "optional": true - }, "needle": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz", @@ -11651,6 +11641,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } @@ -12035,7 +12026,8 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "path-is-inside": { "version": "1.0.2", @@ -12098,6 +12090,24 @@ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, + "pino": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-6.0.0.tgz", + "integrity": "sha512-3RfX2L76o7v230FP1fZ3Fo/WX7Su+P1Ld+pvBm2j+MyUjtA/KqDYxMkzBqzcX3R00zbC7Gf/HqIzyuu3tgvi9Q==", + "requires": { + "fast-redact": "^2.0.0", + "fast-safe-stringify": "^2.0.7", + "flatstr": "^1.0.12", + "pino-std-serializers": "^2.4.2", + "quick-format-unescaped": "^4.0.1", + "sonic-boom": "^1.0.0" + } + }, + "pino-std-serializers": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-2.4.2.tgz", + "integrity": "sha512-WaL504dO8eGs+vrK+j4BuQQq6GLKeCCcHaMB2ItygzVURcL1CycwNEUHTD/lHFHs/NL5qAz2UKrjYWXKSf4aMQ==" + }, "pkg-conf": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", @@ -12646,6 +12656,11 @@ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", "dev": true }, + "quick-format-unescaped": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.1.tgz", + "integrity": "sha512-RyYpQ6Q5/drsJyOhrWHYMWTedvjTIat+FTwv0K4yoUxzvekw2aRHMQJLlnvt8UantkZg2++bEzD9EdxXqkWf4A==" + }, "quick-lru": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", @@ -13196,15 +13211,6 @@ "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==", "dev": true }, - "rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", - "optional": true, - "requires": { - "glob": "^6.0.1" - } - }, "ripemd160": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", @@ -13244,12 +13250,6 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "safe-json-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "optional": true - }, "safe-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", @@ -13880,6 +13880,15 @@ } } }, + "sonic-boom": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.0.1.tgz", + "integrity": "sha512-o9tx+bonVEXSaPtptyXQXpP8l6UV9Bi3im2geZskvWw2a/o/hrbWI7EBbbv+rOx6Hubnzun9GgH4WfbgEA3MFQ==", + "requires": { + "atomic-sleep": "^1.0.0", + "flatstr": "^1.0.12" + } + }, "source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -14879,15 +14888,6 @@ "tmp": "0.0.x" } }, - "utf-8-validate": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.2.tgz", - "integrity": "sha512-SwV++i2gTD5qh2XqaPzBnNX88N6HdyhQrNNRykvcS0QKvItV9u3vPEJr+X5Hhfb1JC0r0e1alL0iB09rY8+nmw==", - "optional": true, - "requires": { - "node-gyp-build": "~3.7.0" - } - }, "util": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", @@ -15525,7 +15525,8 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "write-file-atomic": { "version": "2.4.3", diff --git a/package.json b/package.json index 6f6980c..2910171 100644 --- a/package.json +++ b/package.json @@ -38,8 +38,8 @@ }, "dependencies": { "bufferutil": "^4.0.1", - "bunyan": "^1.8.12", "commander": "^5.0.0", + "pino": "^6.0.0", "protobufjs": "^6.8.9", "rxjs": "^6.5.4", "ws": "^7.2.3" @@ -47,9 +47,9 @@ "devDependencies": { "@commitlint/cli": "^8.3.5", "@commitlint/config-conventional": "^8.3.4", - "@types/bunyan": "^1.8.6", "@types/commander": "^2.12.2", "@types/node": "^13.9.5", + "@types/pino": "^5.17.0", "@types/ws": "^7.2.3", "husky": "^4.2.3", "jasmine": "^3.5.0", diff --git a/src/logger.ts b/src/logger.ts index 18b22a4..38b0803 100644 --- a/src/logger.ts +++ b/src/logger.ts @@ -1,4 +1,5 @@ -import bunyan from 'bunyan' +import pino from 'pino' -// Config LOGGER -export const log = bunyan.createLogger({ name: 'sigver', level: 'trace' }) +const level = process.env.NODE_ENV === 'development' ? 'debug' : 'info' + +export const log = pino({ name: 'sigver', level }) diff --git a/tsconfig.json b/tsconfig.json index 1b202c5..f371dd8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,7 +15,7 @@ "noImplicitThis": true, "noUnusedLocals": true, "noUnusedParameters": true, - "types": ["bunyan", "commander", "node", "ws"] + "types": ["commander", "node", "pino", "ws"] }, "include": ["src/**/*"] }