nostr-websocket-utils 0.3.17 → 0.4.0

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.
Files changed (87) hide show
  1. package/README.md +2 -2
  2. package/dist/__mocks__/mockLogger.d.ts +7 -7
  3. package/dist/__mocks__/mockLogger.d.ts.map +1 -1
  4. package/dist/browser/nostr-websocket-utils.min.js +3 -2
  5. package/dist/browser/nostr-websocket-utils.min.js.map +7 -1
  6. package/dist/browser/report.html +1 -1
  7. package/dist/cjs/__mocks__/mockLogger.d.ts +7 -7
  8. package/dist/cjs/__mocks__/mockLogger.d.ts.map +1 -1
  9. package/dist/cjs/core/nostr-server.js +3 -3
  10. package/dist/cjs/core/nostr-server.js.map +1 -1
  11. package/dist/cjs/core/server.js +2 -2
  12. package/dist/cjs/core/server.js.map +1 -1
  13. package/dist/cjs/crypto/handlers.js +1 -1
  14. package/dist/cjs/crypto/handlers.js.map +1 -1
  15. package/dist/cjs/nips/index.d.ts +2 -0
  16. package/dist/cjs/nips/index.d.ts.map +1 -1
  17. package/dist/cjs/nips/index.js +5 -1
  18. package/dist/cjs/nips/index.js.map +1 -1
  19. package/dist/cjs/nips/nip-04.js +2 -2
  20. package/dist/cjs/nips/nip-04.js.map +1 -1
  21. package/dist/cjs/nips/nip-13.js +1 -1
  22. package/dist/cjs/nips/nip-13.js.map +1 -1
  23. package/dist/cjs/nips/nip-16.js +2 -2
  24. package/dist/cjs/nips/nip-16.js.map +1 -1
  25. package/dist/cjs/nips/nip-22.js +2 -2
  26. package/dist/cjs/nips/nip-22.js.map +1 -1
  27. package/dist/cjs/nips/nip-26.d.ts.map +1 -1
  28. package/dist/cjs/nips/nip-26.js +3 -7
  29. package/dist/cjs/nips/nip-26.js.map +1 -1
  30. package/dist/cjs/nips/nip-28.d.ts.map +1 -1
  31. package/dist/cjs/nips/nip-28.js +4 -12
  32. package/dist/cjs/nips/nip-28.js.map +1 -1
  33. package/dist/cjs/nips/nip-33.js +2 -2
  34. package/dist/cjs/nips/nip-33.js.map +1 -1
  35. package/dist/cjs/nips/nip-44.d.ts +69 -0
  36. package/dist/cjs/nips/nip-44.d.ts.map +1 -0
  37. package/dist/cjs/nips/nip-44.js +143 -0
  38. package/dist/cjs/nips/nip-44.js.map +1 -0
  39. package/dist/cjs/nips/nip-46.d.ts +112 -0
  40. package/dist/cjs/nips/nip-46.d.ts.map +1 -0
  41. package/dist/cjs/nips/nip-46.js +123 -0
  42. package/dist/cjs/nips/nip-46.js.map +1 -0
  43. package/dist/cjs/transport/websocket.js +1 -1
  44. package/dist/cjs/transport/websocket.js.map +1 -1
  45. package/dist/cjs/utils/rate-limiter.d.ts.map +1 -1
  46. package/dist/cjs/utils/rate-limiter.js +4 -17
  47. package/dist/cjs/utils/rate-limiter.js.map +1 -1
  48. package/dist/core/nostr-server.js +3 -3
  49. package/dist/core/nostr-server.js.map +1 -1
  50. package/dist/core/server.js +2 -2
  51. package/dist/core/server.js.map +1 -1
  52. package/dist/crypto/handlers.js +1 -1
  53. package/dist/crypto/handlers.js.map +1 -1
  54. package/dist/nips/index.d.ts +2 -0
  55. package/dist/nips/index.d.ts.map +1 -1
  56. package/dist/nips/index.js +5 -1
  57. package/dist/nips/index.js.map +1 -1
  58. package/dist/nips/nip-04.js +2 -2
  59. package/dist/nips/nip-04.js.map +1 -1
  60. package/dist/nips/nip-13.js +1 -1
  61. package/dist/nips/nip-13.js.map +1 -1
  62. package/dist/nips/nip-16.js +2 -2
  63. package/dist/nips/nip-16.js.map +1 -1
  64. package/dist/nips/nip-22.js +2 -2
  65. package/dist/nips/nip-22.js.map +1 -1
  66. package/dist/nips/nip-26.d.ts.map +1 -1
  67. package/dist/nips/nip-26.js +4 -8
  68. package/dist/nips/nip-26.js.map +1 -1
  69. package/dist/nips/nip-28.d.ts.map +1 -1
  70. package/dist/nips/nip-28.js +4 -12
  71. package/dist/nips/nip-28.js.map +1 -1
  72. package/dist/nips/nip-33.js +2 -2
  73. package/dist/nips/nip-33.js.map +1 -1
  74. package/dist/nips/nip-44.d.ts +69 -0
  75. package/dist/nips/nip-44.d.ts.map +1 -0
  76. package/dist/nips/nip-44.js +134 -0
  77. package/dist/nips/nip-44.js.map +1 -0
  78. package/dist/nips/nip-46.d.ts +112 -0
  79. package/dist/nips/nip-46.d.ts.map +1 -0
  80. package/dist/nips/nip-46.js +119 -0
  81. package/dist/nips/nip-46.js.map +1 -0
  82. package/dist/transport/websocket.js +1 -1
  83. package/dist/transport/websocket.js.map +1 -1
  84. package/dist/utils/rate-limiter.d.ts.map +1 -1
  85. package/dist/utils/rate-limiter.js +4 -17
  86. package/dist/utils/rate-limiter.js.map +1 -1
  87. package/package.json +8 -12
package/README.md CHANGED
@@ -191,7 +191,7 @@ Comprehensive API documentation is available in our [documentation site](https:/
191
191
  - [NostrServer](docs/classes/NostrServer.md) - High-level Nostr server
192
192
 
193
193
  ### Types and Interfaces
194
- - [NostrWSMessage](docs/interfaces/NostrWSMessage.md) - Message structure
194
+ - [NostrWSMessage](docs/type-aliases/NostrWSMessage.md) - Message structure
195
195
  - [NostrWSOptions](docs/interfaces/NostrWSOptions.md) - Configuration options
196
196
  - [NostrWSSubscription](docs/interfaces/NostrWSSubscription.md) - Subscription interface
197
197
  - [ExtendedWebSocket](docs/interfaces/ExtendedWebSocket.md) - Enhanced WebSocket interface
@@ -201,7 +201,7 @@ Comprehensive API documentation is available in our [documentation site](https:/
201
201
  - [getLogger](docs/functions/getLogger.md) - Logging utility
202
202
 
203
203
  ### Type Definitions
204
- - [MessageType](docs/enumerations/NostrWSMessageType.md) - Message type enumeration
204
+ - [ConnectionState](docs/enumerations/ConnectionState.md) - Connection state enumeration
205
205
  - [Global Types](docs/globals.md) - Global type definitions
206
206
 
207
207
  ## Examples
@@ -7,13 +7,13 @@ export declare class MockPinoLogger implements Partial<Logger> {
7
7
  useLevelLabels: boolean;
8
8
  useOnlyCustomLevels: boolean;
9
9
  customLevels: {};
10
- debug: import("vitest").Mock<(...args: any[]) => any>;
11
- info: import("vitest").Mock<(...args: any[]) => any>;
12
- warn: import("vitest").Mock<(...args: any[]) => any>;
13
- error: import("vitest").Mock<(...args: any[]) => any>;
14
- fatal: import("vitest").Mock<(...args: any[]) => any>;
15
- trace: import("vitest").Mock<(...args: any[]) => any>;
16
- silent: import("vitest").Mock<(...args: any[]) => any>;
10
+ debug: import("vitest").Mock<import("@vitest/spy").Procedure>;
11
+ info: import("vitest").Mock<import("@vitest/spy").Procedure>;
12
+ warn: import("vitest").Mock<import("@vitest/spy").Procedure>;
13
+ error: import("vitest").Mock<import("@vitest/spy").Procedure>;
14
+ fatal: import("vitest").Mock<import("@vitest/spy").Procedure>;
15
+ trace: import("vitest").Mock<import("@vitest/spy").Procedure>;
16
+ silent: import("vitest").Mock<import("@vitest/spy").Procedure>;
17
17
  levels: {
18
18
  values: {
19
19
  fatal: number;
@@ -1 +1 @@
1
- {"version":3,"file":"mockLogger.d.ts","sourceRoot":"","sources":["../../src/__mocks__/mockLogger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAEjE,qBAAa,cAAe,YAAW,OAAO,CAAC,MAAM,CAAC;IACpD,KAAK,EAAE,MAAM,CAAW;IACxB,QAAQ,EAAE,MAAM,CAAM;IACtB,OAAO,EAAE,MAAM,CAAW;IAC1B,WAAW,EAAE,MAAM,CAAK;IACxB,cAAc,EAAE,OAAO,CAAQ;IAC/B,mBAAmB,EAAE,OAAO,CAAS;IACrC,YAAY,KAAM;IAElB,KAAK,iDAAW;IAChB,IAAI,iDAAW;IACf,IAAI,iDAAW;IACf,KAAK,iDAAW;IAChB,KAAK,iDAAW;IAChB,KAAK,iDAAW;IAChB,MAAM,iDAAW;IAEjB,MAAM;;;;;;;;;;;;;;;;;MAiBJ;IAEF,QAAQ,WAAc;IACtB,KAAK,sBAA2B;IAChC,cAAc,gBAAc;IAE5B,KAAK,CAAC,iBAAiB,SAAS,MAAM,GAAG,KAAK,EAC5C,SAAS,EAAE,QAAQ,EACnB,QAAQ,CAAC,EAAE,kBAAkB,CAAC,iBAAiB,CAAC,GAC/C,MAAM,CAAC,iBAAiB,CAAC;IAI5B,MAAM,CAAC,MAAM,IAAI,MAAM;CAGxB;AAED,eAAO,MAAM,gBAAgB,QAAO,MAAiC,CAAC"}
1
+ {"version":3,"file":"mockLogger.d.ts","sourceRoot":"","sources":["../../src/__mocks__/mockLogger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAEjE,qBAAa,cAAe,YAAW,OAAO,CAAC,MAAM,CAAC;IACpD,KAAK,EAAE,MAAM,CAAW;IACxB,QAAQ,EAAE,MAAM,CAAM;IACtB,OAAO,EAAE,MAAM,CAAW;IAC1B,WAAW,EAAE,MAAM,CAAK;IACxB,cAAc,EAAE,OAAO,CAAQ;IAC/B,mBAAmB,EAAE,OAAO,CAAS;IACrC,YAAY,KAAM;IAElB,KAAK,yDAAW;IAChB,IAAI,yDAAW;IACf,IAAI,yDAAW;IACf,KAAK,yDAAW;IAChB,KAAK,yDAAW;IAChB,KAAK,yDAAW;IAChB,MAAM,yDAAW;IAEjB,MAAM;;;;;;;;;;;;;;;;;MAiBJ;IAEF,QAAQ,WAAc;IACtB,KAAK,sBAA2B;IAChC,cAAc,gBAAc;IAE5B,KAAK,CAAC,iBAAiB,SAAS,MAAM,GAAG,KAAK,EAC5C,SAAS,EAAE,QAAQ,EACnB,QAAQ,CAAC,EAAE,kBAAkB,CAAC,iBAAiB,CAAC,GAC/C,MAAM,CAAC,iBAAiB,CAAC;IAI5B,MAAM,CAAC,MAAM,IAAI,MAAM;CAGxB;AAED,eAAO,MAAM,gBAAgB,QAAO,MAAiC,CAAC"}
@@ -1,2 +1,3 @@
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 s=n&&n.stringify||t;if("object"==typeof e&&null!==e){var i=r.length+1;if(1===i)return e;var o=new Array(i);o[0]=s(e);for(var l=1;l<i;l++)o[l]=s(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+=s(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 s=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||{},i={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||s;e.browser.write&&(e.browser.asObject=!0);const n=e.serializers||{},i=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]:s[e]||s[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:i,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=i,w._stdErrSerialize=a,w.child=function(r,s){if(!r)throw new Error("missing bindings for child Pino");s=s||{},i&&r.serializers&&(s.serializers=r.serializers);const o=s.serializers;if(i&&o){var l=Object.assign({},n,o),a=!0===e.browser.serialize?Object.keys(l):i;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,i){if(Object.defineProperty(e,i,{value:o(e.level,r)>o(i,r)?y:r[l][i],writable:!0,enumerable:!0,configurable:!0}),!t.transmit&&e[i]===y)return;e[i]=function(e,t,r,i){return a=e[l][i],function(){const l=t.timestamp(),c=new Array(arguments.length),u=Object.getPrototypeOf&&Object.getPrototypeOf(this)===s?s: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,s,i={}){const{level:o=()=>e.levels.values[t],log:l=e=>e}=i;e._serialize&&g(r,e._serialize,e.serializers,e._stdErrSerialize);const a=r.slice();let c=a[0];const u={};s&&(u.time=s),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,i,c,l,t.formatters)):a.apply(u,c),t.transmit){const n=t.transmit.level||e._level,s=r.levels.values[n],a=r.levels.values[i];if(a<s)return;!function(e,t,r){const n=t.send,s=t.ts,i=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=s,e._logEvent.messages=r.filter(function(e){return-1===a.indexOf(e)}),e._logEvent.level.label=i,e._logEvent.level.value=o,n(i,e._logEvent,l),e._logEvent=d(a)}(this,{ts:l,methodLevel:i,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,i);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[i]=function(e,t){return function(){return t.apply(this,[...e,...arguments])}}(c,e[i]))}function g(e,t,r,n){for(const s in e)if(n&&e[s]instanceof Error)e[s]=h.stdSerializers.err(e[s]);else if("object"==typeof e[s]&&!Array.isArray(e[s]))for(const n in e[s])t&&t.indexOf(n)>-1&&n in r&&(e[s][n]=r[n](e[s][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=i,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 s=t[n];if(void 0!==s)return s.exports;var i=t[n]={exports:{}};return e[n](i,i.exports,r),i.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 s,i,o=r(591),l=r.n(o);!function(e){e.HIGH="HIGH",e.NORMAL="NORMAL",e.LOW="LOW"}(s||(s={})),function(e){e.CONNECTING="CONNECTING",e.CONNECTED="CONNECTED",e.DISCONNECTED="DISCONNECTED",e.RECONNECTING="RECONNECTING",e.FAILED="FAILED"}(i||(i={}));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(s,i){function o(e){try{a(n.next(e))}catch(e){i(e)}}function l(e){try{a(n.throw(e))}catch(e){i(e)}}function a(e){var t;e.done?s(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:s.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===s.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;for(let r=this.queue.length-1;r>=0;r--)e-this.queue[r].queuedAt>t&&(this.logger.warn({message:this.queue[r]},"Message is stale, removing from queue"),this.queue.splice(r,1))}}})}getSize(){return this.queue.length}clear(){this.queue.length=0}}var g=function(e,t,r,n){return new(r||(r=Promise))(function(s,i){function o(e){try{a(n.next(e))}catch(e){i(e)}}function l(e){try{a(n.throw(e))}catch(e){i(e)}}function a(e){var t;e.done?s(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=i.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!==i.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!==i.CONNECTED)if(this.connectionState!==i.CONNECTING){this.connectionState=i.CONNECTING;try{const e=this.relayUrls[0];!e.startsWith("ws://")||e.includes("localhost")||e.includes("127.0.0.1")||console.warn("[nostr-websocket] WARNING: Connecting over plaintext ws:// — messages are not encrypted"),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=i.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!==i.DISCONNECTED?(this.connectionState=i.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!==i.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=i.DISCONNECTED,this.ws=null,this.options.retryAttempts&&this.reconnectAttempts<this.options.retryAttempts){this.connectionState=i.RECONNECTING,this.reconnectAttempts++;const e=this.options.retryDelay||1e3,t=3e4,r=Math.min(e*Math.pow(2,this.reconnectAttempts),t),n=r+.1*r*Math.random();this.logger.info({attempt:this.reconnectAttempts,maxAttempts:this.options.retryAttempts,delay:Math.round(n)},`Reconnecting in ${Math.round(n)}ms`),this.reconnectTimeout=setTimeout(()=>{this.connect().catch(e=>{this.logger.error({error:e},"Reconnection failed")})},n)}else this.logger.warn("Max reconnection attempts reached"),this.connectionState=i.FAILED}getConnectionState(){return this.connectionState}}};return n=n.default})());
2
- //# sourceMappingURL=nostr-websocket-utils.min.js.map
1
+ "use strict";var NostrWebSocketUtils=(()=>{var re=Object.create;var L=Object.defineProperty;var ne=Object.getOwnPropertyDescriptor;var se=Object.getOwnPropertyNames;var ie=Object.getPrototypeOf,oe=Object.prototype.hasOwnProperty;var W=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ae=(e,t)=>{for(var r in t)L(e,r,{get:t[r],enumerable:!0})},G=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of se(t))!oe.call(e,i)&&i!==r&&L(e,i,{get:()=>t[i],enumerable:!(s=ne(t,i))||s.enumerable});return e};var V=(e,t,r)=>(r=e!=null?re(ie(e)):{},G(t||!e||!e.__esModule?L(r,"default",{value:e,enumerable:!0}):r,e)),ce=e=>G(L({},"__esModule",{value:!0}),e);var H=W((je,Q)=>{"use strict";Q.exports=function(){throw new Error("ws does not work in the browser. Browser clients must use the native WebSocket object")}});var J=W((qe,B)=>{"use strict";function le(e){try{return JSON.stringify(e)}catch{return'"[Circular]"'}}B.exports=ue;function ue(e,t,r){var s=r&&r.stringify||le,i=1;if(typeof e=="object"&&e!==null){var a=t.length+i;if(a===1)return e;var f=new Array(a);f[0]=s(e);for(var u=1;u<a;u++)f[u]=s(t[u]);return f.join(" ")}if(typeof e!="string")return e;var m=t.length;if(m===0)return e;for(var n="",c=1-i,o=-1,g=e&&e.length||0,l=0;l<g;){if(e.charCodeAt(l)===37&&l+1<g){switch(o=o>-1?o:0,e.charCodeAt(l+1)){case 100:case 102:if(c>=m||t[c]==null)break;o<l&&(n+=e.slice(o,l)),n+=Number(t[c]),o=l+2,l++;break;case 105:if(c>=m||t[c]==null)break;o<l&&(n+=e.slice(o,l)),n+=Math.floor(Number(t[c])),o=l+2,l++;break;case 79:case 111:case 106:if(c>=m||t[c]===void 0)break;o<l&&(n+=e.slice(o,l));var w=typeof t[c];if(w==="string"){n+="'"+t[c]+"'",o=l+2,l++;break}if(w==="function"){n+=t[c].name||"<anonymous>",o=l+2,l++;break}n+=s(t[c]),o=l+2,l++;break;case 115:if(c>=m)break;o<l&&(n+=e.slice(o,l)),n+=String(t[c]),o=l+2,l++;break;case 37:o<l&&(n+=e.slice(o,l)),n+="%",o=l+2,l++,c--;break}++c}++l}return o===-1?e:(o<g&&(n+=e.slice(o)),n)}});var ee=W((Ie,j)=>{"use strict";var K=J();j.exports=p;var N=Ce().console||{},fe={mapHttpRequest:T,mapHttpResponse:T,wrapRequestSerializer:M,wrapResponseSerializer:M,wrapErrorSerializer:M,req:T,res:T,err:$,errWithCause:$};function b(e,t){return e==="silent"?1/0:t.levels.values[e]}var q=Symbol("pino.logFuncs"),z=Symbol("pino.hierarchy"),me={error:"log",fatal:"error",warn:"error",info:"log",debug:"log",trace:"log"};function U(e,t){let r={logger:t,parent:e[z]};t[z]=r}function he(e,t,r){let s={};t.forEach(i=>{s[i]=r[i]?r[i]:N[i]||N[me[i]||"log"]||v}),e[q]=s}function ge(e,t){return Array.isArray(e)?e.filter(function(s){return s!=="!stdSerializers.err"}):e===!0?Object.keys(t):!1}function p(e){e=e||{},e.browser=e.browser||{};let t=e.browser.transmit;if(t&&typeof t.send!="function")throw Error("pino: transmit option must have a send function");let r=e.browser.write||N;e.browser.write&&(e.browser.asObject=!0);let s=e.serializers||{},i=ge(e.browser.serialize,s),a=e.browser.serialize;Array.isArray(e.browser.serialize)&&e.browser.serialize.indexOf("!stdSerializers.err")>-1&&(a=!1);let f=Object.keys(e.customLevels||{}),u=["error","fatal","warn","info","debug","trace"].concat(f);typeof r=="function"&&u.forEach(function(h){r[h]=r}),(e.enabled===!1||e.browser.disabled)&&(e.level="silent");let m=e.level||"info",n=Object.create(r);n.log||(n.log=v),he(n,u,r),U({},n),Object.defineProperty(n,"levelVal",{get:o}),Object.defineProperty(n,"level",{get:g,set:l});let c={transmit:t,serialize:i,asObject:e.browser.asObject,asObjectBindingsOnly:e.browser.asObjectBindingsOnly,formatters:e.browser.formatters,reportCaller:e.browser.reportCaller,levels:u,timestamp:Ee(e),messageKey:e.messageKey||"msg",onChild:e.onChild||v};n.levels=de(e),n.level=m,n.isLevelEnabled=function(h){return this.levels.values[h]?this.levels.values[h]>=this.levels.values[this.level]:!1},n.setMaxListeners=n.getMaxListeners=n.emit=n.addListener=n.on=n.prependListener=n.once=n.prependOnceListener=n.removeListener=n.removeAllListeners=n.listeners=n.listenerCount=n.eventNames=n.write=n.flush=v,n.serializers=s,n._serialize=i,n._stdErrSerialize=a,n.child=function(...h){return w.call(this,c,...h)},t&&(n._logEvent=A());function o(){return b(this.level,this)}function g(){return this._level}function l(h){if(h!=="silent"&&!this.levels.values[h])throw Error("unknown level "+h);this._level=h,y(this,c,n,"error"),y(this,c,n,"fatal"),y(this,c,n,"warn"),y(this,c,n,"info"),y(this,c,n,"debug"),y(this,c,n,"trace"),f.forEach(d=>{y(this,c,n,d)})}function w(h,d,S){if(!d)throw new Error("missing bindings for child Pino");S=S||{},i&&d.serializers&&(S.serializers=d.serializers);let R=S.serializers;if(i&&R){var C=Object.assign({},s,R),F=e.browser.serialize===!0?Object.keys(C):i;delete d.serializers,I([d],F,C,this._stdErrSerialize)}function P(x){this._childLevel=(x._childLevel|0)+1,this.bindings=d,C&&(this.serializers=C,this._serialize=F),t&&(this._logEvent=A([].concat(x._logEvent.bindings,d)))}P.prototype=this;let E=new P(this);return U(this,E),E.child=function(...x){return w.call(this,h,...x)},E.level=S.level||this.level,h.onChild(E),E}return n}function de(e){let t=e.customLevels||{},r=Object.assign({},p.levels.values,t),s=Object.assign({},p.levels.labels,pe(t));return{values:r,labels:s}}function pe(e){let t={};return Object.keys(e).forEach(function(r){t[e[r]]=r}),t}p.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"}};p.stdSerializers=fe;p.stdTimeFunctions=Object.assign({},{nullTime:Y,epochTime:Z,unixTime:Ne,isoTime:Oe});function be(e){let t=[];e.bindings&&t.push(e.bindings);let r=e[z];for(;r.parent;)r=r.parent,r.logger.bindings&&t.push(r.logger.bindings);return t.reverse()}function y(e,t,r,s){if(Object.defineProperty(e,s,{value:b(e.level,r)>b(s,r)?v:r[q][s],writable:!0,enumerable:!0,configurable:!0}),e[s]===v){if(!t.transmit)return;let a=t.transmit.level||e.level,f=b(a,r);if(b(s,r)<f)return}e[s]=ve(e,t,r,s);let i=be(e);i.length!==0&&(e[s]=ye(i,e[s]))}function ye(e,t){return function(){return t.apply(this,[...e,...arguments])}}function ve(e,t,r,s){return(function(i){return function(){let f=t.timestamp(),u=new Array(arguments.length),m=Object.getPrototypeOf&&Object.getPrototypeOf(this)===N?N:this;for(var n=0;n<u.length;n++)u[n]=arguments[n];var c=!1;if(t.serialize&&(I(u,this._serialize,this.serializers,this._stdErrSerialize),c=!0),t.asObject||t.formatters){let o=we(this,s,u,f,t);if(t.reportCaller&&o&&o.length>0&&o[0]&&typeof o[0]=="object")try{let g=X();g&&(o[0].caller=g)}catch{}i.call(m,...o)}else{if(t.reportCaller)try{let o=X();o&&u.push(o)}catch{}i.apply(m,u)}if(t.transmit){let o=t.transmit.level||e._level,g=b(o,r),l=b(s,r);if(l<g)return;Se(this,{ts:f,methodLevel:s,methodValue:l,transmitLevel:o,transmitValue:r.levels.values[t.transmit.level||e._level],send:t.transmit.send,val:b(e._level,r)},u,c)}}})(e[q][s])}function we(e,t,r,s,i){let{level:a,log:f=o=>o}=i.formatters||{},u=r.slice(),m=u[0],n={},c=(e._childLevel|0)+1;if(c<1&&(c=1),s&&(n.time=s),a){let o=a(t,e.levels.values[t]);Object.assign(n,o)}else n.level=e.levels.values[t];if(i.asObjectBindingsOnly){if(m!==null&&typeof m=="object")for(;c--&&typeof u[0]=="object";)Object.assign(n,u.shift());return[f(n),...u]}else{if(m!==null&&typeof m=="object"){for(;c--&&typeof u[0]=="object";)Object.assign(n,u.shift());m=u.length?K(u.shift(),u):void 0}else typeof m=="string"&&(m=K(u.shift(),u));return m!==void 0&&(n[i.messageKey]=m),[f(n)]}}function I(e,t,r,s){for(let i in e)if(s&&e[i]instanceof Error)e[i]=p.stdSerializers.err(e[i]);else if(typeof e[i]=="object"&&!Array.isArray(e[i])&&t)for(let a in e[i])t.indexOf(a)>-1&&a in r&&(e[i][a]=r[a](e[i][a]))}function Se(e,t,r,s=!1){let i=t.send,a=t.ts,f=t.methodLevel,u=t.methodValue,m=t.val,n=e._logEvent.bindings;s||I(r,e._serialize||Object.keys(e.serializers),e.serializers,e._stdErrSerialize===void 0?!0:e._stdErrSerialize),e._logEvent.ts=a,e._logEvent.messages=r.filter(function(c){return n.indexOf(c)===-1}),e._logEvent.level.label=f,e._logEvent.level.value=u,i(f,e._logEvent,m),e._logEvent=A(n)}function A(e){return{ts:0,messages:[],bindings:e||[],level:{label:"",value:0}}}function $(e){let t={type:e.constructor.name,msg:e.message,stack:e.stack};for(let r in e)t[r]===void 0&&(t[r]=e[r]);return t}function Ee(e){return typeof e.timestamp=="function"?e.timestamp:e.timestamp===!1?Y:Z}function T(){return{}}function M(e){return e}function v(){}function Y(){return!1}function Z(){return Date.now()}function Ne(){return Math.round(Date.now()/1e3)}function Oe(){return new Date(Date.now()).toISOString()}function Ce(){function e(t){return typeof t<"u"&&t}try{return typeof globalThis<"u"||Object.defineProperty(Object.prototype,"globalThis",{get:function(){return delete Object.prototype.globalThis,this.globalThis=this},configurable:!0}),globalThis}catch{return e(self)||e(window)||e(this)||{}}}j.exports.default=p;j.exports.pino=p;function X(){let e=new Error().stack;if(!e)return null;let t=e.split(`
2
+ `);for(let r=1;r<t.length;r++){let s=t[r].trim();if(/(^at\s+)?(createWrap|LOG|set\s*\(|asObject|Object\.apply|Function\.apply)/.test(s)||s.indexOf("browser.js")!==-1||s.indexOf("node:internal")!==-1||s.indexOf("node_modules")!==-1)continue;let i=s.match(/\((.*?):(\d+):(\d+)\)/);if(i||(i=s.match(/at\s+(.*?):(\d+):(\d+)/)),i){let a=i[1],f=i[2],u=i[3];return a+":"+f+":"+u}}return null}});var Le={};ae(Le,{NostrWSClient:()=>O,default:()=>xe});var te=V(H(),1);var _=V(ee(),1);function k(e){return(0,_.default)({name:e,level:process.env.LOG_LEVEL||"info",timestamp:_.default.stdTimeFunctions.isoTime})}var D=class{constructor(t,r={}){this.sender=t;this.options=r;this.queue=[];this.processing=!1;this.logger=k("MessageQueue")}async enqueue(t){if(this.options.maxSize&&this.queue.length>=this.options.maxSize)throw new Error("Queue is full");let[r,...s]=t,i={type:r,data:s.length===1?s[0]:s,priority:"NORMAL",queuedAt:Date.now(),retryCount:0};this.queue.push(i),this.queue.sort((a,f)=>a.priority===f.priority?a.queuedAt-f.queuedAt:a.priority==="HIGH"?-1:1),this.processing||this.processQueue().catch(a=>{this.logger.error({error:a},"Error processing queue")})}async processQueue(){if(!(this.processing||this.queue.length===0)){this.processing=!0;try{for(;this.queue.length>0;){let t=this.queue[0],r=[t.type,t.data];try{await this.sender(r),this.queue.shift()}catch(s){if(this.logger.error({error:s,message:r},"Failed to send message"),this.options.maxRetries&&t.retryCount>=this.options.maxRetries){this.logger.warn({message:r},"Max retries reached, removing message from queue"),this.queue.shift();continue}t.retryCount++,await new Promise(i=>setTimeout(i,this.options.retryDelay||1e3))}}}finally{this.processing=!1}if(this.options.staleTimeout){let t=Date.now(),r=this.options.staleTimeout;for(let s=this.queue.length-1;s>=0;s--)t-this.queue[s].queuedAt>r&&(this.logger.warn({message:this.queue[s]},"Message is stale, removing from queue"),this.queue.splice(s,1))}}}getSize(){return this.queue.length}clear(){this.queue.length=0}};var O=class{constructor(t,r={}){this.relayUrls=t;this.options=r;this.ws=null;this.connectionState="DISCONNECTED";this.reconnectAttempts=0;this.reconnectTimeout=null;this.logger=r.logger||k("NostrWSClient"),this.queue=new D(async s=>{if(!this.ws||this.connectionState!=="CONNECTED")throw new Error("Not connected to relay");try{this.ws.send(JSON.stringify(s)),this.logger.debug({message:s},"Message sent")}catch(i){throw this.logger.error({error:i,message:s},"Failed to send message"),i}},{maxSize:r.queueSize,maxRetries:r.maxRetries,retryDelay:r.retryDelay})}async connect(){if(this.connectionState==="CONNECTED"){this.logger.debug("Already connected");return}if(this.connectionState==="CONNECTING"){this.logger.debug("Connection already in progress");return}this.connectionState="CONNECTING";try{let t=this.relayUrls[0];t.startsWith("ws://")&&!t.includes("localhost")&&!t.includes("127.0.0.1")&&console.warn("[nostr-websocket] WARNING: Connecting over plaintext ws:// \u2014 messages are not encrypted"),this.ws=new te.default(t),await new Promise((r,s)=>{let i=setTimeout(()=>{s(new Error("Connection timeout"))},this.options.connectionTimeout||5e3);this.ws.on("open",()=>{clearTimeout(i),this.connectionState="CONNECTED",this.reconnectAttempts=0,this.logger.info("Connected to relay"),r()}),this.ws.on("error",a=>{clearTimeout(i),this.logger.error({error:a},"WebSocket error"),this.options.onError&&this.options.onError(a),s(a)}),this.ws.on("close",()=>{this.handleDisconnect()}),this.ws.on("message",a=>{this.handleMessage(a)})})}catch(t){throw this.logger.error({error:t},"Failed to connect"),this.handleDisconnect(),t}}async disconnect(){if(this.connectionState==="DISCONNECTED"){this.logger.debug("Already disconnected");return}this.connectionState="DISCONNECTED",this.reconnectTimeout&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=null),this.ws&&(this.ws.close(),this.ws=null),this.logger.info("Disconnected from relay")}async sendMessage(t){if(this.connectionState!=="CONNECTED")throw new Error("Not connected to relay");await this.queue.enqueue(t)}handleMessage(t){try{let r=JSON.parse(t.toString());this.logger.debug({message:r},"Received message"),this.options.onMessage&&this.options.onMessage(t.toString())}catch(r){this.logger.error({error:r,data:t},"Failed to parse message"),this.options.onError&&this.options.onError(r)}}handleDisconnect(){if(this.connectionState="DISCONNECTED",this.ws=null,this.options.retryAttempts&&this.reconnectAttempts<this.options.retryAttempts){this.connectionState="RECONNECTING",this.reconnectAttempts++;let t=this.options.retryDelay||1e3,s=Math.min(t*Math.pow(2,this.reconnectAttempts),3e4),i=s*.1*Math.random(),a=s+i;this.logger.info({attempt:this.reconnectAttempts,maxAttempts:this.options.retryAttempts,delay:Math.round(a)},`Reconnecting in ${Math.round(a)}ms`),this.reconnectTimeout=setTimeout(()=>{this.connect().catch(f=>{this.logger.error({error:f},"Reconnection failed")})},a)}else this.logger.warn("Max reconnection attempts reached"),this.connectionState="FAILED"}getConnectionState(){return this.connectionState}};var xe={NostrWSClient:O};return ce(Le);})();
3
+ //# sourceMappingURL=nostr-websocket-utils.min.js.map
@@ -1 +1,7 @@
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 (reverse iteration to avoid index mutation bug)\n if (this.options.staleTimeout) {\n const now = Date.now();\n const staleTimeout = this.options.staleTimeout;\n for (let i = this.queue.length - 1; i >= 0; i--) {\n if (now - this.queue[i].queuedAt > staleTimeout) {\n this.logger.warn(\n { message: this.queue[i] },\n 'Message is stale, removing from queue'\n );\n this.queue.splice(i, 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\n if (url.startsWith('ws://') && !url.includes('localhost') && !url.includes('127.0.0.1')) {\n console.warn('[nostr-websocket] WARNING: Connecting over plaintext ws:// — messages are not encrypted');\n }\n\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 baseDelay = this.options.retryDelay || 1000;\n const maxDelay = 30000; // 30 second cap\n const delay = Math.min(baseDelay * Math.pow(2, this.reconnectAttempts), maxDelay);\n const jitter = delay * 0.1 * Math.random(); // 10% jitter\n const totalDelay = delay + jitter;\n\n this.logger.info(\n { attempt: this.reconnectAttempts, maxAttempts: this.options.retryAttempts, delay: Math.round(totalDelay) },\n `Reconnecting in ${Math.round(totalDelay)}ms`\n );\n\n this.reconnectTimeout = setTimeout(() => {\n this.connect().catch(error => {\n this.logger.error({ error }, 'Reconnection failed');\n });\n }, totalDelay);\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","startsWith","includes","reject","timeout","connectionTimeout","clearTimeout","onError","handleDisconnect","handleMessage","disconnect","close","sendMessage","parse","toString","onMessage","retryAttempts","RECONNECTING","baseDelay","maxDelay","delay","min","pow","totalDelay","random","attempt","maxAttempts","FAILED","getConnectionState"],"sourceRoot":""}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../node_modules/ws/browser.js", "../../node_modules/quick-format-unescaped/index.js", "../../node_modules/pino/browser.js", "../../src/browser.ts", "../../src/core/client.ts", "../../src/utils/logger.ts", "../../src/core/queue.ts"],
4
+ "sourcesContent": ["'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'\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\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 asObjectBindingsOnly: opts.browser.asObjectBindingsOnly,\n formatters: opts.browser.formatters,\n reportCaller: opts.browser.reportCaller,\n levels,\n timestamp: getTimeFunction(opts),\n messageKey: opts.messageKey || 'msg',\n onChild: opts.onChild || noop\n }\n logger.levels = getLevels(opts)\n logger.level = level\n\n logger.isLevelEnabled = function (level) {\n if (!this.levels.values[level]) {\n return false\n }\n\n return this.levels.values[level] >= this.levels.values[this.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 = function (...args) { return child.call(this, setOpts, ...args) }\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 (setOpts, 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 newLogger.child = function (...args) { return child.call(this, setOpts, ...args) }\n // required to actually initialize the logger functions for any given child\n newLogger.level = childOptions.level || this.level // allow level to be set by childOptions\n setOpts.onChild(newLogger)\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 (self[level] === noop) {\n if (!opts.transmit) return\n\n const transmitLevel = opts.transmit.level || self.level\n const transmitValue = levelToValue(transmitLevel, rootLogger)\n const methodValue = levelToValue(level, rootLogger)\n if (methodValue < transmitValue) 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 var argsIsSerialized = false\n if (opts.serialize) {\n applySerializers(args, this._serialize, this.serializers, this._stdErrSerialize)\n argsIsSerialized = true\n }\n if (opts.asObject || opts.formatters) {\n const out = asObject(this, level, args, ts, opts)\n if (opts.reportCaller && out && out.length > 0 && out[0] && typeof out[0] === 'object') {\n try {\n const caller = getCallerLocation()\n if (caller) out[0].caller = caller\n } catch (e) {}\n }\n write.call(proto, ...out)\n } else {\n if (opts.reportCaller) {\n try {\n const caller = getCallerLocation()\n if (caller) args.push(caller)\n } catch (e) {}\n }\n write.apply(proto, args)\n }\n\n if (opts.transmit) {\n const transmitLevel = opts.transmit.level || self._level\n const transmitValue = levelToValue(transmitLevel, rootLogger)\n const methodValue = levelToValue(level, rootLogger)\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, argsIsSerialized)\n }\n }\n })(self[baseLogFunctionSymbol][level])\n}\n\nfunction asObject (logger, level, args, ts, opts) {\n const {\n level: levelFormatter,\n log: logObjectFormatter = (obj) => obj\n } = opts.formatters || {}\n const argsCloned = args.slice()\n let msg = argsCloned[0]\n const logObject = {}\n\n let lvl = (logger._childLevel | 0) + 1\n if (lvl < 1) lvl = 1\n\n if (ts) {\n logObject.time = ts\n }\n\n if (levelFormatter) {\n const formattedLevel = levelFormatter(level, logger.levels.values[level])\n Object.assign(logObject, formattedLevel)\n } else {\n logObject.level = logger.levels.values[level]\n }\n\n if (opts.asObjectBindingsOnly) {\n if (msg !== null && typeof msg === 'object') {\n while (lvl-- && typeof argsCloned[0] === 'object') {\n Object.assign(logObject, argsCloned.shift())\n }\n }\n\n const formattedLogObject = logObjectFormatter(logObject)\n return [formattedLogObject, ...argsCloned]\n } else {\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[opts.messageKey] = msg\n\n const formattedLogObject = logObjectFormatter(logObject)\n return [formattedLogObject]\n }\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]) && serialize) {\n for (const k in args[i]) {\n if (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, argsIsSerialized = false) {\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 if (!argsIsSerialized) {\n applySerializers(\n args,\n logger._serialize || Object.keys(logger.serializers),\n logger.serializers,\n logger._stdErrSerialize === undefined ? true : logger._stdErrSerialize\n )\n }\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\n// Attempt to extract the user callsite (file:line:column)\n/* istanbul ignore next */\nfunction getCallerLocation () {\n const stack = (new Error()).stack\n if (!stack) return null\n const lines = stack.split('\\n')\n for (let i = 1; i < lines.length; i++) {\n const l = lines[i].trim()\n // skip frames from this file and internals\n if (/(^at\\s+)?(createWrap|LOG|set\\s*\\(|asObject|Object\\.apply|Function\\.apply)/.test(l)) continue\n if (l.indexOf('browser.js') !== -1) continue\n if (l.indexOf('node:internal') !== -1) continue\n if (l.indexOf('node_modules') !== -1) continue\n // try formats like: at func (file:line:col) or at file:line:col\n let m = l.match(/\\((.*?):(\\d+):(\\d+)\\)/)\n if (!m) m = l.match(/at\\s+(.*?):(\\d+):(\\d+)/)\n if (m) {\n const file = m[1]\n const line = m[2]\n const col = m[3]\n return file + ':' + line + ':' + col\n }\n }\n return null\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\n if (url.startsWith('ws://') && !url.includes('localhost') && !url.includes('127.0.0.1')) {\n console.warn('[nostr-websocket] WARNING: Connecting over plaintext ws:// \u2014 messages are not encrypted');\n }\n\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 baseDelay = this.options.retryDelay || 1000;\n const maxDelay = 30000; // 30 second cap\n const delay = Math.min(baseDelay * Math.pow(2, this.reconnectAttempts), maxDelay);\n const jitter = delay * 0.1 * Math.random(); // 10% jitter\n const totalDelay = delay + jitter;\n\n this.logger.info(\n { attempt: this.reconnectAttempts, maxAttempts: this.options.retryAttempts, delay: Math.round(totalDelay) },\n `Reconnecting in ${Math.round(totalDelay)}ms`\n );\n\n this.reconnectTimeout = setTimeout(() => {\n this.connect().catch(error => {\n this.logger.error({ error }, 'Reconnection failed');\n });\n }, totalDelay);\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", "/**\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 (reverse iteration to avoid index mutation bug)\n if (this.options.staleTimeout) {\n const now = Date.now();\n const staleTimeout = this.options.staleTimeout;\n for (let i = this.queue.length - 1; i >= 0; i--) {\n if (now - this.queue[i].queuedAt > staleTimeout) {\n this.logger.warn(\n { message: this.queue[i] },\n 'Message is stale, removing from queue'\n );\n this.queue.splice(i, 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"],
5
+ "mappings": "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",
6
+ "names": ["require_browser", "__commonJSMin", "exports", "module", "require_quick_format_unescaped", "__commonJSMin", "exports", "module", "tryStringify", "o", "format", "f", "args", "opts", "ss", "offset", "len", "objects", "index", "argLen", "str", "a", "lastPos", "flen", "i", "type", "require_browser", "__commonJSMin", "exports", "module", "format", "pino", "_console", "pfGlobalThisOrFallback", "stdSerializers", "mock", "passthrough", "asErrValue", "levelToValue", "level", "logger", "baseLogFunctionSymbol", "hierarchySymbol", "logFallbackMap", "appendChildLogger", "parentLogger", "childLogger", "newEntry", "setupBaseLogFunctions", "levels", "proto", "logFunctions", "noop", "shouldSerialize", "serialize", "serializers", "k", "opts", "transmit", "stdErrSerialize", "customLevels", "getLevelVal", "getLevel", "setLevel", "setOpts", "getTimeFunction", "getLevels", "args", "child", "createLogEventShape", "set", "bindings", "childOptions", "childOptionsSerializers", "childSerializers", "childSerialize", "applySerializers", "Child", "parent", "newLogger", "values", "labels", "invertObject", "obj", "inverted", "key", "nullTime", "epochTime", "unixTime", "isoTime", "getBindingChain", "hierarchy", "self", "rootLogger", "transmitLevel", "transmitValue", "createWrap", "prependBindingsInArguments", "logFunc", "write", "ts", "i", "argsIsSerialized", "out", "asObject", "caller", "getCallerLocation", "methodValue", "levelFormatter", "logObjectFormatter", "argsCloned", "msg", "logObject", "lvl", "formattedLevel", "send", "methodLevel", "val", "arg", "err", "a", "defd", "o", "stack", "lines", "l", "m", "file", "line", "col", "browser_exports", "__export", "NostrWSClient", "browser_default", "import_ws", "import_pino", "createLogger", "name", "pino", "MessageQueue", "sender", "options", "createLogger", "message", "type", "data", "queueItem", "b", "error", "item", "resolve", "now", "staleTimeout", "i", "NostrWSClient", "relayUrls", "options", "createLogger", "MessageQueue", "message", "error", "url", "WebSocket", "resolve", "reject", "timeout", "data", "baseDelay", "delay", "jitter", "totalDelay", "browser_default", "NostrWSClient"]
7
+ }
@@ -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 [27 Feb 2026 at 10:45]</title>
6
+ <title>nostr-websocket-utils [2 Mar 2026 at 10:53]</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>
@@ -7,13 +7,13 @@ export declare class MockPinoLogger implements Partial<Logger> {
7
7
  useLevelLabels: boolean;
8
8
  useOnlyCustomLevels: boolean;
9
9
  customLevels: {};
10
- debug: import("vitest").Mock<(...args: any[]) => any>;
11
- info: import("vitest").Mock<(...args: any[]) => any>;
12
- warn: import("vitest").Mock<(...args: any[]) => any>;
13
- error: import("vitest").Mock<(...args: any[]) => any>;
14
- fatal: import("vitest").Mock<(...args: any[]) => any>;
15
- trace: import("vitest").Mock<(...args: any[]) => any>;
16
- silent: import("vitest").Mock<(...args: any[]) => any>;
10
+ debug: import("vitest").Mock<import("@vitest/spy").Procedure>;
11
+ info: import("vitest").Mock<import("@vitest/spy").Procedure>;
12
+ warn: import("vitest").Mock<import("@vitest/spy").Procedure>;
13
+ error: import("vitest").Mock<import("@vitest/spy").Procedure>;
14
+ fatal: import("vitest").Mock<import("@vitest/spy").Procedure>;
15
+ trace: import("vitest").Mock<import("@vitest/spy").Procedure>;
16
+ silent: import("vitest").Mock<import("@vitest/spy").Procedure>;
17
17
  levels: {
18
18
  values: {
19
19
  fatal: number;
@@ -1 +1 @@
1
- {"version":3,"file":"mockLogger.d.ts","sourceRoot":"","sources":["../../../src/__mocks__/mockLogger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAEjE,qBAAa,cAAe,YAAW,OAAO,CAAC,MAAM,CAAC;IACpD,KAAK,EAAE,MAAM,CAAW;IACxB,QAAQ,EAAE,MAAM,CAAM;IACtB,OAAO,EAAE,MAAM,CAAW;IAC1B,WAAW,EAAE,MAAM,CAAK;IACxB,cAAc,EAAE,OAAO,CAAQ;IAC/B,mBAAmB,EAAE,OAAO,CAAS;IACrC,YAAY,KAAM;IAElB,KAAK,iDAAW;IAChB,IAAI,iDAAW;IACf,IAAI,iDAAW;IACf,KAAK,iDAAW;IAChB,KAAK,iDAAW;IAChB,KAAK,iDAAW;IAChB,MAAM,iDAAW;IAEjB,MAAM;;;;;;;;;;;;;;;;;MAiBJ;IAEF,QAAQ,WAAc;IACtB,KAAK,sBAA2B;IAChC,cAAc,gBAAc;IAE5B,KAAK,CAAC,iBAAiB,SAAS,MAAM,GAAG,KAAK,EAC5C,SAAS,EAAE,QAAQ,EACnB,QAAQ,CAAC,EAAE,kBAAkB,CAAC,iBAAiB,CAAC,GAC/C,MAAM,CAAC,iBAAiB,CAAC;IAI5B,MAAM,CAAC,MAAM,IAAI,MAAM;CAGxB;AAED,eAAO,MAAM,gBAAgB,QAAO,MAAiC,CAAC"}
1
+ {"version":3,"file":"mockLogger.d.ts","sourceRoot":"","sources":["../../../src/__mocks__/mockLogger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAEjE,qBAAa,cAAe,YAAW,OAAO,CAAC,MAAM,CAAC;IACpD,KAAK,EAAE,MAAM,CAAW;IACxB,QAAQ,EAAE,MAAM,CAAM;IACtB,OAAO,EAAE,MAAM,CAAW;IAC1B,WAAW,EAAE,MAAM,CAAK;IACxB,cAAc,EAAE,OAAO,CAAQ;IAC/B,mBAAmB,EAAE,OAAO,CAAS;IACrC,YAAY,KAAM;IAElB,KAAK,yDAAW;IAChB,IAAI,yDAAW;IACf,IAAI,yDAAW;IACf,KAAK,yDAAW;IAChB,KAAK,yDAAW;IAChB,KAAK,yDAAW;IAChB,MAAM,yDAAW;IAEjB,MAAM;;;;;;;;;;;;;;;;;MAiBJ;IAEF,QAAQ,WAAc;IACtB,KAAK,sBAA2B;IAChC,cAAc,gBAAc;IAE5B,KAAK,CAAC,iBAAiB,SAAS,MAAM,GAAG,KAAK,EAC5C,SAAS,EAAE,QAAQ,EACnB,QAAQ,CAAC,EAAE,kBAAkB,CAAC,iBAAiB,CAAC,GAC/C,MAAM,CAAC,iBAAiB,CAAC;IAI5B,MAAM,CAAC,MAAM,IAAI,MAAM;CAGxB;AAED,eAAO,MAAM,gBAAgB,QAAO,MAAiC,CAAC"}
@@ -44,14 +44,14 @@ class NostrWSServer {
44
44
  socket.on('message', async (data) => {
45
45
  try {
46
46
  const message = JSON.parse(data.toString());
47
- logger.info('Received message:', message);
47
+ logger.info({ data: message }, 'Received message');
48
48
  /**
49
49
  * Calls the onMessage handler if provided
50
50
  */
51
51
  await options.onMessage?.(message, socket);
52
52
  }
53
53
  catch (error) {
54
- logger.error('Error processing message:', error);
54
+ logger.error({ error }, 'Error processing message');
55
55
  /**
56
56
  * Calls the onError handler if provided
57
57
  */
@@ -64,7 +64,7 @@ class NostrWSServer {
64
64
  * @param {Error} error - The error that occurred
65
65
  */
66
66
  socket.on('error', (error) => {
67
- logger.error(`Client error (${socket.clientId}):`, error);
67
+ logger.error({ error, clientId: socket.clientId }, 'Client error');
68
68
  /**
69
69
  * Calls the onError handler if provided
70
70
  */
@@ -1 +1 @@
1
- {"version":3,"file":"nostr-server.js","sourceRoot":"","sources":["../../../src/core/nostr-server.ts"],"names":[],"mappings":";;;AA4GA,wCAEC;AA9GD,2BAAgD;AAChD,+BAAoC;AACpC,kDAA+C;AAG/C,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,eAAe,CAAC,CAAC;AAE1C;;GAEG;AACH,MAAa,aAAa;IAMxB;;;;OAIG;IACH,YAAY,OAA6B;QACvC,IAAI,CAAC,MAAM,GAAG,IAAI,oBAAe,CAAC;YAChC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,KAAK,EAAE,eAAe;SACzD,CAAC,CAAC;QAEH;;;;WAIG;QACH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,EAAa,EAAE,EAAE;YACnD,MAAM,MAAM,GAAG,EAAyB,CAAC;YACzC,MAAM,CAAC,QAAQ,GAAG,IAAA,SAAM,GAAE,CAAC;YAC3B,MAAM,CAAC,aAAa,GAAG,IAAI,GAAG,EAAE,CAAC;YACjC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YAEtB,MAAM,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YAEpD;;eAEG;YACH,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC;YAErC;;;;eAIG;YACH,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,IAAY,EAAE,EAAE;gBAC1C,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAyB,CAAC;oBACpE,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;oBAC1C;;uBAEG;oBACH,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC7C,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;oBACjD;;uBAEG;oBACH,OAAO,CAAC,OAAO,EAAE,CAAC,KAAc,EAAE,MAAM,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC,CAAC,CAAC;YAEH;;;;eAIG;YACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE;gBAClC,MAAM,CAAC,KAAK,CAAC,iBAAiB,MAAM,CAAC,QAAQ,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC1D;;mBAEG;gBACH,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;YAEH;;eAEG;YACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACtB,MAAM,CAAC,IAAI,CAAC,wBAAwB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACvD;;mBAEG;gBACH,OAAO,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACI,IAAI;QACT,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;CACF;AA1FD,sCA0FC;AAED;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,OAA6B;IAC1D,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC"}
1
+ {"version":3,"file":"nostr-server.js","sourceRoot":"","sources":["../../../src/core/nostr-server.ts"],"names":[],"mappings":";;;AA4GA,wCAEC;AA9GD,2BAAgD;AAChD,+BAAoC;AACpC,kDAA+C;AAG/C,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,eAAe,CAAC,CAAC;AAE1C;;GAEG;AACH,MAAa,aAAa;IAMxB;;;;OAIG;IACH,YAAY,OAA6B;QACvC,IAAI,CAAC,MAAM,GAAG,IAAI,oBAAe,CAAC;YAChC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,KAAK,EAAE,eAAe;SACzD,CAAC,CAAC;QAEH;;;;WAIG;QACH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,EAAa,EAAE,EAAE;YACnD,MAAM,MAAM,GAAG,EAAyB,CAAC;YACzC,MAAM,CAAC,QAAQ,GAAG,IAAA,SAAM,GAAE,CAAC;YAC3B,MAAM,CAAC,aAAa,GAAG,IAAI,GAAG,EAAE,CAAC;YACjC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YAEtB,MAAM,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YAEpD;;eAEG;YACH,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC;YAErC;;;;eAIG;YACH,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,IAAY,EAAE,EAAE;gBAC1C,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAyB,CAAC;oBACpE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,kBAAkB,CAAC,CAAC;oBACnD;;uBAEG;oBACH,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC7C,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,0BAA0B,CAAC,CAAC;oBACpD;;uBAEG;oBACH,OAAO,CAAC,OAAO,EAAE,CAAC,KAAc,EAAE,MAAM,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC,CAAC,CAAC;YAEH;;;;eAIG;YACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE;gBAClC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,cAAc,CAAC,CAAC;gBACnE;;mBAEG;gBACH,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;YAEH;;eAEG;YACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACtB,MAAM,CAAC,IAAI,CAAC,wBAAwB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACvD;;mBAEG;gBACH,OAAO,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACI,IAAI;QACT,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;CACF;AA1FD,sCA0FC;AAED;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,OAA6B;IAC1D,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC"}
@@ -57,12 +57,12 @@ class NostrWSServer {
57
57
  await this.handleMessage(socket, rawMessage);
58
58
  }
59
59
  catch (error) {
60
- logger.error('Error processing message:', error);
60
+ logger.error({ error }, 'Error processing message');
61
61
  this.options.onError?.(error, socket);
62
62
  }
63
63
  });
64
64
  socket.on('error', (error) => {
65
- logger.error(`Client error (${socket.clientId}):`, error);
65
+ logger.error({ error, clientId: socket.clientId }, 'Client error');
66
66
  this.options.onError?.(error, socket);
67
67
  });
68
68
  socket.on('close', () => {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/core/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/core/server.ts"],"names":[],"mappings":"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"}
@@ -34,7 +34,7 @@ async function validateSignedMessage(message) {
34
34
  return true;
35
35
  }
36
36
  catch (error) {
37
- logger.error('Error validating signed message:', error);
37
+ logger.error({ error }, 'Error validating signed message');
38
38
  return false;
39
39
  }
40
40
  }
@@ -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,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"}
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,EAAE,KAAK,EAAE,EAAE,iCAAiC,CAAC,CAAC;QAC3D,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"}
@@ -5,6 +5,7 @@
5
5
  export * from './nip-01.js';
6
6
  export * from './nip-02.js';
7
7
  export * from './nip-04.js';
8
+ export * from './nip-44.js';
8
9
  export * from './nip-05.js';
9
10
  export * from './nip-09.js';
10
11
  export * from './nip-19.js';
@@ -17,4 +18,5 @@ export * from './nip-15.js';
17
18
  export * from './nip-22.js';
18
19
  export * from './nip-28.js';
19
20
  export * from './nip-33.js';
21
+ export * from './nip-46.js';
20
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/nips/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/nips/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC"}
@@ -22,8 +22,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
22
22
  __exportStar(require("./nip-01.js"), exports);
23
23
  // Contact List and Petnames
24
24
  __exportStar(require("./nip-02.js"), exports);
25
- // Encrypted Direct Messages
25
+ // Encrypted Direct Messages (NIP-04)
26
26
  __exportStar(require("./nip-04.js"), exports);
27
+ // Versioned Encrypted Payloads (NIP-44)
28
+ __exportStar(require("./nip-44.js"), exports);
27
29
  // DNS Identity Verification
28
30
  __exportStar(require("./nip-05.js"), exports);
29
31
  // Event Deletion
@@ -48,4 +50,6 @@ __exportStar(require("./nip-22.js"), exports);
48
50
  __exportStar(require("./nip-28.js"), exports);
49
51
  // Parameterized Replaceable Events
50
52
  __exportStar(require("./nip-33.js"), exports);
53
+ // Nostr Connect / Remote Signing Transport (NIP-46)
54
+ __exportStar(require("./nip-46.js"), exports);
51
55
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/nips/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;AAEH,sBAAsB;AACtB,8CAA4B;AAE5B,4BAA4B;AAC5B,8CAA4B;AAE5B,4BAA4B;AAC5B,8CAA4B;AAE5B,4BAA4B;AAC5B,8CAA4B;AAE5B,iBAAiB;AACjB,8CAA4B;AAE5B,0BAA0B;AAC1B,8CAA4B;AAE5B,0BAA0B;AAC1B,8CAA4B;AAE5B,6BAA6B;AAC7B,8CAA4B;AAE5B,kBAAkB;AAClB,8CAA4B;AAE5B,gBAAgB;AAChB,8CAA4B;AAE5B,kBAAkB;AAClB,8CAA4B;AAE5B,8BAA8B;AAC9B,8CAA4B;AAE5B,0BAA0B;AAC1B,8CAA4B;AAE5B,cAAc;AACd,8CAA4B;AAE5B,mCAAmC;AACnC,8CAA4B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/nips/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;AAEH,sBAAsB;AACtB,8CAA4B;AAE5B,4BAA4B;AAC5B,8CAA4B;AAE5B,qCAAqC;AACrC,8CAA4B;AAE5B,wCAAwC;AACxC,8CAA4B;AAE5B,4BAA4B;AAC5B,8CAA4B;AAE5B,iBAAiB;AACjB,8CAA4B;AAE5B,0BAA0B;AAC1B,8CAA4B;AAE5B,0BAA0B;AAC1B,8CAA4B;AAE5B,6BAA6B;AAC7B,8CAA4B;AAE5B,kBAAkB;AAClB,8CAA4B;AAE5B,gBAAgB;AAChB,8CAA4B;AAE5B,kBAAkB;AAClB,8CAA4B;AAE5B,8BAA8B;AAC9B,8CAA4B;AAE5B,0BAA0B;AAC1B,8CAA4B;AAE5B,cAAc;AACd,8CAA4B;AAE5B,mCAAmC;AACnC,8CAA4B;AAE5B,oDAAoD;AACpD,8CAA4B"}