nostr-websocket-utils 0.3.13 → 0.3.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/nostr-websocket-utils.min.js +1 -1
- package/dist/browser/nostr-websocket-utils.min.js.map +1 -1
- package/dist/browser/report.html +2 -2
- package/dist/cjs/crypto/handlers.js +1 -1
- package/dist/cjs/crypto/handlers.js.map +1 -1
- package/dist/crypto/handlers.js +1 -1
- package/dist/crypto/handlers.js.map +1 -1
- package/package.json +14 -14
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.NostrWebSocketUtils=t():e.NostrWebSocketUtils=t()}(this,(()=>(()=>{"use strict";var e={793:e=>{function t(e){try{return JSON.stringify(e)}catch(e){return'"[Circular]"'}}e.exports=function(e,r,n){var i=n&&n.stringify||t;if("object"==typeof e&&null!==e){var s=r.length+1;if(1===s)return e;var o=new Array(s);o[0]=i(e);for(var l=1;l<s;l++)o[l]=i(r[l]);return o.join(" ")}if("string"!=typeof e)return e;var a=r.length;if(0===a)return e;for(var c="",u=0,h=-1,f=e&&e.length||0,g=0;g<f;){if(37===e.charCodeAt(g)&&g+1<f){switch(h=h>-1?h:0,e.charCodeAt(g+1)){case 100:case 102:if(u>=a)break;if(null==r[u])break;h<g&&(c+=e.slice(h,g)),c+=Number(r[u]),h=g+2,g++;break;case 105:if(u>=a)break;if(null==r[u])break;h<g&&(c+=e.slice(h,g)),c+=Math.floor(Number(r[u])),h=g+2,g++;break;case 79:case 111:case 106:if(u>=a)break;if(void 0===r[u])break;h<g&&(c+=e.slice(h,g));var d=typeof r[u];if("string"===d){c+="'"+r[u]+"'",h=g+2,g++;break}if("function"===d){c+=r[u].name||"<anonymous>",h=g+2,g++;break}c+=i(r[u]),h=g+2,g++;break;case 115:if(u>=a)break;h<g&&(c+=e.slice(h,g)),c+=String(r[u]),h=g+2,g++;break;case 37:h<g&&(c+=e.slice(h,g)),c+="%",h=g+2,g++,u--}++u}++g}if(-1===h)return e;h<f&&(c+=e.slice(h));return c}},591:e=>{e.exports=function(){throw new Error("ws does not work in the browser. Browser clients must use the native WebSocket object")}},874:(e,t,r)=>{const n=r(793);e.exports=h;const i=function(){function e(e){return void 0!==e&&e}try{return"undefined"!=typeof globalThis||Object.defineProperty(Object.prototype,"globalThis",{get:function(){return delete Object.prototype.globalThis,this.globalThis=this},configurable:!0}),globalThis}catch(t){return e(self)||e(window)||e(this)||{}}}().console||{},s={mapHttpRequest:v,mapHttpResponse:v,wrapRequestSerializer:b,wrapResponseSerializer:b,wrapErrorSerializer:b,req:v,res:v,err:p,errWithCause:p};function o(e,t){return"silent"===e?1/0:t.levels.values[e]}const l=Symbol("pino.logFuncs"),a=Symbol("pino.hierarchy"),c={error:"log",fatal:"error",warn:"error",info:"log",debug:"log",trace:"log"};function u(e,t){const r={logger:t,parent:e[a]};t[a]=r}function h(e){(e=e||{}).browser=e.browser||{};const t=e.browser.transmit;if(t&&"function"!=typeof t.send)throw Error("pino: transmit option must have a send function");const r=e.browser.write||i;e.browser.write&&(e.browser.asObject=!0);const n=e.serializers||{},s=function(e,t){if(Array.isArray(e))return e.filter((function(e){return"!stdSerializers.err"!==e}));return!0===e&&Object.keys(t)}(e.browser.serialize,n);let a=e.browser.serialize;Array.isArray(e.browser.serialize)&&e.browser.serialize.indexOf("!stdSerializers.err")>-1&&(a=!1);const p=Object.keys(e.customLevels||{}),v=["error","fatal","warn","info","debug","trace"].concat(p);"function"==typeof r&&v.forEach((function(e){r[e]=r})),(!1===e.enabled||e.browser.disabled)&&(e.level="silent");const b=e.level||"info",w=Object.create(r);w.log||(w.log=y),function(e,t,r){const n={};t.forEach((e=>{n[e]=r[e]?r[e]:i[e]||i[c[e]||"log"]||y})),e[l]=n}(w,v,r),u({},w),Object.defineProperty(w,"levelVal",{get:function(){return o(this.level,this)}}),Object.defineProperty(w,"level",{get:function(){return this._level},set:function(e){if("silent"!==e&&!this.levels.values[e])throw Error("unknown level "+e);this._level=e,f(this,E,w,"error"),f(this,E,w,"fatal"),f(this,E,w,"warn"),f(this,E,w,"info"),f(this,E,w,"debug"),f(this,E,w,"trace"),p.forEach((e=>{f(this,E,w,e)}))}});const E={transmit:t,serialize:s,asObject:e.browser.asObject,formatters:e.browser.formatters,levels:v,timestamp:m(e)};return w.levels=function(e){const t=e.customLevels||{},r=Object.assign({},h.levels.values,t),n=Object.assign({},h.levels.labels,function(e){const t={};return Object.keys(e).forEach((function(r){t[e[r]]=r})),t}(t));return{values:r,labels:n}}(e),w.level=b,w.setMaxListeners=w.getMaxListeners=w.emit=w.addListener=w.on=w.prependListener=w.once=w.prependOnceListener=w.removeListener=w.removeAllListeners=w.listeners=w.listenerCount=w.eventNames=w.write=w.flush=y,w.serializers=n,w._serialize=s,w._stdErrSerialize=a,w.child=function(r,i){if(!r)throw new Error("missing bindings for child Pino");i=i||{},s&&r.serializers&&(i.serializers=r.serializers);const o=i.serializers;if(s&&o){var l=Object.assign({},n,o),a=!0===e.browser.serialize?Object.keys(l):s;delete r.serializers,g([r],a,l,this._stdErrSerialize)}function c(e){this._childLevel=1+(0|e._childLevel),this.bindings=r,l&&(this.serializers=l,this._serialize=a),t&&(this._logEvent=d([].concat(e._logEvent.bindings,r)))}c.prototype=this;const h=new c(this);return u(this,h),h.level=this.level,h},t&&(w._logEvent=d()),w}function f(e,t,r,s){if(Object.defineProperty(e,s,{value:o(e.level,r)>o(s,r)?y:r[l][s],writable:!0,enumerable:!0,configurable:!0}),!t.transmit&&e[s]===y)return;e[s]=function(e,t,r,s){return a=e[l][s],function(){const l=t.timestamp(),c=new Array(arguments.length),u=Object.getPrototypeOf&&Object.getPrototypeOf(this)===i?i:this;for(var h=0;h<c.length;h++)c[h]=arguments[h];if(t.serialize&&!t.asObject&&g(c,this._serialize,this.serializers,this._stdErrSerialize),t.asObject||t.formatters?a.call(u,function(e,t,r,i,s={}){const{level:o=()=>e.levels.values[t],log:l=e=>e}=s;e._serialize&&g(r,e._serialize,e.serializers,e._stdErrSerialize);const a=r.slice();let c=a[0];const u={};i&&(u.time=i),u.level=o(t,e.levels.values[t]);let h=1+(0|e._childLevel);if(h<1&&(h=1),null!==c&&"object"==typeof c){for(;h--&&"object"==typeof a[0];)Object.assign(u,a.shift());c=a.length?n(a.shift(),a):void 0}else"string"==typeof c&&(c=n(a.shift(),a));return void 0!==c&&(u.msg=c),l(u)}(this,s,c,l,t.formatters)):a.apply(u,c),t.transmit){const n=t.transmit.level||e._level,i=r.levels.values[n],a=r.levels.values[s];if(a<i)return;!function(e,t,r){const n=t.send,i=t.ts,s=t.methodLevel,o=t.methodValue,l=t.val,a=e._logEvent.bindings;g(r,e._serialize||Object.keys(e.serializers),e.serializers,void 0===e._stdErrSerialize||e._stdErrSerialize),e._logEvent.ts=i,e._logEvent.messages=r.filter((function(e){return-1===a.indexOf(e)})),e._logEvent.level.label=s,e._logEvent.level.value=o,n(s,e._logEvent,l),e._logEvent=d(a)}(this,{ts:l,methodLevel:s,methodValue:a,transmitLevel:n,transmitValue:r.levels.values[t.transmit.level||e._level],send:t.transmit.send,val:o(e._level,r)},c)}};var a}(e,t,r,s);const c=function(e){const t=[];e.bindings&&t.push(e.bindings);let r=e[a];for(;r.parent;)r=r.parent,r.logger.bindings&&t.push(r.logger.bindings);return t.reverse()}(e);0!==c.length&&(e[s]=function(e,t){return function(){return t.apply(this,[...e,...arguments])}}(c,e[s]))}function g(e,t,r,n){for(const i in e)if(n&&e[i]instanceof Error)e[i]=h.stdSerializers.err(e[i]);else if("object"==typeof e[i]&&!Array.isArray(e[i]))for(const n in e[i])t&&t.indexOf(n)>-1&&n in r&&(e[i][n]=r[n](e[i][n]))}function d(e){return{ts:0,messages:[],bindings:e||[],level:{label:"",value:0}}}function p(e){const t={type:e.constructor.name,msg:e.message,stack:e.stack};for(const r in e)void 0===t[r]&&(t[r]=e[r]);return t}function m(e){return"function"==typeof e.timestamp?e.timestamp:!1===e.timestamp?w:E}function v(){return{}}function b(e){return e}function y(){}function w(){return!1}function E(){return Date.now()}h.levels={values:{fatal:60,error:50,warn:40,info:30,debug:20,trace:10},labels:{10:"trace",20:"debug",30:"info",40:"warn",50:"error",60:"fatal"}},h.stdSerializers=s,h.stdTimeFunctions=Object.assign({},{nullTime:w,epochTime:E,unixTime:function(){return Math.round(Date.now()/1e3)},isoTime:function(){return new Date(Date.now()).toISOString()}}),e.exports.default=h,e.exports.pino=h}},t={};function r(n){var i=t[n];if(void 0!==i)return i.exports;var s=t[n]={exports:{}};return e[n](s,s.exports,r),s.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var n={};r.d(n,{default:()=>d});var i,s,o=r(591),l=r.n(o);!function(e){e.HIGH="HIGH",e.NORMAL="NORMAL",e.LOW="LOW"}(i||(i={})),function(e){e.CONNECTING="CONNECTING",e.CONNECTED="CONNECTED",e.DISCONNECTED="DISCONNECTED",e.RECONNECTING="RECONNECTING",e.FAILED="FAILED"}(s||(s={}));var a=r(874),c=r.n(a);function u(e){return c()({name:e,level:process.env.LOG_LEVEL||"info",timestamp:c().stdTimeFunctions.isoTime})}var h=function(e,t,r,n){return new(r||(r=Promise))((function(i,s){function o(e){try{a(n.next(e))}catch(e){s(e)}}function l(e){try{a(n.throw(e))}catch(e){s(e)}}function a(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(o,l)}a((n=n.apply(e,t||[])).next())}))};class f{constructor(e,t={}){this.sender=e,this.options=t,this.queue=[],this.processing=!1,this.logger=u("MessageQueue")}enqueue(e){return h(this,void 0,void 0,(function*(){if(this.options.maxSize&&this.queue.length>=this.options.maxSize)throw new Error("Queue is full");const[t,...r]=e,n={type:t,data:1===r.length?r[0]:r,priority:i.NORMAL,queuedAt:Date.now(),retryCount:0};this.queue.push(n),this.queue.sort(((e,t)=>e.priority===t.priority?e.queuedAt-t.queuedAt:e.priority===i.HIGH?-1:1)),this.processing||this.processQueue().catch((e=>{this.logger.error({error:e},"Error processing queue")}))}))}processQueue(){return h(this,void 0,void 0,(function*(){if(!this.processing&&0!==this.queue.length){this.processing=!0;try{for(;this.queue.length>0;){const e=this.queue[0],t=[e.type,e.data];try{yield this.sender(t),this.queue.shift()}catch(r){if(this.logger.error({error:r,message:t},"Failed to send message"),this.options.maxRetries&&e.retryCount>=this.options.maxRetries){this.logger.warn({message:t},"Max retries reached, removing message from queue"),this.queue.shift();continue}e.retryCount++,yield new Promise((e=>setTimeout(e,this.options.retryDelay||1e3)))}}}finally{this.processing=!1}if(this.options.staleTimeout){const e=Date.now(),t=this.options.staleTimeout;this.queue.forEach(((r,n)=>{e-r.queuedAt>t&&(this.logger.warn({message:r},"Message is stale, removing from queue"),this.queue.splice(n,1))}))}}}))}getSize(){return this.queue.length}clear(){this.queue.length=0}}var g=function(e,t,r,n){return new(r||(r=Promise))((function(i,s){function o(e){try{a(n.next(e))}catch(e){s(e)}}function l(e){try{a(n.throw(e))}catch(e){s(e)}}function a(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(o,l)}a((n=n.apply(e,t||[])).next())}))};const d={NostrWSClient:class{constructor(e,t={}){this.relayUrls=e,this.options=t,this.ws=null,this.connectionState=s.DISCONNECTED,this.reconnectAttempts=0,this.reconnectTimeout=null,this.logger=t.logger||u("NostrWSClient"),this.queue=new f((e=>g(this,void 0,void 0,(function*(){if(!this.ws||this.connectionState!==s.CONNECTED)throw new Error("Not connected to relay");try{this.ws.send(JSON.stringify(e)),this.logger.debug({message:e},"Message sent")}catch(t){throw this.logger.error({error:t,message:e},"Failed to send message"),t}}))),{maxSize:t.queueSize,maxRetries:t.maxRetries,retryDelay:t.retryDelay})}connect(){return g(this,void 0,void 0,(function*(){if(this.connectionState!==s.CONNECTED)if(this.connectionState!==s.CONNECTING){this.connectionState=s.CONNECTING;try{const e=this.relayUrls[0];this.ws=new(l())(e),yield new Promise(((e,t)=>{const r=setTimeout((()=>{t(new Error("Connection timeout"))}),this.options.connectionTimeout||5e3);this.ws.on("open",(()=>{clearTimeout(r),this.connectionState=s.CONNECTED,this.reconnectAttempts=0,this.logger.info("Connected to relay"),e()})),this.ws.on("error",(e=>{clearTimeout(r),this.logger.error({error:e},"WebSocket error"),this.options.onError&&this.options.onError(e),t(e)})),this.ws.on("close",(()=>{this.handleDisconnect()})),this.ws.on("message",(e=>{this.handleMessage(e)}))}))}catch(e){throw this.logger.error({error:e},"Failed to connect"),this.handleDisconnect(),e}}else this.logger.debug("Connection already in progress");else this.logger.debug("Already connected")}))}disconnect(){return g(this,void 0,void 0,(function*(){this.connectionState!==s.DISCONNECTED?(this.connectionState=s.DISCONNECTED,this.reconnectTimeout&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=null),this.ws&&(this.ws.close(),this.ws=null),this.logger.info("Disconnected from relay")):this.logger.debug("Already disconnected")}))}sendMessage(e){return g(this,void 0,void 0,(function*(){if(this.connectionState!==s.CONNECTED)throw new Error("Not connected to relay");yield this.queue.enqueue(e)}))}handleMessage(e){try{const t=JSON.parse(e.toString());this.logger.debug({message:t},"Received message"),this.options.onMessage&&this.options.onMessage(e.toString())}catch(t){this.logger.error({error:t,data:e},"Failed to parse message"),this.options.onError&&this.options.onError(t)}}handleDisconnect(){if(this.connectionState=s.DISCONNECTED,this.ws=null,this.options.retryAttempts&&this.reconnectAttempts<this.options.retryAttempts){this.connectionState=s.RECONNECTING,this.reconnectAttempts++;const e=this.options.retryDelay||1e3;this.logger.info({attempt:this.reconnectAttempts,maxAttempts:this.options.retryAttempts},`Reconnecting in ${e}ms`),this.reconnectTimeout=setTimeout((()=>{this.connect().catch((e=>{this.logger.error({error:e},"Reconnection failed")}))}),e)}else this.logger.warn("Max reconnection attempts reached"),this.connectionState=s.FAILED}getConnectionState(){return this.connectionState}}};return n=n.default})()));
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.NostrWebSocketUtils=t():e.NostrWebSocketUtils=t()}(this,(()=>(()=>{"use strict";var e={793(e){function t(e){try{return JSON.stringify(e)}catch(e){return'"[Circular]"'}}e.exports=function(e,r,n){var i=n&&n.stringify||t;if("object"==typeof e&&null!==e){var s=r.length+1;if(1===s)return e;var o=new Array(s);o[0]=i(e);for(var l=1;l<s;l++)o[l]=i(r[l]);return o.join(" ")}if("string"!=typeof e)return e;var a=r.length;if(0===a)return e;for(var c="",u=0,h=-1,f=e&&e.length||0,g=0;g<f;){if(37===e.charCodeAt(g)&&g+1<f){switch(h=h>-1?h:0,e.charCodeAt(g+1)){case 100:case 102:if(u>=a)break;if(null==r[u])break;h<g&&(c+=e.slice(h,g)),c+=Number(r[u]),h=g+2,g++;break;case 105:if(u>=a)break;if(null==r[u])break;h<g&&(c+=e.slice(h,g)),c+=Math.floor(Number(r[u])),h=g+2,g++;break;case 79:case 111:case 106:if(u>=a)break;if(void 0===r[u])break;h<g&&(c+=e.slice(h,g));var d=typeof r[u];if("string"===d){c+="'"+r[u]+"'",h=g+2,g++;break}if("function"===d){c+=r[u].name||"<anonymous>",h=g+2,g++;break}c+=i(r[u]),h=g+2,g++;break;case 115:if(u>=a)break;h<g&&(c+=e.slice(h,g)),c+=String(r[u]),h=g+2,g++;break;case 37:h<g&&(c+=e.slice(h,g)),c+="%",h=g+2,g++,u--}++u}++g}if(-1===h)return e;h<f&&(c+=e.slice(h));return c}},591(e){e.exports=function(){throw new Error("ws does not work in the browser. Browser clients must use the native WebSocket object")}},874(e,t,r){const n=r(793);e.exports=h;const i=function(){function e(e){return void 0!==e&&e}try{return"undefined"!=typeof globalThis||Object.defineProperty(Object.prototype,"globalThis",{get:function(){return delete Object.prototype.globalThis,this.globalThis=this},configurable:!0}),globalThis}catch(t){return e(self)||e(window)||e(this)||{}}}().console||{},s={mapHttpRequest:v,mapHttpResponse:v,wrapRequestSerializer:b,wrapResponseSerializer:b,wrapErrorSerializer:b,req:v,res:v,err:p,errWithCause:p};function o(e,t){return"silent"===e?1/0:t.levels.values[e]}const l=Symbol("pino.logFuncs"),a=Symbol("pino.hierarchy"),c={error:"log",fatal:"error",warn:"error",info:"log",debug:"log",trace:"log"};function u(e,t){const r={logger:t,parent:e[a]};t[a]=r}function h(e){(e=e||{}).browser=e.browser||{};const t=e.browser.transmit;if(t&&"function"!=typeof t.send)throw Error("pino: transmit option must have a send function");const r=e.browser.write||i;e.browser.write&&(e.browser.asObject=!0);const n=e.serializers||{},s=function(e,t){if(Array.isArray(e))return e.filter((function(e){return"!stdSerializers.err"!==e}));return!0===e&&Object.keys(t)}(e.browser.serialize,n);let a=e.browser.serialize;Array.isArray(e.browser.serialize)&&e.browser.serialize.indexOf("!stdSerializers.err")>-1&&(a=!1);const p=Object.keys(e.customLevels||{}),v=["error","fatal","warn","info","debug","trace"].concat(p);"function"==typeof r&&v.forEach((function(e){r[e]=r})),(!1===e.enabled||e.browser.disabled)&&(e.level="silent");const b=e.level||"info",w=Object.create(r);w.log||(w.log=y),function(e,t,r){const n={};t.forEach((e=>{n[e]=r[e]?r[e]:i[e]||i[c[e]||"log"]||y})),e[l]=n}(w,v,r),u({},w),Object.defineProperty(w,"levelVal",{get:function(){return o(this.level,this)}}),Object.defineProperty(w,"level",{get:function(){return this._level},set:function(e){if("silent"!==e&&!this.levels.values[e])throw Error("unknown level "+e);this._level=e,f(this,E,w,"error"),f(this,E,w,"fatal"),f(this,E,w,"warn"),f(this,E,w,"info"),f(this,E,w,"debug"),f(this,E,w,"trace"),p.forEach((e=>{f(this,E,w,e)}))}});const E={transmit:t,serialize:s,asObject:e.browser.asObject,formatters:e.browser.formatters,levels:v,timestamp:m(e)};return w.levels=function(e){const t=e.customLevels||{},r=Object.assign({},h.levels.values,t),n=Object.assign({},h.levels.labels,function(e){const t={};return Object.keys(e).forEach((function(r){t[e[r]]=r})),t}(t));return{values:r,labels:n}}(e),w.level=b,w.setMaxListeners=w.getMaxListeners=w.emit=w.addListener=w.on=w.prependListener=w.once=w.prependOnceListener=w.removeListener=w.removeAllListeners=w.listeners=w.listenerCount=w.eventNames=w.write=w.flush=y,w.serializers=n,w._serialize=s,w._stdErrSerialize=a,w.child=function(r,i){if(!r)throw new Error("missing bindings for child Pino");i=i||{},s&&r.serializers&&(i.serializers=r.serializers);const o=i.serializers;if(s&&o){var l=Object.assign({},n,o),a=!0===e.browser.serialize?Object.keys(l):s;delete r.serializers,g([r],a,l,this._stdErrSerialize)}function c(e){this._childLevel=1+(0|e._childLevel),this.bindings=r,l&&(this.serializers=l,this._serialize=a),t&&(this._logEvent=d([].concat(e._logEvent.bindings,r)))}c.prototype=this;const h=new c(this);return u(this,h),h.level=this.level,h},t&&(w._logEvent=d()),w}function f(e,t,r,s){if(Object.defineProperty(e,s,{value:o(e.level,r)>o(s,r)?y:r[l][s],writable:!0,enumerable:!0,configurable:!0}),!t.transmit&&e[s]===y)return;e[s]=function(e,t,r,s){return a=e[l][s],function(){const l=t.timestamp(),c=new Array(arguments.length),u=Object.getPrototypeOf&&Object.getPrototypeOf(this)===i?i:this;for(var h=0;h<c.length;h++)c[h]=arguments[h];if(t.serialize&&!t.asObject&&g(c,this._serialize,this.serializers,this._stdErrSerialize),t.asObject||t.formatters?a.call(u,function(e,t,r,i,s={}){const{level:o=()=>e.levels.values[t],log:l=e=>e}=s;e._serialize&&g(r,e._serialize,e.serializers,e._stdErrSerialize);const a=r.slice();let c=a[0];const u={};i&&(u.time=i),u.level=o(t,e.levels.values[t]);let h=1+(0|e._childLevel);if(h<1&&(h=1),null!==c&&"object"==typeof c){for(;h--&&"object"==typeof a[0];)Object.assign(u,a.shift());c=a.length?n(a.shift(),a):void 0}else"string"==typeof c&&(c=n(a.shift(),a));return void 0!==c&&(u.msg=c),l(u)}(this,s,c,l,t.formatters)):a.apply(u,c),t.transmit){const n=t.transmit.level||e._level,i=r.levels.values[n],a=r.levels.values[s];if(a<i)return;!function(e,t,r){const n=t.send,i=t.ts,s=t.methodLevel,o=t.methodValue,l=t.val,a=e._logEvent.bindings;g(r,e._serialize||Object.keys(e.serializers),e.serializers,void 0===e._stdErrSerialize||e._stdErrSerialize),e._logEvent.ts=i,e._logEvent.messages=r.filter((function(e){return-1===a.indexOf(e)})),e._logEvent.level.label=s,e._logEvent.level.value=o,n(s,e._logEvent,l),e._logEvent=d(a)}(this,{ts:l,methodLevel:s,methodValue:a,transmitLevel:n,transmitValue:r.levels.values[t.transmit.level||e._level],send:t.transmit.send,val:o(e._level,r)},c)}};var a}(e,t,r,s);const c=function(e){const t=[];e.bindings&&t.push(e.bindings);let r=e[a];for(;r.parent;)r=r.parent,r.logger.bindings&&t.push(r.logger.bindings);return t.reverse()}(e);0!==c.length&&(e[s]=function(e,t){return function(){return t.apply(this,[...e,...arguments])}}(c,e[s]))}function g(e,t,r,n){for(const i in e)if(n&&e[i]instanceof Error)e[i]=h.stdSerializers.err(e[i]);else if("object"==typeof e[i]&&!Array.isArray(e[i]))for(const n in e[i])t&&t.indexOf(n)>-1&&n in r&&(e[i][n]=r[n](e[i][n]))}function d(e){return{ts:0,messages:[],bindings:e||[],level:{label:"",value:0}}}function p(e){const t={type:e.constructor.name,msg:e.message,stack:e.stack};for(const r in e)void 0===t[r]&&(t[r]=e[r]);return t}function m(e){return"function"==typeof e.timestamp?e.timestamp:!1===e.timestamp?w:E}function v(){return{}}function b(e){return e}function y(){}function w(){return!1}function E(){return Date.now()}h.levels={values:{fatal:60,error:50,warn:40,info:30,debug:20,trace:10},labels:{10:"trace",20:"debug",30:"info",40:"warn",50:"error",60:"fatal"}},h.stdSerializers=s,h.stdTimeFunctions=Object.assign({},{nullTime:w,epochTime:E,unixTime:function(){return Math.round(Date.now()/1e3)},isoTime:function(){return new Date(Date.now()).toISOString()}}),e.exports.default=h,e.exports.pino=h}},t={};function r(n){var i=t[n];if(void 0!==i)return i.exports;var s=t[n]={exports:{}};return e[n](s,s.exports,r),s.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var n={};r.d(n,{default:()=>d});var i,s,o=r(591),l=r.n(o);!function(e){e.HIGH="HIGH",e.NORMAL="NORMAL",e.LOW="LOW"}(i||(i={})),function(e){e.CONNECTING="CONNECTING",e.CONNECTED="CONNECTED",e.DISCONNECTED="DISCONNECTED",e.RECONNECTING="RECONNECTING",e.FAILED="FAILED"}(s||(s={}));var a=r(874),c=r.n(a);function u(e){return c()({name:e,level:process.env.LOG_LEVEL||"info",timestamp:c().stdTimeFunctions.isoTime})}var h=function(e,t,r,n){return new(r||(r=Promise))((function(i,s){function o(e){try{a(n.next(e))}catch(e){s(e)}}function l(e){try{a(n.throw(e))}catch(e){s(e)}}function a(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(o,l)}a((n=n.apply(e,t||[])).next())}))};class f{constructor(e,t={}){this.sender=e,this.options=t,this.queue=[],this.processing=!1,this.logger=u("MessageQueue")}enqueue(e){return h(this,void 0,void 0,(function*(){if(this.options.maxSize&&this.queue.length>=this.options.maxSize)throw new Error("Queue is full");const[t,...r]=e,n={type:t,data:1===r.length?r[0]:r,priority:i.NORMAL,queuedAt:Date.now(),retryCount:0};this.queue.push(n),this.queue.sort(((e,t)=>e.priority===t.priority?e.queuedAt-t.queuedAt:e.priority===i.HIGH?-1:1)),this.processing||this.processQueue().catch((e=>{this.logger.error({error:e},"Error processing queue")}))}))}processQueue(){return h(this,void 0,void 0,(function*(){if(!this.processing&&0!==this.queue.length){this.processing=!0;try{for(;this.queue.length>0;){const e=this.queue[0],t=[e.type,e.data];try{yield this.sender(t),this.queue.shift()}catch(r){if(this.logger.error({error:r,message:t},"Failed to send message"),this.options.maxRetries&&e.retryCount>=this.options.maxRetries){this.logger.warn({message:t},"Max retries reached, removing message from queue"),this.queue.shift();continue}e.retryCount++,yield new Promise((e=>setTimeout(e,this.options.retryDelay||1e3)))}}}finally{this.processing=!1}if(this.options.staleTimeout){const e=Date.now(),t=this.options.staleTimeout;this.queue.forEach(((r,n)=>{e-r.queuedAt>t&&(this.logger.warn({message:r},"Message is stale, removing from queue"),this.queue.splice(n,1))}))}}}))}getSize(){return this.queue.length}clear(){this.queue.length=0}}var g=function(e,t,r,n){return new(r||(r=Promise))((function(i,s){function o(e){try{a(n.next(e))}catch(e){s(e)}}function l(e){try{a(n.throw(e))}catch(e){s(e)}}function a(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(o,l)}a((n=n.apply(e,t||[])).next())}))};const d={NostrWSClient:class{constructor(e,t={}){this.relayUrls=e,this.options=t,this.ws=null,this.connectionState=s.DISCONNECTED,this.reconnectAttempts=0,this.reconnectTimeout=null,this.logger=t.logger||u("NostrWSClient"),this.queue=new f((e=>g(this,void 0,void 0,(function*(){if(!this.ws||this.connectionState!==s.CONNECTED)throw new Error("Not connected to relay");try{this.ws.send(JSON.stringify(e)),this.logger.debug({message:e},"Message sent")}catch(t){throw this.logger.error({error:t,message:e},"Failed to send message"),t}}))),{maxSize:t.queueSize,maxRetries:t.maxRetries,retryDelay:t.retryDelay})}connect(){return g(this,void 0,void 0,(function*(){if(this.connectionState!==s.CONNECTED)if(this.connectionState!==s.CONNECTING){this.connectionState=s.CONNECTING;try{const e=this.relayUrls[0];this.ws=new(l())(e),yield new Promise(((e,t)=>{const r=setTimeout((()=>{t(new Error("Connection timeout"))}),this.options.connectionTimeout||5e3);this.ws.on("open",(()=>{clearTimeout(r),this.connectionState=s.CONNECTED,this.reconnectAttempts=0,this.logger.info("Connected to relay"),e()})),this.ws.on("error",(e=>{clearTimeout(r),this.logger.error({error:e},"WebSocket error"),this.options.onError&&this.options.onError(e),t(e)})),this.ws.on("close",(()=>{this.handleDisconnect()})),this.ws.on("message",(e=>{this.handleMessage(e)}))}))}catch(e){throw this.logger.error({error:e},"Failed to connect"),this.handleDisconnect(),e}}else this.logger.debug("Connection already in progress");else this.logger.debug("Already connected")}))}disconnect(){return g(this,void 0,void 0,(function*(){this.connectionState!==s.DISCONNECTED?(this.connectionState=s.DISCONNECTED,this.reconnectTimeout&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=null),this.ws&&(this.ws.close(),this.ws=null),this.logger.info("Disconnected from relay")):this.logger.debug("Already disconnected")}))}sendMessage(e){return g(this,void 0,void 0,(function*(){if(this.connectionState!==s.CONNECTED)throw new Error("Not connected to relay");yield this.queue.enqueue(e)}))}handleMessage(e){try{const t=JSON.parse(e.toString());this.logger.debug({message:t},"Received message"),this.options.onMessage&&this.options.onMessage(e.toString())}catch(t){this.logger.error({error:t,data:e},"Failed to parse message"),this.options.onError&&this.options.onError(t)}}handleDisconnect(){if(this.connectionState=s.DISCONNECTED,this.ws=null,this.options.retryAttempts&&this.reconnectAttempts<this.options.retryAttempts){this.connectionState=s.RECONNECTING,this.reconnectAttempts++;const e=this.options.retryDelay||1e3;this.logger.info({attempt:this.reconnectAttempts,maxAttempts:this.options.retryAttempts},`Reconnecting in ${e}ms`),this.reconnectTimeout=setTimeout((()=>{this.connect().catch((e=>{this.logger.error({error:e},"Reconnection failed")}))}),e)}else this.logger.warn("Max reconnection attempts reached"),this.connectionState=s.FAILED}getConnectionState(){return this.connectionState}}};return n=n.default})()));
|
|
2
2
|
//# sourceMappingURL=nostr-websocket-utils.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nostr-websocket-utils.min.js","mappings":"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","sources":["webpack://NostrWebSocketUtils/webpack/universalModuleDefinition","webpack://NostrWebSocketUtils/./node_modules/quick-format-unescaped/index.js","webpack://NostrWebSocketUtils/./node_modules/ws/browser.js","webpack://NostrWebSocketUtils/./node_modules/pino/browser.js","webpack://NostrWebSocketUtils/webpack/bootstrap","webpack://NostrWebSocketUtils/webpack/runtime/compat get default export","webpack://NostrWebSocketUtils/webpack/runtime/define property getters","webpack://NostrWebSocketUtils/webpack/runtime/hasOwnProperty shorthand","webpack://NostrWebSocketUtils/./src/types/priority.ts","webpack://NostrWebSocketUtils/./src/types/index.ts","webpack://NostrWebSocketUtils/./src/utils/logger.ts","webpack://NostrWebSocketUtils/./src/core/queue.ts","webpack://NostrWebSocketUtils/./src/browser.ts","webpack://NostrWebSocketUtils/./src/core/client.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"NostrWebSocketUtils\"] = factory();\n\telse\n\t\troot[\"NostrWebSocketUtils\"] = factory();\n})(this, () => {\nreturn ","'use strict'\nfunction tryStringify (o) {\n try { return JSON.stringify(o) } catch(e) { return '\"[Circular]\"' }\n}\n\nmodule.exports = format\n\nfunction format(f, args, opts) {\n var ss = (opts && opts.stringify) || tryStringify\n var offset = 1\n if (typeof f === 'object' && f !== null) {\n var len = args.length + offset\n if (len === 1) return f\n var objects = new Array(len)\n objects[0] = ss(f)\n for (var index = 1; index < len; index++) {\n objects[index] = ss(args[index])\n }\n return objects.join(' ')\n }\n if (typeof f !== 'string') {\n return f\n }\n var argLen = args.length\n if (argLen === 0) return f\n var str = ''\n var a = 1 - offset\n var lastPos = -1\n var flen = (f && f.length) || 0\n for (var i = 0; i < flen;) {\n if (f.charCodeAt(i) === 37 && i + 1 < flen) {\n lastPos = lastPos > -1 ? lastPos : 0\n switch (f.charCodeAt(i + 1)) {\n case 100: // 'd'\n case 102: // 'f'\n if (a >= argLen)\n break\n if (args[a] == null) break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += Number(args[a])\n lastPos = i + 2\n i++\n break\n case 105: // 'i'\n if (a >= argLen)\n break\n if (args[a] == null) break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += Math.floor(Number(args[a]))\n lastPos = i + 2\n i++\n break\n case 79: // 'O'\n case 111: // 'o'\n case 106: // 'j'\n if (a >= argLen)\n break\n if (args[a] === undefined) break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n var type = typeof args[a]\n if (type === 'string') {\n str += '\\'' + args[a] + '\\''\n lastPos = i + 2\n i++\n break\n }\n if (type === 'function') {\n str += args[a].name || '<anonymous>'\n lastPos = i + 2\n i++\n break\n }\n str += ss(args[a])\n lastPos = i + 2\n i++\n break\n case 115: // 's'\n if (a >= argLen)\n break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += String(args[a])\n lastPos = i + 2\n i++\n break\n case 37: // '%'\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += '%'\n lastPos = i + 2\n i++\n a--\n break\n }\n ++a\n }\n ++i\n }\n if (lastPos === -1)\n return f\n else if (lastPos < flen) {\n str += f.slice(lastPos)\n }\n\n return str\n}\n","'use strict';\n\nmodule.exports = function () {\n throw new Error(\n 'ws does not work in the browser. Browser clients must use the native ' +\n 'WebSocket object'\n );\n};\n","'use strict'\n\nconst format = require('quick-format-unescaped')\n\nmodule.exports = pino\n\nconst _console = pfGlobalThisOrFallback().console || {}\nconst stdSerializers = {\n mapHttpRequest: mock,\n mapHttpResponse: mock,\n wrapRequestSerializer: passthrough,\n wrapResponseSerializer: passthrough,\n wrapErrorSerializer: passthrough,\n req: mock,\n res: mock,\n err: asErrValue,\n errWithCause: asErrValue\n}\nfunction levelToValue (level, logger) {\n return level === 'silent'\n ? Infinity\n : logger.levels.values[level]\n}\nconst baseLogFunctionSymbol = Symbol('pino.logFuncs')\nconst hierarchySymbol = Symbol('pino.hierarchy')\n\nconst logFallbackMap = {\n error: 'log',\n fatal: 'error',\n warn: 'error',\n info: 'log',\n debug: 'log',\n trace: 'log'\n}\n\nfunction appendChildLogger (parentLogger, childLogger) {\n const newEntry = {\n logger: childLogger,\n parent: parentLogger[hierarchySymbol]\n }\n childLogger[hierarchySymbol] = newEntry\n}\n\nfunction setupBaseLogFunctions (logger, levels, proto) {\n const logFunctions = {}\n levels.forEach(level => {\n logFunctions[level] = proto[level] ? proto[level] : (_console[level] || _console[logFallbackMap[level] || 'log'] || noop)\n })\n logger[baseLogFunctionSymbol] = logFunctions\n}\n\nfunction shouldSerialize (serialize, serializers) {\n if (Array.isArray(serialize)) {\n const hasToFilter = serialize.filter(function (k) {\n return k !== '!stdSerializers.err'\n })\n return hasToFilter\n } else if (serialize === true) {\n return Object.keys(serializers)\n }\n\n return false\n}\n\nfunction pino (opts) {\n opts = opts || {}\n opts.browser = opts.browser || {}\n\n const transmit = opts.browser.transmit\n if (transmit && typeof transmit.send !== 'function') { throw Error('pino: transmit option must have a send function') }\n\n const proto = opts.browser.write || _console\n if (opts.browser.write) opts.browser.asObject = true\n const serializers = opts.serializers || {}\n const serialize = shouldSerialize(opts.browser.serialize, serializers)\n let stdErrSerialize = opts.browser.serialize\n\n if (\n Array.isArray(opts.browser.serialize) &&\n opts.browser.serialize.indexOf('!stdSerializers.err') > -1\n ) stdErrSerialize = false\n\n const customLevels = Object.keys(opts.customLevels || {})\n const levels = ['error', 'fatal', 'warn', 'info', 'debug', 'trace'].concat(customLevels)\n\n if (typeof proto === 'function') {\n levels.forEach(function (level) {\n proto[level] = proto\n })\n }\n if (opts.enabled === false || opts.browser.disabled) opts.level = 'silent'\n const level = opts.level || 'info'\n const logger = Object.create(proto)\n if (!logger.log) logger.log = noop\n\n setupBaseLogFunctions(logger, levels, proto)\n // setup root hierarchy entry\n appendChildLogger({}, logger)\n\n Object.defineProperty(logger, 'levelVal', {\n get: getLevelVal\n })\n Object.defineProperty(logger, 'level', {\n get: getLevel,\n set: setLevel\n })\n\n const setOpts = {\n transmit,\n serialize,\n asObject: opts.browser.asObject,\n formatters: opts.browser.formatters,\n levels,\n timestamp: getTimeFunction(opts)\n }\n logger.levels = getLevels(opts)\n logger.level = level\n\n logger.setMaxListeners = logger.getMaxListeners =\n logger.emit = logger.addListener = logger.on =\n logger.prependListener = logger.once =\n logger.prependOnceListener = logger.removeListener =\n logger.removeAllListeners = logger.listeners =\n logger.listenerCount = logger.eventNames =\n logger.write = logger.flush = noop\n logger.serializers = serializers\n logger._serialize = serialize\n logger._stdErrSerialize = stdErrSerialize\n logger.child = child\n\n if (transmit) logger._logEvent = createLogEventShape()\n\n function getLevelVal () {\n return levelToValue(this.level, this)\n }\n\n function getLevel () {\n return this._level\n }\n function setLevel (level) {\n if (level !== 'silent' && !this.levels.values[level]) {\n throw Error('unknown level ' + level)\n }\n this._level = level\n\n set(this, setOpts, logger, 'error') // <-- must stay first\n set(this, setOpts, logger, 'fatal')\n set(this, setOpts, logger, 'warn')\n set(this, setOpts, logger, 'info')\n set(this, setOpts, logger, 'debug')\n set(this, setOpts, logger, 'trace')\n\n customLevels.forEach((level) => {\n set(this, setOpts, logger, level)\n })\n }\n\n function child (bindings, childOptions) {\n if (!bindings) {\n throw new Error('missing bindings for child Pino')\n }\n childOptions = childOptions || {}\n if (serialize && bindings.serializers) {\n childOptions.serializers = bindings.serializers\n }\n const childOptionsSerializers = childOptions.serializers\n if (serialize && childOptionsSerializers) {\n var childSerializers = Object.assign({}, serializers, childOptionsSerializers)\n var childSerialize = opts.browser.serialize === true\n ? Object.keys(childSerializers)\n : serialize\n delete bindings.serializers\n applySerializers([bindings], childSerialize, childSerializers, this._stdErrSerialize)\n }\n function Child (parent) {\n this._childLevel = (parent._childLevel | 0) + 1\n\n // make sure bindings are available in the `set` function\n this.bindings = bindings\n\n if (childSerializers) {\n this.serializers = childSerializers\n this._serialize = childSerialize\n }\n if (transmit) {\n this._logEvent = createLogEventShape(\n [].concat(parent._logEvent.bindings, bindings)\n )\n }\n }\n Child.prototype = this\n const newLogger = new Child(this)\n\n // must happen before the level is assigned\n appendChildLogger(this, newLogger)\n // required to actually initialize the logger functions for any given child\n newLogger.level = this.level\n\n return newLogger\n }\n return logger\n}\n\nfunction getLevels (opts) {\n const customLevels = opts.customLevels || {}\n\n const values = Object.assign({}, pino.levels.values, customLevels)\n const labels = Object.assign({}, pino.levels.labels, invertObject(customLevels))\n\n return {\n values,\n labels\n }\n}\n\nfunction invertObject (obj) {\n const inverted = {}\n Object.keys(obj).forEach(function (key) {\n inverted[obj[key]] = key\n })\n return inverted\n}\n\npino.levels = {\n values: {\n fatal: 60,\n error: 50,\n warn: 40,\n info: 30,\n debug: 20,\n trace: 10\n },\n labels: {\n 10: 'trace',\n 20: 'debug',\n 30: 'info',\n 40: 'warn',\n 50: 'error',\n 60: 'fatal'\n }\n}\n\npino.stdSerializers = stdSerializers\npino.stdTimeFunctions = Object.assign({}, { nullTime, epochTime, unixTime, isoTime })\n\nfunction getBindingChain (logger) {\n const bindings = []\n if (logger.bindings) {\n bindings.push(logger.bindings)\n }\n\n // traverse up the tree to get all bindings\n let hierarchy = logger[hierarchySymbol]\n while (hierarchy.parent) {\n hierarchy = hierarchy.parent\n if (hierarchy.logger.bindings) {\n bindings.push(hierarchy.logger.bindings)\n }\n }\n\n return bindings.reverse()\n}\n\nfunction set (self, opts, rootLogger, level) {\n // override the current log functions with either `noop` or the base log function\n Object.defineProperty(self, level, {\n value: (levelToValue(self.level, rootLogger) > levelToValue(level, rootLogger)\n ? noop\n : rootLogger[baseLogFunctionSymbol][level]),\n writable: true,\n enumerable: true,\n configurable: true\n })\n\n if (!opts.transmit && self[level] === noop) {\n return\n }\n\n // make sure the log format is correct\n self[level] = createWrap(self, opts, rootLogger, level)\n\n // prepend bindings if it is not the root logger\n const bindings = getBindingChain(self)\n if (bindings.length === 0) {\n // early exit in case for rootLogger\n return\n }\n self[level] = prependBindingsInArguments(bindings, self[level])\n}\n\nfunction prependBindingsInArguments (bindings, logFunc) {\n return function () {\n return logFunc.apply(this, [...bindings, ...arguments])\n }\n}\n\nfunction createWrap (self, opts, rootLogger, level) {\n return (function (write) {\n return function LOG () {\n const ts = opts.timestamp()\n const args = new Array(arguments.length)\n const proto = (Object.getPrototypeOf && Object.getPrototypeOf(this) === _console) ? _console : this\n for (var i = 0; i < args.length; i++) args[i] = arguments[i]\n\n if (opts.serialize && !opts.asObject) {\n applySerializers(args, this._serialize, this.serializers, this._stdErrSerialize)\n }\n if (opts.asObject || opts.formatters) {\n write.call(proto, asObject(this, level, args, ts, opts.formatters))\n } else write.apply(proto, args)\n\n if (opts.transmit) {\n const transmitLevel = opts.transmit.level || self._level\n const transmitValue = rootLogger.levels.values[transmitLevel]\n const methodValue = rootLogger.levels.values[level]\n if (methodValue < transmitValue) return\n transmit(this, {\n ts,\n methodLevel: level,\n methodValue,\n transmitLevel,\n transmitValue: rootLogger.levels.values[opts.transmit.level || self._level],\n send: opts.transmit.send,\n val: levelToValue(self._level, rootLogger)\n }, args)\n }\n }\n })(self[baseLogFunctionSymbol][level])\n}\n\nfunction asObject (logger, level, args, ts, formatters = {}) {\n const {\n level: levelFormatter = () => logger.levels.values[level],\n log: logObjectFormatter = (obj) => obj\n } = formatters\n if (logger._serialize) applySerializers(args, logger._serialize, logger.serializers, logger._stdErrSerialize)\n const argsCloned = args.slice()\n let msg = argsCloned[0]\n const logObject = {}\n if (ts) {\n logObject.time = ts\n }\n logObject.level = levelFormatter(level, logger.levels.values[level])\n\n let lvl = (logger._childLevel | 0) + 1\n if (lvl < 1) lvl = 1\n // deliberate, catching objects, arrays\n if (msg !== null && typeof msg === 'object') {\n while (lvl-- && typeof argsCloned[0] === 'object') {\n Object.assign(logObject, argsCloned.shift())\n }\n msg = argsCloned.length ? format(argsCloned.shift(), argsCloned) : undefined\n } else if (typeof msg === 'string') msg = format(argsCloned.shift(), argsCloned)\n if (msg !== undefined) logObject.msg = msg\n\n const formattedLogObject = logObjectFormatter(logObject)\n return formattedLogObject\n}\n\nfunction applySerializers (args, serialize, serializers, stdErrSerialize) {\n for (const i in args) {\n if (stdErrSerialize && args[i] instanceof Error) {\n args[i] = pino.stdSerializers.err(args[i])\n } else if (typeof args[i] === 'object' && !Array.isArray(args[i])) {\n for (const k in args[i]) {\n if (serialize && serialize.indexOf(k) > -1 && k in serializers) {\n args[i][k] = serializers[k](args[i][k])\n }\n }\n }\n }\n}\n\nfunction transmit (logger, opts, args) {\n const send = opts.send\n const ts = opts.ts\n const methodLevel = opts.methodLevel\n const methodValue = opts.methodValue\n const val = opts.val\n const bindings = logger._logEvent.bindings\n\n applySerializers(\n args,\n logger._serialize || Object.keys(logger.serializers),\n logger.serializers,\n logger._stdErrSerialize === undefined ? true : logger._stdErrSerialize\n )\n logger._logEvent.ts = ts\n logger._logEvent.messages = args.filter(function (arg) {\n // bindings can only be objects, so reference equality check via indexOf is fine\n return bindings.indexOf(arg) === -1\n })\n\n logger._logEvent.level.label = methodLevel\n logger._logEvent.level.value = methodValue\n\n send(methodLevel, logger._logEvent, val)\n\n logger._logEvent = createLogEventShape(bindings)\n}\n\nfunction createLogEventShape (bindings) {\n return {\n ts: 0,\n messages: [],\n bindings: bindings || [],\n level: { label: '', value: 0 }\n }\n}\n\nfunction asErrValue (err) {\n const obj = {\n type: err.constructor.name,\n msg: err.message,\n stack: err.stack\n }\n for (const key in err) {\n if (obj[key] === undefined) {\n obj[key] = err[key]\n }\n }\n return obj\n}\n\nfunction getTimeFunction (opts) {\n if (typeof opts.timestamp === 'function') {\n return opts.timestamp\n }\n if (opts.timestamp === false) {\n return nullTime\n }\n return epochTime\n}\n\nfunction mock () { return {} }\nfunction passthrough (a) { return a }\nfunction noop () {}\n\nfunction nullTime () { return false }\nfunction epochTime () { return Date.now() }\nfunction unixTime () { return Math.round(Date.now() / 1000.0) }\nfunction isoTime () { return new Date(Date.now()).toISOString() } // using Date.now() for testability\n\n/* eslint-disable */\n/* istanbul ignore next */\nfunction pfGlobalThisOrFallback () {\n function defd (o) { return typeof o !== 'undefined' && o }\n try {\n if (typeof globalThis !== 'undefined') return globalThis\n Object.defineProperty(Object.prototype, 'globalThis', {\n get: function () {\n delete Object.prototype.globalThis\n return (this.globalThis = this)\n },\n configurable: true\n })\n return globalThis\n } catch (e) {\n return defd(self) || defd(window) || defd(this) || {}\n }\n}\n/* eslint-enable */\n\nmodule.exports.default = pino\nmodule.exports.pino = pino\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","/**\n * @file Message priority definitions\n * @module types/priority\n */\n\n/**\n * Message priority levels for queue management\n */\nexport enum MessagePriority {\n HIGH = 'HIGH',\n NORMAL = 'NORMAL',\n LOW = 'LOW'\n}\n","/**\n * @file Core type definitions\n * @module types\n */\n\nimport type { WebSocket } from 'ws';\nimport type { Logger } from './logger.js';\nimport type { NostrWSMessage, NostrEvent as MessageNostrEvent } from './messages.js';\n\n// Re-export specific types to avoid ambiguity\nexport type { NostrWSMessage } from './messages.js';\nexport type { QueueItem } from './messages.js';\nexport * from './filters.js';\nexport * from './relays.js';\nexport * from './logger.js';\nexport * from './priority.js';\n\n// Export the NostrEvent from messages.ts as our canonical version\nexport type NostrEvent = MessageNostrEvent;\n\n/**\n * Extended WebSocket interface with client ID\n */\nexport interface ExtendedWebSocket extends WebSocket {\n clientId?: string;\n isAlive?: boolean;\n subscriptions?: Set<string>;\n lastPing?: number;\n reconnectAttempts?: number;\n messageQueue?: NostrWSMessage[];\n}\n\n/**\n * WebSocket connection states\n */\nexport enum ConnectionState {\n CONNECTING = 'CONNECTING',\n CONNECTED = 'CONNECTED',\n DISCONNECTED = 'DISCONNECTED',\n RECONNECTING = 'RECONNECTING',\n FAILED = 'FAILED'\n}\n\n/**\n * Retry configuration options\n */\nexport interface RetryConfig {\n maxAttempts: number;\n initialDelay: number;\n maxDelay: number;\n backoffFactor: number;\n}\n\n/**\n * Queue configuration options\n */\nexport interface QueueConfig {\n maxSize: number;\n maxRetries: number;\n retryDelay: number;\n staleTimeout: number;\n}\n\n/**\n * Heartbeat configuration options\n */\nexport interface HeartbeatConfig {\n interval: number;\n timeout: number;\n maxMissed: number;\n}\n\n/**\n * WebSocket client options\n */\nexport interface NostrWSOptions {\n WebSocketImpl?: typeof WebSocket;\n connectionTimeout?: number;\n retryAttempts?: number;\n retryDelay?: number;\n onMessage?: (message: string) => void;\n onError?: (error: Error) => void;\n retry?: Partial<RetryConfig>;\n queue?: Partial<QueueConfig>;\n heartbeat?: Partial<HeartbeatConfig>;\n autoReconnect?: boolean;\n bufferMessages?: boolean;\n cleanStaleMessages?: boolean;\n logger?: Logger;\n}\n\n/**\n * Represents a subscription to a Nostr relay\n */\nexport interface NostrWSSubscription {\n /**\n * Channel identifier for the subscription\n */\n channel: string;\n \n /**\n * Filter criteria for the subscription\n */\n filter?: Record<string, unknown>;\n}\n\n/**\n * Events emitted by the NostrWSClient\n */\nexport interface NostrWSClientEvents {\n /**\n * Emitted when the client connects to the relay\n */\n connect: () => void;\n \n /**\n * Emitted when the client disconnects from the relay\n */\n disconnect: () => void;\n \n /**\n * Emitted when the client reconnects to the relay\n */\n reconnect: () => void;\n \n /**\n * Emitted when a message is received from the relay\n * @param message - The received message\n */\n message: (message: NostrWSMessage) => Promise<void>;\n \n /**\n * Emitted when an error occurs\n * @param error - The error that occurred\n */\n error: (error: Error) => void;\n close: () => void;\n stateChange?: (state: ConnectionState) => void;\n heartbeat?: () => void;\n}\n\n/**\n * Events emitted by the NostrWSServer\n */\nexport interface NostrWSServerEvents {\n /**\n * Emitted when a client connects\n * @param client - The connected client\n */\n connection: (client: ExtendedWebSocket) => void;\n\n /**\n * Emitted when a message is received from a client\n * @param message - The received message\n * @param client - The client that sent the message\n */\n message: (message: NostrWSMessage, client: ExtendedWebSocket) => void;\n\n /**\n * Emitted when an error occurs\n * @param error - The error that occurred\n */\n error: (error: Error) => void;\n}\n","/**\n * @file Logger utility\n * @module utils/logger\n */\n\nimport pino, { Logger } from 'pino';\n\n/**\n * Create a new logger instance\n * @param name Name of the logger\n * @returns Logger instance\n */\nexport function createLogger(name: string): Logger {\n return pino({\n name,\n level: process.env.LOG_LEVEL || 'info',\n timestamp: pino.stdTimeFunctions.isoTime\n });\n}\n\n/**\n * Get a logger instance for a specific component\n * @param component Component name for the logger\n * @returns Logger instance\n */\nexport function getLogger(component: string): Logger {\n return createLogger(component);\n}\n\n/**\n * Get a child logger instance\n * @param parent Parent logger instance\n * @param bindings Additional bindings for the child logger\n * @returns Child logger instance\n */\nexport function getChildLogger(parent: Logger, bindings: object): Logger {\n return parent.child(bindings);\n}\n\nexport type { Logger };\n","/**\n * @file Message queue implementation\n * @module core/queue\n */\n\nimport { NostrWSMessage, MessagePriority, QueueItem } from '../types/index.js';\nimport { createLogger } from '../utils/logger.js';\nimport { Logger } from 'pino';\n\n/**\n * Message queue implementation for handling WebSocket messages\n */\nexport class MessageQueue {\n private readonly queue: QueueItem[] = [];\n private readonly logger: Logger;\n private processing = false;\n\n constructor(\n private readonly sender: (message: NostrWSMessage) => Promise<void>,\n private readonly options: {\n maxSize?: number;\n maxRetries?: number;\n retryDelay?: number;\n staleTimeout?: number;\n } = {}\n ) {\n this.logger = createLogger('MessageQueue');\n }\n\n /**\n * Add a message to the queue\n */\n async enqueue(message: NostrWSMessage): Promise<void> {\n if (\n this.options.maxSize &&\n this.queue.length >= this.options.maxSize\n ) {\n throw new Error('Queue is full');\n }\n\n const [type, ...data] = message;\n const queueItem: QueueItem = {\n type,\n data: data.length === 1 ? data[0] : data,\n priority: MessagePriority.NORMAL,\n queuedAt: Date.now(),\n retryCount: 0\n };\n\n this.queue.push(queueItem);\n this.queue.sort((a, b) => \n (a.priority === b.priority) ? \n (a.queuedAt - b.queuedAt) : \n (a.priority === MessagePriority.HIGH ? -1 : 1)\n );\n\n if (!this.processing) {\n this.processQueue().catch(error => {\n this.logger.error({ error }, 'Error processing queue');\n });\n }\n }\n\n /**\n * Process messages in the queue\n */\n private async processQueue(): Promise<void> {\n if (this.processing || this.queue.length === 0) {\n return;\n }\n\n this.processing = true;\n\n try {\n while (this.queue.length > 0) {\n const item = this.queue[0];\n const message: NostrWSMessage = [item.type, item.data];\n\n try {\n await this.sender(message);\n this.queue.shift();\n } catch (error) {\n this.logger.error({ error, message }, 'Failed to send message');\n\n if (\n this.options.maxRetries &&\n item.retryCount >= this.options.maxRetries\n ) {\n this.logger.warn(\n { message },\n 'Max retries reached, removing message from queue'\n );\n this.queue.shift();\n continue;\n }\n\n item.retryCount++;\n await new Promise(resolve =>\n setTimeout(resolve, this.options.retryDelay || 1000)\n );\n }\n }\n } finally {\n this.processing = false;\n }\n\n // Clean up stale messages\n if (this.options.staleTimeout) {\n const now = Date.now();\n const staleTimeout = this.options.staleTimeout;\n this.queue.forEach((message, index) => {\n if (now - message.queuedAt > staleTimeout) {\n this.logger.warn(\n { message },\n 'Message is stale, removing from queue'\n );\n this.queue.splice(index, 1);\n }\n });\n }\n }\n\n /**\n * Get the current size of the queue\n */\n getSize(): number {\n return this.queue.length;\n }\n\n /**\n * Clear all messages from the queue\n */\n clear(): void {\n this.queue.length = 0;\n }\n}\n","import { NostrWSClient } from './core/client';\nimport type { NostrWSMessage, ConnectionState } from './types/index';\nimport type { NostrWSClientOptions } from './types/websocket';\n\n// Re-export the client\nexport { NostrWSClient };\n\n// Re-export types\nexport type {\n NostrWSMessage,\n NostrWSClientOptions,\n ConnectionState\n};\n\n// Export a default object for UMD bundle\nexport default {\n NostrWSClient\n};\n","import WebSocket from 'ws';\nimport { \n NostrWSMessage, \n ConnectionState\n} from '../types/index.js';\nimport { NostrWSClientOptions } from '../types/websocket.js';\nimport { MessageQueue } from './queue.js';\nimport { createLogger } from '../utils/logger.js';\nimport { Logger } from 'pino';\n\n/**\n * NostrWSClient handles WebSocket connections to Nostr relays\n */\nexport class NostrWSClient {\n private ws: WebSocket | null = null;\n private readonly queue: MessageQueue;\n private readonly logger: Logger;\n private connectionState: ConnectionState = ConnectionState.DISCONNECTED;\n private reconnectAttempts = 0;\n private reconnectTimeout: NodeJS.Timeout | null = null;\n\n constructor(\n private readonly relayUrls: string[],\n private readonly options: NostrWSClientOptions = {}\n ) {\n this.logger = options.logger || createLogger('NostrWSClient');\n this.queue = new MessageQueue(\n async (message: NostrWSMessage) => {\n if (!this.ws || this.connectionState !== ConnectionState.CONNECTED) {\n throw new Error('Not connected to relay');\n }\n try {\n this.ws.send(JSON.stringify(message));\n this.logger.debug({ message }, 'Message sent');\n } catch (error) {\n this.logger.error({ error, message }, 'Failed to send message');\n throw error;\n }\n },\n {\n maxSize: options.queueSize,\n maxRetries: options.maxRetries,\n retryDelay: options.retryDelay\n }\n );\n }\n\n /**\n * Connect to the relay\n */\n async connect(): Promise<void> {\n if (this.connectionState === ConnectionState.CONNECTED) {\n this.logger.debug('Already connected');\n return;\n }\n\n if (this.connectionState === ConnectionState.CONNECTING) {\n this.logger.debug('Connection already in progress');\n return;\n }\n\n this.connectionState = ConnectionState.CONNECTING;\n\n try {\n const url = this.relayUrls[0]; // For now just use first relay\n this.ws = new WebSocket(url);\n\n await new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(() => {\n reject(new Error('Connection timeout'));\n }, this.options.connectionTimeout || 5000);\n\n this.ws!.on('open', () => {\n clearTimeout(timeout);\n this.connectionState = ConnectionState.CONNECTED;\n this.reconnectAttempts = 0;\n this.logger.info('Connected to relay');\n resolve();\n });\n\n this.ws!.on('error', (error) => {\n clearTimeout(timeout);\n this.logger.error({ error }, 'WebSocket error');\n if (this.options.onError) {\n this.options.onError(error);\n }\n reject(error);\n });\n\n this.ws!.on('close', () => {\n this.handleDisconnect();\n });\n\n this.ws!.on('message', (data: WebSocket.Data) => {\n this.handleMessage(data);\n });\n });\n } catch (error) {\n this.logger.error({ error }, 'Failed to connect');\n this.handleDisconnect();\n throw error;\n }\n }\n\n /**\n * Disconnect from the relay\n */\n async disconnect(): Promise<void> {\n if (this.connectionState === ConnectionState.DISCONNECTED) {\n this.logger.debug('Already disconnected');\n return;\n }\n\n this.connectionState = ConnectionState.DISCONNECTED;\n \n if (this.reconnectTimeout) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = null;\n }\n\n if (this.ws) {\n this.ws.close();\n this.ws = null;\n }\n\n this.logger.info('Disconnected from relay');\n }\n\n /**\n * Send a message to the relay\n */\n async sendMessage(message: NostrWSMessage): Promise<void> {\n if (this.connectionState !== ConnectionState.CONNECTED) {\n throw new Error('Not connected to relay');\n }\n\n await this.queue.enqueue(message);\n }\n\n private handleMessage(data: WebSocket.Data): void {\n try {\n const message = JSON.parse(data.toString()) as NostrWSMessage;\n this.logger.debug({ message }, 'Received message');\n \n if (this.options.onMessage) {\n this.options.onMessage(data.toString());\n }\n } catch (error) {\n this.logger.error({ error, data }, 'Failed to parse message');\n if (this.options.onError) {\n this.options.onError(error as Error);\n }\n }\n }\n\n private handleDisconnect(): void {\n this.connectionState = ConnectionState.DISCONNECTED;\n this.ws = null;\n\n if (\n this.options.retryAttempts &&\n this.reconnectAttempts < this.options.retryAttempts\n ) {\n this.connectionState = ConnectionState.RECONNECTING;\n this.reconnectAttempts++;\n\n const delay = this.options.retryDelay || 1000;\n this.logger.info(\n { attempt: this.reconnectAttempts, maxAttempts: this.options.retryAttempts },\n `Reconnecting in ${delay}ms`\n );\n\n this.reconnectTimeout = setTimeout(() => {\n this.connect().catch(error => {\n this.logger.error({ error }, 'Reconnection failed');\n });\n }, delay);\n } else {\n this.logger.warn('Max reconnection attempts reached');\n this.connectionState = ConnectionState.FAILED;\n }\n }\n\n /**\n * Get the current connection state\n */\n getConnectionState(): ConnectionState {\n return this.connectionState;\n }\n}\n"],"names":["root","factory","exports","module","define","amd","this","tryStringify","o","JSON","stringify","e","f","args","opts","ss","len","length","objects","Array","index","join","argLen","str","a","lastPos","flen","i","charCodeAt","slice","Number","Math","floor","undefined","type","name","String","Error","format","pino","_console","defd","globalThis","Object","defineProperty","prototype","get","configurable","self","window","pfGlobalThisOrFallback","console","stdSerializers","mapHttpRequest","mock","mapHttpResponse","wrapRequestSerializer","passthrough","wrapResponseSerializer","wrapErrorSerializer","req","res","err","asErrValue","errWithCause","levelToValue","level","logger","Infinity","levels","values","baseLogFunctionSymbol","Symbol","hierarchySymbol","logFallbackMap","error","fatal","warn","info","debug","trace","appendChildLogger","parentLogger","childLogger","newEntry","parent","browser","transmit","send","proto","write","asObject","serializers","serialize","isArray","filter","k","keys","shouldSerialize","stdErrSerialize","indexOf","customLevels","concat","forEach","enabled","disabled","create","log","noop","logFunctions","setupBaseLogFunctions","_level","set","setOpts","formatters","timestamp","getTimeFunction","assign","labels","obj","inverted","key","invertObject","getLevels","setMaxListeners","getMaxListeners","emit","addListener","on","prependListener","once","prependOnceListener","removeListener","removeAllListeners","listeners","listenerCount","eventNames","flush","_serialize","_stdErrSerialize","child","bindings","childOptions","childOptionsSerializers","childSerializers","childSerialize","applySerializers","Child","_childLevel","_logEvent","createLogEventShape","newLogger","rootLogger","value","writable","enumerable","ts","arguments","getPrototypeOf","call","levelFormatter","logObjectFormatter","argsCloned","msg","logObject","time","lvl","shift","apply","transmitLevel","transmitValue","methodValue","methodLevel","val","messages","arg","label","createWrap","push","hierarchy","reverse","getBindingChain","logFunc","prependBindingsInArguments","constructor","message","stack","nullTime","epochTime","Date","now","stdTimeFunctions","unixTime","round","isoTime","toISOString","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","n","getter","__esModule","d","definition","prop","hasOwnProperty","MessagePriority","ConnectionState","createLogger","process","env","LOG_LEVEL","MessageQueue","sender","options","queue","processing","enqueue","maxSize","data","queueItem","priority","NORMAL","queuedAt","retryCount","sort","b","HIGH","processQueue","catch","item","maxRetries","Promise","resolve","setTimeout","retryDelay","staleTimeout","splice","getSize","clear","NostrWSClient","relayUrls","ws","connectionState","DISCONNECTED","reconnectAttempts","reconnectTimeout","CONNECTED","queueSize","connect","CONNECTING","url","reject","timeout","connectionTimeout","clearTimeout","onError","handleDisconnect","handleMessage","disconnect","close","sendMessage","parse","toString","onMessage","retryAttempts","RECONNECTING","delay","attempt","maxAttempts","FAILED","getConnectionState"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"nostr-websocket-utils.min.js","mappings":"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","sources":["webpack://NostrWebSocketUtils/webpack/universalModuleDefinition","webpack://NostrWebSocketUtils/./node_modules/quick-format-unescaped/index.js","webpack://NostrWebSocketUtils/./node_modules/ws/browser.js","webpack://NostrWebSocketUtils/./node_modules/pino/browser.js","webpack://NostrWebSocketUtils/webpack/bootstrap","webpack://NostrWebSocketUtils/webpack/runtime/compat get default export","webpack://NostrWebSocketUtils/webpack/runtime/define property getters","webpack://NostrWebSocketUtils/webpack/runtime/hasOwnProperty shorthand","webpack://NostrWebSocketUtils/./src/types/priority.ts","webpack://NostrWebSocketUtils/./src/types/index.ts","webpack://NostrWebSocketUtils/./src/utils/logger.ts","webpack://NostrWebSocketUtils/./src/core/queue.ts","webpack://NostrWebSocketUtils/./src/browser.ts","webpack://NostrWebSocketUtils/./src/core/client.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"NostrWebSocketUtils\"] = factory();\n\telse\n\t\troot[\"NostrWebSocketUtils\"] = factory();\n})(this, () => {\nreturn ","'use strict'\nfunction tryStringify (o) {\n try { return JSON.stringify(o) } catch(e) { return '\"[Circular]\"' }\n}\n\nmodule.exports = format\n\nfunction format(f, args, opts) {\n var ss = (opts && opts.stringify) || tryStringify\n var offset = 1\n if (typeof f === 'object' && f !== null) {\n var len = args.length + offset\n if (len === 1) return f\n var objects = new Array(len)\n objects[0] = ss(f)\n for (var index = 1; index < len; index++) {\n objects[index] = ss(args[index])\n }\n return objects.join(' ')\n }\n if (typeof f !== 'string') {\n return f\n }\n var argLen = args.length\n if (argLen === 0) return f\n var str = ''\n var a = 1 - offset\n var lastPos = -1\n var flen = (f && f.length) || 0\n for (var i = 0; i < flen;) {\n if (f.charCodeAt(i) === 37 && i + 1 < flen) {\n lastPos = lastPos > -1 ? lastPos : 0\n switch (f.charCodeAt(i + 1)) {\n case 100: // 'd'\n case 102: // 'f'\n if (a >= argLen)\n break\n if (args[a] == null) break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += Number(args[a])\n lastPos = i + 2\n i++\n break\n case 105: // 'i'\n if (a >= argLen)\n break\n if (args[a] == null) break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += Math.floor(Number(args[a]))\n lastPos = i + 2\n i++\n break\n case 79: // 'O'\n case 111: // 'o'\n case 106: // 'j'\n if (a >= argLen)\n break\n if (args[a] === undefined) break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n var type = typeof args[a]\n if (type === 'string') {\n str += '\\'' + args[a] + '\\''\n lastPos = i + 2\n i++\n break\n }\n if (type === 'function') {\n str += args[a].name || '<anonymous>'\n lastPos = i + 2\n i++\n break\n }\n str += ss(args[a])\n lastPos = i + 2\n i++\n break\n case 115: // 's'\n if (a >= argLen)\n break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += String(args[a])\n lastPos = i + 2\n i++\n break\n case 37: // '%'\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += '%'\n lastPos = i + 2\n i++\n a--\n break\n }\n ++a\n }\n ++i\n }\n if (lastPos === -1)\n return f\n else if (lastPos < flen) {\n str += f.slice(lastPos)\n }\n\n return str\n}\n","'use strict';\n\nmodule.exports = function () {\n throw new Error(\n 'ws does not work in the browser. Browser clients must use the native ' +\n 'WebSocket object'\n );\n};\n","'use strict'\n\nconst format = require('quick-format-unescaped')\n\nmodule.exports = pino\n\nconst _console = pfGlobalThisOrFallback().console || {}\nconst stdSerializers = {\n mapHttpRequest: mock,\n mapHttpResponse: mock,\n wrapRequestSerializer: passthrough,\n wrapResponseSerializer: passthrough,\n wrapErrorSerializer: passthrough,\n req: mock,\n res: mock,\n err: asErrValue,\n errWithCause: asErrValue\n}\nfunction levelToValue (level, logger) {\n return level === 'silent'\n ? Infinity\n : logger.levels.values[level]\n}\nconst baseLogFunctionSymbol = Symbol('pino.logFuncs')\nconst hierarchySymbol = Symbol('pino.hierarchy')\n\nconst logFallbackMap = {\n error: 'log',\n fatal: 'error',\n warn: 'error',\n info: 'log',\n debug: 'log',\n trace: 'log'\n}\n\nfunction appendChildLogger (parentLogger, childLogger) {\n const newEntry = {\n logger: childLogger,\n parent: parentLogger[hierarchySymbol]\n }\n childLogger[hierarchySymbol] = newEntry\n}\n\nfunction setupBaseLogFunctions (logger, levels, proto) {\n const logFunctions = {}\n levels.forEach(level => {\n logFunctions[level] = proto[level] ? proto[level] : (_console[level] || _console[logFallbackMap[level] || 'log'] || noop)\n })\n logger[baseLogFunctionSymbol] = logFunctions\n}\n\nfunction shouldSerialize (serialize, serializers) {\n if (Array.isArray(serialize)) {\n const hasToFilter = serialize.filter(function (k) {\n return k !== '!stdSerializers.err'\n })\n return hasToFilter\n } else if (serialize === true) {\n return Object.keys(serializers)\n }\n\n return false\n}\n\nfunction pino (opts) {\n opts = opts || {}\n opts.browser = opts.browser || {}\n\n const transmit = opts.browser.transmit\n if (transmit && typeof transmit.send !== 'function') { throw Error('pino: transmit option must have a send function') }\n\n const proto = opts.browser.write || _console\n if (opts.browser.write) opts.browser.asObject = true\n const serializers = opts.serializers || {}\n const serialize = shouldSerialize(opts.browser.serialize, serializers)\n let stdErrSerialize = opts.browser.serialize\n\n if (\n Array.isArray(opts.browser.serialize) &&\n opts.browser.serialize.indexOf('!stdSerializers.err') > -1\n ) stdErrSerialize = false\n\n const customLevels = Object.keys(opts.customLevels || {})\n const levels = ['error', 'fatal', 'warn', 'info', 'debug', 'trace'].concat(customLevels)\n\n if (typeof proto === 'function') {\n levels.forEach(function (level) {\n proto[level] = proto\n })\n }\n if (opts.enabled === false || opts.browser.disabled) opts.level = 'silent'\n const level = opts.level || 'info'\n const logger = Object.create(proto)\n if (!logger.log) logger.log = noop\n\n setupBaseLogFunctions(logger, levels, proto)\n // setup root hierarchy entry\n appendChildLogger({}, logger)\n\n Object.defineProperty(logger, 'levelVal', {\n get: getLevelVal\n })\n Object.defineProperty(logger, 'level', {\n get: getLevel,\n set: setLevel\n })\n\n const setOpts = {\n transmit,\n serialize,\n asObject: opts.browser.asObject,\n formatters: opts.browser.formatters,\n levels,\n timestamp: getTimeFunction(opts)\n }\n logger.levels = getLevels(opts)\n logger.level = level\n\n logger.setMaxListeners = logger.getMaxListeners =\n logger.emit = logger.addListener = logger.on =\n logger.prependListener = logger.once =\n logger.prependOnceListener = logger.removeListener =\n logger.removeAllListeners = logger.listeners =\n logger.listenerCount = logger.eventNames =\n logger.write = logger.flush = noop\n logger.serializers = serializers\n logger._serialize = serialize\n logger._stdErrSerialize = stdErrSerialize\n logger.child = child\n\n if (transmit) logger._logEvent = createLogEventShape()\n\n function getLevelVal () {\n return levelToValue(this.level, this)\n }\n\n function getLevel () {\n return this._level\n }\n function setLevel (level) {\n if (level !== 'silent' && !this.levels.values[level]) {\n throw Error('unknown level ' + level)\n }\n this._level = level\n\n set(this, setOpts, logger, 'error') // <-- must stay first\n set(this, setOpts, logger, 'fatal')\n set(this, setOpts, logger, 'warn')\n set(this, setOpts, logger, 'info')\n set(this, setOpts, logger, 'debug')\n set(this, setOpts, logger, 'trace')\n\n customLevels.forEach((level) => {\n set(this, setOpts, logger, level)\n })\n }\n\n function child (bindings, childOptions) {\n if (!bindings) {\n throw new Error('missing bindings for child Pino')\n }\n childOptions = childOptions || {}\n if (serialize && bindings.serializers) {\n childOptions.serializers = bindings.serializers\n }\n const childOptionsSerializers = childOptions.serializers\n if (serialize && childOptionsSerializers) {\n var childSerializers = Object.assign({}, serializers, childOptionsSerializers)\n var childSerialize = opts.browser.serialize === true\n ? Object.keys(childSerializers)\n : serialize\n delete bindings.serializers\n applySerializers([bindings], childSerialize, childSerializers, this._stdErrSerialize)\n }\n function Child (parent) {\n this._childLevel = (parent._childLevel | 0) + 1\n\n // make sure bindings are available in the `set` function\n this.bindings = bindings\n\n if (childSerializers) {\n this.serializers = childSerializers\n this._serialize = childSerialize\n }\n if (transmit) {\n this._logEvent = createLogEventShape(\n [].concat(parent._logEvent.bindings, bindings)\n )\n }\n }\n Child.prototype = this\n const newLogger = new Child(this)\n\n // must happen before the level is assigned\n appendChildLogger(this, newLogger)\n // required to actually initialize the logger functions for any given child\n newLogger.level = this.level\n\n return newLogger\n }\n return logger\n}\n\nfunction getLevels (opts) {\n const customLevels = opts.customLevels || {}\n\n const values = Object.assign({}, pino.levels.values, customLevels)\n const labels = Object.assign({}, pino.levels.labels, invertObject(customLevels))\n\n return {\n values,\n labels\n }\n}\n\nfunction invertObject (obj) {\n const inverted = {}\n Object.keys(obj).forEach(function (key) {\n inverted[obj[key]] = key\n })\n return inverted\n}\n\npino.levels = {\n values: {\n fatal: 60,\n error: 50,\n warn: 40,\n info: 30,\n debug: 20,\n trace: 10\n },\n labels: {\n 10: 'trace',\n 20: 'debug',\n 30: 'info',\n 40: 'warn',\n 50: 'error',\n 60: 'fatal'\n }\n}\n\npino.stdSerializers = stdSerializers\npino.stdTimeFunctions = Object.assign({}, { nullTime, epochTime, unixTime, isoTime })\n\nfunction getBindingChain (logger) {\n const bindings = []\n if (logger.bindings) {\n bindings.push(logger.bindings)\n }\n\n // traverse up the tree to get all bindings\n let hierarchy = logger[hierarchySymbol]\n while (hierarchy.parent) {\n hierarchy = hierarchy.parent\n if (hierarchy.logger.bindings) {\n bindings.push(hierarchy.logger.bindings)\n }\n }\n\n return bindings.reverse()\n}\n\nfunction set (self, opts, rootLogger, level) {\n // override the current log functions with either `noop` or the base log function\n Object.defineProperty(self, level, {\n value: (levelToValue(self.level, rootLogger) > levelToValue(level, rootLogger)\n ? noop\n : rootLogger[baseLogFunctionSymbol][level]),\n writable: true,\n enumerable: true,\n configurable: true\n })\n\n if (!opts.transmit && self[level] === noop) {\n return\n }\n\n // make sure the log format is correct\n self[level] = createWrap(self, opts, rootLogger, level)\n\n // prepend bindings if it is not the root logger\n const bindings = getBindingChain(self)\n if (bindings.length === 0) {\n // early exit in case for rootLogger\n return\n }\n self[level] = prependBindingsInArguments(bindings, self[level])\n}\n\nfunction prependBindingsInArguments (bindings, logFunc) {\n return function () {\n return logFunc.apply(this, [...bindings, ...arguments])\n }\n}\n\nfunction createWrap (self, opts, rootLogger, level) {\n return (function (write) {\n return function LOG () {\n const ts = opts.timestamp()\n const args = new Array(arguments.length)\n const proto = (Object.getPrototypeOf && Object.getPrototypeOf(this) === _console) ? _console : this\n for (var i = 0; i < args.length; i++) args[i] = arguments[i]\n\n if (opts.serialize && !opts.asObject) {\n applySerializers(args, this._serialize, this.serializers, this._stdErrSerialize)\n }\n if (opts.asObject || opts.formatters) {\n write.call(proto, asObject(this, level, args, ts, opts.formatters))\n } else write.apply(proto, args)\n\n if (opts.transmit) {\n const transmitLevel = opts.transmit.level || self._level\n const transmitValue = rootLogger.levels.values[transmitLevel]\n const methodValue = rootLogger.levels.values[level]\n if (methodValue < transmitValue) return\n transmit(this, {\n ts,\n methodLevel: level,\n methodValue,\n transmitLevel,\n transmitValue: rootLogger.levels.values[opts.transmit.level || self._level],\n send: opts.transmit.send,\n val: levelToValue(self._level, rootLogger)\n }, args)\n }\n }\n })(self[baseLogFunctionSymbol][level])\n}\n\nfunction asObject (logger, level, args, ts, formatters = {}) {\n const {\n level: levelFormatter = () => logger.levels.values[level],\n log: logObjectFormatter = (obj) => obj\n } = formatters\n if (logger._serialize) applySerializers(args, logger._serialize, logger.serializers, logger._stdErrSerialize)\n const argsCloned = args.slice()\n let msg = argsCloned[0]\n const logObject = {}\n if (ts) {\n logObject.time = ts\n }\n logObject.level = levelFormatter(level, logger.levels.values[level])\n\n let lvl = (logger._childLevel | 0) + 1\n if (lvl < 1) lvl = 1\n // deliberate, catching objects, arrays\n if (msg !== null && typeof msg === 'object') {\n while (lvl-- && typeof argsCloned[0] === 'object') {\n Object.assign(logObject, argsCloned.shift())\n }\n msg = argsCloned.length ? format(argsCloned.shift(), argsCloned) : undefined\n } else if (typeof msg === 'string') msg = format(argsCloned.shift(), argsCloned)\n if (msg !== undefined) logObject.msg = msg\n\n const formattedLogObject = logObjectFormatter(logObject)\n return formattedLogObject\n}\n\nfunction applySerializers (args, serialize, serializers, stdErrSerialize) {\n for (const i in args) {\n if (stdErrSerialize && args[i] instanceof Error) {\n args[i] = pino.stdSerializers.err(args[i])\n } else if (typeof args[i] === 'object' && !Array.isArray(args[i])) {\n for (const k in args[i]) {\n if (serialize && serialize.indexOf(k) > -1 && k in serializers) {\n args[i][k] = serializers[k](args[i][k])\n }\n }\n }\n }\n}\n\nfunction transmit (logger, opts, args) {\n const send = opts.send\n const ts = opts.ts\n const methodLevel = opts.methodLevel\n const methodValue = opts.methodValue\n const val = opts.val\n const bindings = logger._logEvent.bindings\n\n applySerializers(\n args,\n logger._serialize || Object.keys(logger.serializers),\n logger.serializers,\n logger._stdErrSerialize === undefined ? true : logger._stdErrSerialize\n )\n logger._logEvent.ts = ts\n logger._logEvent.messages = args.filter(function (arg) {\n // bindings can only be objects, so reference equality check via indexOf is fine\n return bindings.indexOf(arg) === -1\n })\n\n logger._logEvent.level.label = methodLevel\n logger._logEvent.level.value = methodValue\n\n send(methodLevel, logger._logEvent, val)\n\n logger._logEvent = createLogEventShape(bindings)\n}\n\nfunction createLogEventShape (bindings) {\n return {\n ts: 0,\n messages: [],\n bindings: bindings || [],\n level: { label: '', value: 0 }\n }\n}\n\nfunction asErrValue (err) {\n const obj = {\n type: err.constructor.name,\n msg: err.message,\n stack: err.stack\n }\n for (const key in err) {\n if (obj[key] === undefined) {\n obj[key] = err[key]\n }\n }\n return obj\n}\n\nfunction getTimeFunction (opts) {\n if (typeof opts.timestamp === 'function') {\n return opts.timestamp\n }\n if (opts.timestamp === false) {\n return nullTime\n }\n return epochTime\n}\n\nfunction mock () { return {} }\nfunction passthrough (a) { return a }\nfunction noop () {}\n\nfunction nullTime () { return false }\nfunction epochTime () { return Date.now() }\nfunction unixTime () { return Math.round(Date.now() / 1000.0) }\nfunction isoTime () { return new Date(Date.now()).toISOString() } // using Date.now() for testability\n\n/* eslint-disable */\n/* istanbul ignore next */\nfunction pfGlobalThisOrFallback () {\n function defd (o) { return typeof o !== 'undefined' && o }\n try {\n if (typeof globalThis !== 'undefined') return globalThis\n Object.defineProperty(Object.prototype, 'globalThis', {\n get: function () {\n delete Object.prototype.globalThis\n return (this.globalThis = this)\n },\n configurable: true\n })\n return globalThis\n } catch (e) {\n return defd(self) || defd(window) || defd(this) || {}\n }\n}\n/* eslint-enable */\n\nmodule.exports.default = pino\nmodule.exports.pino = pino\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","/**\n * @file Message priority definitions\n * @module types/priority\n */\n\n/**\n * Message priority levels for queue management\n */\nexport enum MessagePriority {\n HIGH = 'HIGH',\n NORMAL = 'NORMAL',\n LOW = 'LOW'\n}\n","/**\n * @file Core type definitions\n * @module types\n */\n\nimport type { WebSocket } from 'ws';\nimport type { Logger } from './logger.js';\nimport type { NostrWSMessage, NostrEvent as MessageNostrEvent } from './messages.js';\n\n// Re-export specific types to avoid ambiguity\nexport type { NostrWSMessage } from './messages.js';\nexport type { QueueItem } from './messages.js';\nexport * from './filters.js';\nexport * from './relays.js';\nexport * from './logger.js';\nexport * from './priority.js';\n\n// Export the NostrEvent from messages.ts as our canonical version\nexport type NostrEvent = MessageNostrEvent;\n\n/**\n * Extended WebSocket interface with client ID\n */\nexport interface ExtendedWebSocket extends WebSocket {\n clientId?: string;\n isAlive?: boolean;\n subscriptions?: Set<string>;\n lastPing?: number;\n reconnectAttempts?: number;\n messageQueue?: NostrWSMessage[];\n}\n\n/**\n * WebSocket connection states\n */\nexport enum ConnectionState {\n CONNECTING = 'CONNECTING',\n CONNECTED = 'CONNECTED',\n DISCONNECTED = 'DISCONNECTED',\n RECONNECTING = 'RECONNECTING',\n FAILED = 'FAILED'\n}\n\n/**\n * Retry configuration options\n */\nexport interface RetryConfig {\n maxAttempts: number;\n initialDelay: number;\n maxDelay: number;\n backoffFactor: number;\n}\n\n/**\n * Queue configuration options\n */\nexport interface QueueConfig {\n maxSize: number;\n maxRetries: number;\n retryDelay: number;\n staleTimeout: number;\n}\n\n/**\n * Heartbeat configuration options\n */\nexport interface HeartbeatConfig {\n interval: number;\n timeout: number;\n maxMissed: number;\n}\n\n/**\n * WebSocket client options\n */\nexport interface NostrWSOptions {\n WebSocketImpl?: typeof WebSocket;\n connectionTimeout?: number;\n retryAttempts?: number;\n retryDelay?: number;\n onMessage?: (message: string) => void;\n onError?: (error: Error) => void;\n retry?: Partial<RetryConfig>;\n queue?: Partial<QueueConfig>;\n heartbeat?: Partial<HeartbeatConfig>;\n autoReconnect?: boolean;\n bufferMessages?: boolean;\n cleanStaleMessages?: boolean;\n logger?: Logger;\n}\n\n/**\n * Represents a subscription to a Nostr relay\n */\nexport interface NostrWSSubscription {\n /**\n * Channel identifier for the subscription\n */\n channel: string;\n \n /**\n * Filter criteria for the subscription\n */\n filter?: Record<string, unknown>;\n}\n\n/**\n * Events emitted by the NostrWSClient\n */\nexport interface NostrWSClientEvents {\n /**\n * Emitted when the client connects to the relay\n */\n connect: () => void;\n \n /**\n * Emitted when the client disconnects from the relay\n */\n disconnect: () => void;\n \n /**\n * Emitted when the client reconnects to the relay\n */\n reconnect: () => void;\n \n /**\n * Emitted when a message is received from the relay\n * @param message - The received message\n */\n message: (message: NostrWSMessage) => Promise<void>;\n \n /**\n * Emitted when an error occurs\n * @param error - The error that occurred\n */\n error: (error: Error) => void;\n close: () => void;\n stateChange?: (state: ConnectionState) => void;\n heartbeat?: () => void;\n}\n\n/**\n * Events emitted by the NostrWSServer\n */\nexport interface NostrWSServerEvents {\n /**\n * Emitted when a client connects\n * @param client - The connected client\n */\n connection: (client: ExtendedWebSocket) => void;\n\n /**\n * Emitted when a message is received from a client\n * @param message - The received message\n * @param client - The client that sent the message\n */\n message: (message: NostrWSMessage, client: ExtendedWebSocket) => void;\n\n /**\n * Emitted when an error occurs\n * @param error - The error that occurred\n */\n error: (error: Error) => void;\n}\n","/**\n * @file Logger utility\n * @module utils/logger\n */\n\nimport pino, { Logger } from 'pino';\n\n/**\n * Create a new logger instance\n * @param name Name of the logger\n * @returns Logger instance\n */\nexport function createLogger(name: string): Logger {\n return pino({\n name,\n level: process.env.LOG_LEVEL || 'info',\n timestamp: pino.stdTimeFunctions.isoTime\n });\n}\n\n/**\n * Get a logger instance for a specific component\n * @param component Component name for the logger\n * @returns Logger instance\n */\nexport function getLogger(component: string): Logger {\n return createLogger(component);\n}\n\n/**\n * Get a child logger instance\n * @param parent Parent logger instance\n * @param bindings Additional bindings for the child logger\n * @returns Child logger instance\n */\nexport function getChildLogger(parent: Logger, bindings: object): Logger {\n return parent.child(bindings);\n}\n\nexport type { Logger };\n","/**\n * @file Message queue implementation\n * @module core/queue\n */\n\nimport { NostrWSMessage, MessagePriority, QueueItem } from '../types/index.js';\nimport { createLogger } from '../utils/logger.js';\nimport { Logger } from 'pino';\n\n/**\n * Message queue implementation for handling WebSocket messages\n */\nexport class MessageQueue {\n private readonly queue: QueueItem[] = [];\n private readonly logger: Logger;\n private processing = false;\n\n constructor(\n private readonly sender: (message: NostrWSMessage) => Promise<void>,\n private readonly options: {\n maxSize?: number;\n maxRetries?: number;\n retryDelay?: number;\n staleTimeout?: number;\n } = {}\n ) {\n this.logger = createLogger('MessageQueue');\n }\n\n /**\n * Add a message to the queue\n */\n async enqueue(message: NostrWSMessage): Promise<void> {\n if (\n this.options.maxSize &&\n this.queue.length >= this.options.maxSize\n ) {\n throw new Error('Queue is full');\n }\n\n const [type, ...data] = message;\n const queueItem: QueueItem = {\n type,\n data: data.length === 1 ? data[0] : data,\n priority: MessagePriority.NORMAL,\n queuedAt: Date.now(),\n retryCount: 0\n };\n\n this.queue.push(queueItem);\n this.queue.sort((a, b) => \n (a.priority === b.priority) ? \n (a.queuedAt - b.queuedAt) : \n (a.priority === MessagePriority.HIGH ? -1 : 1)\n );\n\n if (!this.processing) {\n this.processQueue().catch(error => {\n this.logger.error({ error }, 'Error processing queue');\n });\n }\n }\n\n /**\n * Process messages in the queue\n */\n private async processQueue(): Promise<void> {\n if (this.processing || this.queue.length === 0) {\n return;\n }\n\n this.processing = true;\n\n try {\n while (this.queue.length > 0) {\n const item = this.queue[0];\n const message: NostrWSMessage = [item.type, item.data];\n\n try {\n await this.sender(message);\n this.queue.shift();\n } catch (error) {\n this.logger.error({ error, message }, 'Failed to send message');\n\n if (\n this.options.maxRetries &&\n item.retryCount >= this.options.maxRetries\n ) {\n this.logger.warn(\n { message },\n 'Max retries reached, removing message from queue'\n );\n this.queue.shift();\n continue;\n }\n\n item.retryCount++;\n await new Promise(resolve =>\n setTimeout(resolve, this.options.retryDelay || 1000)\n );\n }\n }\n } finally {\n this.processing = false;\n }\n\n // Clean up stale messages\n if (this.options.staleTimeout) {\n const now = Date.now();\n const staleTimeout = this.options.staleTimeout;\n this.queue.forEach((message, index) => {\n if (now - message.queuedAt > staleTimeout) {\n this.logger.warn(\n { message },\n 'Message is stale, removing from queue'\n );\n this.queue.splice(index, 1);\n }\n });\n }\n }\n\n /**\n * Get the current size of the queue\n */\n getSize(): number {\n return this.queue.length;\n }\n\n /**\n * Clear all messages from the queue\n */\n clear(): void {\n this.queue.length = 0;\n }\n}\n","import { NostrWSClient } from './core/client';\nimport type { NostrWSMessage, ConnectionState } from './types/index';\nimport type { NostrWSClientOptions } from './types/websocket';\n\n// Re-export the client\nexport { NostrWSClient };\n\n// Re-export types\nexport type {\n NostrWSMessage,\n NostrWSClientOptions,\n ConnectionState\n};\n\n// Export a default object for UMD bundle\nexport default {\n NostrWSClient\n};\n","import WebSocket from 'ws';\nimport { \n NostrWSMessage, \n ConnectionState\n} from '../types/index.js';\nimport { NostrWSClientOptions } from '../types/websocket.js';\nimport { MessageQueue } from './queue.js';\nimport { createLogger } from '../utils/logger.js';\nimport { Logger } from 'pino';\n\n/**\n * NostrWSClient handles WebSocket connections to Nostr relays\n */\nexport class NostrWSClient {\n private ws: WebSocket | null = null;\n private readonly queue: MessageQueue;\n private readonly logger: Logger;\n private connectionState: ConnectionState = ConnectionState.DISCONNECTED;\n private reconnectAttempts = 0;\n private reconnectTimeout: NodeJS.Timeout | null = null;\n\n constructor(\n private readonly relayUrls: string[],\n private readonly options: NostrWSClientOptions = {}\n ) {\n this.logger = options.logger || createLogger('NostrWSClient');\n this.queue = new MessageQueue(\n async (message: NostrWSMessage) => {\n if (!this.ws || this.connectionState !== ConnectionState.CONNECTED) {\n throw new Error('Not connected to relay');\n }\n try {\n this.ws.send(JSON.stringify(message));\n this.logger.debug({ message }, 'Message sent');\n } catch (error) {\n this.logger.error({ error, message }, 'Failed to send message');\n throw error;\n }\n },\n {\n maxSize: options.queueSize,\n maxRetries: options.maxRetries,\n retryDelay: options.retryDelay\n }\n );\n }\n\n /**\n * Connect to the relay\n */\n async connect(): Promise<void> {\n if (this.connectionState === ConnectionState.CONNECTED) {\n this.logger.debug('Already connected');\n return;\n }\n\n if (this.connectionState === ConnectionState.CONNECTING) {\n this.logger.debug('Connection already in progress');\n return;\n }\n\n this.connectionState = ConnectionState.CONNECTING;\n\n try {\n const url = this.relayUrls[0]; // For now just use first relay\n this.ws = new WebSocket(url);\n\n await new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(() => {\n reject(new Error('Connection timeout'));\n }, this.options.connectionTimeout || 5000);\n\n this.ws!.on('open', () => {\n clearTimeout(timeout);\n this.connectionState = ConnectionState.CONNECTED;\n this.reconnectAttempts = 0;\n this.logger.info('Connected to relay');\n resolve();\n });\n\n this.ws!.on('error', (error) => {\n clearTimeout(timeout);\n this.logger.error({ error }, 'WebSocket error');\n if (this.options.onError) {\n this.options.onError(error);\n }\n reject(error);\n });\n\n this.ws!.on('close', () => {\n this.handleDisconnect();\n });\n\n this.ws!.on('message', (data: WebSocket.Data) => {\n this.handleMessage(data);\n });\n });\n } catch (error) {\n this.logger.error({ error }, 'Failed to connect');\n this.handleDisconnect();\n throw error;\n }\n }\n\n /**\n * Disconnect from the relay\n */\n async disconnect(): Promise<void> {\n if (this.connectionState === ConnectionState.DISCONNECTED) {\n this.logger.debug('Already disconnected');\n return;\n }\n\n this.connectionState = ConnectionState.DISCONNECTED;\n \n if (this.reconnectTimeout) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = null;\n }\n\n if (this.ws) {\n this.ws.close();\n this.ws = null;\n }\n\n this.logger.info('Disconnected from relay');\n }\n\n /**\n * Send a message to the relay\n */\n async sendMessage(message: NostrWSMessage): Promise<void> {\n if (this.connectionState !== ConnectionState.CONNECTED) {\n throw new Error('Not connected to relay');\n }\n\n await this.queue.enqueue(message);\n }\n\n private handleMessage(data: WebSocket.Data): void {\n try {\n const message = JSON.parse(data.toString()) as NostrWSMessage;\n this.logger.debug({ message }, 'Received message');\n \n if (this.options.onMessage) {\n this.options.onMessage(data.toString());\n }\n } catch (error) {\n this.logger.error({ error, data }, 'Failed to parse message');\n if (this.options.onError) {\n this.options.onError(error as Error);\n }\n }\n }\n\n private handleDisconnect(): void {\n this.connectionState = ConnectionState.DISCONNECTED;\n this.ws = null;\n\n if (\n this.options.retryAttempts &&\n this.reconnectAttempts < this.options.retryAttempts\n ) {\n this.connectionState = ConnectionState.RECONNECTING;\n this.reconnectAttempts++;\n\n const delay = this.options.retryDelay || 1000;\n this.logger.info(\n { attempt: this.reconnectAttempts, maxAttempts: this.options.retryAttempts },\n `Reconnecting in ${delay}ms`\n );\n\n this.reconnectTimeout = setTimeout(() => {\n this.connect().catch(error => {\n this.logger.error({ error }, 'Reconnection failed');\n });\n }, delay);\n } else {\n this.logger.warn('Max reconnection attempts reached');\n this.connectionState = ConnectionState.FAILED;\n }\n }\n\n /**\n * Get the current connection state\n */\n getConnectionState(): ConnectionState {\n return this.connectionState;\n }\n}\n"],"names":["root","factory","exports","module","define","amd","this","tryStringify","o","JSON","stringify","e","f","args","opts","ss","len","length","objects","Array","index","join","argLen","str","a","lastPos","flen","i","charCodeAt","slice","Number","Math","floor","undefined","type","name","String","Error","format","pino","_console","defd","globalThis","Object","defineProperty","prototype","get","configurable","self","window","pfGlobalThisOrFallback","console","stdSerializers","mapHttpRequest","mock","mapHttpResponse","wrapRequestSerializer","passthrough","wrapResponseSerializer","wrapErrorSerializer","req","res","err","asErrValue","errWithCause","levelToValue","level","logger","Infinity","levels","values","baseLogFunctionSymbol","Symbol","hierarchySymbol","logFallbackMap","error","fatal","warn","info","debug","trace","appendChildLogger","parentLogger","childLogger","newEntry","parent","browser","transmit","send","proto","write","asObject","serializers","serialize","isArray","filter","k","keys","shouldSerialize","stdErrSerialize","indexOf","customLevels","concat","forEach","enabled","disabled","create","log","noop","logFunctions","setupBaseLogFunctions","_level","set","setOpts","formatters","timestamp","getTimeFunction","assign","labels","obj","inverted","key","invertObject","getLevels","setMaxListeners","getMaxListeners","emit","addListener","on","prependListener","once","prependOnceListener","removeListener","removeAllListeners","listeners","listenerCount","eventNames","flush","_serialize","_stdErrSerialize","child","bindings","childOptions","childOptionsSerializers","childSerializers","childSerialize","applySerializers","Child","_childLevel","_logEvent","createLogEventShape","newLogger","rootLogger","value","writable","enumerable","ts","arguments","getPrototypeOf","call","levelFormatter","logObjectFormatter","argsCloned","msg","logObject","time","lvl","shift","apply","transmitLevel","transmitValue","methodValue","methodLevel","val","messages","arg","label","createWrap","push","hierarchy","reverse","getBindingChain","logFunc","prependBindingsInArguments","constructor","message","stack","nullTime","epochTime","Date","now","stdTimeFunctions","unixTime","round","isoTime","toISOString","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","n","getter","__esModule","d","definition","prop","hasOwnProperty","MessagePriority","ConnectionState","createLogger","process","env","LOG_LEVEL","MessageQueue","sender","options","queue","processing","enqueue","maxSize","data","queueItem","priority","NORMAL","queuedAt","retryCount","sort","b","HIGH","processQueue","catch","item","maxRetries","Promise","resolve","setTimeout","retryDelay","staleTimeout","splice","getSize","clear","NostrWSClient","relayUrls","ws","connectionState","DISCONNECTED","reconnectAttempts","reconnectTimeout","CONNECTED","queueSize","connect","CONNECTING","url","reject","timeout","connectionTimeout","clearTimeout","onError","handleDisconnect","handleMessage","disconnect","close","sendMessage","parse","toString","onMessage","retryAttempts","RECONNECTING","delay","attempt","maxAttempts","FAILED","getConnectionState"],"sourceRoot":""}
|
package/dist/browser/report.html
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8"/>
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
6
|
-
<title>nostr-websocket-utils [
|
|
6
|
+
<title>nostr-websocket-utils [19 Feb 2026 at 11:33]</title>
|
|
7
7
|
<link rel="shortcut icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAABrVBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+O1foceMD///+J0/qK1Pr7/v8Xdr/9///W8P4UdL7L7P0Scr2r4Pyj3vwad8D5/f/2/f+55f3E6f34+/2H0/ojfMKpzOd0rNgQcb3F3O/j9f7c8v6g3Pz0/P/w+v/q+P7n9v6T1/uQ1vuE0vqLut/y+v+Z2fvt+f+15Pzv9fuc2/vR7v2V2Pvd6/bg9P7I6/285/2y4/yp3/zp8vk8i8kqgMT7/P31+fyv4vxGkcz6/P6/6P3j7vfS5PNnpNUxhcbO7f7F6v3O4vHK3/DA2u631Ouy0eqXweKJud5wqthfoNMMbLvY8f73+v2dxeR8sNtTmdDx9/zX6PSjyeaCtd1YnNGX2PuQveCGt95Nls42h8dLlM3F4vBtAAAAM3RSTlMAAyOx0/sKBvik8opWGBMOAe3l1snDm2E9LSb06eHcu5JpHbarfHZCN9CBb08zzkdNS0kYaptYAAAFV0lEQVRYw92X51/aYBDHHS2O2qqttVbrqNq9m+TJIAYIShBkWwqIiCgoWvfeq7Z2/s29hyQNyUcR7LveGwVyXy6XH8/9rqxglLfUPLxVduUor3h0rfp2TYvpivk37929TkG037hffoX0+peVtZQc1589rigVUdXS/ABSAyEmGIO/1XfvldSK8vs3OqB6u3m0nxmIrvgB0dj7rr7Y9IbuF68hnfFaiHA/sxqm0wciIG43P60qKv9WXWc1RXGh/mFESFABTSBi0sNAKzqet17eCtOb3kZIDwxEEU0oAIJGYxNBDhBND29e0rtXXbcpuPmED9IhEAAQ/AXEaF8EPmnrrKsv0LvWR3fg5sWDNAFZOgAgaKvZDogHNU9MFwnnYROkc56RD5CjAbQX9Ow4g7upCsvYu55aSI/Nj0H1akgKQEUM94dwK65hYRmFU9MIcH/fqJYOZYcnuJSU/waKDgTOEVaVKhwrTRP5XzgSpAITYzom7UvkhFX5VutmxeNnWDjjswTKTyfgluNDGbUpWissXhF3s7mlSml+czWkg3D0l1nNjGNjz3myOQOa1KM/jOS6ebdbAVTCi4gljHSFrviza7tOgRWcS0MOUX9zdNgag5w7rRqA44Lzw0hr1WqES36dFliSJFlh2rXIae3FFcDDgKdxrUIDePr8jGcSClV1u7A9xeN0ModY/pHMxmR1EzRh8TJiwqsHmKW0l4FCEZI+jHio+JdPPE9qwQtTRxku2D8sIeRL2LnxWSllANCQGOIiqVHAz2ye2JR0DcH+HoxDkaADLjgxjKQ+AwCX/g0+DNgdG0ukYCONAe+dbc2IAc6fwt1ARoDSezNHxV2Cmzwv3O6lDMV55edBGwGK9n1+x2F8EDfAGCxug8MhpsMEcTEAWf3rx2vZhe/LAmtIn/6apE6PN0ULKgywD9mmdxbmFl3OvD5AS5fW5zLbv/YHmcsBTjf/afDz3MaZTVCfAP9z6/Bw6ycv8EUBWJIn9zYcoAWWlW9+OzO3vkTy8H+RANLmdrpOuYWdZYEXpo+TlCJrW5EARb7fF+bWdqf3hhyZI1nWJQHgznErZhbjoEsWqi8dQNoE294aldzFurwSABL2XXMf9+H1VQGke9exw5P/AnA5Pv5ngMul7LOvO922iwACu8WkCwLCafvM4CeWPxfA8lNHcWZSoi8EwMAIciKX2Z4SWCMAa3snCZ/G4EA8D6CMLNFsGQhkkz/gQNEBbPCbWsxGUpYVu3z8IyNAknwJkfPMEhLyrdi5RTyUVACkw4GSFRNWJNEW+fgPGwHD8/JxnRuLabN4CGNRkAE23na2+VmEAUmrYymSGjMAYqH84YUIyzgzs3XC7gNgH36Vcc4zKY9o9fgPBXUAiHHwVboBHGLiX6Zcjp1f2wu4tvzZKo0ecPnDtQYDQvJXaBeNzce45Fp28ZQLrEZVuFqgBwOalArKXnW1UzlnSusQKJqKYNuz4tOnI6sZG4zanpemv+7ySU2jbA9h6uhcgpfy6G2PahirDZ6zvq6zDduMVFTKvzw8wgyEdelwY9in3XkEPs3osJuwRQ4qTkfzifndg9Gfc4pdsu82+tTnHZTBa2EAMrqr2t43pguc8tNm7JQVQ2S0ukj2d22dhXYP0/veWtwKrCkNoNimAN5+Xr/oLrxswKbVJjteWrX7eR63o4j9q0GxnaBdWgGA5VStpanIjQmEhV0/nVt5VOFUvix6awJhPcAaTEShgrG+iGyvb5a0Ndb1YGHFPEwoqAinoaykaID1o1pdPNu7XsnCKQ3R+hwWIIhGvORcJUBYXe3Xa3vq/mF/N9V13ugufMkfXn+KHsRD0B8AAAAASUVORK5CYII=" type="image/x-icon" />
|
|
8
8
|
|
|
9
9
|
<script>
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
<body>
|
|
32
32
|
<div id="app"></div>
|
|
33
33
|
<script>
|
|
34
|
-
window.chartData = [{"label":"nostr-websocket-utils.min.js","isAsset":true,"statSize":28900,"parsedSize":
|
|
34
|
+
window.chartData = [{"label":"nostr-websocket-utils.min.js","isAsset":true,"statSize":28900,"parsedSize":13569,"gzipSize":4738,"groups":[{"label":"node_modules","path":"./node_modules","statSize":15978,"groups":[{"label":"pino","path":"./node_modules/pino","statSize":13141,"groups":[{"id":874,"label":"browser.js","path":"./node_modules/pino/browser.js","statSize":13141}],"parsedSize":0,"gzipSize":0},{"label":"quick-format-unescaped","path":"./node_modules/quick-format-unescaped","statSize":2661,"groups":[{"id":793,"label":"index.js","path":"./node_modules/quick-format-unescaped/index.js","statSize":2661}],"parsedSize":0,"gzipSize":0},{"label":"ws","path":"./node_modules/ws","statSize":176,"groups":[{"id":591,"label":"browser.js","path":"./node_modules/ws/browser.js","statSize":176}],"parsedSize":0,"gzipSize":0}],"parsedSize":0,"gzipSize":0},{"label":"src","path":"./src","statSize":12922,"groups":[{"id":999,"label":"browser.ts + 5 modules (concatenated)","path":"./src/browser.ts + 5 modules (concatenated)","statSize":12922,"parsedSize":13569,"gzipSize":4738,"concatenated":true,"groups":[{"label":"src","path":"./src/browser.ts + 5 modules (concatenated)/src","statSize":12922,"groups":[{"id":null,"label":"browser.ts","path":"./src/browser.ts + 5 modules (concatenated)/src/browser.ts","statSize":177,"parsedSize":185,"gzipSize":64,"inaccurateSizes":true},{"label":"core","path":"./src/browser.ts + 5 modules (concatenated)/src/core","statSize":10996,"groups":[{"id":null,"label":"client.ts","path":"./src/browser.ts + 5 modules (concatenated)/src/core/client.ts","statSize":6696,"parsedSize":7031,"gzipSize":2455,"inaccurateSizes":true},{"id":null,"label":"queue.ts","path":"./src/browser.ts + 5 modules (concatenated)/src/core/queue.ts","statSize":4300,"parsedSize":4515,"gzipSize":1576,"inaccurateSizes":true}],"parsedSize":11546,"gzipSize":4031,"inaccurateSizes":true},{"label":"types","path":"./src/browser.ts + 5 modules (concatenated)/src/types","statSize":916,"groups":[{"id":null,"label":"index.ts","path":"./src/browser.ts + 5 modules (concatenated)/src/types/index.ts","statSize":567,"parsedSize":595,"gzipSize":207,"inaccurateSizes":true},{"id":null,"label":"priority.ts","path":"./src/browser.ts + 5 modules (concatenated)/src/types/priority.ts","statSize":349,"parsedSize":366,"gzipSize":127,"inaccurateSizes":true}],"parsedSize":961,"gzipSize":335,"inaccurateSizes":true},{"label":"utils","path":"./src/browser.ts + 5 modules (concatenated)/src/utils","statSize":833,"groups":[{"id":null,"label":"logger.ts","path":"./src/browser.ts + 5 modules (concatenated)/src/utils/logger.ts","statSize":833,"parsedSize":874,"gzipSize":305,"inaccurateSizes":true}],"parsedSize":874,"gzipSize":305,"inaccurateSizes":true}],"parsedSize":13569,"gzipSize":4738,"inaccurateSizes":true}]}],"parsedSize":13569,"gzipSize":4738}],"isInitialByEntrypoint":{"main":true}}];
|
|
35
35
|
window.entrypoints = ["main"];
|
|
36
36
|
window.defaultSizes = "parsed";
|
|
37
37
|
</script>
|
|
@@ -22,7 +22,7 @@ async function validateSignedMessage(message) {
|
|
|
22
22
|
return false;
|
|
23
23
|
}
|
|
24
24
|
const event = message[1];
|
|
25
|
-
if (!(0, nostr_crypto_utils_1.
|
|
25
|
+
if (!(0, nostr_crypto_utils_1.validateEvent)(event)) {
|
|
26
26
|
logger.debug('Invalid event format');
|
|
27
27
|
return false;
|
|
28
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../../src/crypto/handlers.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAeH,sDA2BC;AAQD,8CAkBC;AAlED,kDAA+C;AAE/C,sDAAqD;AAErD,
|
|
1
|
+
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../../src/crypto/handlers.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAeH,sDA2BC;AAQD,8CAkBC;AAlED,kDAA+C;AAE/C,sDAAqD;AAErD,2DAAoE;AAEpE,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,QAAQ,CAAC,CAAC;AAEnC;;;;GAIG;AACI,KAAK,UAAU,qBAAqB,CACzC,OAAuB;IAEvB,IAAI,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,2BAAa,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACjF,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;YACvC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAe,CAAC;QAEvC,IAAI,CAAC,IAAA,kCAAa,EAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACrC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAA,oCAAe,EAAC,KAAyB,CAAC,CAAC;QACjE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAClC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;QACxD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,OAAuB,EAAE,MAAW;IACpE,IAAI,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,2BAAa,CAAC,KAAK,EAAE,CAAC;YAClE,OAAO,IAAI,CAAC,CAAC,uBAAuB;QACtC,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAe,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAC7C,OAAO,KAAK,CAAC;QACf,CAAC;QAED,iCAAiC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACnD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
package/dist/crypto/handlers.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { getLogger } from '../utils/logger.js';
|
|
6
6
|
import { MESSAGE_TYPES } from '../types/messages.js';
|
|
7
|
-
import {
|
|
7
|
+
import { validateEvent, verifySignature } from 'nostr-crypto-utils';
|
|
8
8
|
const logger = getLogger('crypto');
|
|
9
9
|
/**
|
|
10
10
|
* Validates a signed message
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/crypto/handlers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/crypto/handlers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEpE,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAEnC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAuB;IAEvB,IAAI,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACjF,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;YACvC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAe,CAAC;QAEvC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACrC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,KAAyB,CAAC,CAAC;QACjE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAClC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;QACxD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAuB,EAAE,MAAW;IACpE,IAAI,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,KAAK,EAAE,CAAC;YAClE,OAAO,IAAI,CAAC,CAAC,uBAAuB;QACtC,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAe,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAC7C,OAAO,KAAK,CAAC;QACf,CAAC;QAED,iCAAiC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;QACnD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nostr-websocket-utils",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.14",
|
|
4
4
|
"description": "Robust WebSocket utilities for Nostr applications with automatic reconnection, supporting both ESM and CommonJS. Features channel-based messaging, heartbeat monitoring, message queueing, and comprehensive error handling with type-safe handlers.",
|
|
5
5
|
"main": "./dist/cjs/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -59,27 +59,27 @@
|
|
|
59
59
|
"homepage": "https://github.com/HumanjavaEnterprises/nostr-websocket-utils#readme",
|
|
60
60
|
"dependencies": {
|
|
61
61
|
"@types/uuid": "^10.0.0",
|
|
62
|
-
"nostr-crypto-utils": "^0.4.
|
|
63
|
-
"pino": "^8.
|
|
64
|
-
"uuid": "^11.0
|
|
65
|
-
"ws": "^8.
|
|
62
|
+
"nostr-crypto-utils": "^0.4.15",
|
|
63
|
+
"pino": "^8.21.0",
|
|
64
|
+
"uuid": "^11.1.0",
|
|
65
|
+
"ws": "^8.19.0"
|
|
66
66
|
},
|
|
67
67
|
"devDependencies": {
|
|
68
|
-
"@types/node": "^20.
|
|
69
|
-
"@types/ws": "^8.
|
|
68
|
+
"@types/node": "^20.19.33",
|
|
69
|
+
"@types/ws": "^8.18.1",
|
|
70
70
|
"@typescript-eslint/eslint-plugin": "^6.16.0",
|
|
71
71
|
"@typescript-eslint/parser": "^6.16.0",
|
|
72
|
-
"@vitest/coverage-v8": "^1.6.
|
|
72
|
+
"@vitest/coverage-v8": "^1.6.1",
|
|
73
73
|
"eslint": "^8.56.0",
|
|
74
|
-
"
|
|
74
|
+
"terser-webpack-plugin": "^5.3.16",
|
|
75
|
+
"ts-loader": "^9.5.4",
|
|
75
76
|
"typedoc": "^0.27.5",
|
|
76
77
|
"typedoc-plugin-markdown": "^4.3.2",
|
|
77
|
-
"typescript": "^5.
|
|
78
|
-
"vitest": "^1.6.
|
|
79
|
-
"webpack": "^5.
|
|
78
|
+
"typescript": "^5.9.3",
|
|
79
|
+
"vitest": "^1.6.1",
|
|
80
|
+
"webpack": "^5.105.2",
|
|
80
81
|
"webpack-bundle-analyzer": "^4.10.1",
|
|
81
|
-
"webpack-cli": "^5.1.4"
|
|
82
|
-
"terser-webpack-plugin": "^5.3.9"
|
|
82
|
+
"webpack-cli": "^5.1.4"
|
|
83
83
|
},
|
|
84
84
|
"files": [
|
|
85
85
|
"dist",
|