alby-js-sdk
Advanced tools
Comparing version 2.1.4 to 2.2.3
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
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No bug tracker
MaintenancePackage does not have a linked bug tracker in package.json.
Found 1 instance in 1 package
No repository
Supply chain riskPackage does not have a linked source code repository. Without this field, a package will have no reference to the location of the source code use to generate the package.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No bug tracker
MaintenancePackage does not have a linked bug tracker in package.json.
Found 1 instance in 1 package
No repository
Supply chain riskPackage does not have a linked source code repository. Without this field, a package will have no reference to the location of the source code use to generate the package.
Found 1 instance in 1 package
855401
14910