nostr-websocket-utils 0.3.17 → 0.3.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/browser/nostr-websocket-utils.min.js +2 -2
- package/dist/browser/nostr-websocket-utils.min.js.map +7 -1
- package/dist/browser/report.html +1 -1
- package/dist/cjs/nips/index.d.ts +2 -0
- package/dist/cjs/nips/index.d.ts.map +1 -1
- package/dist/cjs/nips/index.js +5 -1
- package/dist/cjs/nips/index.js.map +1 -1
- package/dist/cjs/nips/nip-26.d.ts.map +1 -1
- package/dist/cjs/nips/nip-26.js +3 -7
- package/dist/cjs/nips/nip-26.js.map +1 -1
- package/dist/cjs/nips/nip-44.d.ts +69 -0
- package/dist/cjs/nips/nip-44.d.ts.map +1 -0
- package/dist/cjs/nips/nip-44.js +143 -0
- package/dist/cjs/nips/nip-44.js.map +1 -0
- package/dist/cjs/nips/nip-46.d.ts +112 -0
- package/dist/cjs/nips/nip-46.d.ts.map +1 -0
- package/dist/cjs/nips/nip-46.js +123 -0
- package/dist/cjs/nips/nip-46.js.map +1 -0
- package/dist/nips/index.d.ts +2 -0
- package/dist/nips/index.d.ts.map +1 -1
- package/dist/nips/index.js +5 -1
- package/dist/nips/index.js.map +1 -1
- package/dist/nips/nip-26.d.ts.map +1 -1
- package/dist/nips/nip-26.js +4 -8
- package/dist/nips/nip-26.js.map +1 -1
- package/dist/nips/nip-44.d.ts +69 -0
- package/dist/nips/nip-44.d.ts.map +1 -0
- package/dist/nips/nip-44.js +134 -0
- package/dist/nips/nip-44.js.map +1 -0
- package/dist/nips/nip-46.d.ts +112 -0
- package/dist/nips/nip-46.d.ts.map +1 -0
- package/dist/nips/nip-46.js +119 -0
- package/dist/nips/nip-46.js.map +1 -0
- package/package.json +5 -9
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/
|
|
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
|
-
- [
|
|
204
|
+
- [ConnectionState](docs/enumerations/ConnectionState.md) - Connection state enumeration
|
|
205
205
|
- [Global Types](docs/globals.md) - Global type definitions
|
|
206
206
|
|
|
207
207
|
## Examples
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.NostrWebSocketUtils=t():e.NostrWebSocketUtils=t()}(this,()=>(()=>{"use strict";var e={793(e){function t(e){try{return JSON.stringify(e)}catch(e){return'"[Circular]"'}}e.exports=function(e,r,n){var 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 ee=Object.create;var N=Object.defineProperty;var te=Object.getOwnPropertyDescriptor;var re=Object.getOwnPropertyNames;var ne=Object.getPrototypeOf,se=Object.prototype.hasOwnProperty;var z=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ie=(e,t)=>{for(var r in t)N(e,r,{get:t[r],enumerable:!0})},P=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of re(t))!se.call(e,i)&&i!==r&&N(e,i,{get:()=>t[i],enumerable:!(s=te(t,i))||s.enumerable});return e};var G=(e,t,r)=>(r=e!=null?ee(ne(e)):{},P(t||!e||!e.__esModule?N(r,"default",{value:e,enumerable:!0}):r,e)),oe=e=>P(N({},"__esModule",{value:!0}),e);var H=z((Te,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 B=z((je,V)=>{"use strict";function ae(e){try{return JSON.stringify(e)}catch{return'"[Circular]"'}}V.exports=ce;function ce(e,t,r){var s=r&&r.stringify||ae,i=1;if(typeof e=="object"&&e!==null){var o=t.length+i;if(o===1)return e;var m=new Array(o);m[0]=s(e);for(var u=1;u<o;u++)m[u]=s(t[u]);return m.join(" ")}if(typeof e!="string")return e;var f=t.length;if(f===0)return e;for(var n="",a=1-i,l=-1,g=e&&e.length||0,c=0;c<g;){if(e.charCodeAt(c)===37&&c+1<g){switch(l=l>-1?l:0,e.charCodeAt(c+1)){case 100:case 102:if(a>=f||t[a]==null)break;l<c&&(n+=e.slice(l,c)),n+=Number(t[a]),l=c+2,c++;break;case 105:if(a>=f||t[a]==null)break;l<c&&(n+=e.slice(l,c)),n+=Math.floor(Number(t[a])),l=c+2,c++;break;case 79:case 111:case 106:if(a>=f||t[a]===void 0)break;l<c&&(n+=e.slice(l,c));var w=typeof t[a];if(w==="string"){n+="'"+t[a]+"'",l=c+2,c++;break}if(w==="function"){n+=t[a].name||"<anonymous>",l=c+2,c++;break}n+=s(t[a]),l=c+2,c++;break;case 115:if(a>=f)break;l<c&&(n+=e.slice(l,c)),n+=String(t[a]),l=c+2,c++;break;case 37:l<c&&(n+=e.slice(l,c)),n+="%",l=c+2,c++,a--;break}++a}++c}return l===-1?e:(l<g&&(n+=e.slice(l)),n)}});var Y=z((Ae,T)=>{"use strict";var J=B();T.exports=d;var v=Ne().console||{},le={mapHttpRequest:O,mapHttpResponse:O,wrapRequestSerializer:M,wrapResponseSerializer:M,wrapErrorSerializer:M,req:O,res:O,err:$,errWithCause:$};function C(e,t){return e==="silent"?1/0:t.levels.values[e]}var A=Symbol("pino.logFuncs"),W=Symbol("pino.hierarchy"),ue={error:"log",fatal:"error",warn:"error",info:"log",debug:"log",trace:"log"};function U(e,t){let r={logger:t,parent:e[W]};t[W]=r}function fe(e,t,r){let s={};t.forEach(i=>{s[i]=r[i]?r[i]:v[i]||v[ue[i]||"log"]||y}),e[A]=s}function me(e,t){return Array.isArray(e)?e.filter(function(s){return s!=="!stdSerializers.err"}):e===!0?Object.keys(t):!1}function d(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||v;e.browser.write&&(e.browser.asObject=!0);let s=e.serializers||{},i=me(e.browser.serialize,s),o=e.browser.serialize;Array.isArray(e.browser.serialize)&&e.browser.serialize.indexOf("!stdSerializers.err")>-1&&(o=!1);let m=Object.keys(e.customLevels||{}),u=["error","fatal","warn","info","debug","trace"].concat(m);typeof r=="function"&&u.forEach(function(h){r[h]=r}),(e.enabled===!1||e.browser.disabled)&&(e.level="silent");let f=e.level||"info",n=Object.create(r);n.log||(n.log=y),fe(n,u,r),U({},n),Object.defineProperty(n,"levelVal",{get:l}),Object.defineProperty(n,"level",{get:g,set:c});let a={transmit:t,serialize:i,asObject:e.browser.asObject,formatters:e.browser.formatters,levels:u,timestamp:Se(e)};n.levels=he(e),n.level=f,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=y,n.serializers=s,n._serialize=i,n._stdErrSerialize=o,n.child=w,t&&(n._logEvent=j());function l(){return C(this.level,this)}function g(){return this._level}function c(h){if(h!=="silent"&&!this.levels.values[h])throw Error("unknown level "+h);this._level=h,p(this,a,n,"error"),p(this,a,n,"fatal"),p(this,a,n,"warn"),p(this,a,n,"info"),p(this,a,n,"debug"),p(this,a,n,"trace"),m.forEach(b=>{p(this,a,n,b)})}function w(h,b){if(!h)throw new Error("missing bindings for child Pino");b=b||{},i&&h.serializers&&(b.serializers=h.serializers);let _=b.serializers;if(i&&_){var E=Object.assign({},s,_),I=e.browser.serialize===!0?Object.keys(E):i;delete h.serializers,x([h],I,E,this._stdErrSerialize)}function R(F){this._childLevel=(F._childLevel|0)+1,this.bindings=h,E&&(this.serializers=E,this._serialize=I),t&&(this._logEvent=j([].concat(F._logEvent.bindings,h)))}R.prototype=this;let k=new R(this);return U(this,k),k.level=this.level,k}return n}function he(e){let t=e.customLevels||{},r=Object.assign({},d.levels.values,t),s=Object.assign({},d.levels.labels,ge(t));return{values:r,labels:s}}function ge(e){let t={};return Object.keys(e).forEach(function(r){t[e[r]]=r}),t}d.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"}};d.stdSerializers=le;d.stdTimeFunctions=Object.assign({},{nullTime:K,epochTime:X,unixTime:we,isoTime:Ee});function de(e){let t=[];e.bindings&&t.push(e.bindings);let r=e[W];for(;r.parent;)r=r.parent,r.logger.bindings&&t.push(r.logger.bindings);return t.reverse()}function p(e,t,r,s){if(Object.defineProperty(e,s,{value:C(e.level,r)>C(s,r)?y:r[A][s],writable:!0,enumerable:!0,configurable:!0}),!t.transmit&&e[s]===y)return;e[s]=be(e,t,r,s);let i=de(e);i.length!==0&&(e[s]=pe(i,e[s]))}function pe(e,t){return function(){return t.apply(this,[...e,...arguments])}}function be(e,t,r,s){return(function(i){return function(){let m=t.timestamp(),u=new Array(arguments.length),f=Object.getPrototypeOf&&Object.getPrototypeOf(this)===v?v:this;for(var n=0;n<u.length;n++)u[n]=arguments[n];if(t.serialize&&!t.asObject&&x(u,this._serialize,this.serializers,this._stdErrSerialize),t.asObject||t.formatters?i.call(f,ve(this,s,u,m,t.formatters)):i.apply(f,u),t.transmit){let a=t.transmit.level||e._level,l=r.levels.values[a],g=r.levels.values[s];if(g<l)return;ye(this,{ts:m,methodLevel:s,methodValue:g,transmitLevel:a,transmitValue:r.levels.values[t.transmit.level||e._level],send:t.transmit.send,val:C(e._level,r)},u)}}})(e[A][s])}function ve(e,t,r,s,i={}){let{level:o=()=>e.levels.values[t],log:m=g=>g}=i;e._serialize&&x(r,e._serialize,e.serializers,e._stdErrSerialize);let u=r.slice(),f=u[0],n={};s&&(n.time=s),n.level=o(t,e.levels.values[t]);let a=(e._childLevel|0)+1;if(a<1&&(a=1),f!==null&&typeof f=="object"){for(;a--&&typeof u[0]=="object";)Object.assign(n,u.shift());f=u.length?J(u.shift(),u):void 0}else typeof f=="string"&&(f=J(u.shift(),u));return f!==void 0&&(n.msg=f),m(n)}function x(e,t,r,s){for(let i in e)if(s&&e[i]instanceof Error)e[i]=d.stdSerializers.err(e[i]);else if(typeof e[i]=="object"&&!Array.isArray(e[i]))for(let o in e[i])t&&t.indexOf(o)>-1&&o in r&&(e[i][o]=r[o](e[i][o]))}function ye(e,t,r){let s=t.send,i=t.ts,o=t.methodLevel,m=t.methodValue,u=t.val,f=e._logEvent.bindings;x(r,e._serialize||Object.keys(e.serializers),e.serializers,e._stdErrSerialize===void 0?!0:e._stdErrSerialize),e._logEvent.ts=i,e._logEvent.messages=r.filter(function(n){return f.indexOf(n)===-1}),e._logEvent.level.label=o,e._logEvent.level.value=m,s(o,e._logEvent,u),e._logEvent=j(f)}function j(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 Se(e){return typeof e.timestamp=="function"?e.timestamp:e.timestamp===!1?K:X}function O(){return{}}function M(e){return e}function y(){}function K(){return!1}function X(){return Date.now()}function we(){return Math.round(Date.now()/1e3)}function Ee(){return new Date(Date.now()).toISOString()}function Ne(){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)||{}}}T.exports.default=d;T.exports.pino=d});var Ce={};ie(Ce,{NostrWSClient:()=>S,default:()=>Oe});var Z=G(H(),1);var q=G(Y(),1);function L(e){return(0,q.default)({name:e,level:process.env.LOG_LEVEL||"info",timestamp:q.default.stdTimeFunctions.isoTime})}var D=class{constructor(t,r={}){this.sender=t;this.options=r;this.queue=[];this.processing=!1;this.logger=L("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((o,m)=>o.priority===m.priority?o.queuedAt-m.queuedAt:o.priority==="HIGH"?-1:1),this.processing||this.processQueue().catch(o=>{this.logger.error({error:o},"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 S=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||L("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 Z.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",o=>{clearTimeout(i),this.logger.error({error:o},"WebSocket error"),this.options.onError&&this.options.onError(o),s(o)}),this.ws.on("close",()=>{this.handleDisconnect()}),this.ws.on("message",o=>{this.handleMessage(o)})})}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(),o=s+i;this.logger.info({attempt:this.reconnectAttempts,maxAttempts:this.options.retryAttempts,delay:Math.round(o)},`Reconnecting in ${Math.round(o)}ms`),this.reconnectTimeout=setTimeout(()=>{this.connect().catch(m=>{this.logger.error({error:m},"Reconnection failed")})},o)}else this.logger.warn("Max reconnection attempts reached"),this.connectionState="FAILED"}getConnectionState(){return this.connectionState}};var Oe={NostrWSClient:S};return oe(Ce);})();
|
|
2
|
+
//# 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 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", "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", "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", "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", "createWrap", "prependBindingsInArguments", "logFunc", "write", "ts", "args", "i", "asObject", "transmitLevel", "transmitValue", "methodValue", "formatters", "levelFormatter", "logObjectFormatter", "argsCloned", "msg", "logObject", "lvl", "send", "methodLevel", "val", "arg", "err", "a", "defd", "o", "browser_exports", "__export", "NostrWSClient", "browser_default", "import_ws", "import_pino", "createLogger", "name", "pino", "MessageQueue", "sender", "options", "createLogger", "message", "type", "data", "queueItem", "a", "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
|
+
}
|
package/dist/browser/report.html
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8"/>
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
6
|
-
<title>nostr-websocket-utils [
|
|
6
|
+
<title>nostr-websocket-utils [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>
|
package/dist/cjs/nips/index.d.ts
CHANGED
|
@@ -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"}
|
package/dist/cjs/nips/index.js
CHANGED
|
@@ -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,
|
|
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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nip-26.d.ts","sourceRoot":"","sources":["../../../src/nips/nip-26.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIrD;;;;;;;GAOG;AACH,UAAU,oBAAoB;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;GAMG;AACH,UAAU,UAAU;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,oBAAoB,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,gBAAgB,EAAE,MAAM,EACxB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,oBAAoB,GAC/B,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"nip-26.d.ts","sourceRoot":"","sources":["../../../src/nips/nip-26.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIrD;;;;;;;GAOG;AACH,UAAU,oBAAoB;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;GAMG;AACH,UAAU,UAAU;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,oBAAoB,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,gBAAgB,EAAE,MAAM,EACxB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,oBAAoB,GAC/B,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,eAAe,EAAE,MAAM,EACvB,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,oBAAoB,GAC/B,OAAO,CAAC,OAAO,CAAC,CAuBlB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,GAAG,UAAU,CAYtF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI,CAyBtE;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAuChF"}
|
package/dist/cjs/nips/nip-26.js
CHANGED
|
@@ -22,17 +22,13 @@ async function createDelegation(delegatorPrivkey, delegateePubkey, conditions) {
|
|
|
22
22
|
.sort()
|
|
23
23
|
.join('&');
|
|
24
24
|
const message = `nostr:delegation:${delegateePubkey}:${conditionsString}`;
|
|
25
|
-
//
|
|
26
|
-
const
|
|
27
|
-
id: '', // This will be set by signEvent
|
|
25
|
+
// Use finalizeEvent for one-step create+sign
|
|
26
|
+
const signedEvent = await (0, nostr_crypto_utils_1.finalizeEvent)({
|
|
28
27
|
pubkey: delegateePubkey,
|
|
29
|
-
created_at: Math.floor(Date.now() / 1000),
|
|
30
28
|
kind: 0, // Using kind 0 for delegation events
|
|
31
29
|
tags: [],
|
|
32
30
|
content: message,
|
|
33
|
-
|
|
34
|
-
};
|
|
35
|
-
const signedEvent = await (0, nostr_crypto_utils_1.signEvent)(event, delegatorPrivkey);
|
|
31
|
+
}, delegatorPrivkey);
|
|
36
32
|
return signedEvent.sig;
|
|
37
33
|
}
|
|
38
34
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nip-26.js","sourceRoot":"","sources":["../../../src/nips/nip-26.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAuCH,
|
|
1
|
+
{"version":3,"file":"nip-26.js","sourceRoot":"","sources":["../../../src/nips/nip-26.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file NIP-44: Versioned Encrypted Payloads
|
|
3
|
+
* @module nips/nip-44
|
|
4
|
+
* @see https://github.com/nostr-protocol/nips/blob/master/44.md
|
|
5
|
+
*
|
|
6
|
+
* NIP-44 replaces NIP-04 with a modern encryption scheme using
|
|
7
|
+
* ChaCha20 + HMAC-SHA256. This module provides DM-level helpers
|
|
8
|
+
* that parallel the NIP-04 module (nip-04.ts).
|
|
9
|
+
*/
|
|
10
|
+
import type { NostrWSMessage } from '../types/messages.js';
|
|
11
|
+
import type { Logger } from '../types/logger.js';
|
|
12
|
+
/**
|
|
13
|
+
* Kind value for NIP-44 encrypted direct messages (gift-wrapped DMs use kind 14,
|
|
14
|
+
* but for parity with NIP-04 kind 4 usage, callers may choose their own kind).
|
|
15
|
+
* NIP-44 itself is a payload format, not a kind — the kind depends on the use case.
|
|
16
|
+
* We default to kind 44 as a convenience constant; callers should override as needed.
|
|
17
|
+
*/
|
|
18
|
+
export declare const ENCRYPTED_DM_KIND_44 = 44;
|
|
19
|
+
/**
|
|
20
|
+
* Creates a NIP-44 conversation key from a sender's private key and recipient's public key.
|
|
21
|
+
* This key is symmetric and reusable for all messages in the conversation.
|
|
22
|
+
* @param senderPrivkeyHex - Sender's private key in hex
|
|
23
|
+
* @param recipientPubkeyHex - Recipient's public key in hex
|
|
24
|
+
* @returns Conversation key as Uint8Array
|
|
25
|
+
*/
|
|
26
|
+
export declare function getConversationKey(senderPrivkeyHex: string, recipientPubkeyHex: string): Uint8Array;
|
|
27
|
+
/**
|
|
28
|
+
* Encrypts a message using NIP-44
|
|
29
|
+
* @param plaintext - Message content to encrypt
|
|
30
|
+
* @param senderPrivkeyHex - Sender's private key in hex
|
|
31
|
+
* @param recipientPubkeyHex - Recipient's public key in hex
|
|
32
|
+
* @returns Encrypted payload string (base64)
|
|
33
|
+
*/
|
|
34
|
+
export declare function encryptNip44(plaintext: string, senderPrivkeyHex: string, recipientPubkeyHex: string): string;
|
|
35
|
+
/**
|
|
36
|
+
* Decrypts a NIP-44 encrypted payload
|
|
37
|
+
* @param payload - Encrypted payload string (base64)
|
|
38
|
+
* @param recipientPrivkeyHex - Recipient's private key in hex
|
|
39
|
+
* @param senderPubkeyHex - Sender's public key in hex
|
|
40
|
+
* @returns Decrypted plaintext
|
|
41
|
+
*/
|
|
42
|
+
export declare function decryptNip44(payload: string, recipientPrivkeyHex: string, senderPubkeyHex: string): string;
|
|
43
|
+
/**
|
|
44
|
+
* Creates an encrypted direct message event using NIP-44
|
|
45
|
+
* @param content - Message content to encrypt
|
|
46
|
+
* @param recipientPubkey - Recipient's public key (hex)
|
|
47
|
+
* @param senderPrivkey - Sender's private key (hex)
|
|
48
|
+
* @param tags - Additional tags for the event
|
|
49
|
+
* @param kind - Event kind (defaults to ENCRYPTED_DM_KIND_44)
|
|
50
|
+
* @returns Encrypted message event as NostrWSMessage
|
|
51
|
+
*/
|
|
52
|
+
export declare function createEncryptedDM44(content: string, recipientPubkey: string, senderPrivkey: string, tags?: string[][], kind?: number): NostrWSMessage;
|
|
53
|
+
/**
|
|
54
|
+
* Decrypts a received direct message event encrypted with NIP-44
|
|
55
|
+
* @param message - Received message
|
|
56
|
+
* @param recipientPrivkey - Recipient's private key (hex)
|
|
57
|
+
* @param senderPubkey - Sender's public key (hex)
|
|
58
|
+
* @param logger - Logger instance
|
|
59
|
+
* @returns Decrypted message content
|
|
60
|
+
*/
|
|
61
|
+
export declare function decryptDM44(message: NostrWSMessage, recipientPrivkey: string, senderPubkey: string, logger: Logger): string;
|
|
62
|
+
/**
|
|
63
|
+
* Validates a NIP-44 encrypted DM event format
|
|
64
|
+
* @param message - Message to validate
|
|
65
|
+
* @param logger - Logger instance
|
|
66
|
+
* @returns True if message follows NIP-44 encrypted DM format
|
|
67
|
+
*/
|
|
68
|
+
export declare function validateEncryptedDM44(message: NostrWSMessage, logger: Logger): boolean;
|
|
69
|
+
//# sourceMappingURL=nip-44.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nip-44.d.ts","sourceRoot":"","sources":["../../../src/nips/nip-44.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,sBAAsB,CAAC;AACvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,gBAAgB,EAAE,MAAM,EACxB,kBAAkB,EAAE,MAAM,GACzB,UAAU,CAGZ;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,EACxB,kBAAkB,EAAE,MAAM,GACzB,MAAM,CAGR;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,mBAAmB,EAAE,MAAM,EAC3B,eAAe,EAAE,MAAM,GACtB,MAAM,CAGR;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,MAAM,EACrB,IAAI,GAAE,MAAM,EAAE,EAAO,EACrB,IAAI,GAAE,MAA6B,GAClC,cAAc,CAiBhB;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,cAAc,EACvB,gBAAgB,EAAE,MAAM,EACxB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,GACb,MAAM,CAaR;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,MAAM,GACb,OAAO,CAiCT"}
|