Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

alby-js-sdk

Package Overview
Dependencies
Maintainers
1
Versions
31
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

alby-js-sdk - npm Package Compare versions

Comparing version 2.1.4 to 2.2.3

4

dist/client.d.ts
import { RequestOptions } from "./request";
import { AuthClient, CreateWebhookEndpointParams, InvoiceRequestParams, KeysendRequestParams, SendPaymentRequestParams, SendBoostagramRequestParams, SendToAlbyRequestParams, CreateWebhookEndpointResponse, BaseWebhookEndpointResponse, SendPaymentResponse, Invoice, GetAccountBalanceResponse, GetAccountInformationResponse } from "./types";
import { AuthClient, BaseWebhookEndpointResponse, CreateSwapParams, CreateSwapResponse, CreateWebhookEndpointParams, CreateWebhookEndpointResponse, GetAccountBalanceResponse, GetAccountInformationResponse, Invoice, InvoiceRequestParams, KeysendRequestParams, SendBoostagramRequestParams, SendPaymentRequestParams, SendPaymentResponse, SendToAlbyRequestParams, SwapInfoResponse } from "./types";
export declare class Client {

@@ -21,3 +21,5 @@ auth: AuthClient;

deleteWebhookEndpoint(id: string, request_options?: Partial<RequestOptions>): Promise<BaseWebhookEndpointResponse>;
getSwapInfo(request_options?: Partial<RequestOptions>): Promise<SwapInfoResponse>;
createSwap(params: CreateSwapParams, request_options?: Partial<RequestOptions>): Promise<CreateSwapResponse>;
}
//# sourceMappingURL=client.d.ts.map

@@ -1,2 +0,2 @@

import e from"crypto-js";import{generatePrivateKey as t,relayInit as n,nip19 as s,getPublicKey as r,finishEvent as o,getEventHash as i,nip04 as a}from"nostr-tools";function c(){return c=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(e[s]=n[s])}return e},c.apply(this,arguments)}function u(e,t){if(null==e)return{};var n,s,r={},o=Object.keys(e);for(s=0;s<o.length;s++)t.indexOf(n=o[s])>=0||(r[n]=e[n]);return r}function h(e){return Object.entries(e).map(([e,t])=>e&&t?`${e}=${t}`:"").join("&")}function l(e,t){return`Basic ${btoa(`${e}:${t}`)}`}class d extends Error{constructor(e,t,n,s){let r=e.toString();t&&(r+=` ${t}`),r+=": ",r+=s.message?s.message:JSON.stringify(s),super(r),this.status=void 0,this.statusText=void 0,this.headers=void 0,this.error=void 0,this.status=e,this.statusText=t,this.headers=n,this.error=s}}var p={__proto__:null,OAuthClient:class{},AuthClient:class{},AlbyResponseError:d};const m=["auth","endpoint","params","request_body","method","max_retries","base_url","user_agent","headers"],y="https://api.getalby.com";async function w(e,t,n=0){const s=await fetch(e,t);if(429===s.status&&n>0){const r=Number(s.headers.get("x-rate-limit-reset")),o=Number(s.headers.get("x-rate-limit-remaining")),i=1e3*r-Date.now();let a=1e3;return 0===o&&(a=i),await new Promise(e=>setTimeout(e,a)),w(e,t,n-1)}return s}async function g(e){let{auth:t,endpoint:n,params:s={},request_body:r,method:o,max_retries:i,base_url:a=y,user_agent:l,headers:p}=e,g=u(e,m);const f=new URL(a+n);f.search=h(s);const b="POST"===o&&!!r,v=t?await t.getAuthHeader(f.href,o):void 0,_=await w(f.toString(),c({headers:c({},b?{"Content-Type":"application/json; charset=utf-8"}:void 0,v,p,{"User-Agent":null!=l?l:"alby-js-api","X-User-Agent":null!=l?l:"alby-js-api"}),method:o,body:b?JSON.stringify(r):void 0},g),i);if(!_.ok){const e=await _.json();throw new d(_.status,_.statusText,_.headers,e)}return _}async function f(e){return(await g(e)).json()}const b=["expires_in"],v=["token"];function _(e){const{expires_in:t}=e;return c({},u(e,b),!!t&&{expires_at:Date.now()+1e3*t})}class k{constructor(e){this.bearer_token=void 0,this.bearer_token=e}getAuthHeader(){return{Authorization:`Bearer ${this.bearer_token}`}}}var E={__proto__:null,OAuth2User:class{constructor(e){this.token=void 0,this.options=void 0,this.code_verifier=void 0,this.code_challenge=void 0,this._refreshAccessTokenPromise=void 0;const{token:t}=e,n=u(e,v);this.options=c({client_secret:""},n),this.token=t,this._refreshAccessTokenPromise=null}async refreshAccessToken(){var e=this;return this._refreshAccessTokenPromise||(this._refreshAccessTokenPromise=new Promise(async function(t,n){try{var s;const n=null==(s=e.token)?void 0:s.refresh_token,{client_id:r,client_secret:o,request_options:i,user_agent:a}=e.options;if(!r)throw new Error("client_id is required");if(!n)throw new Error("refresh_token is required");const u=_(await f(c({},i,{endpoint:"/oauth/token",params:{client_id:r,grant_type:"refresh_token",refresh_token:n},user_agent:a,method:"POST",headers:c({},null==i?void 0:i.headers,{"Content-type":"application/x-www-form-urlencoded"},{Authorization:l(r,o)})})));e.token=u,t({token:u})}catch(e){n(e)}finally{e._refreshAccessTokenPromise=null}})),this._refreshAccessTokenPromise}isAccessTokenExpired(){var e,t;const n=null==(e=this.token)?void 0:e.refresh_token,s=null==(t=this.token)?void 0:t.expires_at;return!s||!!n&&s<=Date.now()+1e3}async requestAccessToken(e){const{client_id:t,client_secret:n,callback:s,request_options:r,user_agent:o}=this.options,i=this.code_verifier;if(!t)throw new Error("client_id is required");if(!s)throw new Error("callback is required");const a={code:e,grant_type:"authorization_code",code_verifier:i,client_id:t,redirect_uri:s},u=_(await f(c({},r,{endpoint:"/oauth/token",params:a,user_agent:o,method:"POST",headers:c({},null==r?void 0:r.headers,{"Content-Type":"application/x-www-form-urlencoded"},{Authorization:l(t,n)})})));return this.token=u,{token:u}}generateAuthURL(t){t||(t={}),console.log(t);const{client_id:n,callback:s,scopes:r}=this.options;if(!s)throw new Error("callback required");if(!r)throw new Error("scopes required");let o;if("S256"===t.code_challenge_method){const t=e.lib.WordArray.random(64);this.code_verifier=t.toString(),this.code_challenge=e.SHA256(this.code_verifier).toString(e.enc.Base64).replace(/\+/g,"-").replace(/\//g,"_").replace(/\=+$/,""),o="S256"}else"plain"===t.code_challenge_method&&t.code_challenge&&(this.code_challenge=t.code_challenge,this.code_verifier=t.code_challenge,o="plain");const i=this.code_challenge,a=new URL(t.authorizeUrl||"https://getalby.com/oauth");return a.search=h(c({},t,{client_id:n,scope:r.join(" "),response_type:"code",redirect_uri:s,code_challenge_method:o,code_challenge:i})),a.toString()}async getAuthHeader(){var e;if(null==(e=this.token)||!e.access_token)throw new Error("access_token is required");return this.isAccessTokenExpired()&&await this.refreshAccessToken(),{Authorization:`Bearer ${this.token.access_token}`}}},OAuth2Bearer:k};const P={alby:{authorizationUrl:"https://nwc.getalby.com/apps/new",relayUrl:"wss://relay.getalby.com/v1",walletPubkey:"69effe7b49a6dd5cf525bd0905917a5005ffe480b58eeb8e861418cf3ae760d9"}};class A{static parseWalletConnectUrl(e){e=e.replace("nostrwalletconnect://","http://").replace("nostr+walletconnect://","http://");const t=new URL(e),n={};n.walletPubkey=t.host;const s=t.searchParams.get("secret"),r=t.searchParams.get("relay");return s&&(n.secret=s),r&&(n.relayUrl=r),n}static withNewSecret(e){return(e=e||{}).secret=t(),new A(e)}constructor(e){var t;this.relay=void 0,this.relayUrl=void 0,this.secret=void 0,this.walletPubkey=void 0,this.options=void 0,this.subscribers=void 0,e&&e.nostrWalletConnectUrl&&(e=c({},A.parseWalletConnectUrl(e.nostrWalletConnectUrl),e));const r=P[(null==(t=e)?void 0:t.providerName)||"alby"];this.options=c({},r,e||{}),this.relayUrl=this.options.relayUrl,this.relay=n(this.relayUrl),this.options.secret&&(this.secret=this.options.secret.toLowerCase().startsWith("nsec")?s.decode(this.options.secret).data:this.options.secret),this.walletPubkey=this.options.walletPubkey.toLowerCase().startsWith("npub")?s.decode(this.options.walletPubkey).data:this.options.walletPubkey,this.subscribers={},void 0===globalThis.WebSocket&&console.error("WebSocket is undefined. Make sure to `import websocket-polyfill` for nodejs environments")}on(e,t){this.subscribers[e]=t}notify(e,t){const n=this.subscribers[e];n&&n(t)}getNostrWalletConnectUrl(e=!0){let t=`nostr+walletconnect://${this.walletPubkey}?relay=${this.relayUrl}&pubkey=${this.publicKey}`;return e&&(t=`${t}&secret=${this.secret}`),t}get nostrWalletConnectUrl(){return this.getNostrWalletConnectUrl()}get connected(){return 1===this.relay.status}get publicKey(){if(!this.secret)throw new Error("Missing secret key");return r(this.secret)}getPublicKey(){return Promise.resolve(this.publicKey)}signEvent(e){if(!this.secret)throw new Error("Missing secret key");return Promise.resolve(o(e,this.secret))}getEventHash(e){return i(e)}async enable(){if(this.connected)return Promise.resolve();await this.relay.connect()}close(){return this.relay.close()}async encrypt(e,t){if(!this.secret)throw new Error("Missing secret");return await a.encrypt(this.secret,e,t)}async decrypt(e,t){if(!this.secret)throw new Error("Missing secret");return await a.decrypt(this.secret,e,t)}async getInfo(){return{methods:["getInfo","sendPayment"],node:{},supports:["lightning"],version:"NWC"}}sendPayment(e){var t=this;return this.checkConnected(),new Promise(async function(n,s){const r={method:"pay_invoice",params:{invoice:e}},o=await t.encrypt(t.walletPubkey,JSON.stringify(r)),i={kind:23194,created_at:Math.floor(Date.now()/1e3),tags:[["p",t.walletPubkey]],content:o,pubkey:t.publicKey},a=await t.signEvent(i);let c=t.relay.sub([{kinds:[23195],authors:[t.walletPubkey],"#e":[a.id]}]),u=setTimeout(function(){c.unsub(),s({error:`reply timeout: event ${a.id}`,code:"INTERNAL"})},6e4);c.on("event",async function(e){var r;clearTimeout(u),c.unsub();const o=await t.decrypt(t.walletPubkey,e.content);let i;try{i=JSON.parse(o)}catch(e){return void s({error:"invalid response",code:"INTERNAL"})}var a,h;23195==e.kind&&null!=(r=i.result)&&r.preimage?(n({preimage:i.result.preimage}),t.notify("sendPayment",i.result)):s({error:null==(a=i.error)?void 0:a.message,code:null==(h=i.error)?void 0:h.code})});let h=t.relay.publish(a),l=setTimeout(function(){s({error:`Publish timeout: event ${a.id}`})},5e3);h.on("failed",e=>{clearTimeout(l),s({error:`Failed to publish request: ${e}`})}),h.on("ok",()=>{clearTimeout(l)})})}keysend(e){throw new Error("Method not implemented.")}lnurl(e){throw new Error("Method not implemented.")}makeInvoice(e){throw new Error("Method not implemented.")}request(e,t){throw new Error("Method not implemented.")}signMessage(e){throw new Error("Method not implemented.")}verifyMessage(e,t){throw new Error("Method not implemented.")}getAuthorizationUrl(e){if(!this.options.authorizationUrl)throw new Error("Missing authorizationUrl option");const t=new URL(this.options.authorizationUrl);return null!=e&&e.name&&t.searchParams.set("c",null==e?void 0:e.name),t.searchParams.set("pubkey",this.publicKey),null!=e&&e.returnTo&&t.searchParams.set("return_to",e.returnTo),null!=e&&e.budgetRenewal&&t.searchParams.set("budget_renewal",e.budgetRenewal),null!=e&&e.expiresAt&&t.searchParams.set("expires_at",Math.floor(e.expiresAt.getTime()/1e3).toString()),null!=e&&e.maxAmount&&t.searchParams.set("max_amount",e.maxAmount.toString()),void 0!==(null==e?void 0:e.editable)&&t.searchParams.set("editable",e.editable.toString()),t}initNWC(e={}){e.name||(e.name=document.location.host);const t=this.getAuthorizationUrl(e),n=window.outerHeight/2+window.screenY-300,s=window.outerWidth/2+window.screenX-200;return new Promise((e,r)=>{const o=window.open(t.toString(),`${document.title} - Wallet Connect`,`height=600,width=400,top=${n},left=${s}`);if(!o)return void r();const i=n=>{const s=n.data;s&&"nwc:success"===s.type&&n.origin===`${t.protocol}//${t.host}`&&(e(s),clearInterval(a),window.removeEventListener("message",i),o&&o.close())},a=setInterval(()=>{o&&o.closed&&(r(),clearInterval(a),window.removeEventListener("message",i))},500);window.addEventListener("message",i)})}checkConnected(){if(!this.connected)throw new Error("please call enable() and await the promise before calling this function")}}const T=A;function O(e){const t={};return e.recipient.customKey&&e.recipient.customValue&&(t[e.recipient.customKey]=e.recipient.customValue),t[7629169]=JSON.stringify(e.boostagram),{destination:e.recipient.address,amount:e.amount,customRecords:t}}class q{constructor(e,t){this.auth=void 0,this.defaultRequestOptions=void 0,this.auth="string"==typeof e?new k(e):e,this.defaultRequestOptions=c({},t,{user_agent:null==t?void 0:t.user_agent})}accountBalance(e,t){return f(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/balance",params:e,method:"GET"}))}accountSummary(e,t){return f(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/user/summary",params:e,method:"GET"}))}accountInformation(e,t){return f(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/user/me",params:e,method:"GET"}))}accountValue4Value(e,t){return f(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/user/value4value",params:e,method:"GET"}))}incomingInvoices(e,t){return f(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/invoices/incoming",params:e,method:"GET"}))}outgoingInvoices(e,t){return f(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/invoices/outgoing",params:e,method:"GET"}))}getInvoice(e,t){return f(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:`/invoices/${e}`,method:"GET"}))}createInvoice(e,t){return f(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/invoices",request_body:e,method:"POST"}))}keysend(e,t){let n,s;return Array.isArray(e)?(n="/payments/keysend/multi",s={keysends:e}):(n="/payments/keysend",s=e),f(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:n,request_body:s,method:"POST"}))}sendPayment(e,t){return f(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/payments/bolt11",request_body:e,method:"POST"}))}sendBoostagram(e,t){let n,s;return Array.isArray(e)?(n="/payments/keysend/multi",s={keysends:e.map(e=>O(e))}):(n="/payments/keysend",s=O(e)),f(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:n,request_body:s,method:"POST"}))}sendToAlbyAccount(e,t){return f(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/payments/keysend",request_body:{destination:"030a58b8653d32b99200a2334cfe913e51dc7d155aa0116c176657a4f1722677a3",customRecords:{696969:e.account},amount:e.amount,memo:e.memo},method:"POST"}))}createWebhookEndpoint(e,t){return f(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/webhook_endpoints",request_body:e,method:"POST"}))}deleteWebhookEndpoint(e,t){return f(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:`/webhook_endpoints/${e}`,method:"DELETE"}))}}var x={__proto__:null,NostrWebLNProvider:A,NWC:T,OauthWeblnProvider:class{constructor(e){this.client=void 0,this.auth=void 0,this.oauth=void 0,this.subscribers=void 0,this.isExecuting=void 0,this.auth=e.auth,this.client=new q(e.auth),this.oauth=!0,this.subscribers={},this.isExecuting=!1}on(e,t){this.subscribers[e]=t}notify(e,t){const n=this.subscribers[e];n&&n(t)}async enable(){var e;if(!this.isExecuting){if(null!=(e=this.auth.token)&&e.access_token)return{enabled:!0};if("undefined"==typeof window||void 0===window.document)throw new Error("Missing access token");try{this.isExecuting=!0,await this.openAuthorization()}finally{this.isExecuting=!1}}}async sendPayment(e){if(!this.isExecuting)try{this.isExecuting=!0;const t=await this.client.sendPayment({invoice:e});return this.notify("sendPayment",t),{preimage:t.payment_preimage}}catch(e){let t="Unknown Error";throw e instanceof Error&&(t=e.message),new Error(t)}finally{this.isExecuting=!1}}async keysend(e){if(!this.isExecuting)try{this.isExecuting=!0;const t=await this.client.keysend(e);return this.notify("keysend",t),{preimage:t.payment_preimage}}catch(e){let t="Unknown Error";throw e instanceof Error&&(t=e.message),new Error(t)}finally{this.isExecuting=!1}}async getInfo(){return{alias:"Alby"}}async makeInvoice(e){if(!this.isExecuting)try{this.isExecuting=!0;const t=await this.client.createInvoice({amount:parseInt(e.amount.toString()),description:e.defaultMemo});return this.notify("makeInvoice",t),{paymentRequest:t.payment_request}}catch(e){let t="Unknown Error";throw e instanceof Error&&(t=e.message),new Error(t)}finally{this.isExecuting=!1}}openAuthorization(){var e=this;const t=window.outerHeight/2+window.screenY-350,n=window.outerWidth/2+window.screenX-300,s=this.auth.generateAuthURL({code_challenge_method:"S256"});return new Promise((r,o)=>{const i=window.open(s,`${document.title} - WebLN enable`,`height=700,width=600,top=${t},left=${n}`);let a=!1;window.addEventListener("message",async function(t){const n=t.data;if(n&&"alby:oauth:success"===n.type&&t.origin===`${document.location.protocol}//${document.location.host}`&&!a){a=!0,console.info("Processing OAuth code response");const t=n.payload.code;try{await e.auth.requestAccessToken(t),e.client=new q(e.auth),i&&i.close(),e.notify("enable"),r({enabled:!0})}catch(e){console.error(e),o({enabled:!1})}}})})}}};export{q as Client,E as auth,p as types,x as webln};
import e from"crypto-js";import{generatePrivateKey as t,relayInit as n,nip19 as s,getPublicKey as r,finishEvent as o,getEventHash as i,nip04 as a}from"nostr-tools";function c(){return c=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(e[s]=n[s])}return e},c.apply(this,arguments)}function u(e,t){if(null==e)return{};var n,s,r={},o=Object.keys(e);for(s=0;s<o.length;s++)t.indexOf(n=o[s])>=0||(r[n]=e[n]);return r}function h(e){return Object.entries(e).map(([e,t])=>e&&t?`${e}=${t}`:"").join("&")}function l(e,t){return`Basic ${btoa(`${e}:${t}`)}`}class d extends Error{constructor(e,t,n,s){let r=e.toString();t&&(r+=` ${t}`),r+=": ",r+=s.message?s.message:JSON.stringify(s),super(r),this.status=void 0,this.statusText=void 0,this.headers=void 0,this.error=void 0,this.status=e,this.statusText=t,this.headers=n,this.error=s}}var p={__proto__:null,OAuthClient:class{},AuthClient:class{},AlbyResponseError:d};const m=["auth","endpoint","params","request_body","method","max_retries","base_url","user_agent","headers"],y="https://api.getalby.com";async function w(e,t,n=0){const s=await fetch(e,t);if(429===s.status&&n>0){const r=Number(s.headers.get("x-rate-limit-reset")),o=Number(s.headers.get("x-rate-limit-remaining")),i=1e3*r-Date.now();let a=1e3;return 0===o&&(a=i),await new Promise(e=>setTimeout(e,a)),w(e,t,n-1)}return s}async function g(e){let{auth:t,endpoint:n,params:s={},request_body:r,method:o,max_retries:i,base_url:a=y,user_agent:l,headers:p}=e,g=u(e,m);const f=new URL(a+n);f.search=h(s);const b="POST"===o&&!!r,v=t?await t.getAuthHeader(f.href,o):void 0,_=await w(f.toString(),c({headers:c({},b?{"Content-Type":"application/json; charset=utf-8"}:void 0,v,p,{"User-Agent":null!=l?l:"@getalby/sdk","X-User-Agent":null!=l?l:"@getalby/sdk"}),method:o,body:b?JSON.stringify(r):void 0},g),i);if(!_.ok){const e=await _.json();throw new d(_.status,_.statusText,_.headers,e)}return _}async function f(e){return(await g(e)).json()}const b=["expires_in"],v=["token"];function _(e){const{expires_in:t}=e;return c({},u(e,b),!!t&&{expires_at:Date.now()+1e3*t})}class k{constructor(e){this.bearer_token=void 0,this.bearer_token=e}getAuthHeader(){return{Authorization:`Bearer ${this.bearer_token}`}}}var E={__proto__:null,OAuth2User:class{constructor(e){this.token=void 0,this.options=void 0,this.code_verifier=void 0,this.code_challenge=void 0,this._refreshAccessTokenPromise=void 0;const{token:t}=e,n=u(e,v);this.options=c({client_secret:""},n),this.token=t,this._refreshAccessTokenPromise=null}async refreshAccessToken(){var e=this;return this._refreshAccessTokenPromise||(this._refreshAccessTokenPromise=new Promise(async function(t,n){try{var s;const n=null==(s=e.token)?void 0:s.refresh_token,{client_id:r,client_secret:o,request_options:i,user_agent:a}=e.options;if(!r)throw new Error("client_id is required");if(!n)throw new Error("refresh_token is required");const u=_(await f(c({},i,{endpoint:"/oauth/token",params:{client_id:r,grant_type:"refresh_token",refresh_token:n},user_agent:a,method:"POST",headers:c({},null==i?void 0:i.headers,{"Content-type":"application/x-www-form-urlencoded"},{Authorization:l(r,o)})})));e.token=u,t({token:u})}catch(e){n(e)}finally{e._refreshAccessTokenPromise=null}})),this._refreshAccessTokenPromise}isAccessTokenExpired(){var e,t;const n=null==(e=this.token)?void 0:e.refresh_token,s=null==(t=this.token)?void 0:t.expires_at;return!s||!!n&&s<=Date.now()+1e3}async requestAccessToken(e){const{client_id:t,client_secret:n,callback:s,request_options:r,user_agent:o}=this.options,i=this.code_verifier;if(!t)throw new Error("client_id is required");if(!s)throw new Error("callback is required");const a={code:e,grant_type:"authorization_code",code_verifier:i,client_id:t,redirect_uri:s},u=_(await f(c({},r,{endpoint:"/oauth/token",params:a,user_agent:o,method:"POST",headers:c({},null==r?void 0:r.headers,{"Content-Type":"application/x-www-form-urlencoded"},{Authorization:l(t,n)})})));return this.token=u,{token:u}}generateAuthURL(t){t||(t={}),console.log(t);const{client_id:n,callback:s,scopes:r}=this.options;if(!s)throw new Error("callback required");if(!r)throw new Error("scopes required");let o;if("S256"===t.code_challenge_method){const t=e.lib.WordArray.random(64);this.code_verifier=t.toString(),this.code_challenge=e.SHA256(this.code_verifier).toString(e.enc.Base64).replace(/\+/g,"-").replace(/\//g,"_").replace(/\=+$/,""),o="S256"}else"plain"===t.code_challenge_method&&t.code_challenge&&(this.code_challenge=t.code_challenge,this.code_verifier=t.code_challenge,o="plain");const i=this.code_challenge,a=new URL(t.authorizeUrl||"https://getalby.com/oauth");return a.search=h(c({},t,{client_id:n,scope:r.join(" "),response_type:"code",redirect_uri:s,code_challenge_method:o,code_challenge:i})),a.toString()}async getAuthHeader(){var e;if(null==(e=this.token)||!e.access_token)throw new Error("access_token is required");return this.isAccessTokenExpired()&&await this.refreshAccessToken(),{Authorization:`Bearer ${this.token.access_token}`}}},OAuth2Bearer:k};const P={alby:{authorizationUrl:"https://nwc.getalby.com/apps/new",relayUrl:"wss://relay.getalby.com/v1",walletPubkey:"69effe7b49a6dd5cf525bd0905917a5005ffe480b58eeb8e861418cf3ae760d9"}};class T{static parseWalletConnectUrl(e){e=e.replace("nostrwalletconnect://","http://").replace("nostr+walletconnect://","http://");const t=new URL(e),n={};n.walletPubkey=t.host;const s=t.searchParams.get("secret"),r=t.searchParams.get("relay");return s&&(n.secret=s),r&&(n.relayUrl=r),n}static withNewSecret(e){return(e=e||{}).secret=t(),new T(e)}constructor(e){var t;this.relay=void 0,this.relayUrl=void 0,this.secret=void 0,this.walletPubkey=void 0,this.options=void 0,this.subscribers=void 0,e&&e.nostrWalletConnectUrl&&(e=c({},T.parseWalletConnectUrl(e.nostrWalletConnectUrl),e));const r=P[(null==(t=e)?void 0:t.providerName)||"alby"];this.options=c({},r,e||{}),this.relayUrl=this.options.relayUrl,this.relay=n(this.relayUrl),this.options.secret&&(this.secret=this.options.secret.toLowerCase().startsWith("nsec")?s.decode(this.options.secret).data:this.options.secret),this.walletPubkey=this.options.walletPubkey.toLowerCase().startsWith("npub")?s.decode(this.options.walletPubkey).data:this.options.walletPubkey,this.subscribers={},void 0===globalThis.WebSocket&&console.error("WebSocket is undefined. Make sure to `import websocket-polyfill` for nodejs environments")}on(e,t){this.subscribers[e]=t}notify(e,t){const n=this.subscribers[e];n&&n(t)}getNostrWalletConnectUrl(e=!0){let t=`nostr+walletconnect://${this.walletPubkey}?relay=${this.relayUrl}&pubkey=${this.publicKey}`;return e&&(t=`${t}&secret=${this.secret}`),t}get nostrWalletConnectUrl(){return this.getNostrWalletConnectUrl()}get connected(){return 1===this.relay.status}get publicKey(){if(!this.secret)throw new Error("Missing secret key");return r(this.secret)}getPublicKey(){return Promise.resolve(this.publicKey)}signEvent(e){if(!this.secret)throw new Error("Missing secret key");return Promise.resolve(o(e,this.secret))}getEventHash(e){return i(e)}async enable(){if(this.connected)return Promise.resolve();await this.relay.connect()}close(){return this.relay.close()}async encrypt(e,t){if(!this.secret)throw new Error("Missing secret");return await a.encrypt(this.secret,e,t)}async decrypt(e,t){if(!this.secret)throw new Error("Missing secret");return await a.decrypt(this.secret,e,t)}async getInfo(){return{methods:["getInfo","sendPayment","getBalance"],node:{},supports:["lightning"],version:"NWC"}}getBalance(){return this.checkConnected(),this.executeNip47Request("get_balance","getBalance",void 0,e=>void 0!==e.balance,e=>e)}sendPayment(e){return this.checkConnected(),this.executeNip47Request("pay_invoice","sendPayment",{invoice:e},e=>!!e.preimage,e=>({preimage:e.preimage}))}keysend(e){throw new Error("Method not implemented.")}lnurl(e){throw new Error("Method not implemented.")}makeInvoice(e){throw new Error("Method not implemented.")}request(e,t){throw new Error("Method not implemented.")}signMessage(e){throw new Error("Method not implemented.")}verifyMessage(e,t){throw new Error("Method not implemented.")}getAuthorizationUrl(e){if(!this.options.authorizationUrl)throw new Error("Missing authorizationUrl option");const t=new URL(this.options.authorizationUrl);return null!=e&&e.name&&t.searchParams.set("c",null==e?void 0:e.name),t.searchParams.set("pubkey",this.publicKey),null!=e&&e.returnTo&&t.searchParams.set("return_to",e.returnTo),null!=e&&e.budgetRenewal&&t.searchParams.set("budget_renewal",e.budgetRenewal),null!=e&&e.expiresAt&&t.searchParams.set("expires_at",Math.floor(e.expiresAt.getTime()/1e3).toString()),null!=e&&e.maxAmount&&t.searchParams.set("max_amount",e.maxAmount.toString()),void 0!==(null==e?void 0:e.editable)&&t.searchParams.set("editable",e.editable.toString()),t}initNWC(e={}){e.name||(e.name=document.location.host);const t=this.getAuthorizationUrl(e),n=window.outerHeight/2+window.screenY-300,s=window.outerWidth/2+window.screenX-200;return new Promise((e,r)=>{const o=window.open(t.toString(),`${document.title} - Wallet Connect`,`height=600,width=400,top=${n},left=${s}`);if(!o)return void r();const i=n=>{const s=n.data;s&&"nwc:success"===s.type&&n.origin===`${t.protocol}//${t.host}`&&(e(s),clearInterval(a),window.removeEventListener("message",i),o&&o.close())},a=setInterval(()=>{o&&o.closed&&(r(),clearInterval(a),window.removeEventListener("message",i))},500);window.addEventListener("message",i)})}checkConnected(){if(!this.connected)throw new Error("please call enable() and await the promise before calling this function")}executeNip47Request(e,t,n,s,r){var o=this;return new Promise(async function(i,a){const c={method:e,params:n},u=await o.encrypt(o.walletPubkey,JSON.stringify(c)),h={kind:23194,created_at:Math.floor(Date.now()/1e3),tags:[["p",o.walletPubkey]],content:u,pubkey:o.publicKey},l=await o.signEvent(h);let d=o.relay.sub([{kinds:[23195],authors:[o.walletPubkey],"#e":[l.id]}]),p=setTimeout(function(){d.unsub(),a({error:`reply timeout: event ${l.id}`,code:"INTERNAL"})},6e4);d.on("event",async function(e){clearTimeout(p),d.unsub();const n=await o.decrypt(o.walletPubkey,e.content);let c;try{c=JSON.parse(n)}catch(e){return void a({error:"invalid response",code:"INTERNAL"})}var u,h;23195==e.kind&&c.result?s(c.result)?(i(r(c.result)),o.notify(t,c.result)):a({error:"Response from NWC failed validation: "+JSON.stringify(c.result),code:"INTERNAL"}):a({error:null==(u=c.error)?void 0:u.message,code:null==(h=c.error)?void 0:h.code})});let m=o.relay.publish(l),y=setTimeout(function(){a({error:`Publish timeout: event ${l.id}`})},5e3);m.on("failed",e=>{clearTimeout(y),a({error:`Failed to publish request: ${e}`})}),m.on("ok",()=>{clearTimeout(y)})})}}const A=T;function O(e){const t={};return e.recipient.customKey&&e.recipient.customValue&&(t[e.recipient.customKey]=e.recipient.customValue),t[7629169]=JSON.stringify(e.boostagram),{destination:e.recipient.address,amount:e.amount,customRecords:t}}class q{constructor(e,t){this.auth=void 0,this.defaultRequestOptions=void 0,this.auth="string"==typeof e?new k(e):e,this.defaultRequestOptions=c({},t,{user_agent:null==t?void 0:t.user_agent})}accountBalance(e,t){return f(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/balance",params:e,method:"GET"}))}accountSummary(e,t){return f(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/user/summary",params:e,method:"GET"}))}accountInformation(e,t){return f(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/user/me",params:e,method:"GET"}))}accountValue4Value(e,t){return f(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/user/value4value",params:e,method:"GET"}))}incomingInvoices(e,t){return f(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/invoices/incoming",params:e,method:"GET"}))}outgoingInvoices(e,t){return f(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/invoices/outgoing",params:e,method:"GET"}))}getInvoice(e,t){return f(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:`/invoices/${e}`,method:"GET"}))}createInvoice(e,t){return f(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/invoices",request_body:e,method:"POST"}))}keysend(e,t){let n,s;return Array.isArray(e)?(n="/payments/keysend/multi",s={keysends:e}):(n="/payments/keysend",s=e),f(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:n,request_body:s,method:"POST"}))}sendPayment(e,t){return f(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/payments/bolt11",request_body:e,method:"POST"}))}sendBoostagram(e,t){let n,s;return Array.isArray(e)?(n="/payments/keysend/multi",s={keysends:e.map(e=>O(e))}):(n="/payments/keysend",s=O(e)),f(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:n,request_body:s,method:"POST"}))}sendToAlbyAccount(e,t){return f(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/payments/keysend",request_body:{destination:"030a58b8653d32b99200a2334cfe913e51dc7d155aa0116c176657a4f1722677a3",customRecords:{696969:e.account},amount:e.amount,memo:e.memo},method:"POST"}))}createWebhookEndpoint(e,t){return f(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/webhook_endpoints",request_body:e,method:"POST"}))}deleteWebhookEndpoint(e,t){return f(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:`/webhook_endpoints/${e}`,method:"DELETE"}))}getSwapInfo(e){return f(c({auth:this.auth},this.defaultRequestOptions,e,{endpoint:"/swaps/info",method:"GET"}))}createSwap(e,t){return f(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/swaps",method:"POST",request_body:e}))}}var x={__proto__:null,NostrWebLNProvider:T,NWC:A,OauthWeblnProvider:class{constructor(e){this.client=void 0,this.auth=void 0,this.oauth=void 0,this.subscribers=void 0,this.isExecuting=void 0,this.auth=e.auth,this.client=new q(e.auth),this.oauth=!0,this.subscribers={},this.isExecuting=!1}on(e,t){this.subscribers[e]=t}notify(e,t){const n=this.subscribers[e];n&&n(t)}async enable(){var e;if(!this.isExecuting){if(null!=(e=this.auth.token)&&e.access_token)return{enabled:!0};if("undefined"==typeof window||void 0===window.document)throw new Error("Missing access token");try{this.isExecuting=!0,await this.openAuthorization()}finally{this.isExecuting=!1}}}async sendPayment(e){if(!this.isExecuting)try{this.isExecuting=!0;const t=await this.client.sendPayment({invoice:e});return this.notify("sendPayment",t),{preimage:t.payment_preimage}}catch(e){let t="Unknown Error";throw e instanceof Error&&(t=e.message),new Error(t)}finally{this.isExecuting=!1}}async keysend(e){if(!this.isExecuting)try{this.isExecuting=!0;const t=await this.client.keysend(e);return this.notify("keysend",t),{preimage:t.payment_preimage}}catch(e){let t="Unknown Error";throw e instanceof Error&&(t=e.message),new Error(t)}finally{this.isExecuting=!1}}async getInfo(){return{alias:"Alby"}}async makeInvoice(e){if(!this.isExecuting)try{this.isExecuting=!0;const t=await this.client.createInvoice({amount:parseInt(e.amount.toString()),description:e.defaultMemo});return this.notify("makeInvoice",t),{paymentRequest:t.payment_request}}catch(e){let t="Unknown Error";throw e instanceof Error&&(t=e.message),new Error(t)}finally{this.isExecuting=!1}}openAuthorization(){var e=this;const t=window.outerHeight/2+window.screenY-350,n=window.outerWidth/2+window.screenX-300,s=this.auth.generateAuthURL({code_challenge_method:"S256"});return new Promise((r,o)=>{const i=window.open(s,`${document.title} - WebLN enable`,`height=700,width=600,top=${t},left=${n}`);let a=!1;window.addEventListener("message",async function(t){const n=t.data;if(n&&"alby:oauth:success"===n.type&&t.origin===`${document.location.protocol}//${document.location.host}`&&!a){a=!0,console.info("Processing OAuth code response");const t=n.payload.code;try{await e.auth.requestAccessToken(t),e.client=new q(e.auth),i&&i.close(),e.notify("enable"),r({enabled:!0})}catch(e){console.error(e),o({enabled:!1})}}})})}}};export{q as Client,E as auth,p as types,x as webln};
//# sourceMappingURL=index.modern.js.map

@@ -1,2 +0,2 @@

import e from"crypto-js";import{generatePrivateKey as t,relayInit as n,nip19 as r,finishEvent as o,getEventHash as i,nip04 as s,getPublicKey as u}from"nostr-tools";function c(){return c=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},c.apply(this,arguments)}function a(e){return a=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},a(e)}function l(e,t){return l=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},l(e,t)}function h(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}function d(e,t,n){return d=h()?Reflect.construct.bind():function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&l(o,n.prototype),o},d.apply(null,arguments)}function f(e){var t="function"==typeof Map?new Map:void 0;return f=function(e){if(null===e||-1===Function.toString.call(e).indexOf("[native code]"))return e;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return d(e,arguments,a(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),l(n,e)},f(e)}function p(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)t.indexOf(n=i[r])>=0||(o[n]=e[n]);return o}function m(e){return Object.entries(e).map(function(e){var t=e[0],n=e[1];return t&&n?t+"="+n:""}).join("&")}function v(e,t){return"Basic "+btoa(e+":"+t)}var y=/*#__PURE__*/function(e){var t,n;function r(t,n,r,o){var i,s=t.toString();return n&&(s+=" "+n),s+=": ",s+=o.message?o.message:JSON.stringify(o),(i=e.call(this,s)||this).status=void 0,i.statusText=void 0,i.headers=void 0,i.error=void 0,i.status=t,i.statusText=n,i.headers=r,i.error=o,i}return n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,l(t,n),r}(/*#__PURE__*/f(Error)),w={__proto__:null,OAuthClient:function(){},AuthClient:function(){},AlbyResponseError:y},b=["auth","endpoint","params","request_body","method","max_retries","base_url","user_agent","headers"],g=function(e){return Promise.resolve(P(e)).then(function(e){return e.json()})},P=function(e){var t=e.auth,n=e.endpoint,r=e.params,o=void 0===r?{}:r,i=e.request_body,s=e.method,u=e.max_retries,a=e.base_url,l=void 0===a?k:a,h=e.user_agent,d=e.headers,f=p(e,b);try{var v=function(e){return Promise.resolve(_(w.toString(),c({headers:c({},g?{"Content-Type":"application/json; charset=utf-8"}:void 0,e,d,{"User-Agent":null!=h?h:"alby-js-api","X-User-Agent":null!=h?h:"alby-js-api"}),method:s,body:g?JSON.stringify(i):void 0},f),u)).then(function(e){var t=function(){if(!e.ok)return Promise.resolve(e.json()).then(function(t){throw new y(e.status,e.statusText,e.headers,t)})}();return t&&t.then?t.then(function(t){return e}):e})},w=new URL(l+n);w.search=m(o);var g="POST"===s&&!!i;return Promise.resolve(t?Promise.resolve(t.getAuthHeader(w.href,s)).then(v):v(void 0))}catch(e){return Promise.reject(e)}},_=function e(t,n,r){void 0===r&&(r=0);try{return Promise.resolve(fetch(t,n)).then(function(o){var i,s=function(){if(429===o.status&&r>0){var s=Number(o.headers.get("x-rate-limit-reset")),u=Number(o.headers.get("x-rate-limit-remaining")),c=1e3*s-Date.now(),a=1e3;return 0===u&&(a=c),Promise.resolve(new Promise(function(e){return setTimeout(e,a)})).then(function(){var o=e(t,n,r-1);return i=1,o})}}();return s&&s.then?s.then(function(e){return i?e:o}):i?s:o})}catch(e){return Promise.reject(e)}},k="https://api.getalby.com",E=["expires_in"],O=["token"];function A(e){var t=e.expires_in;return c({},p(e,E),!!t&&{expires_at:Date.now()+1e3*t})}var T=/*#__PURE__*/function(){function t(e){this.token=void 0,this.options=void 0,this.code_verifier=void 0,this.code_challenge=void 0,this._refreshAccessTokenPromise=void 0;var t=e.token,n=p(e,O);this.options=c({client_secret:""},n),this.token=t,this._refreshAccessTokenPromise=null}var n=t.prototype;return n.refreshAccessToken=function(){try{var e=this;return e._refreshAccessTokenPromise||(e._refreshAccessTokenPromise=new Promise(function(t,n){try{return Promise.resolve(function(r,o){try{var i=function(n,r){try{var o=function(){var n,r=null==(n=e.token)?void 0:n.refresh_token,o=e.options,i=o.client_id,s=o.client_secret,u=o.request_options,a=o.user_agent;if(!i)throw new Error("client_id is required");if(!r)throw new Error("refresh_token is required");return Promise.resolve(g(c({},u,{endpoint:"/oauth/token",params:{client_id:i,grant_type:"refresh_token",refresh_token:r},user_agent:a,method:"POST",headers:c({},null==u?void 0:u.headers,{"Content-type":"application/x-www-form-urlencoded"},{Authorization:v(i,s)})}))).then(function(n){var r=A(n);e.token=r,t({token:r})})}()}catch(e){return r(e)}return o&&o.then?o.then(void 0,r):o}(0,function(e){n(e)})}catch(e){return o(!0,e)}return i&&i.then?i.then(o.bind(null,!1),o.bind(null,!0)):o(!1,i)}(0,function(t,n){if(e._refreshAccessTokenPromise=null,t)throw n;return n}))}catch(e){return Promise.reject(e)}})),Promise.resolve(e._refreshAccessTokenPromise)}catch(e){return Promise.reject(e)}},n.isAccessTokenExpired=function(){var e,t,n=null==(e=this.token)?void 0:e.refresh_token,r=null==(t=this.token)?void 0:t.expires_at;return!r||!!n&&r<=Date.now()+1e3},n.requestAccessToken=function(e){try{var t=this,n=t.options,r=n.client_id,o=n.client_secret,i=n.callback,s=n.request_options,u=n.user_agent,a=t.code_verifier;if(!r)throw new Error("client_id is required");if(!i)throw new Error("callback is required");return Promise.resolve(g(c({},s,{endpoint:"/oauth/token",params:{code:e,grant_type:"authorization_code",code_verifier:a,client_id:r,redirect_uri:i},user_agent:u,method:"POST",headers:c({},null==s?void 0:s.headers,{"Content-Type":"application/x-www-form-urlencoded"},{Authorization:v(r,o)})}))).then(function(e){var n=A(e);return t.token=n,{token:n}})}catch(e){return Promise.reject(e)}},n.generateAuthURL=function(t){t||(t={}),console.log(t);var n,r=this.options,o=r.client_id,i=r.callback,s=r.scopes;if(!i)throw new Error("callback required");if(!s)throw new Error("scopes required");if("S256"===t.code_challenge_method){var u=e.lib.WordArray.random(64);this.code_verifier=u.toString(),this.code_challenge=e.SHA256(this.code_verifier).toString(e.enc.Base64).replace(/\+/g,"-").replace(/\//g,"_").replace(/\=+$/,""),n="S256"}else"plain"===t.code_challenge_method&&t.code_challenge&&(this.code_challenge=t.code_challenge,this.code_verifier=t.code_challenge,n="plain");var a=this.code_challenge,l=new URL(t.authorizeUrl||"https://getalby.com/oauth");return l.search=m(c({},t,{client_id:o,scope:s.join(" "),response_type:"code",redirect_uri:i,code_challenge_method:n,code_challenge:a})),l.toString()},n.getAuthHeader=function(){try{var e,t=function(){return{Authorization:"Bearer "+n.token.access_token}},n=this;if(null==(e=n.token)||!e.access_token)throw new Error("access_token is required");var r=function(){if(n.isAccessTokenExpired())return Promise.resolve(n.refreshAccessToken()).then(function(){})}();return Promise.resolve(r&&r.then?r.then(t):t())}catch(e){return Promise.reject(e)}},t}(),j=/*#__PURE__*/function(){function e(e){this.bearer_token=void 0,this.bearer_token=e}return e.prototype.getAuthHeader=function(){return{Authorization:"Bearer "+this.bearer_token}},e}(),x={__proto__:null,OAuth2User:T,OAuth2Bearer:j},q={alby:{authorizationUrl:"https://nwc.getalby.com/apps/new",relayUrl:"wss://relay.getalby.com/v1",walletPubkey:"69effe7b49a6dd5cf525bd0905917a5005ffe480b58eeb8e861418cf3ae760d9"}},R=/*#__PURE__*/function(){function e(t){var o;this.relay=void 0,this.relayUrl=void 0,this.secret=void 0,this.walletPubkey=void 0,this.options=void 0,this.subscribers=void 0,t&&t.nostrWalletConnectUrl&&(t=c({},e.parseWalletConnectUrl(t.nostrWalletConnectUrl),t));var i=q[(null==(o=t)?void 0:o.providerName)||"alby"];this.options=c({},i,t||{}),this.relayUrl=this.options.relayUrl,this.relay=n(this.relayUrl),this.options.secret&&(this.secret=this.options.secret.toLowerCase().startsWith("nsec")?r.decode(this.options.secret).data:this.options.secret),this.walletPubkey=this.options.walletPubkey.toLowerCase().startsWith("npub")?r.decode(this.options.walletPubkey).data:this.options.walletPubkey,this.subscribers={},void 0===globalThis.WebSocket&&console.error("WebSocket is undefined. Make sure to `import websocket-polyfill` for nodejs environments")}e.parseWalletConnectUrl=function(e){e=e.replace("nostrwalletconnect://","http://").replace("nostr+walletconnect://","http://");var t=new URL(e),n={};n.walletPubkey=t.host;var r=t.searchParams.get("secret"),o=t.searchParams.get("relay");return r&&(n.secret=r),o&&(n.relayUrl=o),n},e.withNewSecret=function(n){return(n=n||{}).secret=t(),new e(n)};var a,l,h=e.prototype;return h.on=function(e,t){this.subscribers[e]=t},h.notify=function(e,t){var n=this.subscribers[e];n&&n(t)},h.getNostrWalletConnectUrl=function(e){void 0===e&&(e=!0);var t="nostr+walletconnect://"+this.walletPubkey+"?relay="+this.relayUrl+"&pubkey="+this.publicKey;return e&&(t=t+"&secret="+this.secret),t},h.getPublicKey=function(){return Promise.resolve(this.publicKey)},h.signEvent=function(e){if(!this.secret)throw new Error("Missing secret key");return Promise.resolve(o(e,this.secret))},h.getEventHash=function(e){return i(e)},h.enable=function(){try{return this.connected?Promise.resolve():Promise.resolve(this.relay.connect()).then(function(){})}catch(e){return Promise.reject(e)}},h.close=function(){return this.relay.close()},h.encrypt=function(e,t){try{if(!this.secret)throw new Error("Missing secret");return Promise.resolve(s.encrypt(this.secret,e,t))}catch(e){return Promise.reject(e)}},h.decrypt=function(e,t){try{if(!this.secret)throw new Error("Missing secret");return Promise.resolve(s.decrypt(this.secret,e,t))}catch(e){return Promise.reject(e)}},h.getInfo=function(){try{return Promise.resolve({methods:["getInfo","sendPayment"],node:{},supports:["lightning"],version:"NWC"})}catch(e){return Promise.reject(e)}},h.sendPayment=function(e){var t=this;return this.checkConnected(),new Promise(function(n,r){try{return Promise.resolve(t.encrypt(t.walletPubkey,JSON.stringify({method:"pay_invoice",params:{invoice:e}}))).then(function(e){var o={kind:23194,created_at:Math.floor(Date.now()/1e3),tags:[["p",t.walletPubkey]],content:e,pubkey:t.publicKey};return Promise.resolve(t.signEvent(o)).then(function(e){var o=t.relay.sub([{kinds:[23195],authors:[t.walletPubkey],"#e":[e.id]}]),i=setTimeout(function(){o.unsub(),r({error:"reply timeout: event "+e.id,code:"INTERNAL"})},6e4);o.on("event",function(e){try{return clearTimeout(i),o.unsub(),Promise.resolve(t.decrypt(t.walletPubkey,e.content)).then(function(o){var i,s,u,c;try{s=JSON.parse(o)}catch(e){return void r({error:"invalid response",code:"INTERNAL"})}23195==e.kind&&null!=(i=s.result)&&i.preimage?(n({preimage:s.result.preimage}),t.notify("sendPayment",s.result)):r({error:null==(u=s.error)?void 0:u.message,code:null==(c=s.error)?void 0:c.code})})}catch(e){return Promise.reject(e)}});var s=t.relay.publish(e),u=setTimeout(function(){r({error:"Publish timeout: event "+e.id})},5e3);s.on("failed",function(e){clearTimeout(u),r({error:"Failed to publish request: "+e})}),s.on("ok",function(){clearTimeout(u)})})})}catch(e){return Promise.reject(e)}})},h.keysend=function(e){throw new Error("Method not implemented.")},h.lnurl=function(e){throw new Error("Method not implemented.")},h.makeInvoice=function(e){throw new Error("Method not implemented.")},h.request=function(e,t){throw new Error("Method not implemented.")},h.signMessage=function(e){throw new Error("Method not implemented.")},h.verifyMessage=function(e,t){throw new Error("Method not implemented.")},h.getAuthorizationUrl=function(e){if(!this.options.authorizationUrl)throw new Error("Missing authorizationUrl option");var t=new URL(this.options.authorizationUrl);return null!=e&&e.name&&t.searchParams.set("c",null==e?void 0:e.name),t.searchParams.set("pubkey",this.publicKey),null!=e&&e.returnTo&&t.searchParams.set("return_to",e.returnTo),null!=e&&e.budgetRenewal&&t.searchParams.set("budget_renewal",e.budgetRenewal),null!=e&&e.expiresAt&&t.searchParams.set("expires_at",Math.floor(e.expiresAt.getTime()/1e3).toString()),null!=e&&e.maxAmount&&t.searchParams.set("max_amount",e.maxAmount.toString()),void 0!==(null==e?void 0:e.editable)&&t.searchParams.set("editable",e.editable.toString()),t},h.initNWC=function(e){void 0===e&&(e={}),e.name||(e.name=document.location.host);var t=this.getAuthorizationUrl(e),n=window.outerHeight/2+window.screenY-300,r=window.outerWidth/2+window.screenX-200;return new Promise(function(e,o){var i=window.open(t.toString(),document.title+" - Wallet Connect","height=600,width=400,top="+n+",left="+r);if(i){var s=function n(r){var o=r.data;o&&"nwc:success"===o.type&&r.origin===t.protocol+"//"+t.host&&(e(o),clearInterval(u),window.removeEventListener("message",n),i&&i.close())},u=setInterval(function(){i&&i.closed&&(o(),clearInterval(u),window.removeEventListener("message",s))},500);window.addEventListener("message",s)}else o()})},h.checkConnected=function(){if(!this.connected)throw new Error("please call enable() and await the promise before calling this function")},a=e,(l=[{key:"nostrWalletConnectUrl",get:function(){return this.getNostrWalletConnectUrl()}},{key:"connected",get:function(){return 1===this.relay.status}},{key:"publicKey",get:function(){if(!this.secret)throw new Error("Missing secret key");return u(this.secret)}}])&&function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(a.prototype,l),Object.defineProperty(a,"prototype",{writable:!1}),e}(),S=R;function U(e){var t={};return e.recipient.customKey&&e.recipient.customValue&&(t[e.recipient.customKey]=e.recipient.customValue),t[7629169]=JSON.stringify(e.boostagram),{destination:e.recipient.address,amount:e.amount,customRecords:t}}var W=/*#__PURE__*/function(){function e(e,t){this.auth=void 0,this.defaultRequestOptions=void 0,this.auth="string"==typeof e?new j(e):e,this.defaultRequestOptions=c({},t,{user_agent:null==t?void 0:t.user_agent})}var t=e.prototype;return t.accountBalance=function(e,t){return g(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/balance",params:e,method:"GET"}))},t.accountSummary=function(e,t){return g(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/user/summary",params:e,method:"GET"}))},t.accountInformation=function(e,t){return g(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/user/me",params:e,method:"GET"}))},t.accountValue4Value=function(e,t){return g(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/user/value4value",params:e,method:"GET"}))},t.incomingInvoices=function(e,t){return g(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/invoices/incoming",params:e,method:"GET"}))},t.outgoingInvoices=function(e,t){return g(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/invoices/outgoing",params:e,method:"GET"}))},t.getInvoice=function(e,t){return g(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/invoices/"+e,method:"GET"}))},t.createInvoice=function(e,t){return g(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/invoices",request_body:e,method:"POST"}))},t.keysend=function(e,t){var n,r;return Array.isArray(e)?(n="/payments/keysend/multi",r={keysends:e}):(n="/payments/keysend",r=e),g(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:n,request_body:r,method:"POST"}))},t.sendPayment=function(e,t){return g(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/payments/bolt11",request_body:e,method:"POST"}))},t.sendBoostagram=function(e,t){var n,r;return Array.isArray(e)?(n="/payments/keysend/multi",r={keysends:e.map(function(e){return U(e)})}):(n="/payments/keysend",r=U(e)),g(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:n,request_body:r,method:"POST"}))},t.sendToAlbyAccount=function(e,t){return g(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/payments/keysend",request_body:{destination:"030a58b8653d32b99200a2334cfe913e51dc7d155aa0116c176657a4f1722677a3",customRecords:{696969:e.account},amount:e.amount,memo:e.memo},method:"POST"}))},t.createWebhookEndpoint=function(e,t){return g(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/webhook_endpoints",request_body:e,method:"POST"}))},t.deleteWebhookEndpoint=function(e,t){return g(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/webhook_endpoints/"+e,method:"DELETE"}))},e}();function N(e,t){try{var n=e()}catch(e){return t(!0,e)}return n&&n.then?n.then(t.bind(null,!1),t.bind(null,!0)):t(!1,n)}function C(e,t){try{var n=e()}catch(e){return t(e)}return n&&n.then?n.then(void 0,t):n}var M={__proto__:null,NostrWebLNProvider:R,NWC:S,OauthWeblnProvider:/*#__PURE__*/function(){function e(e){this.client=void 0,this.auth=void 0,this.oauth=void 0,this.subscribers=void 0,this.isExecuting=void 0,this.auth=e.auth,this.client=new W(e.auth),this.oauth=!0,this.subscribers={},this.isExecuting=!1}var t=e.prototype;return t.on=function(e,t){this.subscribers[e]=t},t.notify=function(e,t){var n=this.subscribers[e];n&&n(t)},t.enable=function(){try{var e,t=this;return t.isExecuting?Promise.resolve():null!=(e=t.auth.token)&&e.access_token?Promise.resolve({enabled:!0}):Promise.resolve(function(){if("undefined"==typeof window||void 0===window.document)throw new Error("Missing access token");var e=N(function(){return t.isExecuting=!0,Promise.resolve(t.openAuthorization()).then(function(){})},function(e,n){if(t.isExecuting=!1,e)throw n;return n});if(e&&e.then)return e.then(function(){})}())}catch(e){return Promise.reject(e)}},t.sendPayment=function(e){try{var t=this;return t.isExecuting?Promise.resolve():Promise.resolve(N(function(){return C(function(){return t.isExecuting=!0,Promise.resolve(t.client.sendPayment({invoice:e})).then(function(e){return t.notify("sendPayment",e),{preimage:e.payment_preimage}})},function(e){var t="Unknown Error";throw e instanceof Error&&(t=e.message),new Error(t)})},function(e,n){if(t.isExecuting=!1,e)throw n;return n}))}catch(e){return Promise.reject(e)}},t.keysend=function(e){try{var t=this;return t.isExecuting?Promise.resolve():Promise.resolve(N(function(){return C(function(){return t.isExecuting=!0,Promise.resolve(t.client.keysend(e)).then(function(e){return t.notify("keysend",e),{preimage:e.payment_preimage}})},function(e){var t="Unknown Error";throw e instanceof Error&&(t=e.message),new Error(t)})},function(e,n){if(t.isExecuting=!1,e)throw n;return n}))}catch(e){return Promise.reject(e)}},t.getInfo=function(){try{return Promise.resolve({alias:"Alby"})}catch(e){return Promise.reject(e)}},t.makeInvoice=function(e){try{var t=this;return t.isExecuting?Promise.resolve():Promise.resolve(N(function(){return C(function(){return t.isExecuting=!0,Promise.resolve(t.client.createInvoice({amount:parseInt(e.amount.toString()),description:e.defaultMemo})).then(function(e){return t.notify("makeInvoice",e),{paymentRequest:e.payment_request}})},function(e){var t="Unknown Error";throw e instanceof Error&&(t=e.message),new Error(t)})},function(e,n){if(t.isExecuting=!1,e)throw n;return n}))}catch(e){return Promise.reject(e)}},t.openAuthorization=function(){var e=this,t=window.outerHeight/2+window.screenY-350,n=window.outerWidth/2+window.screenX-300,r=this.auth.generateAuthURL({code_challenge_method:"S256"});return new Promise(function(o,i){var s=window.open(r,document.title+" - WebLN enable","height=700,width=600,top="+t+",left="+n),u=!1;window.addEventListener("message",function(t){try{var n=t.data,r=function(){if(n&&"alby:oauth:success"===n.type&&t.origin===document.location.protocol+"//"+document.location.host&&!u){u=!0,console.info("Processing OAuth code response");var r=n.payload.code,c=C(function(){return Promise.resolve(e.auth.requestAccessToken(r)).then(function(){e.client=new W(e.auth),s&&s.close(),e.notify("enable"),o({enabled:!0})})},function(e){console.error(e),i({enabled:!1})});if(c&&c.then)return c.then(function(){})}}();return Promise.resolve(r&&r.then?r.then(function(){}):void 0)}catch(e){return Promise.reject(e)}})})},e}()};export{W as Client,x as auth,w as types,M as webln};
import e from"crypto-js";import{generatePrivateKey as t,relayInit as n,nip19 as r,finishEvent as o,getEventHash as i,nip04 as s,getPublicKey as u}from"nostr-tools";function c(){return c=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},c.apply(this,arguments)}function a(e){return a=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},a(e)}function h(e,t){return h=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},h(e,t)}function l(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}function d(e,t,n){return d=l()?Reflect.construct.bind():function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&h(o,n.prototype),o},d.apply(null,arguments)}function f(e){var t="function"==typeof Map?new Map:void 0;return f=function(e){if(null===e||-1===Function.toString.call(e).indexOf("[native code]"))return e;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return d(e,arguments,a(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),h(n,e)},f(e)}function p(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)t.indexOf(n=i[r])>=0||(o[n]=e[n]);return o}function m(e){return Object.entries(e).map(function(e){var t=e[0],n=e[1];return t&&n?t+"="+n:""}).join("&")}function v(e,t){return"Basic "+btoa(e+":"+t)}var y=/*#__PURE__*/function(e){var t,n;function r(t,n,r,o){var i,s=t.toString();return n&&(s+=" "+n),s+=": ",s+=o.message?o.message:JSON.stringify(o),(i=e.call(this,s)||this).status=void 0,i.statusText=void 0,i.headers=void 0,i.error=void 0,i.status=t,i.statusText=n,i.headers=r,i.error=o,i}return n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,h(t,n),r}(/*#__PURE__*/f(Error)),w={__proto__:null,OAuthClient:function(){},AuthClient:function(){},AlbyResponseError:y},g=["auth","endpoint","params","request_body","method","max_retries","base_url","user_agent","headers"],b=function(e){return Promise.resolve(P(e)).then(function(e){return e.json()})},P=function(e){var t=e.auth,n=e.endpoint,r=e.params,o=void 0===r?{}:r,i=e.request_body,s=e.method,u=e.max_retries,a=e.base_url,h=void 0===a?k:a,l=e.user_agent,d=e.headers,f=p(e,g);try{var v=function(e){return Promise.resolve(_(w.toString(),c({headers:c({},b?{"Content-Type":"application/json; charset=utf-8"}:void 0,e,d,{"User-Agent":null!=l?l:"@getalby/sdk","X-User-Agent":null!=l?l:"@getalby/sdk"}),method:s,body:b?JSON.stringify(i):void 0},f),u)).then(function(e){var t=function(){if(!e.ok)return Promise.resolve(e.json()).then(function(t){throw new y(e.status,e.statusText,e.headers,t)})}();return t&&t.then?t.then(function(t){return e}):e})},w=new URL(h+n);w.search=m(o);var b="POST"===s&&!!i;return Promise.resolve(t?Promise.resolve(t.getAuthHeader(w.href,s)).then(v):v(void 0))}catch(e){return Promise.reject(e)}},_=function e(t,n,r){void 0===r&&(r=0);try{return Promise.resolve(fetch(t,n)).then(function(o){var i,s=function(){if(429===o.status&&r>0){var s=Number(o.headers.get("x-rate-limit-reset")),u=Number(o.headers.get("x-rate-limit-remaining")),c=1e3*s-Date.now(),a=1e3;return 0===u&&(a=c),Promise.resolve(new Promise(function(e){return setTimeout(e,a)})).then(function(){var o=e(t,n,r-1);return i=1,o})}}();return s&&s.then?s.then(function(e){return i?e:o}):i?s:o})}catch(e){return Promise.reject(e)}},k="https://api.getalby.com",E=["expires_in"],O=["token"];function T(e){var t=e.expires_in;return c({},p(e,E),!!t&&{expires_at:Date.now()+1e3*t})}var A=/*#__PURE__*/function(){function t(e){this.token=void 0,this.options=void 0,this.code_verifier=void 0,this.code_challenge=void 0,this._refreshAccessTokenPromise=void 0;var t=e.token,n=p(e,O);this.options=c({client_secret:""},n),this.token=t,this._refreshAccessTokenPromise=null}var n=t.prototype;return n.refreshAccessToken=function(){try{var e=this;return e._refreshAccessTokenPromise||(e._refreshAccessTokenPromise=new Promise(function(t,n){try{return Promise.resolve(function(r,o){try{var i=function(n,r){try{var o=function(){var n,r=null==(n=e.token)?void 0:n.refresh_token,o=e.options,i=o.client_id,s=o.client_secret,u=o.request_options,a=o.user_agent;if(!i)throw new Error("client_id is required");if(!r)throw new Error("refresh_token is required");return Promise.resolve(b(c({},u,{endpoint:"/oauth/token",params:{client_id:i,grant_type:"refresh_token",refresh_token:r},user_agent:a,method:"POST",headers:c({},null==u?void 0:u.headers,{"Content-type":"application/x-www-form-urlencoded"},{Authorization:v(i,s)})}))).then(function(n){var r=T(n);e.token=r,t({token:r})})}()}catch(e){return r(e)}return o&&o.then?o.then(void 0,r):o}(0,function(e){n(e)})}catch(e){return o(!0,e)}return i&&i.then?i.then(o.bind(null,!1),o.bind(null,!0)):o(!1,i)}(0,function(t,n){if(e._refreshAccessTokenPromise=null,t)throw n;return n}))}catch(e){return Promise.reject(e)}})),Promise.resolve(e._refreshAccessTokenPromise)}catch(e){return Promise.reject(e)}},n.isAccessTokenExpired=function(){var e,t,n=null==(e=this.token)?void 0:e.refresh_token,r=null==(t=this.token)?void 0:t.expires_at;return!r||!!n&&r<=Date.now()+1e3},n.requestAccessToken=function(e){try{var t=this,n=t.options,r=n.client_id,o=n.client_secret,i=n.callback,s=n.request_options,u=n.user_agent,a=t.code_verifier;if(!r)throw new Error("client_id is required");if(!i)throw new Error("callback is required");return Promise.resolve(b(c({},s,{endpoint:"/oauth/token",params:{code:e,grant_type:"authorization_code",code_verifier:a,client_id:r,redirect_uri:i},user_agent:u,method:"POST",headers:c({},null==s?void 0:s.headers,{"Content-Type":"application/x-www-form-urlencoded"},{Authorization:v(r,o)})}))).then(function(e){var n=T(e);return t.token=n,{token:n}})}catch(e){return Promise.reject(e)}},n.generateAuthURL=function(t){t||(t={}),console.log(t);var n,r=this.options,o=r.client_id,i=r.callback,s=r.scopes;if(!i)throw new Error("callback required");if(!s)throw new Error("scopes required");if("S256"===t.code_challenge_method){var u=e.lib.WordArray.random(64);this.code_verifier=u.toString(),this.code_challenge=e.SHA256(this.code_verifier).toString(e.enc.Base64).replace(/\+/g,"-").replace(/\//g,"_").replace(/\=+$/,""),n="S256"}else"plain"===t.code_challenge_method&&t.code_challenge&&(this.code_challenge=t.code_challenge,this.code_verifier=t.code_challenge,n="plain");var a=this.code_challenge,h=new URL(t.authorizeUrl||"https://getalby.com/oauth");return h.search=m(c({},t,{client_id:o,scope:s.join(" "),response_type:"code",redirect_uri:i,code_challenge_method:n,code_challenge:a})),h.toString()},n.getAuthHeader=function(){try{var e,t=function(){return{Authorization:"Bearer "+n.token.access_token}},n=this;if(null==(e=n.token)||!e.access_token)throw new Error("access_token is required");var r=function(){if(n.isAccessTokenExpired())return Promise.resolve(n.refreshAccessToken()).then(function(){})}();return Promise.resolve(r&&r.then?r.then(t):t())}catch(e){return Promise.reject(e)}},t}(),q=/*#__PURE__*/function(){function e(e){this.bearer_token=void 0,this.bearer_token=e}return e.prototype.getAuthHeader=function(){return{Authorization:"Bearer "+this.bearer_token}},e}(),x={__proto__:null,OAuth2User:A,OAuth2Bearer:q},R={alby:{authorizationUrl:"https://nwc.getalby.com/apps/new",relayUrl:"wss://relay.getalby.com/v1",walletPubkey:"69effe7b49a6dd5cf525bd0905917a5005ffe480b58eeb8e861418cf3ae760d9"}},j=/*#__PURE__*/function(){function e(t){var o;this.relay=void 0,this.relayUrl=void 0,this.secret=void 0,this.walletPubkey=void 0,this.options=void 0,this.subscribers=void 0,t&&t.nostrWalletConnectUrl&&(t=c({},e.parseWalletConnectUrl(t.nostrWalletConnectUrl),t));var i=R[(null==(o=t)?void 0:o.providerName)||"alby"];this.options=c({},i,t||{}),this.relayUrl=this.options.relayUrl,this.relay=n(this.relayUrl),this.options.secret&&(this.secret=this.options.secret.toLowerCase().startsWith("nsec")?r.decode(this.options.secret).data:this.options.secret),this.walletPubkey=this.options.walletPubkey.toLowerCase().startsWith("npub")?r.decode(this.options.walletPubkey).data:this.options.walletPubkey,this.subscribers={},void 0===globalThis.WebSocket&&console.error("WebSocket is undefined. Make sure to `import websocket-polyfill` for nodejs environments")}e.parseWalletConnectUrl=function(e){e=e.replace("nostrwalletconnect://","http://").replace("nostr+walletconnect://","http://");var t=new URL(e),n={};n.walletPubkey=t.host;var r=t.searchParams.get("secret"),o=t.searchParams.get("relay");return r&&(n.secret=r),o&&(n.relayUrl=o),n},e.withNewSecret=function(n){return(n=n||{}).secret=t(),new e(n)};var a,h,l=e.prototype;return l.on=function(e,t){this.subscribers[e]=t},l.notify=function(e,t){var n=this.subscribers[e];n&&n(t)},l.getNostrWalletConnectUrl=function(e){void 0===e&&(e=!0);var t="nostr+walletconnect://"+this.walletPubkey+"?relay="+this.relayUrl+"&pubkey="+this.publicKey;return e&&(t=t+"&secret="+this.secret),t},l.getPublicKey=function(){return Promise.resolve(this.publicKey)},l.signEvent=function(e){if(!this.secret)throw new Error("Missing secret key");return Promise.resolve(o(e,this.secret))},l.getEventHash=function(e){return i(e)},l.enable=function(){try{return this.connected?Promise.resolve():Promise.resolve(this.relay.connect()).then(function(){})}catch(e){return Promise.reject(e)}},l.close=function(){return this.relay.close()},l.encrypt=function(e,t){try{if(!this.secret)throw new Error("Missing secret");return Promise.resolve(s.encrypt(this.secret,e,t))}catch(e){return Promise.reject(e)}},l.decrypt=function(e,t){try{if(!this.secret)throw new Error("Missing secret");return Promise.resolve(s.decrypt(this.secret,e,t))}catch(e){return Promise.reject(e)}},l.getInfo=function(){try{return Promise.resolve({methods:["getInfo","sendPayment","getBalance"],node:{},supports:["lightning"],version:"NWC"})}catch(e){return Promise.reject(e)}},l.getBalance=function(){return this.checkConnected(),this.executeNip47Request("get_balance","getBalance",void 0,function(e){return void 0!==e.balance},function(e){return e})},l.sendPayment=function(e){return this.checkConnected(),this.executeNip47Request("pay_invoice","sendPayment",{invoice:e},function(e){return!!e.preimage},function(e){return{preimage:e.preimage}})},l.keysend=function(e){throw new Error("Method not implemented.")},l.lnurl=function(e){throw new Error("Method not implemented.")},l.makeInvoice=function(e){throw new Error("Method not implemented.")},l.request=function(e,t){throw new Error("Method not implemented.")},l.signMessage=function(e){throw new Error("Method not implemented.")},l.verifyMessage=function(e,t){throw new Error("Method not implemented.")},l.getAuthorizationUrl=function(e){if(!this.options.authorizationUrl)throw new Error("Missing authorizationUrl option");var t=new URL(this.options.authorizationUrl);return null!=e&&e.name&&t.searchParams.set("c",null==e?void 0:e.name),t.searchParams.set("pubkey",this.publicKey),null!=e&&e.returnTo&&t.searchParams.set("return_to",e.returnTo),null!=e&&e.budgetRenewal&&t.searchParams.set("budget_renewal",e.budgetRenewal),null!=e&&e.expiresAt&&t.searchParams.set("expires_at",Math.floor(e.expiresAt.getTime()/1e3).toString()),null!=e&&e.maxAmount&&t.searchParams.set("max_amount",e.maxAmount.toString()),void 0!==(null==e?void 0:e.editable)&&t.searchParams.set("editable",e.editable.toString()),t},l.initNWC=function(e){void 0===e&&(e={}),e.name||(e.name=document.location.host);var t=this.getAuthorizationUrl(e),n=window.outerHeight/2+window.screenY-300,r=window.outerWidth/2+window.screenX-200;return new Promise(function(e,o){var i=window.open(t.toString(),document.title+" - Wallet Connect","height=600,width=400,top="+n+",left="+r);if(i){var s=function n(r){var o=r.data;o&&"nwc:success"===o.type&&r.origin===t.protocol+"//"+t.host&&(e(o),clearInterval(u),window.removeEventListener("message",n),i&&i.close())},u=setInterval(function(){i&&i.closed&&(o(),clearInterval(u),window.removeEventListener("message",s))},500);window.addEventListener("message",s)}else o()})},l.checkConnected=function(){if(!this.connected)throw new Error("please call enable() and await the promise before calling this function")},l.executeNip47Request=function(e,t,n,r,o){var i=this;return new Promise(function(s,u){try{return Promise.resolve(i.encrypt(i.walletPubkey,JSON.stringify({method:e,params:n}))).then(function(e){var n={kind:23194,created_at:Math.floor(Date.now()/1e3),tags:[["p",i.walletPubkey]],content:e,pubkey:i.publicKey};return Promise.resolve(i.signEvent(n)).then(function(e){var n=i.relay.sub([{kinds:[23195],authors:[i.walletPubkey],"#e":[e.id]}]),c=setTimeout(function(){n.unsub(),u({error:"reply timeout: event "+e.id,code:"INTERNAL"})},6e4);n.on("event",function(e){try{return clearTimeout(c),n.unsub(),Promise.resolve(i.decrypt(i.walletPubkey,e.content)).then(function(n){var c,a,h;try{c=JSON.parse(n)}catch(e){return void u({error:"invalid response",code:"INTERNAL"})}23195==e.kind&&c.result?r(c.result)?(s(o(c.result)),i.notify(t,c.result)):u({error:"Response from NWC failed validation: "+JSON.stringify(c.result),code:"INTERNAL"}):u({error:null==(a=c.error)?void 0:a.message,code:null==(h=c.error)?void 0:h.code})})}catch(e){return Promise.reject(e)}});var a=i.relay.publish(e),h=setTimeout(function(){u({error:"Publish timeout: event "+e.id})},5e3);a.on("failed",function(e){clearTimeout(h),u({error:"Failed to publish request: "+e})}),a.on("ok",function(){clearTimeout(h)})})})}catch(e){return Promise.reject(e)}})},a=e,(h=[{key:"nostrWalletConnectUrl",get:function(){return this.getNostrWalletConnectUrl()}},{key:"connected",get:function(){return 1===this.relay.status}},{key:"publicKey",get:function(){if(!this.secret)throw new Error("Missing secret key");return u(this.secret)}}])&&function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(a.prototype,h),Object.defineProperty(a,"prototype",{writable:!1}),e}(),S=j;function U(e){var t={};return e.recipient.customKey&&e.recipient.customValue&&(t[e.recipient.customKey]=e.recipient.customValue),t[7629169]=JSON.stringify(e.boostagram),{destination:e.recipient.address,amount:e.amount,customRecords:t}}var N=/*#__PURE__*/function(){function e(e,t){this.auth=void 0,this.defaultRequestOptions=void 0,this.auth="string"==typeof e?new q(e):e,this.defaultRequestOptions=c({},t,{user_agent:null==t?void 0:t.user_agent})}var t=e.prototype;return t.accountBalance=function(e,t){return b(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/balance",params:e,method:"GET"}))},t.accountSummary=function(e,t){return b(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/user/summary",params:e,method:"GET"}))},t.accountInformation=function(e,t){return b(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/user/me",params:e,method:"GET"}))},t.accountValue4Value=function(e,t){return b(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/user/value4value",params:e,method:"GET"}))},t.incomingInvoices=function(e,t){return b(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/invoices/incoming",params:e,method:"GET"}))},t.outgoingInvoices=function(e,t){return b(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/invoices/outgoing",params:e,method:"GET"}))},t.getInvoice=function(e,t){return b(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/invoices/"+e,method:"GET"}))},t.createInvoice=function(e,t){return b(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/invoices",request_body:e,method:"POST"}))},t.keysend=function(e,t){var n,r;return Array.isArray(e)?(n="/payments/keysend/multi",r={keysends:e}):(n="/payments/keysend",r=e),b(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:n,request_body:r,method:"POST"}))},t.sendPayment=function(e,t){return b(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/payments/bolt11",request_body:e,method:"POST"}))},t.sendBoostagram=function(e,t){var n,r;return Array.isArray(e)?(n="/payments/keysend/multi",r={keysends:e.map(function(e){return U(e)})}):(n="/payments/keysend",r=U(e)),b(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:n,request_body:r,method:"POST"}))},t.sendToAlbyAccount=function(e,t){return b(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/payments/keysend",request_body:{destination:"030a58b8653d32b99200a2334cfe913e51dc7d155aa0116c176657a4f1722677a3",customRecords:{696969:e.account},amount:e.amount,memo:e.memo},method:"POST"}))},t.createWebhookEndpoint=function(e,t){return b(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/webhook_endpoints",request_body:e,method:"POST"}))},t.deleteWebhookEndpoint=function(e,t){return b(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/webhook_endpoints/"+e,method:"DELETE"}))},t.getSwapInfo=function(e){return b(c({auth:this.auth},this.defaultRequestOptions,e,{endpoint:"/swaps/info",method:"GET"}))},t.createSwap=function(e,t){return b(c({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/swaps",method:"POST",request_body:e}))},e}();function W(e,t){try{var n=e()}catch(e){return t(!0,e)}return n&&n.then?n.then(t.bind(null,!1),t.bind(null,!0)):t(!1,n)}function C(e,t){try{var n=e()}catch(e){return t(e)}return n&&n.then?n.then(void 0,t):n}var I={__proto__:null,NostrWebLNProvider:j,NWC:S,OauthWeblnProvider:/*#__PURE__*/function(){function e(e){this.client=void 0,this.auth=void 0,this.oauth=void 0,this.subscribers=void 0,this.isExecuting=void 0,this.auth=e.auth,this.client=new N(e.auth),this.oauth=!0,this.subscribers={},this.isExecuting=!1}var t=e.prototype;return t.on=function(e,t){this.subscribers[e]=t},t.notify=function(e,t){var n=this.subscribers[e];n&&n(t)},t.enable=function(){try{var e,t=this;return t.isExecuting?Promise.resolve():null!=(e=t.auth.token)&&e.access_token?Promise.resolve({enabled:!0}):Promise.resolve(function(){if("undefined"==typeof window||void 0===window.document)throw new Error("Missing access token");var e=W(function(){return t.isExecuting=!0,Promise.resolve(t.openAuthorization()).then(function(){})},function(e,n){if(t.isExecuting=!1,e)throw n;return n});if(e&&e.then)return e.then(function(){})}())}catch(e){return Promise.reject(e)}},t.sendPayment=function(e){try{var t=this;return t.isExecuting?Promise.resolve():Promise.resolve(W(function(){return C(function(){return t.isExecuting=!0,Promise.resolve(t.client.sendPayment({invoice:e})).then(function(e){return t.notify("sendPayment",e),{preimage:e.payment_preimage}})},function(e){var t="Unknown Error";throw e instanceof Error&&(t=e.message),new Error(t)})},function(e,n){if(t.isExecuting=!1,e)throw n;return n}))}catch(e){return Promise.reject(e)}},t.keysend=function(e){try{var t=this;return t.isExecuting?Promise.resolve():Promise.resolve(W(function(){return C(function(){return t.isExecuting=!0,Promise.resolve(t.client.keysend(e)).then(function(e){return t.notify("keysend",e),{preimage:e.payment_preimage}})},function(e){var t="Unknown Error";throw e instanceof Error&&(t=e.message),new Error(t)})},function(e,n){if(t.isExecuting=!1,e)throw n;return n}))}catch(e){return Promise.reject(e)}},t.getInfo=function(){try{return Promise.resolve({alias:"Alby"})}catch(e){return Promise.reject(e)}},t.makeInvoice=function(e){try{var t=this;return t.isExecuting?Promise.resolve():Promise.resolve(W(function(){return C(function(){return t.isExecuting=!0,Promise.resolve(t.client.createInvoice({amount:parseInt(e.amount.toString()),description:e.defaultMemo})).then(function(e){return t.notify("makeInvoice",e),{paymentRequest:e.payment_request}})},function(e){var t="Unknown Error";throw e instanceof Error&&(t=e.message),new Error(t)})},function(e,n){if(t.isExecuting=!1,e)throw n;return n}))}catch(e){return Promise.reject(e)}},t.openAuthorization=function(){var e=this,t=window.outerHeight/2+window.screenY-350,n=window.outerWidth/2+window.screenX-300,r=this.auth.generateAuthURL({code_challenge_method:"S256"});return new Promise(function(o,i){var s=window.open(r,document.title+" - WebLN enable","height=700,width=600,top="+t+",left="+n),u=!1;window.addEventListener("message",function(t){try{var n=t.data,r=function(){if(n&&"alby:oauth:success"===n.type&&t.origin===document.location.protocol+"//"+document.location.host&&!u){u=!0,console.info("Processing OAuth code response");var r=n.payload.code,c=C(function(){return Promise.resolve(e.auth.requestAccessToken(r)).then(function(){e.client=new N(e.auth),s&&s.close(),e.notify("enable"),o({enabled:!0})})},function(e){console.error(e),i({enabled:!1})});if(c&&c.then)return c.then(function(){})}}();return Promise.resolve(r&&r.then?r.then(function(){}):void 0)}catch(e){return Promise.reject(e)}})})},e}()};export{N as Client,x as auth,w as types,I as webln};
//# sourceMappingURL=index.module.js.map

@@ -1,2 +0,2 @@

!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("crypto-js"),require("nostr-tools")):"function"==typeof define&&define.amd?define(["exports","crypto-js","nostr-tools"],t):t((e||self).albyJsSdk={},e.cryptoJs,e.nostrTools)}(this,function(e,t,n){function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var o=/*#__PURE__*/r(t);function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}function s(e){return s=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},s(e)}function u(e,t){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},u(e,t)}function c(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}function a(e,t,n){return a=c()?Reflect.construct.bind():function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&u(o,n.prototype),o},a.apply(null,arguments)}function l(e){var t="function"==typeof Map?new Map:void 0;return l=function(e){if(null===e||-1===Function.toString.call(e).indexOf("[native code]"))return e;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return a(e,arguments,s(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),u(n,e)},l(e)}function h(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)t.indexOf(n=i[r])>=0||(o[n]=e[n]);return o}function d(e){return Object.entries(e).map(function(e){var t=e[0],n=e[1];return t&&n?t+"="+n:""}).join("&")}function f(e,t){return"Basic "+btoa(e+":"+t)}var p=/*#__PURE__*/function(e){var t,n;function r(t,n,r,o){var i,s=t.toString();return n&&(s+=" "+n),s+=": ",s+=o.message?o.message:JSON.stringify(o),(i=e.call(this,s)||this).status=void 0,i.statusText=void 0,i.headers=void 0,i.error=void 0,i.status=t,i.statusText=n,i.headers=r,i.error=o,i}return n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,u(t,n),r}(/*#__PURE__*/l(Error)),m={__proto__:null,OAuthClient:function(){},AuthClient:function(){},AlbyResponseError:p},v=["auth","endpoint","params","request_body","method","max_retries","base_url","user_agent","headers"],y=function(e){return Promise.resolve(b(e)).then(function(e){return e.json()})},b=function(e){var t=e.auth,n=e.endpoint,r=e.params,o=void 0===r?{}:r,s=e.request_body,u=e.method,c=e.max_retries,a=e.base_url,l=void 0===a?g:a,f=e.user_agent,m=e.headers,y=h(e,v);try{var b=function(e){return Promise.resolve(w(P.toString(),i({headers:i({},_?{"Content-Type":"application/json; charset=utf-8"}:void 0,e,m,{"User-Agent":null!=f?f:"alby-js-api","X-User-Agent":null!=f?f:"alby-js-api"}),method:u,body:_?JSON.stringify(s):void 0},y),c)).then(function(e){var t=function(){if(!e.ok)return Promise.resolve(e.json()).then(function(t){throw new p(e.status,e.statusText,e.headers,t)})}();return t&&t.then?t.then(function(t){return e}):e})},P=new URL(l+n);P.search=d(o);var _="POST"===u&&!!s;return Promise.resolve(t?Promise.resolve(t.getAuthHeader(P.href,u)).then(b):b(void 0))}catch(e){return Promise.reject(e)}},w=function e(t,n,r){void 0===r&&(r=0);try{return Promise.resolve(fetch(t,n)).then(function(o){var i,s=function(){if(429===o.status&&r>0){var s=Number(o.headers.get("x-rate-limit-reset")),u=Number(o.headers.get("x-rate-limit-remaining")),c=1e3*s-Date.now(),a=1e3;return 0===u&&(a=c),Promise.resolve(new Promise(function(e){return setTimeout(e,a)})).then(function(){var o=e(t,n,r-1);return i=1,o})}}();return s&&s.then?s.then(function(e){return i?e:o}):i?s:o})}catch(e){return Promise.reject(e)}},g="https://api.getalby.com",P=["expires_in"],_=["token"];function k(e){var t=e.expires_in;return i({},h(e,P),!!t&&{expires_at:Date.now()+1e3*t})}var E=/*#__PURE__*/function(){function e(e){this.token=void 0,this.options=void 0,this.code_verifier=void 0,this.code_challenge=void 0,this._refreshAccessTokenPromise=void 0;var t=e.token,n=h(e,_);this.options=i({client_secret:""},n),this.token=t,this._refreshAccessTokenPromise=null}var t=e.prototype;return t.refreshAccessToken=function(){try{var e=this;return e._refreshAccessTokenPromise||(e._refreshAccessTokenPromise=new Promise(function(t,n){try{return Promise.resolve(function(r,o){try{var s=function(n,r){try{var o=function(){var n,r=null==(n=e.token)?void 0:n.refresh_token,o=e.options,s=o.client_id,u=o.client_secret,c=o.request_options,a=o.user_agent;if(!s)throw new Error("client_id is required");if(!r)throw new Error("refresh_token is required");return Promise.resolve(y(i({},c,{endpoint:"/oauth/token",params:{client_id:s,grant_type:"refresh_token",refresh_token:r},user_agent:a,method:"POST",headers:i({},null==c?void 0:c.headers,{"Content-type":"application/x-www-form-urlencoded"},{Authorization:f(s,u)})}))).then(function(n){var r=k(n);e.token=r,t({token:r})})}()}catch(e){return r(e)}return o&&o.then?o.then(void 0,r):o}(0,function(e){n(e)})}catch(e){return o(!0,e)}return s&&s.then?s.then(o.bind(null,!1),o.bind(null,!0)):o(!1,s)}(0,function(t,n){if(e._refreshAccessTokenPromise=null,t)throw n;return n}))}catch(e){return Promise.reject(e)}})),Promise.resolve(e._refreshAccessTokenPromise)}catch(e){return Promise.reject(e)}},t.isAccessTokenExpired=function(){var e,t,n=null==(e=this.token)?void 0:e.refresh_token,r=null==(t=this.token)?void 0:t.expires_at;return!r||!!n&&r<=Date.now()+1e3},t.requestAccessToken=function(e){try{var t=this,n=t.options,r=n.client_id,o=n.client_secret,s=n.callback,u=n.request_options,c=n.user_agent,a=t.code_verifier;if(!r)throw new Error("client_id is required");if(!s)throw new Error("callback is required");return Promise.resolve(y(i({},u,{endpoint:"/oauth/token",params:{code:e,grant_type:"authorization_code",code_verifier:a,client_id:r,redirect_uri:s},user_agent:c,method:"POST",headers:i({},null==u?void 0:u.headers,{"Content-Type":"application/x-www-form-urlencoded"},{Authorization:f(r,o)})}))).then(function(e){var n=k(e);return t.token=n,{token:n}})}catch(e){return Promise.reject(e)}},t.generateAuthURL=function(e){e||(e={}),console.log(e);var t,n=this.options,r=n.client_id,s=n.callback,u=n.scopes;if(!s)throw new Error("callback required");if(!u)throw new Error("scopes required");if("S256"===e.code_challenge_method){var c=o.default.lib.WordArray.random(64);this.code_verifier=c.toString(),this.code_challenge=o.default.SHA256(this.code_verifier).toString(o.default.enc.Base64).replace(/\+/g,"-").replace(/\//g,"_").replace(/\=+$/,""),t="S256"}else"plain"===e.code_challenge_method&&e.code_challenge&&(this.code_challenge=e.code_challenge,this.code_verifier=e.code_challenge,t="plain");var a=this.code_challenge,l=new URL(e.authorizeUrl||"https://getalby.com/oauth");return l.search=d(i({},e,{client_id:r,scope:u.join(" "),response_type:"code",redirect_uri:s,code_challenge_method:t,code_challenge:a})),l.toString()},t.getAuthHeader=function(){try{var e,t=function(){return{Authorization:"Bearer "+n.token.access_token}},n=this;if(null==(e=n.token)||!e.access_token)throw new Error("access_token is required");var r=function(){if(n.isAccessTokenExpired())return Promise.resolve(n.refreshAccessToken()).then(function(){})}();return Promise.resolve(r&&r.then?r.then(t):t())}catch(e){return Promise.reject(e)}},e}(),O=/*#__PURE__*/function(){function e(e){this.bearer_token=void 0,this.bearer_token=e}return e.prototype.getAuthHeader=function(){return{Authorization:"Bearer "+this.bearer_token}},e}(),T={__proto__:null,OAuth2User:E,OAuth2Bearer:O},A={alby:{authorizationUrl:"https://nwc.getalby.com/apps/new",relayUrl:"wss://relay.getalby.com/v1",walletPubkey:"69effe7b49a6dd5cf525bd0905917a5005ffe480b58eeb8e861418cf3ae760d9"}},j=/*#__PURE__*/function(){function e(t){var r;this.relay=void 0,this.relayUrl=void 0,this.secret=void 0,this.walletPubkey=void 0,this.options=void 0,this.subscribers=void 0,t&&t.nostrWalletConnectUrl&&(t=i({},e.parseWalletConnectUrl(t.nostrWalletConnectUrl),t));var o=A[(null==(r=t)?void 0:r.providerName)||"alby"];this.options=i({},o,t||{}),this.relayUrl=this.options.relayUrl,this.relay=n.relayInit(this.relayUrl),this.options.secret&&(this.secret=this.options.secret.toLowerCase().startsWith("nsec")?n.nip19.decode(this.options.secret).data:this.options.secret),this.walletPubkey=this.options.walletPubkey.toLowerCase().startsWith("npub")?n.nip19.decode(this.options.walletPubkey).data:this.options.walletPubkey,this.subscribers={},void 0===globalThis.WebSocket&&console.error("WebSocket is undefined. Make sure to `import websocket-polyfill` for nodejs environments")}e.parseWalletConnectUrl=function(e){e=e.replace("nostrwalletconnect://","http://").replace("nostr+walletconnect://","http://");var t=new URL(e),n={};n.walletPubkey=t.host;var r=t.searchParams.get("secret"),o=t.searchParams.get("relay");return r&&(n.secret=r),o&&(n.relayUrl=o),n},e.withNewSecret=function(t){return(t=t||{}).secret=n.generatePrivateKey(),new e(t)};var t,r,o=e.prototype;return o.on=function(e,t){this.subscribers[e]=t},o.notify=function(e,t){var n=this.subscribers[e];n&&n(t)},o.getNostrWalletConnectUrl=function(e){void 0===e&&(e=!0);var t="nostr+walletconnect://"+this.walletPubkey+"?relay="+this.relayUrl+"&pubkey="+this.publicKey;return e&&(t=t+"&secret="+this.secret),t},o.getPublicKey=function(){return Promise.resolve(this.publicKey)},o.signEvent=function(e){if(!this.secret)throw new Error("Missing secret key");return Promise.resolve(n.finishEvent(e,this.secret))},o.getEventHash=function(e){return n.getEventHash(e)},o.enable=function(){try{return this.connected?Promise.resolve():Promise.resolve(this.relay.connect()).then(function(){})}catch(e){return Promise.reject(e)}},o.close=function(){return this.relay.close()},o.encrypt=function(e,t){try{if(!this.secret)throw new Error("Missing secret");return Promise.resolve(n.nip04.encrypt(this.secret,e,t))}catch(e){return Promise.reject(e)}},o.decrypt=function(e,t){try{if(!this.secret)throw new Error("Missing secret");return Promise.resolve(n.nip04.decrypt(this.secret,e,t))}catch(e){return Promise.reject(e)}},o.getInfo=function(){try{return Promise.resolve({methods:["getInfo","sendPayment"],node:{},supports:["lightning"],version:"NWC"})}catch(e){return Promise.reject(e)}},o.sendPayment=function(e){var t=this;return this.checkConnected(),new Promise(function(n,r){try{return Promise.resolve(t.encrypt(t.walletPubkey,JSON.stringify({method:"pay_invoice",params:{invoice:e}}))).then(function(e){var o={kind:23194,created_at:Math.floor(Date.now()/1e3),tags:[["p",t.walletPubkey]],content:e,pubkey:t.publicKey};return Promise.resolve(t.signEvent(o)).then(function(e){var o=t.relay.sub([{kinds:[23195],authors:[t.walletPubkey],"#e":[e.id]}]),i=setTimeout(function(){o.unsub(),r({error:"reply timeout: event "+e.id,code:"INTERNAL"})},6e4);o.on("event",function(e){try{return clearTimeout(i),o.unsub(),Promise.resolve(t.decrypt(t.walletPubkey,e.content)).then(function(o){var i,s,u,c;try{s=JSON.parse(o)}catch(e){return void r({error:"invalid response",code:"INTERNAL"})}23195==e.kind&&null!=(i=s.result)&&i.preimage?(n({preimage:s.result.preimage}),t.notify("sendPayment",s.result)):r({error:null==(u=s.error)?void 0:u.message,code:null==(c=s.error)?void 0:c.code})})}catch(e){return Promise.reject(e)}});var s=t.relay.publish(e),u=setTimeout(function(){r({error:"Publish timeout: event "+e.id})},5e3);s.on("failed",function(e){clearTimeout(u),r({error:"Failed to publish request: "+e})}),s.on("ok",function(){clearTimeout(u)})})})}catch(e){return Promise.reject(e)}})},o.keysend=function(e){throw new Error("Method not implemented.")},o.lnurl=function(e){throw new Error("Method not implemented.")},o.makeInvoice=function(e){throw new Error("Method not implemented.")},o.request=function(e,t){throw new Error("Method not implemented.")},o.signMessage=function(e){throw new Error("Method not implemented.")},o.verifyMessage=function(e,t){throw new Error("Method not implemented.")},o.getAuthorizationUrl=function(e){if(!this.options.authorizationUrl)throw new Error("Missing authorizationUrl option");var t=new URL(this.options.authorizationUrl);return null!=e&&e.name&&t.searchParams.set("c",null==e?void 0:e.name),t.searchParams.set("pubkey",this.publicKey),null!=e&&e.returnTo&&t.searchParams.set("return_to",e.returnTo),null!=e&&e.budgetRenewal&&t.searchParams.set("budget_renewal",e.budgetRenewal),null!=e&&e.expiresAt&&t.searchParams.set("expires_at",Math.floor(e.expiresAt.getTime()/1e3).toString()),null!=e&&e.maxAmount&&t.searchParams.set("max_amount",e.maxAmount.toString()),void 0!==(null==e?void 0:e.editable)&&t.searchParams.set("editable",e.editable.toString()),t},o.initNWC=function(e){void 0===e&&(e={}),e.name||(e.name=document.location.host);var t=this.getAuthorizationUrl(e),n=window.outerHeight/2+window.screenY-300,r=window.outerWidth/2+window.screenX-200;return new Promise(function(e,o){var i=window.open(t.toString(),document.title+" - Wallet Connect","height=600,width=400,top="+n+",left="+r);if(i){var s=function n(r){var o=r.data;o&&"nwc:success"===o.type&&r.origin===t.protocol+"//"+t.host&&(e(o),clearInterval(u),window.removeEventListener("message",n),i&&i.close())},u=setInterval(function(){i&&i.closed&&(o(),clearInterval(u),window.removeEventListener("message",s))},500);window.addEventListener("message",s)}else o()})},o.checkConnected=function(){if(!this.connected)throw new Error("please call enable() and await the promise before calling this function")},t=e,(r=[{key:"nostrWalletConnectUrl",get:function(){return this.getNostrWalletConnectUrl()}},{key:"connected",get:function(){return 1===this.relay.status}},{key:"publicKey",get:function(){if(!this.secret)throw new Error("Missing secret key");return n.getPublicKey(this.secret)}}])&&function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}(),x=j;function q(e){var t={};return e.recipient.customKey&&e.recipient.customValue&&(t[e.recipient.customKey]=e.recipient.customValue),t[7629169]=JSON.stringify(e.boostagram),{destination:e.recipient.address,amount:e.amount,customRecords:t}}var R=/*#__PURE__*/function(){function e(e,t){this.auth=void 0,this.defaultRequestOptions=void 0,this.auth="string"==typeof e?new O(e):e,this.defaultRequestOptions=i({},t,{user_agent:null==t?void 0:t.user_agent})}var t=e.prototype;return t.accountBalance=function(e,t){return y(i({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/balance",params:e,method:"GET"}))},t.accountSummary=function(e,t){return y(i({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/user/summary",params:e,method:"GET"}))},t.accountInformation=function(e,t){return y(i({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/user/me",params:e,method:"GET"}))},t.accountValue4Value=function(e,t){return y(i({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/user/value4value",params:e,method:"GET"}))},t.incomingInvoices=function(e,t){return y(i({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/invoices/incoming",params:e,method:"GET"}))},t.outgoingInvoices=function(e,t){return y(i({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/invoices/outgoing",params:e,method:"GET"}))},t.getInvoice=function(e,t){return y(i({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/invoices/"+e,method:"GET"}))},t.createInvoice=function(e,t){return y(i({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/invoices",request_body:e,method:"POST"}))},t.keysend=function(e,t){var n,r;return Array.isArray(e)?(n="/payments/keysend/multi",r={keysends:e}):(n="/payments/keysend",r=e),y(i({auth:this.auth},this.defaultRequestOptions,t,{endpoint:n,request_body:r,method:"POST"}))},t.sendPayment=function(e,t){return y(i({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/payments/bolt11",request_body:e,method:"POST"}))},t.sendBoostagram=function(e,t){var n,r;return Array.isArray(e)?(n="/payments/keysend/multi",r={keysends:e.map(function(e){return q(e)})}):(n="/payments/keysend",r=q(e)),y(i({auth:this.auth},this.defaultRequestOptions,t,{endpoint:n,request_body:r,method:"POST"}))},t.sendToAlbyAccount=function(e,t){return y(i({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/payments/keysend",request_body:{destination:"030a58b8653d32b99200a2334cfe913e51dc7d155aa0116c176657a4f1722677a3",customRecords:{696969:e.account},amount:e.amount,memo:e.memo},method:"POST"}))},t.createWebhookEndpoint=function(e,t){return y(i({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/webhook_endpoints",request_body:e,method:"POST"}))},t.deleteWebhookEndpoint=function(e,t){return y(i({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/webhook_endpoints/"+e,method:"DELETE"}))},e}();function S(e,t){try{var n=e()}catch(e){return t(!0,e)}return n&&n.then?n.then(t.bind(null,!1),t.bind(null,!0)):t(!1,n)}function U(e,t){try{var n=e()}catch(e){return t(e)}return n&&n.then?n.then(void 0,t):n}var W={__proto__:null,NostrWebLNProvider:j,NWC:x,OauthWeblnProvider:/*#__PURE__*/function(){function e(e){this.client=void 0,this.auth=void 0,this.oauth=void 0,this.subscribers=void 0,this.isExecuting=void 0,this.auth=e.auth,this.client=new R(e.auth),this.oauth=!0,this.subscribers={},this.isExecuting=!1}var t=e.prototype;return t.on=function(e,t){this.subscribers[e]=t},t.notify=function(e,t){var n=this.subscribers[e];n&&n(t)},t.enable=function(){try{var e,t=this;return t.isExecuting?Promise.resolve():null!=(e=t.auth.token)&&e.access_token?Promise.resolve({enabled:!0}):Promise.resolve(function(){if("undefined"==typeof window||void 0===window.document)throw new Error("Missing access token");var e=S(function(){return t.isExecuting=!0,Promise.resolve(t.openAuthorization()).then(function(){})},function(e,n){if(t.isExecuting=!1,e)throw n;return n});if(e&&e.then)return e.then(function(){})}())}catch(e){return Promise.reject(e)}},t.sendPayment=function(e){try{var t=this;return t.isExecuting?Promise.resolve():Promise.resolve(S(function(){return U(function(){return t.isExecuting=!0,Promise.resolve(t.client.sendPayment({invoice:e})).then(function(e){return t.notify("sendPayment",e),{preimage:e.payment_preimage}})},function(e){var t="Unknown Error";throw e instanceof Error&&(t=e.message),new Error(t)})},function(e,n){if(t.isExecuting=!1,e)throw n;return n}))}catch(e){return Promise.reject(e)}},t.keysend=function(e){try{var t=this;return t.isExecuting?Promise.resolve():Promise.resolve(S(function(){return U(function(){return t.isExecuting=!0,Promise.resolve(t.client.keysend(e)).then(function(e){return t.notify("keysend",e),{preimage:e.payment_preimage}})},function(e){var t="Unknown Error";throw e instanceof Error&&(t=e.message),new Error(t)})},function(e,n){if(t.isExecuting=!1,e)throw n;return n}))}catch(e){return Promise.reject(e)}},t.getInfo=function(){try{return Promise.resolve({alias:"Alby"})}catch(e){return Promise.reject(e)}},t.makeInvoice=function(e){try{var t=this;return t.isExecuting?Promise.resolve():Promise.resolve(S(function(){return U(function(){return t.isExecuting=!0,Promise.resolve(t.client.createInvoice({amount:parseInt(e.amount.toString()),description:e.defaultMemo})).then(function(e){return t.notify("makeInvoice",e),{paymentRequest:e.payment_request}})},function(e){var t="Unknown Error";throw e instanceof Error&&(t=e.message),new Error(t)})},function(e,n){if(t.isExecuting=!1,e)throw n;return n}))}catch(e){return Promise.reject(e)}},t.openAuthorization=function(){var e=this,t=window.outerHeight/2+window.screenY-350,n=window.outerWidth/2+window.screenX-300,r=this.auth.generateAuthURL({code_challenge_method:"S256"});return new Promise(function(o,i){var s=window.open(r,document.title+" - WebLN enable","height=700,width=600,top="+t+",left="+n),u=!1;window.addEventListener("message",function(t){try{var n=t.data,r=function(){if(n&&"alby:oauth:success"===n.type&&t.origin===document.location.protocol+"//"+document.location.host&&!u){u=!0,console.info("Processing OAuth code response");var r=n.payload.code,c=U(function(){return Promise.resolve(e.auth.requestAccessToken(r)).then(function(){e.client=new R(e.auth),s&&s.close(),e.notify("enable"),o({enabled:!0})})},function(e){console.error(e),i({enabled:!1})});if(c&&c.then)return c.then(function(){})}}();return Promise.resolve(r&&r.then?r.then(function(){}):void 0)}catch(e){return Promise.reject(e)}})})},e}()};e.Client=R,e.auth=T,e.types=m,e.webln=W});
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("crypto-js"),require("nostr-tools")):"function"==typeof define&&define.amd?define(["exports","crypto-js","nostr-tools"],t):t((e||self).albyJsSdk={},e.cryptoJs,e.nostrTools)}(this,function(e,t,n){function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var o=/*#__PURE__*/r(t);function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}function s(e){return s=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},s(e)}function u(e,t){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},u(e,t)}function c(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}function a(e,t,n){return a=c()?Reflect.construct.bind():function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&u(o,n.prototype),o},a.apply(null,arguments)}function l(e){var t="function"==typeof Map?new Map:void 0;return l=function(e){if(null===e||-1===Function.toString.call(e).indexOf("[native code]"))return e;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return a(e,arguments,s(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),u(n,e)},l(e)}function h(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)t.indexOf(n=i[r])>=0||(o[n]=e[n]);return o}function d(e){return Object.entries(e).map(function(e){var t=e[0],n=e[1];return t&&n?t+"="+n:""}).join("&")}function f(e,t){return"Basic "+btoa(e+":"+t)}var p=/*#__PURE__*/function(e){var t,n;function r(t,n,r,o){var i,s=t.toString();return n&&(s+=" "+n),s+=": ",s+=o.message?o.message:JSON.stringify(o),(i=e.call(this,s)||this).status=void 0,i.statusText=void 0,i.headers=void 0,i.error=void 0,i.status=t,i.statusText=n,i.headers=r,i.error=o,i}return n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,u(t,n),r}(/*#__PURE__*/l(Error)),m={__proto__:null,OAuthClient:function(){},AuthClient:function(){},AlbyResponseError:p},v=["auth","endpoint","params","request_body","method","max_retries","base_url","user_agent","headers"],y=function(e){return Promise.resolve(g(e)).then(function(e){return e.json()})},g=function(e){var t=e.auth,n=e.endpoint,r=e.params,o=void 0===r?{}:r,s=e.request_body,u=e.method,c=e.max_retries,a=e.base_url,l=void 0===a?b:a,f=e.user_agent,m=e.headers,y=h(e,v);try{var g=function(e){return Promise.resolve(w(P.toString(),i({headers:i({},_?{"Content-Type":"application/json; charset=utf-8"}:void 0,e,m,{"User-Agent":null!=f?f:"@getalby/sdk","X-User-Agent":null!=f?f:"@getalby/sdk"}),method:u,body:_?JSON.stringify(s):void 0},y),c)).then(function(e){var t=function(){if(!e.ok)return Promise.resolve(e.json()).then(function(t){throw new p(e.status,e.statusText,e.headers,t)})}();return t&&t.then?t.then(function(t){return e}):e})},P=new URL(l+n);P.search=d(o);var _="POST"===u&&!!s;return Promise.resolve(t?Promise.resolve(t.getAuthHeader(P.href,u)).then(g):g(void 0))}catch(e){return Promise.reject(e)}},w=function e(t,n,r){void 0===r&&(r=0);try{return Promise.resolve(fetch(t,n)).then(function(o){var i,s=function(){if(429===o.status&&r>0){var s=Number(o.headers.get("x-rate-limit-reset")),u=Number(o.headers.get("x-rate-limit-remaining")),c=1e3*s-Date.now(),a=1e3;return 0===u&&(a=c),Promise.resolve(new Promise(function(e){return setTimeout(e,a)})).then(function(){var o=e(t,n,r-1);return i=1,o})}}();return s&&s.then?s.then(function(e){return i?e:o}):i?s:o})}catch(e){return Promise.reject(e)}},b="https://api.getalby.com",P=["expires_in"],_=["token"];function k(e){var t=e.expires_in;return i({},h(e,P),!!t&&{expires_at:Date.now()+1e3*t})}var E=/*#__PURE__*/function(){function e(e){this.token=void 0,this.options=void 0,this.code_verifier=void 0,this.code_challenge=void 0,this._refreshAccessTokenPromise=void 0;var t=e.token,n=h(e,_);this.options=i({client_secret:""},n),this.token=t,this._refreshAccessTokenPromise=null}var t=e.prototype;return t.refreshAccessToken=function(){try{var e=this;return e._refreshAccessTokenPromise||(e._refreshAccessTokenPromise=new Promise(function(t,n){try{return Promise.resolve(function(r,o){try{var s=function(n,r){try{var o=function(){var n,r=null==(n=e.token)?void 0:n.refresh_token,o=e.options,s=o.client_id,u=o.client_secret,c=o.request_options,a=o.user_agent;if(!s)throw new Error("client_id is required");if(!r)throw new Error("refresh_token is required");return Promise.resolve(y(i({},c,{endpoint:"/oauth/token",params:{client_id:s,grant_type:"refresh_token",refresh_token:r},user_agent:a,method:"POST",headers:i({},null==c?void 0:c.headers,{"Content-type":"application/x-www-form-urlencoded"},{Authorization:f(s,u)})}))).then(function(n){var r=k(n);e.token=r,t({token:r})})}()}catch(e){return r(e)}return o&&o.then?o.then(void 0,r):o}(0,function(e){n(e)})}catch(e){return o(!0,e)}return s&&s.then?s.then(o.bind(null,!1),o.bind(null,!0)):o(!1,s)}(0,function(t,n){if(e._refreshAccessTokenPromise=null,t)throw n;return n}))}catch(e){return Promise.reject(e)}})),Promise.resolve(e._refreshAccessTokenPromise)}catch(e){return Promise.reject(e)}},t.isAccessTokenExpired=function(){var e,t,n=null==(e=this.token)?void 0:e.refresh_token,r=null==(t=this.token)?void 0:t.expires_at;return!r||!!n&&r<=Date.now()+1e3},t.requestAccessToken=function(e){try{var t=this,n=t.options,r=n.client_id,o=n.client_secret,s=n.callback,u=n.request_options,c=n.user_agent,a=t.code_verifier;if(!r)throw new Error("client_id is required");if(!s)throw new Error("callback is required");return Promise.resolve(y(i({},u,{endpoint:"/oauth/token",params:{code:e,grant_type:"authorization_code",code_verifier:a,client_id:r,redirect_uri:s},user_agent:c,method:"POST",headers:i({},null==u?void 0:u.headers,{"Content-Type":"application/x-www-form-urlencoded"},{Authorization:f(r,o)})}))).then(function(e){var n=k(e);return t.token=n,{token:n}})}catch(e){return Promise.reject(e)}},t.generateAuthURL=function(e){e||(e={}),console.log(e);var t,n=this.options,r=n.client_id,s=n.callback,u=n.scopes;if(!s)throw new Error("callback required");if(!u)throw new Error("scopes required");if("S256"===e.code_challenge_method){var c=o.default.lib.WordArray.random(64);this.code_verifier=c.toString(),this.code_challenge=o.default.SHA256(this.code_verifier).toString(o.default.enc.Base64).replace(/\+/g,"-").replace(/\//g,"_").replace(/\=+$/,""),t="S256"}else"plain"===e.code_challenge_method&&e.code_challenge&&(this.code_challenge=e.code_challenge,this.code_verifier=e.code_challenge,t="plain");var a=this.code_challenge,l=new URL(e.authorizeUrl||"https://getalby.com/oauth");return l.search=d(i({},e,{client_id:r,scope:u.join(" "),response_type:"code",redirect_uri:s,code_challenge_method:t,code_challenge:a})),l.toString()},t.getAuthHeader=function(){try{var e,t=function(){return{Authorization:"Bearer "+n.token.access_token}},n=this;if(null==(e=n.token)||!e.access_token)throw new Error("access_token is required");var r=function(){if(n.isAccessTokenExpired())return Promise.resolve(n.refreshAccessToken()).then(function(){})}();return Promise.resolve(r&&r.then?r.then(t):t())}catch(e){return Promise.reject(e)}},e}(),O=/*#__PURE__*/function(){function e(e){this.bearer_token=void 0,this.bearer_token=e}return e.prototype.getAuthHeader=function(){return{Authorization:"Bearer "+this.bearer_token}},e}(),T={__proto__:null,OAuth2User:E,OAuth2Bearer:O},A={alby:{authorizationUrl:"https://nwc.getalby.com/apps/new",relayUrl:"wss://relay.getalby.com/v1",walletPubkey:"69effe7b49a6dd5cf525bd0905917a5005ffe480b58eeb8e861418cf3ae760d9"}},q=/*#__PURE__*/function(){function e(t){var r;this.relay=void 0,this.relayUrl=void 0,this.secret=void 0,this.walletPubkey=void 0,this.options=void 0,this.subscribers=void 0,t&&t.nostrWalletConnectUrl&&(t=i({},e.parseWalletConnectUrl(t.nostrWalletConnectUrl),t));var o=A[(null==(r=t)?void 0:r.providerName)||"alby"];this.options=i({},o,t||{}),this.relayUrl=this.options.relayUrl,this.relay=n.relayInit(this.relayUrl),this.options.secret&&(this.secret=this.options.secret.toLowerCase().startsWith("nsec")?n.nip19.decode(this.options.secret).data:this.options.secret),this.walletPubkey=this.options.walletPubkey.toLowerCase().startsWith("npub")?n.nip19.decode(this.options.walletPubkey).data:this.options.walletPubkey,this.subscribers={},void 0===globalThis.WebSocket&&console.error("WebSocket is undefined. Make sure to `import websocket-polyfill` for nodejs environments")}e.parseWalletConnectUrl=function(e){e=e.replace("nostrwalletconnect://","http://").replace("nostr+walletconnect://","http://");var t=new URL(e),n={};n.walletPubkey=t.host;var r=t.searchParams.get("secret"),o=t.searchParams.get("relay");return r&&(n.secret=r),o&&(n.relayUrl=o),n},e.withNewSecret=function(t){return(t=t||{}).secret=n.generatePrivateKey(),new e(t)};var t,r,o=e.prototype;return o.on=function(e,t){this.subscribers[e]=t},o.notify=function(e,t){var n=this.subscribers[e];n&&n(t)},o.getNostrWalletConnectUrl=function(e){void 0===e&&(e=!0);var t="nostr+walletconnect://"+this.walletPubkey+"?relay="+this.relayUrl+"&pubkey="+this.publicKey;return e&&(t=t+"&secret="+this.secret),t},o.getPublicKey=function(){return Promise.resolve(this.publicKey)},o.signEvent=function(e){if(!this.secret)throw new Error("Missing secret key");return Promise.resolve(n.finishEvent(e,this.secret))},o.getEventHash=function(e){return n.getEventHash(e)},o.enable=function(){try{return this.connected?Promise.resolve():Promise.resolve(this.relay.connect()).then(function(){})}catch(e){return Promise.reject(e)}},o.close=function(){return this.relay.close()},o.encrypt=function(e,t){try{if(!this.secret)throw new Error("Missing secret");return Promise.resolve(n.nip04.encrypt(this.secret,e,t))}catch(e){return Promise.reject(e)}},o.decrypt=function(e,t){try{if(!this.secret)throw new Error("Missing secret");return Promise.resolve(n.nip04.decrypt(this.secret,e,t))}catch(e){return Promise.reject(e)}},o.getInfo=function(){try{return Promise.resolve({methods:["getInfo","sendPayment","getBalance"],node:{},supports:["lightning"],version:"NWC"})}catch(e){return Promise.reject(e)}},o.getBalance=function(){return this.checkConnected(),this.executeNip47Request("get_balance","getBalance",void 0,function(e){return void 0!==e.balance},function(e){return e})},o.sendPayment=function(e){return this.checkConnected(),this.executeNip47Request("pay_invoice","sendPayment",{invoice:e},function(e){return!!e.preimage},function(e){return{preimage:e.preimage}})},o.keysend=function(e){throw new Error("Method not implemented.")},o.lnurl=function(e){throw new Error("Method not implemented.")},o.makeInvoice=function(e){throw new Error("Method not implemented.")},o.request=function(e,t){throw new Error("Method not implemented.")},o.signMessage=function(e){throw new Error("Method not implemented.")},o.verifyMessage=function(e,t){throw new Error("Method not implemented.")},o.getAuthorizationUrl=function(e){if(!this.options.authorizationUrl)throw new Error("Missing authorizationUrl option");var t=new URL(this.options.authorizationUrl);return null!=e&&e.name&&t.searchParams.set("c",null==e?void 0:e.name),t.searchParams.set("pubkey",this.publicKey),null!=e&&e.returnTo&&t.searchParams.set("return_to",e.returnTo),null!=e&&e.budgetRenewal&&t.searchParams.set("budget_renewal",e.budgetRenewal),null!=e&&e.expiresAt&&t.searchParams.set("expires_at",Math.floor(e.expiresAt.getTime()/1e3).toString()),null!=e&&e.maxAmount&&t.searchParams.set("max_amount",e.maxAmount.toString()),void 0!==(null==e?void 0:e.editable)&&t.searchParams.set("editable",e.editable.toString()),t},o.initNWC=function(e){void 0===e&&(e={}),e.name||(e.name=document.location.host);var t=this.getAuthorizationUrl(e),n=window.outerHeight/2+window.screenY-300,r=window.outerWidth/2+window.screenX-200;return new Promise(function(e,o){var i=window.open(t.toString(),document.title+" - Wallet Connect","height=600,width=400,top="+n+",left="+r);if(i){var s=function n(r){var o=r.data;o&&"nwc:success"===o.type&&r.origin===t.protocol+"//"+t.host&&(e(o),clearInterval(u),window.removeEventListener("message",n),i&&i.close())},u=setInterval(function(){i&&i.closed&&(o(),clearInterval(u),window.removeEventListener("message",s))},500);window.addEventListener("message",s)}else o()})},o.checkConnected=function(){if(!this.connected)throw new Error("please call enable() and await the promise before calling this function")},o.executeNip47Request=function(e,t,n,r,o){var i=this;return new Promise(function(s,u){try{return Promise.resolve(i.encrypt(i.walletPubkey,JSON.stringify({method:e,params:n}))).then(function(e){var n={kind:23194,created_at:Math.floor(Date.now()/1e3),tags:[["p",i.walletPubkey]],content:e,pubkey:i.publicKey};return Promise.resolve(i.signEvent(n)).then(function(e){var n=i.relay.sub([{kinds:[23195],authors:[i.walletPubkey],"#e":[e.id]}]),c=setTimeout(function(){n.unsub(),u({error:"reply timeout: event "+e.id,code:"INTERNAL"})},6e4);n.on("event",function(e){try{return clearTimeout(c),n.unsub(),Promise.resolve(i.decrypt(i.walletPubkey,e.content)).then(function(n){var c,a,l;try{c=JSON.parse(n)}catch(e){return void u({error:"invalid response",code:"INTERNAL"})}23195==e.kind&&c.result?r(c.result)?(s(o(c.result)),i.notify(t,c.result)):u({error:"Response from NWC failed validation: "+JSON.stringify(c.result),code:"INTERNAL"}):u({error:null==(a=c.error)?void 0:a.message,code:null==(l=c.error)?void 0:l.code})})}catch(e){return Promise.reject(e)}});var a=i.relay.publish(e),l=setTimeout(function(){u({error:"Publish timeout: event "+e.id})},5e3);a.on("failed",function(e){clearTimeout(l),u({error:"Failed to publish request: "+e})}),a.on("ok",function(){clearTimeout(l)})})})}catch(e){return Promise.reject(e)}})},t=e,(r=[{key:"nostrWalletConnectUrl",get:function(){return this.getNostrWalletConnectUrl()}},{key:"connected",get:function(){return 1===this.relay.status}},{key:"publicKey",get:function(){if(!this.secret)throw new Error("Missing secret key");return n.getPublicKey(this.secret)}}])&&function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}(),x=q;function j(e){var t={};return e.recipient.customKey&&e.recipient.customValue&&(t[e.recipient.customKey]=e.recipient.customValue),t[7629169]=JSON.stringify(e.boostagram),{destination:e.recipient.address,amount:e.amount,customRecords:t}}var R=/*#__PURE__*/function(){function e(e,t){this.auth=void 0,this.defaultRequestOptions=void 0,this.auth="string"==typeof e?new O(e):e,this.defaultRequestOptions=i({},t,{user_agent:null==t?void 0:t.user_agent})}var t=e.prototype;return t.accountBalance=function(e,t){return y(i({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/balance",params:e,method:"GET"}))},t.accountSummary=function(e,t){return y(i({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/user/summary",params:e,method:"GET"}))},t.accountInformation=function(e,t){return y(i({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/user/me",params:e,method:"GET"}))},t.accountValue4Value=function(e,t){return y(i({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/user/value4value",params:e,method:"GET"}))},t.incomingInvoices=function(e,t){return y(i({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/invoices/incoming",params:e,method:"GET"}))},t.outgoingInvoices=function(e,t){return y(i({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/invoices/outgoing",params:e,method:"GET"}))},t.getInvoice=function(e,t){return y(i({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/invoices/"+e,method:"GET"}))},t.createInvoice=function(e,t){return y(i({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/invoices",request_body:e,method:"POST"}))},t.keysend=function(e,t){var n,r;return Array.isArray(e)?(n="/payments/keysend/multi",r={keysends:e}):(n="/payments/keysend",r=e),y(i({auth:this.auth},this.defaultRequestOptions,t,{endpoint:n,request_body:r,method:"POST"}))},t.sendPayment=function(e,t){return y(i({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/payments/bolt11",request_body:e,method:"POST"}))},t.sendBoostagram=function(e,t){var n,r;return Array.isArray(e)?(n="/payments/keysend/multi",r={keysends:e.map(function(e){return j(e)})}):(n="/payments/keysend",r=j(e)),y(i({auth:this.auth},this.defaultRequestOptions,t,{endpoint:n,request_body:r,method:"POST"}))},t.sendToAlbyAccount=function(e,t){return y(i({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/payments/keysend",request_body:{destination:"030a58b8653d32b99200a2334cfe913e51dc7d155aa0116c176657a4f1722677a3",customRecords:{696969:e.account},amount:e.amount,memo:e.memo},method:"POST"}))},t.createWebhookEndpoint=function(e,t){return y(i({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/webhook_endpoints",request_body:e,method:"POST"}))},t.deleteWebhookEndpoint=function(e,t){return y(i({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/webhook_endpoints/"+e,method:"DELETE"}))},t.getSwapInfo=function(e){return y(i({auth:this.auth},this.defaultRequestOptions,e,{endpoint:"/swaps/info",method:"GET"}))},t.createSwap=function(e,t){return y(i({auth:this.auth},this.defaultRequestOptions,t,{endpoint:"/swaps",method:"POST",request_body:e}))},e}();function S(e,t){try{var n=e()}catch(e){return t(!0,e)}return n&&n.then?n.then(t.bind(null,!1),t.bind(null,!0)):t(!1,n)}function U(e,t){try{var n=e()}catch(e){return t(e)}return n&&n.then?n.then(void 0,t):n}var N={__proto__:null,NostrWebLNProvider:q,NWC:x,OauthWeblnProvider:/*#__PURE__*/function(){function e(e){this.client=void 0,this.auth=void 0,this.oauth=void 0,this.subscribers=void 0,this.isExecuting=void 0,this.auth=e.auth,this.client=new R(e.auth),this.oauth=!0,this.subscribers={},this.isExecuting=!1}var t=e.prototype;return t.on=function(e,t){this.subscribers[e]=t},t.notify=function(e,t){var n=this.subscribers[e];n&&n(t)},t.enable=function(){try{var e,t=this;return t.isExecuting?Promise.resolve():null!=(e=t.auth.token)&&e.access_token?Promise.resolve({enabled:!0}):Promise.resolve(function(){if("undefined"==typeof window||void 0===window.document)throw new Error("Missing access token");var e=S(function(){return t.isExecuting=!0,Promise.resolve(t.openAuthorization()).then(function(){})},function(e,n){if(t.isExecuting=!1,e)throw n;return n});if(e&&e.then)return e.then(function(){})}())}catch(e){return Promise.reject(e)}},t.sendPayment=function(e){try{var t=this;return t.isExecuting?Promise.resolve():Promise.resolve(S(function(){return U(function(){return t.isExecuting=!0,Promise.resolve(t.client.sendPayment({invoice:e})).then(function(e){return t.notify("sendPayment",e),{preimage:e.payment_preimage}})},function(e){var t="Unknown Error";throw e instanceof Error&&(t=e.message),new Error(t)})},function(e,n){if(t.isExecuting=!1,e)throw n;return n}))}catch(e){return Promise.reject(e)}},t.keysend=function(e){try{var t=this;return t.isExecuting?Promise.resolve():Promise.resolve(S(function(){return U(function(){return t.isExecuting=!0,Promise.resolve(t.client.keysend(e)).then(function(e){return t.notify("keysend",e),{preimage:e.payment_preimage}})},function(e){var t="Unknown Error";throw e instanceof Error&&(t=e.message),new Error(t)})},function(e,n){if(t.isExecuting=!1,e)throw n;return n}))}catch(e){return Promise.reject(e)}},t.getInfo=function(){try{return Promise.resolve({alias:"Alby"})}catch(e){return Promise.reject(e)}},t.makeInvoice=function(e){try{var t=this;return t.isExecuting?Promise.resolve():Promise.resolve(S(function(){return U(function(){return t.isExecuting=!0,Promise.resolve(t.client.createInvoice({amount:parseInt(e.amount.toString()),description:e.defaultMemo})).then(function(e){return t.notify("makeInvoice",e),{paymentRequest:e.payment_request}})},function(e){var t="Unknown Error";throw e instanceof Error&&(t=e.message),new Error(t)})},function(e,n){if(t.isExecuting=!1,e)throw n;return n}))}catch(e){return Promise.reject(e)}},t.openAuthorization=function(){var e=this,t=window.outerHeight/2+window.screenY-350,n=window.outerWidth/2+window.screenX-300,r=this.auth.generateAuthURL({code_challenge_method:"S256"});return new Promise(function(o,i){var s=window.open(r,document.title+" - WebLN enable","height=700,width=600,top="+t+",left="+n),u=!1;window.addEventListener("message",function(t){try{var n=t.data,r=function(){if(n&&"alby:oauth:success"===n.type&&t.origin===document.location.protocol+"//"+document.location.host&&!u){u=!0,console.info("Processing OAuth code response");var r=n.payload.code,c=U(function(){return Promise.resolve(e.auth.requestAccessToken(r)).then(function(){e.client=new R(e.auth),s&&s.close(),e.notify("enable"),o({enabled:!0})})},function(e){console.error(e),i({enabled:!1})});if(c&&c.then)return c.then(function(){})}}();return Promise.resolve(r&&r.then?r.then(function(){}):void 0)}catch(e){return Promise.reject(e)}})})},e}()};e.Client=R,e.auth=T,e.types=m,e.webln=N});
//# sourceMappingURL=index.umd.js.map
import { AlbyResponseError } from "./AlbyResponseError";
import { RequestOptions } from "./request";
export type SuccessStatus = 200 | 201;

@@ -98,2 +99,20 @@ export type ResponseType = "application/json";

};
export type SwapInfoResponse = {
service_fee_percentage: number;
network_fee: number;
sats_per_vbyte: number;
};
export type CreateSwapParams = {
amount: number;
address: string;
sats_per_vbyte: number;
};
export type CreateSwapResponse = {
address: string;
service_fee: number;
network_fee: number;
amount: number;
total: number;
payment_request: string;
};
export type CreateWebhookEndpointResponse = BaseWebhookEndpointResponse & {

@@ -184,3 +203,3 @@ endpoint_secret: string;

};
export { AlbyResponseError };
export { AlbyResponseError, RequestOptions };
//# sourceMappingURL=types.d.ts.map

@@ -5,2 +5,7 @@ import { Relay, Event, UnsignedEvent } from 'nostr-tools';

import { GetNWCAuthorizationUrlOptions } from '../types';
interface GetBalanceResponse {
balance: number;
max_amount?: number;
budget_renewal?: string;
}
interface NostrWebLNOptions {

@@ -47,2 +52,3 @@ authorizationUrl?: string;

getInfo(): Promise<GetInfoResponse>;
getBalance(): Promise<GetBalanceResponse>;
sendPayment(invoice: string): Promise<SendPaymentResponse>;

@@ -63,2 +69,3 @@ keysend(args: KeysendArgs): Promise<SendPaymentResponse>;

private checkConnected;
private executeNip47Request;
}

@@ -65,0 +72,0 @@ export declare const NWC: typeof NostrWebLNProvider;

{
"name": "alby-js-sdk",
"version": "2.1.4",
"version": "2.2.3",
"description": "The SDK to integrate with Nostr Wallet Connect and the Alby API",
"repository": "https://github.com/getAlby/alby-js-sdk.git",
"bugs": "https://github.com/getAlby/alby-js-sdk/issues",
"repository": "https://github.com/getAlby/js-sdk.git",
"bugs": "https://github.com/getAlby/js-sdk/issues",
"funding": {

@@ -22,4 +22,4 @@ "type": "lightning",

"require": "./dist/index.cjs",
"default": "./dist/index.modern.js",
"types": "./dist/index.d.ts"
"types": "./dist/index.d.ts",
"default": "./dist/index.modern.js"
},

@@ -26,0 +26,0 @@ "scripts": {

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc