@cowprotocol/widget-lib 0.18.0 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import { SupportedChainId } from '@cowprotocol/cow-sdk';
2
2
  import { FlexibleConfig, PerNetworkConfig, PerTradeTypeConfig, TradeType } from './types';
3
- export declare function resolveFlexibleConfig<T extends string | number>(config: FlexibleConfig<T>, chainId: SupportedChainId, tradeType: TradeType): T | undefined;
3
+ export declare function resolveFlexibleConfig<T>(config: FlexibleConfig<T>, chainId: SupportedChainId, tradeType: TradeType): T | undefined;
4
4
  export declare function isPerTradeTypeConfig<T>(config: FlexibleConfig<T>): config is PerTradeTypeConfig<T>;
5
5
  export declare function isPerNetworkConfig<T>(config: FlexibleConfig<T>): config is PerNetworkConfig<T>;
package/index.d.ts CHANGED
@@ -4,3 +4,4 @@ export type { CowSwapWidgetHandler } from './cowSwapWidget';
4
4
  export * from './types';
5
5
  export * from './themeUtils';
6
6
  export * from './flexibleConfig';
7
+ export { resolveFlexibleConfigValues } from './resolveFlexibleConfigValues';
package/index.iife.js CHANGED
@@ -1 +1 @@
1
- var cowSwapWidget=function(E){"use strict";var fe=Object.defineProperty;var de=(E,T,R)=>T in E?fe(E,T,{enumerable:!0,configurable:!0,writable:!0,value:R}):E[T]=R;var P=(E,T,R)=>(de(E,typeof T!="symbol"?T+"":T,R),R);class T{constructor(n){this.key=n}postMessageToWindow(n,t,s){const p=typeof s=="object"?s:{},l={key:this.key,method:t,...p};n.postMessage(l,"*")}listenToMessageFromWindow(n,t,s){const p=l=>{!R(l.data)||l.data.key!==this.key||l.data.method!==t||s(l.data)};return n.addEventListener("message",p),p}stopListeningToMessageFromWindow(n,t,s){n.removeEventListener("message",s)}stopListeningWindowListener(n,t){n.removeEventListener("message",t)}}function R(e){return typeof e=="object"&&e!==null&&"key"in e&&"method"in e&&typeof e.key=="string"&&typeof e.method=="string"}var O=(e=>(e.PROVIDER_RPC_REQUEST="PROVIDER_RPC_REQUEST",e.PROVIDER_RPC_RESPONSE="PROVIDER_RPC_RESPONSE",e.PROVIDER_ON_EVENT="PROVIDER_ON_EVENT",e))(O||{});const W=new T("cowSwapIframeRpcProviderTransport"),H=["connect","disconnect","close","chainChanged","accountsChanged"];class x{constructor(n){P(this,"ethereumProvider",null);P(this,"requestWaitingForConnection",{});P(this,"processRpcCallFromWindow",({rpcRequest:n})=>{if(!this.ethereumProvider){n.id&&(this.requestWaitingForConnection[n.id]=n);return}this.processRpcRequest(n)});this.iframeWidow=n}disconnect(){this.ethereumProvider=null,W.stopListeningToMessageFromWindow(window,O.PROVIDER_RPC_REQUEST,this.processRpcCallFromWindow)}onConnect(n){this.ethereumProvider?this.disconnect():W.listenToMessageFromWindow(window,O.PROVIDER_RPC_REQUEST,this.processRpcCallFromWindow),this.ethereumProvider=n,this.processPendingRequests(),H.forEach(t=>{n.on(t,s=>this.onProviderEvent(t,s))})}processPendingRequests(){Object.keys(this.requestWaitingForConnection).forEach(n=>{this.processRpcRequest(this.requestWaitingForConnection[n])}),this.requestWaitingForConnection={}}processRpcRequest(n){const{id:t,jsonrpc:s,method:p}=n;if(!this.ethereumProvider||!t)return;(p==="enable"?this.ethereumProvider.enable():this.ethereumProvider.request({...n,id:t})).then(_=>this.forwardRpcResponseToIframe({rpcResponse:{jsonrpc:s,id:t,result:_}})).catch(_=>this.forwardRpcResponseToIframe({rpcResponse:{jsonrpc:s,id:t,error:_}}))}onProviderEvent(n,t){W.postMessageToWindow(this.iframeWidow,O.PROVIDER_ON_EVENT,{event:n,params:t})}forwardRpcResponseToIframe(n){W.postMessageToWindow(this.iframeWidow,O.PROVIDER_RPC_RESPONSE,n)}}var G={exports:{}};(function(e){var n=Object.prototype.hasOwnProperty,t="~";function s(){}Object.create&&(s.prototype=Object.create(null),new s().__proto__||(t=!1));function p(c,r,i){this.fn=c,this.context=r,this.once=i||!1}function l(c,r,i,o,w){if(typeof i!="function")throw new TypeError("The listener must be a function");var f=new p(i,o||c,w),d=t?t+r:r;return c._events[d]?c._events[d].fn?c._events[d]=[c._events[d],f]:c._events[d].push(f):(c._events[d]=f,c._eventsCount++),c}function _(c,r){--c._eventsCount===0?c._events=new s:delete c._events[r]}function u(){this._events=new s,this._eventsCount=0}u.prototype.eventNames=function(){var r=[],i,o;if(this._eventsCount===0)return r;for(o in i=this._events)n.call(i,o)&&r.push(t?o.slice(1):o);return Object.getOwnPropertySymbols?r.concat(Object.getOwnPropertySymbols(i)):r},u.prototype.listeners=function(r){var i=t?t+r:r,o=this._events[i];if(!o)return[];if(o.fn)return[o.fn];for(var w=0,f=o.length,d=new Array(f);w<f;w++)d[w]=o[w].fn;return d},u.prototype.listenerCount=function(r){var i=t?t+r:r,o=this._events[i];return o?o.fn?1:o.length:0},u.prototype.emit=function(r,i,o,w,f,d){var v=t?t+r:r;if(!this._events[v])return!1;var a=this._events[v],g=arguments.length,y,h;if(a.fn){switch(a.once&&this.removeListener(r,a.fn,void 0,!0),g){case 1:return a.fn.call(a.context),!0;case 2:return a.fn.call(a.context,i),!0;case 3:return a.fn.call(a.context,i,o),!0;case 4:return a.fn.call(a.context,i,o,w),!0;case 5:return a.fn.call(a.context,i,o,w,f),!0;case 6:return a.fn.call(a.context,i,o,w,f,d),!0}for(h=1,y=new Array(g-1);h<g;h++)y[h-1]=arguments[h];a.fn.apply(a.context,y)}else{var ue=a.length,I;for(h=0;h<ue;h++)switch(a[h].once&&this.removeListener(r,a[h].fn,void 0,!0),g){case 1:a[h].fn.call(a[h].context);break;case 2:a[h].fn.call(a[h].context,i);break;case 3:a[h].fn.call(a[h].context,i,o);break;case 4:a[h].fn.call(a[h].context,i,o,w);break;default:if(!y)for(I=1,y=new Array(g-1);I<g;I++)y[I-1]=arguments[I];a[h].fn.apply(a[h].context,y)}}return!0},u.prototype.on=function(r,i,o){return l(this,r,i,o,!1)},u.prototype.once=function(r,i,o){return l(this,r,i,o,!0)},u.prototype.removeListener=function(r,i,o,w){var f=t?t+r:r;if(!this._events[f])return this;if(!i)return _(this,f),this;var d=this._events[f];if(d.fn)d.fn===i&&(!w||d.once)&&(!o||d.context===o)&&_(this,f);else{for(var v=0,a=[],g=d.length;v<g;v++)(d[v].fn!==i||w&&!d[v].once||o&&d[v].context!==o)&&a.push(d[v]);a.length?this._events[f]=a.length===1?a[0]:a:_(this,f)}return this},u.prototype.removeAllListeners=function(r){var i;return r?(i=t?t+r:r,this._events[i]&&_(this,i)):(this._events=new s,this._eventsCount=0),this},u.prototype.off=u.prototype.removeListener,u.prototype.addListener=u.prototype.on,u.prefixed=t,u.EventEmitter=u,e.exports=u})(G);class Q{constructor(){P(this,"subscriptions",{})}on(n){const{event:t,handler:s}=n;return this.subscriptions[t]||(this.subscriptions[t]=[]),this.subscriptions[t].push(s),n}off(n){const{event:t,handler:s}=n;return this.subscriptions[t]&&(this.subscriptions[t]=this.subscriptions[t].filter(p=>p!==s)),n}emit(n,t){this.subscriptions[n]&&this.subscriptions[n].forEach(s=>s(t))}}var C=(e=>(e.ACTIVATE="ACTIVATE",e.UPDATE_HEIGHT="UPDATE_HEIGHT",e.SET_FULL_HEIGHT="SET_FULL_HEIGHT",e.EMIT_COW_EVENT="EMIT_COW_EVENT",e.PROVIDER_RPC_REQUEST="PROVIDER_RPC_REQUEST",e.INTERCEPT_WINDOW_OPEN="INTERCEPT_WINDOW_OPEN",e))(C||{}),S=(e=>(e.UPDATE_PARAMS="UPDATE_PARAMS",e.UPDATE_APP_DATA="UPDATE_APP_DATA",e.PROVIDER_RPC_RESPONSE="PROVIDER_RPC_RESPONSE",e.PROVIDER_ON_EVENT="PROVIDER_ON_EVENT",e))(S||{}),A=(e=>(e.SWAP="swap",e.LIMIT="limit",e.ADVANCED="advanced",e.YIELD="yield",e))(A||{});const j=["primary","background","paper","text","danger","warning","alert","info","success"],m=new T("cowSwapWidget");class ${constructor(n,t=[]){P(this,"eventEmitter",new Q);P(this,"listeners",[]);P(this,"widgetListener");this.contentWindow=n,this.updateListeners(t),this.widgetListener=m.listenToMessageFromWindow(this.contentWindow,C.EMIT_COW_EVENT,s=>this.eventEmitter.emit(s.event,s.payload))}stopListeningIframe(){m.stopListeningWindowListener(this.contentWindow,this.widgetListener)}updateListeners(n){for(const t of this.listeners)this.eventEmitter.off(t);this.listeners=n||[];for(const t of this.listeners)this.eventEmitter.on(t)}}class B{constructor(n,t){P(this,"forwardSdkMessage");this.appWindow=n,this.iframeWidow=t,this.forwardSdkMessage=s=>{q(s.data)&&s.origin!==window.location.origin&&(Y(s.data)?this.appWindow.parent.postMessage(s.data,"*"):z(s.data)&&this.iframeWidow.postMessage(s.data,"*"))},this.startListening()}startListening(){this.appWindow.addEventListener("message",this.forwardSdkMessage)}stopListening(){this.appWindow.removeEventListener("message",this.forwardSdkMessage)}}function q(e){return typeof e=="object"&&e!==null&&"id"in e&&typeof e.id=="string"}function Y(e){return"method"in e&&typeof e.method=="string"&&"params"in e&&"env"in e&&typeof e.env=="object"&&e.env!==null&&"sdkVersion"in e.env}function z(e){return"success"in e&&typeof e.success=="boolean"&&"version"in e&&typeof e.version=="string"}function b(e){return!!(e&&typeof e=="object")}const N="_";function J(e){const n=typeof e.baseUrl=="string"?e.baseUrl:"https://swap.cow.fi",t=M(e);return n+"/#"+t+"?"+V(e)}function M(e){const{chainId:n=1,sell:t,buy:s,tradeType:p=A.SWAP}=e,l=[(t==null?void 0:t.asset)||N,(s==null?void 0:s.asset)||N].map(encodeURIComponent).join("/");return`/${n}/widget/${p}/${l}`}function V(e){const n=new URLSearchParams;return X(K(n,e),e)}function K(e,n){const{sell:t,buy:s}=n;return t!=null&&t.amount&&e.append("sellAmount",t.amount),s!=null&&s.amount&&e.append("buyAmount",s.amount),e}function X(e,n){const t=n.theme;return t?(b(t)?(e.append("palette",encodeURIComponent(JSON.stringify(t))),e.append("theme",t.baseTheme)):(e.append("palette","null"),e.append("theme",t)),e):(e.append("palette","null"),e)}const F="640px",Z="450px",ee=20;function te(e,n){const{params:t,provider:s,listeners:p}=n;let l=s,_=t;const u=ne(t);e.innerHTML="",e.appendChild(u);const{contentWindow:c}=u;if(!c)throw console.error("Iframe does not contain a window",u),new Error("Iframe does not contain a window!");const r=[];r.push(se(c,t.appCode)),r.push(...ie(u,t.height,t.maxHeight)),r.push(re());const i=new $(window,p);let o=U(c,null,l);u.addEventListener("load",()=>k(c,_,l));const w=new B(window,c);return{updateParams:f=>{_=f,k(c,_,l)},updateListeners:f=>i.updateListeners(f),updateProvider:f=>{l=f,o=U(c,o,f)},destroy:()=>{o.disconnect(),i.stopListeningIframe(),r.forEach(f=>window.removeEventListener("message",f)),w.stopListening(),e.removeChild(u)}}}function U(e,n,t){n&&n.disconnect();const s=n||new x(e);return t&&s.onConnect(t),s}function ne(e){const{width:n=Z,height:t=F}=e,s=document.createElement("iframe");return s.src=J(e),s.width=n,s.height=t,s.style.border="0",s.allow="clipboard-read; clipboard-write",s}function k(e,n,t){const s=!!t,p=M(n),l=V(n).toString(),{theme:_,...u}=n;m.postMessageToWindow(e,S.UPDATE_PARAMS,{urlParams:{pathname:p,search:l},appParams:u,hasProvider:s})}function se(e,n){return m.listenToMessageFromWindow(window,C.ACTIVATE,()=>{m.postMessageToWindow(e,S.UPDATE_APP_DATA,{metaData:n?{appCode:n}:void 0})})}function re(){return m.listenToMessageFromWindow(window,C.INTERCEPT_WINDOW_OPEN,({href:e,rel:n,target:t})=>{const s=e.toString();if(!s.startsWith("http")&&s.match(/^[a-zA-Z0-9]+:\/\//)){window.open(s,t,n);return}})}function ie(e,n=F,t){return[m.listenToMessageFromWindow(window,C.UPDATE_HEIGHT,s=>{const p=s.height?s.height+ee:void 0;e.style.height=p?`${t?Math.min(p,t):p}px`:n}),m.listenToMessageFromWindow(window,C.SET_FULL_HEIGHT,({isUpToSmall:s})=>{e.style.height=s?n:`${t||document.body.offsetHeight}px`})]}const oe=Object.values(A);function ae(e,n,t){if(L(e)){const s=e[t];return D(s)?s[n]:s}if(D(e)){const s=e[n];return L(s)?s[t]:s}return e}function L(e){return typeof e!="object"?!1:Object.keys(e).every(n=>oe.includes(n))}const ce=/^\d+$/;function D(e){return typeof e!="object"?!1:Object.keys(e).every(n=>typeof n=="number"||ce.test(n))}return E.TradeType=A,E.WIDGET_PALETTE_COLORS=j,E.WidgetMethodsEmit=C,E.WidgetMethodsListen=S,E.createCowSwapWidget=te,E.isCowSwapWidgetPalette=b,E.isPerNetworkConfig=D,E.isPerTradeTypeConfig=L,E.resolveFlexibleConfig=ae,E.widgetIframeTransport=m,Object.defineProperty(E,Symbol.toStringTag,{value:"Module"}),E}({});
1
+ var cowSwapWidget=function(w){"use strict";class D{key;constructor(t){this.key=t}postMessageToWindow(t,n,s){const p=typeof s=="object"?s:{},l={key:this.key,method:n,...p};t.postMessage(l,"*")}listenToMessageFromWindow(t,n,s){const p=l=>{!x(l.data)||l.data.key!==this.key||l.data.method!==n||s(l.data)};return t.addEventListener("message",p),p}stopListeningToMessageFromWindow(t,n,s){t.removeEventListener("message",s)}stopListeningWindowListener(t,n){t.removeEventListener("message",n)}}function x(e){return typeof e=="object"&&e!==null&&"key"in e&&"method"in e&&typeof e.key=="string"&&typeof e.method=="string"}var m=function(e){return e.PROVIDER_RPC_REQUEST="PROVIDER_RPC_REQUEST",e.PROVIDER_RPC_RESPONSE="PROVIDER_RPC_RESPONSE",e.PROVIDER_ON_EVENT="PROVIDER_ON_EVENT",e.SEND_PROVIDER_META_INFO="SEND_PROVIDER_META_INFO",e.REQUEST_PROVIDER_META_INFO="REQUEST_PROVIDER_META_INFO",e}({});const R=new D("cowSwapIframeRpcProviderTransport");function Q(e){if(e.isWalletConnect)return e?.session?.peer?.metadata}function j(e,t){return t.find(n=>n.provider===e)?.info}const G=["connect","disconnect","close","chainChanged","accountsChanged"],L=[];window.addEventListener("eip6963:announceProvider",e=>{const t=e;L.push(t.detail)});class q{iframeWidow;ethereumProvider=null;requestWaitingForConnection={};constructor(t){this.iframeWidow=t}disconnect(){this.ethereumProvider=null,R.stopListeningToMessageFromWindow(window,m.PROVIDER_RPC_REQUEST,this.processRpcCallFromWindow),R.stopListeningToMessageFromWindow(window,m.REQUEST_PROVIDER_META_INFO,this.processProviderMetaInfoRequest)}onConnect(t){this.ethereumProvider?this.disconnect():R.listenToMessageFromWindow(window,m.PROVIDER_RPC_REQUEST,this.processRpcCallFromWindow),this.ethereumProvider=t,this.processPendingRequests(),G.forEach(n=>{t.on(n,s=>this.onProviderEvent(n,s))}),R.listenToMessageFromWindow(window,m.REQUEST_PROVIDER_META_INFO,this.processProviderMetaInfoRequest)}processPendingRequests(){Object.keys(this.requestWaitingForConnection).forEach(t=>{this.processRpcRequest(this.requestWaitingForConnection[t])}),this.requestWaitingForConnection={}}processRpcRequest(t){const{id:n,jsonrpc:s,method:p}=t;if(!this.ethereumProvider||!n)return;(p==="enable"?this.ethereumProvider.request({method:"eth_requestAccounts",id:n}):this.ethereumProvider.request({...t,id:n})).then(_=>this.forwardRpcResponseToIframe({rpcResponse:{jsonrpc:s,id:n,result:_}})).catch(_=>this.forwardRpcResponseToIframe({rpcResponse:{jsonrpc:s,id:n,error:_}}))}processRpcCallFromWindow=({rpcRequest:t})=>{if(!this.ethereumProvider){t.id&&(this.requestWaitingForConnection[t.id]=t);return}this.processRpcRequest(t)};processProviderMetaInfoRequest=()=>{if(!this.ethereumProvider)return;const t=j(this.ethereumProvider,L),n=Q(this.ethereumProvider);R.postMessageToWindow(this.iframeWidow,m.SEND_PROVIDER_META_INFO,{providerEip6963Info:t,providerWcMetadata:n})};onProviderEvent(t,n){R.postMessageToWindow(this.iframeWidow,m.PROVIDER_ON_EVENT,{event:t,params:n})}forwardRpcResponseToIframe(t){R.postMessageToWindow(this.iframeWidow,m.PROVIDER_RPC_RESPONSE,t)}}var y={exports:{}},b;function $(){return b||(b=1,function(e){var t=Object.prototype.hasOwnProperty,n="~";function s(){}Object.create&&(s.prototype=Object.create(null),new s().__proto__||(n=!1));function p(c,r,i){this.fn=c,this.context=r,this.once=i||!1}function l(c,r,i,o,E){if(typeof i!="function")throw new TypeError("The listener must be a function");var d=new p(i,o||c,E),f=n?n+r:r;return c._events[f]?c._events[f].fn?c._events[f]=[c._events[f],d]:c._events[f].push(d):(c._events[f]=d,c._eventsCount++),c}function _(c,r){--c._eventsCount===0?c._events=new s:delete c._events[r]}function u(){this._events=new s,this._eventsCount=0}u.prototype.eventNames=function(){var r=[],i,o;if(this._eventsCount===0)return r;for(o in i=this._events)t.call(i,o)&&r.push(n?o.slice(1):o);return Object.getOwnPropertySymbols?r.concat(Object.getOwnPropertySymbols(i)):r},u.prototype.listeners=function(r){var i=n?n+r:r,o=this._events[i];if(!o)return[];if(o.fn)return[o.fn];for(var E=0,d=o.length,f=new Array(d);E<d;E++)f[E]=o[E].fn;return f},u.prototype.listenerCount=function(r){var i=n?n+r:r,o=this._events[i];return o?o.fn?1:o.length:0},u.prototype.emit=function(r,i,o,E,d,f){var v=n?n+r:r;if(!this._events[v])return!1;var a=this._events[v],P=arguments.length,g,h;if(a.fn){switch(a.once&&this.removeListener(r,a.fn,void 0,!0),P){case 1:return a.fn.call(a.context),!0;case 2:return a.fn.call(a.context,i),!0;case 3:return a.fn.call(a.context,i,o),!0;case 4:return a.fn.call(a.context,i,o,E),!0;case 5:return a.fn.call(a.context,i,o,E,d),!0;case 6:return a.fn.call(a.context,i,o,E,d,f),!0}for(h=1,g=new Array(P-1);h<P;h++)g[h-1]=arguments[h];a.fn.apply(a.context,g)}else{var Ee=a.length,W;for(h=0;h<Ee;h++)switch(a[h].once&&this.removeListener(r,a[h].fn,void 0,!0),P){case 1:a[h].fn.call(a[h].context);break;case 2:a[h].fn.call(a[h].context,i);break;case 3:a[h].fn.call(a[h].context,i,o);break;case 4:a[h].fn.call(a[h].context,i,o,E);break;default:if(!g)for(W=1,g=new Array(P-1);W<P;W++)g[W-1]=arguments[W];a[h].fn.apply(a[h].context,g)}}return!0},u.prototype.on=function(r,i,o){return l(this,r,i,o,!1)},u.prototype.once=function(r,i,o){return l(this,r,i,o,!0)},u.prototype.removeListener=function(r,i,o,E){var d=n?n+r:r;if(!this._events[d])return this;if(!i)return _(this,d),this;var f=this._events[d];if(f.fn)f.fn===i&&(!E||f.once)&&(!o||f.context===o)&&_(this,d);else{for(var v=0,a=[],P=f.length;v<P;v++)(f[v].fn!==i||E&&!f[v].once||o&&f[v].context!==o)&&a.push(f[v]);a.length?this._events[d]=a.length===1?a[0]:a:_(this,d)}return this},u.prototype.removeAllListeners=function(r){var i;return r?(i=n?n+r:r,this._events[i]&&_(this,i)):(this._events=new s,this._eventsCount=0),this},u.prototype.off=u.prototype.removeListener,u.prototype.addListener=u.prototype.on,u.prefixed=n,u.EventEmitter=u,e.exports=u}(y)),y.exports}$();class B{subscriptions={};on(t){const{event:n,handler:s}=t;return this.subscriptions[n]||(this.subscriptions[n]=[]),this.subscriptions[n].push(s),t}off(t){const{event:n,handler:s}=t;return this.subscriptions[n]&&(this.subscriptions[n]=this.subscriptions[n].filter(p=>p!==s)),t}emit(t,n){this.subscriptions[t]&&this.subscriptions[t].forEach(s=>s(n))}}var I=function(e){return e.ACTIVATE="ACTIVATE",e.UPDATE_HEIGHT="UPDATE_HEIGHT",e.SET_FULL_HEIGHT="SET_FULL_HEIGHT",e.EMIT_COW_EVENT="EMIT_COW_EVENT",e.PROVIDER_RPC_REQUEST="PROVIDER_RPC_REQUEST",e.INTERCEPT_WINDOW_OPEN="INTERCEPT_WINDOW_OPEN",e}({}),S=function(e){return e.UPDATE_PARAMS="UPDATE_PARAMS",e.UPDATE_APP_DATA="UPDATE_APP_DATA",e.PROVIDER_RPC_RESPONSE="PROVIDER_RPC_RESPONSE",e.PROVIDER_ON_EVENT="PROVIDER_ON_EVENT",e}({}),A=function(e){return e.SWAP="swap",e.LIMIT="limit",e.ADVANCED="advanced",e.YIELD="yield",e}({});const Y=["primary","background","paper","text","danger","warning","alert","info","success"],T=new D("cowSwapWidget");class z{contentWindow;eventEmitter=new B;listeners=[];widgetListener;constructor(t,n=[]){this.contentWindow=t,this.updateListeners(n),this.widgetListener=T.listenToMessageFromWindow(this.contentWindow,I.EMIT_COW_EVENT,s=>this.eventEmitter.emit(s.event,s.payload))}stopListeningIframe(){T.stopListeningWindowListener(this.contentWindow,this.widgetListener)}updateListeners(t){for(const n of this.listeners)this.eventEmitter.off(n);this.listeners=t||[];for(const n of this.listeners)this.eventEmitter.on(n)}}class J{appWindow;iframeWidow;forwardSdkMessage;constructor(t,n){this.appWindow=t,this.iframeWidow=n,this.forwardSdkMessage=s=>{K(s.data)&&s.origin!==window.location.origin&&(X(s.data)?this.appWindow.parent.postMessage(s.data,"*"):Z(s.data)&&this.iframeWidow.postMessage(s.data,"*"))},this.startListening()}startListening(){this.appWindow.addEventListener("message",this.forwardSdkMessage)}stopListening(){this.appWindow.removeEventListener("message",this.forwardSdkMessage)}}function K(e){return typeof e=="object"&&e!==null&&"id"in e&&typeof e.id=="string"}function X(e){return"method"in e&&typeof e.method=="string"&&"params"in e&&"env"in e&&typeof e.env=="object"&&e.env!==null&&"sdkVersion"in e.env}function Z(e){return"success"in e&&typeof e.success=="boolean"&&"version"in e&&typeof e.version=="string"}function M(e){return!!(e&&typeof e=="object")}const N="_";function ee(e){const t=typeof e.baseUrl=="string"?e.baseUrl:"https://swap.cow.fi",n=V(e);return t+"/#"+n+"?"+F(e)}function V(e){const{chainId:t=1,sell:n,buy:s,tradeType:p=A.SWAP}=e,l=[n?.asset||N,s?.asset||N].map(encodeURIComponent).join("/");return`/${t}/widget/${p}/${l}`}function F(e){const t=new URLSearchParams;return se(ne(te(t,e),e),e)}function te(e,t){const{sell:n,buy:s}=t;return n?.amount&&e.append("sellAmount",n.amount),s?.amount&&e.append("buyAmount",s.amount),e}function ne(e,t){const n=t.theme;return n?(M(n)?(e.append("palette",encodeURIComponent(JSON.stringify(n))),e.append("theme",n.baseTheme)):(e.append("palette","null"),e.append("theme",n)),e):(e.append("palette","null"),e)}function se(e,t){return t.targetChainId&&e.append("targetChainId",t.targetChainId.toString()),e}const U="640px",re="450px",ie=20;function oe(e,t){const{params:n,provider:s,listeners:p}=t;let l=s,_=n;const u=ae(n);e.innerHTML="",e.appendChild(u);const{contentWindow:c}=u;if(!c)throw console.error("Iframe does not contain a window",u),new Error("Iframe does not contain a window!");const r=[];r.push(ce(c,n.appCode)),r.push(...de(u,n.height,n.maxHeight)),r.push(ue());const i=new z(window,p);let o=k(c,null,l);u.addEventListener("load",()=>H(c,_,l));const E=new J(window,c);return{updateParams:d=>{_=d,H(c,_,l)},updateListeners:d=>i.updateListeners(d),updateProvider:d=>{l=d,o=k(c,o,d)},destroy:()=>{o.disconnect(),i.stopListeningIframe(),r.forEach(d=>window.removeEventListener("message",d)),E.stopListening(),e.removeChild(u)}}}function k(e,t,n){t&&t.disconnect();const s=t||new q(e);return n&&s.onConnect(n),s}function ae(e){const{width:t=re,height:n=U}=e,s=document.createElement("iframe");return s.src=ee(e),s.width=t,s.height=n,s.style.border="0",s.allow="clipboard-read; clipboard-write",s}function H(e,t,n){const s=!!n,p=V(t),l=F(t).toString(),{theme:_,...u}=t;T.postMessageToWindow(e,S.UPDATE_PARAMS,{urlParams:{pathname:p,search:l},appParams:u,hasProvider:s})}function ce(e,t){return T.listenToMessageFromWindow(window,I.ACTIVATE,()=>{T.postMessageToWindow(e,S.UPDATE_APP_DATA,{metaData:t?{appCode:t}:void 0})})}function ue(){return T.listenToMessageFromWindow(window,I.INTERCEPT_WINDOW_OPEN,({href:e,rel:t,target:n})=>{const s=e.toString();if(!s.startsWith("http")&&s.match(/^[a-zA-Z0-9]+:\/\//)){window.open(s,n,t);return}})}function de(e,t=U,n){return[T.listenToMessageFromWindow(window,I.UPDATE_HEIGHT,s=>{const p=s.height?s.height+ie:void 0;e.style.height=p?`${n?Math.min(p,n):p}px`:t}),T.listenToMessageFromWindow(window,I.SET_FULL_HEIGHT,({isUpToSmall:s})=>{e.style.height=s?t:`${n||document.body.offsetHeight}px`})]}const fe=Object.values(A);function pe(e,t,n){if(O(e)){const s=e[n];return C(s)?s[t]:s}if(C(e)){const s=e[t];return O(s)?s[n]:s}return e}function O(e){return typeof e!="object"?!1:Object.keys(e).every(t=>fe.includes(t))}const he=/^\d+$/;function C(e){return typeof e!="object"?!1:Object.keys(e).every(t=>he.test(t))}function le(e){return O(e)?Object.values(e).flatMap(t=>C(t)?Object.values(t):[t]):C(e)?Object.values(e).flatMap(t=>O(t)?Object.values(t):[t]):[e]}return w.TradeType=A,w.WIDGET_PALETTE_COLORS=Y,w.WidgetMethodsEmit=I,w.WidgetMethodsListen=S,w.createCowSwapWidget=oe,w.isCowSwapWidgetPalette=M,w.isPerNetworkConfig=C,w.isPerTradeTypeConfig=O,w.resolveFlexibleConfig=pe,w.resolveFlexibleConfigValues=le,w.widgetIframeTransport=T,Object.defineProperty(w,Symbol.toStringTag,{value:"Module"}),w}({});
package/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var k=Object.defineProperty;var x=(e,n,t)=>n in e?k(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t;var T=(e,n,t)=>(x(e,typeof n!="symbol"?n+"":n,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class b{constructor(n){this.key=n}postMessageToWindow(n,t,s){const d=typeof s=="object"?s:{},l={key:this.key,method:t,...d};n.postMessage(l,"*")}listenToMessageFromWindow(n,t,s){const d=l=>{!H(l.data)||l.data.key!==this.key||l.data.method!==t||s(l.data)};return n.addEventListener("message",d),d}stopListeningToMessageFromWindow(n,t,s){n.removeEventListener("message",s)}stopListeningWindowListener(n,t){n.removeEventListener("message",t)}}function H(e){return typeof e=="object"&&e!==null&&"key"in e&&"method"in e&&typeof e.key=="string"&&typeof e.method=="string"}var C=(e=>(e.PROVIDER_RPC_REQUEST="PROVIDER_RPC_REQUEST",e.PROVIDER_RPC_RESPONSE="PROVIDER_RPC_RESPONSE",e.PROVIDER_ON_EVENT="PROVIDER_ON_EVENT",e))(C||{});const y=new b("cowSwapIframeRpcProviderTransport"),G=["connect","disconnect","close","chainChanged","accountsChanged"];class Q{constructor(n){T(this,"ethereumProvider",null);T(this,"requestWaitingForConnection",{});T(this,"processRpcCallFromWindow",({rpcRequest:n})=>{if(!this.ethereumProvider){n.id&&(this.requestWaitingForConnection[n.id]=n);return}this.processRpcRequest(n)});this.iframeWidow=n}disconnect(){this.ethereumProvider=null,y.stopListeningToMessageFromWindow(window,C.PROVIDER_RPC_REQUEST,this.processRpcCallFromWindow)}onConnect(n){this.ethereumProvider?this.disconnect():y.listenToMessageFromWindow(window,C.PROVIDER_RPC_REQUEST,this.processRpcCallFromWindow),this.ethereumProvider=n,this.processPendingRequests(),G.forEach(t=>{n.on(t,s=>this.onProviderEvent(t,s))})}processPendingRequests(){Object.keys(this.requestWaitingForConnection).forEach(n=>{this.processRpcRequest(this.requestWaitingForConnection[n])}),this.requestWaitingForConnection={}}processRpcRequest(n){const{id:t,jsonrpc:s,method:d}=n;if(!this.ethereumProvider||!t)return;(d==="enable"?this.ethereumProvider.enable():this.ethereumProvider.request({...n,id:t})).then(w=>this.forwardRpcResponseToIframe({rpcResponse:{jsonrpc:s,id:t,result:w}})).catch(w=>this.forwardRpcResponseToIframe({rpcResponse:{jsonrpc:s,id:t,error:w}}))}onProviderEvent(n,t){y.postMessageToWindow(this.iframeWidow,C.PROVIDER_ON_EVENT,{event:n,params:t})}forwardRpcResponseToIframe(n){y.postMessageToWindow(this.iframeWidow,C.PROVIDER_RPC_RESPONSE,n)}}var j={exports:{}};(function(e){var n=Object.prototype.hasOwnProperty,t="~";function s(){}Object.create&&(s.prototype=Object.create(null),new s().__proto__||(t=!1));function d(c,r,o){this.fn=c,this.context=r,this.once=o||!1}function l(c,r,o,i,E){if(typeof o!="function")throw new TypeError("The listener must be a function");var f=new d(o,i||c,E),p=t?t+r:r;return c._events[p]?c._events[p].fn?c._events[p]=[c._events[p],f]:c._events[p].push(f):(c._events[p]=f,c._eventsCount++),c}function w(c,r){--c._eventsCount===0?c._events=new s:delete c._events[r]}function u(){this._events=new s,this._eventsCount=0}u.prototype.eventNames=function(){var r=[],o,i;if(this._eventsCount===0)return r;for(i in o=this._events)n.call(o,i)&&r.push(t?i.slice(1):i);return Object.getOwnPropertySymbols?r.concat(Object.getOwnPropertySymbols(o)):r},u.prototype.listeners=function(r){var o=t?t+r:r,i=this._events[o];if(!i)return[];if(i.fn)return[i.fn];for(var E=0,f=i.length,p=new Array(f);E<f;E++)p[E]=i[E].fn;return p},u.prototype.listenerCount=function(r){var o=t?t+r:r,i=this._events[o];return i?i.fn?1:i.length:0},u.prototype.emit=function(r,o,i,E,f,p){var _=t?t+r:r;if(!this._events[_])return!1;var a=this._events[_],P=arguments.length,v,h;if(a.fn){switch(a.once&&this.removeListener(r,a.fn,void 0,!0),P){case 1:return a.fn.call(a.context),!0;case 2:return a.fn.call(a.context,o),!0;case 3:return a.fn.call(a.context,o,i),!0;case 4:return a.fn.call(a.context,o,i,E),!0;case 5:return a.fn.call(a.context,o,i,E,f),!0;case 6:return a.fn.call(a.context,o,i,E,f,p),!0}for(h=1,v=new Array(P-1);h<P;h++)v[h-1]=arguments[h];a.fn.apply(a.context,v)}else{var U=a.length,R;for(h=0;h<U;h++)switch(a[h].once&&this.removeListener(r,a[h].fn,void 0,!0),P){case 1:a[h].fn.call(a[h].context);break;case 2:a[h].fn.call(a[h].context,o);break;case 3:a[h].fn.call(a[h].context,o,i);break;case 4:a[h].fn.call(a[h].context,o,i,E);break;default:if(!v)for(R=1,v=new Array(P-1);R<P;R++)v[R-1]=arguments[R];a[h].fn.apply(a[h].context,v)}}return!0},u.prototype.on=function(r,o,i){return l(this,r,o,i,!1)},u.prototype.once=function(r,o,i){return l(this,r,o,i,!0)},u.prototype.removeListener=function(r,o,i,E){var f=t?t+r:r;if(!this._events[f])return this;if(!o)return w(this,f),this;var p=this._events[f];if(p.fn)p.fn===o&&(!E||p.once)&&(!i||p.context===i)&&w(this,f);else{for(var _=0,a=[],P=p.length;_<P;_++)(p[_].fn!==o||E&&!p[_].once||i&&p[_].context!==i)&&a.push(p[_]);a.length?this._events[f]=a.length===1?a[0]:a:w(this,f)}return this},u.prototype.removeAllListeners=function(r){var o;return r?(o=t?t+r:r,this._events[o]&&w(this,o)):(this._events=new s,this._eventsCount=0),this},u.prototype.off=u.prototype.removeListener,u.prototype.addListener=u.prototype.on,u.prefixed=t,u.EventEmitter=u,e.exports=u})(j);class ${constructor(){T(this,"subscriptions",{})}on(n){const{event:t,handler:s}=n;return this.subscriptions[t]||(this.subscriptions[t]=[]),this.subscriptions[t].push(s),n}off(n){const{event:t,handler:s}=n;return this.subscriptions[t]&&(this.subscriptions[t]=this.subscriptions[t].filter(d=>d!==s)),n}emit(n,t){this.subscriptions[n]&&this.subscriptions[n].forEach(s=>s(t))}}var g=(e=>(e.ACTIVATE="ACTIVATE",e.UPDATE_HEIGHT="UPDATE_HEIGHT",e.SET_FULL_HEIGHT="SET_FULL_HEIGHT",e.EMIT_COW_EVENT="EMIT_COW_EVENT",e.PROVIDER_RPC_REQUEST="PROVIDER_RPC_REQUEST",e.INTERCEPT_WINDOW_OPEN="INTERCEPT_WINDOW_OPEN",e))(g||{}),O=(e=>(e.UPDATE_PARAMS="UPDATE_PARAMS",e.UPDATE_APP_DATA="UPDATE_APP_DATA",e.PROVIDER_RPC_RESPONSE="PROVIDER_RPC_RESPONSE",e.PROVIDER_ON_EVENT="PROVIDER_ON_EVENT",e))(O||{}),I=(e=>(e.SWAP="swap",e.LIMIT="limit",e.ADVANCED="advanced",e.YIELD="yield",e))(I||{});const B=["primary","background","paper","text","danger","warning","alert","info","success"],m=new b("cowSwapWidget");class q{constructor(n,t=[]){T(this,"eventEmitter",new $);T(this,"listeners",[]);T(this,"widgetListener");this.contentWindow=n,this.updateListeners(t),this.widgetListener=m.listenToMessageFromWindow(this.contentWindow,g.EMIT_COW_EVENT,s=>this.eventEmitter.emit(s.event,s.payload))}stopListeningIframe(){m.stopListeningWindowListener(this.contentWindow,this.widgetListener)}updateListeners(n){for(const t of this.listeners)this.eventEmitter.off(t);this.listeners=n||[];for(const t of this.listeners)this.eventEmitter.on(t)}}class Y{constructor(n,t){T(this,"forwardSdkMessage");this.appWindow=n,this.iframeWidow=t,this.forwardSdkMessage=s=>{z(s.data)&&s.origin!==window.location.origin&&(J(s.data)?this.appWindow.parent.postMessage(s.data,"*"):K(s.data)&&this.iframeWidow.postMessage(s.data,"*"))},this.startListening()}startListening(){this.appWindow.addEventListener("message",this.forwardSdkMessage)}stopListening(){this.appWindow.removeEventListener("message",this.forwardSdkMessage)}}function z(e){return typeof e=="object"&&e!==null&&"id"in e&&typeof e.id=="string"}function J(e){return"method"in e&&typeof e.method=="string"&&"params"in e&&"env"in e&&typeof e.env=="object"&&e.env!==null&&"sdkVersion"in e.env}function K(e){return"success"in e&&typeof e.success=="boolean"&&"version"in e&&typeof e.version=="string"}function N(e){return!!(e&&typeof e=="object")}const A="_";function X(e){const n=typeof e.baseUrl=="string"?e.baseUrl:"https://swap.cow.fi",t=M(e);return n+"/#"+t+"?"+V(e)}function M(e){const{chainId:n=1,sell:t,buy:s,tradeType:d=I.SWAP}=e,l=[(t==null?void 0:t.asset)||A,(s==null?void 0:s.asset)||A].map(encodeURIComponent).join("/");return`/${n}/widget/${d}/${l}`}function V(e){const n=new URLSearchParams;return ee(Z(n,e),e)}function Z(e,n){const{sell:t,buy:s}=n;return t!=null&&t.amount&&e.append("sellAmount",t.amount),s!=null&&s.amount&&e.append("buyAmount",s.amount),e}function ee(e,n){const t=n.theme;return t?(N(t)?(e.append("palette",encodeURIComponent(JSON.stringify(t))),e.append("theme",t.baseTheme)):(e.append("palette","null"),e.append("theme",t)),e):(e.append("palette","null"),e)}const F="640px",te="450px",ne=20;function se(e,n){const{params:t,provider:s,listeners:d}=n;let l=s,w=t;const u=re(t);e.innerHTML="",e.appendChild(u);const{contentWindow:c}=u;if(!c)throw console.error("Iframe does not contain a window",u),new Error("Iframe does not contain a window!");const r=[];r.push(oe(c,t.appCode)),r.push(...ae(u,t.height,t.maxHeight)),r.push(ie());const o=new q(window,d);let i=L(c,null,l);u.addEventListener("load",()=>D(c,w,l));const E=new Y(window,c);return{updateParams:f=>{w=f,D(c,w,l)},updateListeners:f=>o.updateListeners(f),updateProvider:f=>{l=f,i=L(c,i,f)},destroy:()=>{i.disconnect(),o.stopListeningIframe(),r.forEach(f=>window.removeEventListener("message",f)),E.stopListening(),e.removeChild(u)}}}function L(e,n,t){n&&n.disconnect();const s=n||new Q(e);return t&&s.onConnect(t),s}function re(e){const{width:n=te,height:t=F}=e,s=document.createElement("iframe");return s.src=X(e),s.width=n,s.height=t,s.style.border="0",s.allow="clipboard-read; clipboard-write",s}function D(e,n,t){const s=!!t,d=M(n),l=V(n).toString(),{theme:w,...u}=n;m.postMessageToWindow(e,O.UPDATE_PARAMS,{urlParams:{pathname:d,search:l},appParams:u,hasProvider:s})}function oe(e,n){return m.listenToMessageFromWindow(window,g.ACTIVATE,()=>{m.postMessageToWindow(e,O.UPDATE_APP_DATA,{metaData:n?{appCode:n}:void 0})})}function ie(){return m.listenToMessageFromWindow(window,g.INTERCEPT_WINDOW_OPEN,({href:e,rel:n,target:t})=>{const s=e.toString();if(!s.startsWith("http")&&s.match(/^[a-zA-Z0-9]+:\/\//)){window.open(s,t,n);return}})}function ae(e,n=F,t){return[m.listenToMessageFromWindow(window,g.UPDATE_HEIGHT,s=>{const d=s.height?s.height+ne:void 0;e.style.height=d?`${t?Math.min(d,t):d}px`:n}),m.listenToMessageFromWindow(window,g.SET_FULL_HEIGHT,({isUpToSmall:s})=>{e.style.height=s?n:`${t||document.body.offsetHeight}px`})]}const ce=Object.values(I);function ue(e,n,t){if(W(e)){const s=e[t];return S(s)?s[n]:s}if(S(e)){const s=e[n];return W(s)?s[t]:s}return e}function W(e){return typeof e!="object"?!1:Object.keys(e).every(n=>ce.includes(n))}const fe=/^\d+$/;function S(e){return typeof e!="object"?!1:Object.keys(e).every(n=>typeof n=="number"||fe.test(n))}exports.TradeType=I;exports.WIDGET_PALETTE_COLORS=B;exports.WidgetMethodsEmit=g;exports.WidgetMethodsListen=O;exports.createCowSwapWidget=se;exports.isCowSwapWidgetPalette=N;exports.isPerNetworkConfig=S;exports.isPerTradeTypeConfig=W;exports.resolveFlexibleConfig=ue;exports.widgetIframeTransport=m;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class M{key;constructor(t){this.key=t}postMessageToWindow(t,n,s){const p=typeof s=="object"?s:{},l={key:this.key,method:n,...p};t.postMessage(l,"*")}listenToMessageFromWindow(t,n,s){const p=l=>{!H(l.data)||l.data.key!==this.key||l.data.method!==n||s(l.data)};return t.addEventListener("message",p),p}stopListeningToMessageFromWindow(t,n,s){t.removeEventListener("message",s)}stopListeningWindowListener(t,n){t.removeEventListener("message",n)}}function H(e){return typeof e=="object"&&e!==null&&"key"in e&&"method"in e&&typeof e.key=="string"&&typeof e.method=="string"}var m=function(e){return e.PROVIDER_RPC_REQUEST="PROVIDER_RPC_REQUEST",e.PROVIDER_RPC_RESPONSE="PROVIDER_RPC_RESPONSE",e.PROVIDER_ON_EVENT="PROVIDER_ON_EVENT",e.SEND_PROVIDER_META_INFO="SEND_PROVIDER_META_INFO",e.REQUEST_PROVIDER_META_INFO="REQUEST_PROVIDER_META_INFO",e}({});const R=new M("cowSwapIframeRpcProviderTransport");function Q(e){if(e.isWalletConnect)return e?.session?.peer?.metadata}function j(e,t){return t.find(n=>n.provider===e)?.info}const G=["connect","disconnect","close","chainChanged","accountsChanged"],N=[];window.addEventListener("eip6963:announceProvider",e=>{const t=e;N.push(t.detail)});class q{iframeWidow;ethereumProvider=null;requestWaitingForConnection={};constructor(t){this.iframeWidow=t}disconnect(){this.ethereumProvider=null,R.stopListeningToMessageFromWindow(window,m.PROVIDER_RPC_REQUEST,this.processRpcCallFromWindow),R.stopListeningToMessageFromWindow(window,m.REQUEST_PROVIDER_META_INFO,this.processProviderMetaInfoRequest)}onConnect(t){this.ethereumProvider?this.disconnect():R.listenToMessageFromWindow(window,m.PROVIDER_RPC_REQUEST,this.processRpcCallFromWindow),this.ethereumProvider=t,this.processPendingRequests(),G.forEach(n=>{t.on(n,s=>this.onProviderEvent(n,s))}),R.listenToMessageFromWindow(window,m.REQUEST_PROVIDER_META_INFO,this.processProviderMetaInfoRequest)}processPendingRequests(){Object.keys(this.requestWaitingForConnection).forEach(t=>{this.processRpcRequest(this.requestWaitingForConnection[t])}),this.requestWaitingForConnection={}}processRpcRequest(t){const{id:n,jsonrpc:s,method:p}=t;if(!this.ethereumProvider||!n)return;(p==="enable"?this.ethereumProvider.request({method:"eth_requestAccounts",id:n}):this.ethereumProvider.request({...t,id:n})).then(w=>this.forwardRpcResponseToIframe({rpcResponse:{jsonrpc:s,id:n,result:w}})).catch(w=>this.forwardRpcResponseToIframe({rpcResponse:{jsonrpc:s,id:n,error:w}}))}processRpcCallFromWindow=({rpcRequest:t})=>{if(!this.ethereumProvider){t.id&&(this.requestWaitingForConnection[t.id]=t);return}this.processRpcRequest(t)};processProviderMetaInfoRequest=()=>{if(!this.ethereumProvider)return;const t=j(this.ethereumProvider,N),n=Q(this.ethereumProvider);R.postMessageToWindow(this.iframeWidow,m.SEND_PROVIDER_META_INFO,{providerEip6963Info:t,providerWcMetadata:n})};onProviderEvent(t,n){R.postMessageToWindow(this.iframeWidow,m.PROVIDER_ON_EVENT,{event:t,params:n})}forwardRpcResponseToIframe(t){R.postMessageToWindow(this.iframeWidow,m.PROVIDER_RPC_RESPONSE,t)}}var W={exports:{}},A;function $(){return A||(A=1,function(e){var t=Object.prototype.hasOwnProperty,n="~";function s(){}Object.create&&(s.prototype=Object.create(null),new s().__proto__||(n=!1));function p(c,r,i){this.fn=c,this.context=r,this.once=i||!1}function l(c,r,i,o,E){if(typeof i!="function")throw new TypeError("The listener must be a function");var d=new p(i,o||c,E),f=n?n+r:r;return c._events[f]?c._events[f].fn?c._events[f]=[c._events[f],d]:c._events[f].push(d):(c._events[f]=d,c._eventsCount++),c}function w(c,r){--c._eventsCount===0?c._events=new s:delete c._events[r]}function u(){this._events=new s,this._eventsCount=0}u.prototype.eventNames=function(){var r=[],i,o;if(this._eventsCount===0)return r;for(o in i=this._events)t.call(i,o)&&r.push(n?o.slice(1):o);return Object.getOwnPropertySymbols?r.concat(Object.getOwnPropertySymbols(i)):r},u.prototype.listeners=function(r){var i=n?n+r:r,o=this._events[i];if(!o)return[];if(o.fn)return[o.fn];for(var E=0,d=o.length,f=new Array(d);E<d;E++)f[E]=o[E].fn;return f},u.prototype.listenerCount=function(r){var i=n?n+r:r,o=this._events[i];return o?o.fn?1:o.length:0},u.prototype.emit=function(r,i,o,E,d,f){var _=n?n+r:r;if(!this._events[_])return!1;var a=this._events[_],v=arguments.length,P,h;if(a.fn){switch(a.once&&this.removeListener(r,a.fn,void 0,!0),v){case 1:return a.fn.call(a.context),!0;case 2:return a.fn.call(a.context,i),!0;case 3:return a.fn.call(a.context,i,o),!0;case 4:return a.fn.call(a.context,i,o,E),!0;case 5:return a.fn.call(a.context,i,o,E,d),!0;case 6:return a.fn.call(a.context,i,o,E,d,f),!0}for(h=1,P=new Array(v-1);h<v;h++)P[h-1]=arguments[h];a.fn.apply(a.context,P)}else{var k=a.length,I;for(h=0;h<k;h++)switch(a[h].once&&this.removeListener(r,a[h].fn,void 0,!0),v){case 1:a[h].fn.call(a[h].context);break;case 2:a[h].fn.call(a[h].context,i);break;case 3:a[h].fn.call(a[h].context,i,o);break;case 4:a[h].fn.call(a[h].context,i,o,E);break;default:if(!P)for(I=1,P=new Array(v-1);I<v;I++)P[I-1]=arguments[I];a[h].fn.apply(a[h].context,P)}}return!0},u.prototype.on=function(r,i,o){return l(this,r,i,o,!1)},u.prototype.once=function(r,i,o){return l(this,r,i,o,!0)},u.prototype.removeListener=function(r,i,o,E){var d=n?n+r:r;if(!this._events[d])return this;if(!i)return w(this,d),this;var f=this._events[d];if(f.fn)f.fn===i&&(!E||f.once)&&(!o||f.context===o)&&w(this,d);else{for(var _=0,a=[],v=f.length;_<v;_++)(f[_].fn!==i||E&&!f[_].once||o&&f[_].context!==o)&&a.push(f[_]);a.length?this._events[d]=a.length===1?a[0]:a:w(this,d)}return this},u.prototype.removeAllListeners=function(r){var i;return r?(i=n?n+r:r,this._events[i]&&w(this,i)):(this._events=new s,this._eventsCount=0),this},u.prototype.off=u.prototype.removeListener,u.prototype.addListener=u.prototype.on,u.prefixed=n,u.EventEmitter=u,e.exports=u}(W)),W.exports}$();class B{subscriptions={};on(t){const{event:n,handler:s}=t;return this.subscriptions[n]||(this.subscriptions[n]=[]),this.subscriptions[n].push(s),t}off(t){const{event:n,handler:s}=t;return this.subscriptions[n]&&(this.subscriptions[n]=this.subscriptions[n].filter(p=>p!==s)),t}emit(t,n){this.subscriptions[t]&&this.subscriptions[t].forEach(s=>s(n))}}var g=function(e){return e.ACTIVATE="ACTIVATE",e.UPDATE_HEIGHT="UPDATE_HEIGHT",e.SET_FULL_HEIGHT="SET_FULL_HEIGHT",e.EMIT_COW_EVENT="EMIT_COW_EVENT",e.PROVIDER_RPC_REQUEST="PROVIDER_RPC_REQUEST",e.INTERCEPT_WINDOW_OPEN="INTERCEPT_WINDOW_OPEN",e}({}),y=function(e){return e.UPDATE_PARAMS="UPDATE_PARAMS",e.UPDATE_APP_DATA="UPDATE_APP_DATA",e.PROVIDER_RPC_RESPONSE="PROVIDER_RPC_RESPONSE",e.PROVIDER_ON_EVENT="PROVIDER_ON_EVENT",e}({}),S=function(e){return e.SWAP="swap",e.LIMIT="limit",e.ADVANCED="advanced",e.YIELD="yield",e}({});const Y=["primary","background","paper","text","danger","warning","alert","info","success"],T=new M("cowSwapWidget");class z{contentWindow;eventEmitter=new B;listeners=[];widgetListener;constructor(t,n=[]){this.contentWindow=t,this.updateListeners(n),this.widgetListener=T.listenToMessageFromWindow(this.contentWindow,g.EMIT_COW_EVENT,s=>this.eventEmitter.emit(s.event,s.payload))}stopListeningIframe(){T.stopListeningWindowListener(this.contentWindow,this.widgetListener)}updateListeners(t){for(const n of this.listeners)this.eventEmitter.off(n);this.listeners=t||[];for(const n of this.listeners)this.eventEmitter.on(n)}}class J{appWindow;iframeWidow;forwardSdkMessage;constructor(t,n){this.appWindow=t,this.iframeWidow=n,this.forwardSdkMessage=s=>{K(s.data)&&s.origin!==window.location.origin&&(X(s.data)?this.appWindow.parent.postMessage(s.data,"*"):Z(s.data)&&this.iframeWidow.postMessage(s.data,"*"))},this.startListening()}startListening(){this.appWindow.addEventListener("message",this.forwardSdkMessage)}stopListening(){this.appWindow.removeEventListener("message",this.forwardSdkMessage)}}function K(e){return typeof e=="object"&&e!==null&&"id"in e&&typeof e.id=="string"}function X(e){return"method"in e&&typeof e.method=="string"&&"params"in e&&"env"in e&&typeof e.env=="object"&&e.env!==null&&"sdkVersion"in e.env}function Z(e){return"success"in e&&typeof e.success=="boolean"&&"version"in e&&typeof e.version=="string"}function V(e){return!!(e&&typeof e=="object")}const D="_";function ee(e){const t=typeof e.baseUrl=="string"?e.baseUrl:"https://swap.cow.fi",n=F(e);return t+"/#"+n+"?"+U(e)}function F(e){const{chainId:t=1,sell:n,buy:s,tradeType:p=S.SWAP}=e,l=[n?.asset||D,s?.asset||D].map(encodeURIComponent).join("/");return`/${t}/widget/${p}/${l}`}function U(e){const t=new URLSearchParams;return se(ne(te(t,e),e),e)}function te(e,t){const{sell:n,buy:s}=t;return n?.amount&&e.append("sellAmount",n.amount),s?.amount&&e.append("buyAmount",s.amount),e}function ne(e,t){const n=t.theme;return n?(V(n)?(e.append("palette",encodeURIComponent(JSON.stringify(n))),e.append("theme",n.baseTheme)):(e.append("palette","null"),e.append("theme",n)),e):(e.append("palette","null"),e)}function se(e,t){return t.targetChainId&&e.append("targetChainId",t.targetChainId.toString()),e}const x="640px",re="450px",ie=20;function oe(e,t){const{params:n,provider:s,listeners:p}=t;let l=s,w=n;const u=ae(n);e.innerHTML="",e.appendChild(u);const{contentWindow:c}=u;if(!c)throw console.error("Iframe does not contain a window",u),new Error("Iframe does not contain a window!");const r=[];r.push(ce(c,n.appCode)),r.push(...de(u,n.height,n.maxHeight)),r.push(ue());const i=new z(window,p);let o=L(c,null,l);u.addEventListener("load",()=>b(c,w,l));const E=new J(window,c);return{updateParams:d=>{w=d,b(c,w,l)},updateListeners:d=>i.updateListeners(d),updateProvider:d=>{l=d,o=L(c,o,d)},destroy:()=>{o.disconnect(),i.stopListeningIframe(),r.forEach(d=>window.removeEventListener("message",d)),E.stopListening(),e.removeChild(u)}}}function L(e,t,n){t&&t.disconnect();const s=t||new q(e);return n&&s.onConnect(n),s}function ae(e){const{width:t=re,height:n=x}=e,s=document.createElement("iframe");return s.src=ee(e),s.width=t,s.height=n,s.style.border="0",s.allow="clipboard-read; clipboard-write",s}function b(e,t,n){const s=!!n,p=F(t),l=U(t).toString(),{theme:w,...u}=t;T.postMessageToWindow(e,y.UPDATE_PARAMS,{urlParams:{pathname:p,search:l},appParams:u,hasProvider:s})}function ce(e,t){return T.listenToMessageFromWindow(window,g.ACTIVATE,()=>{T.postMessageToWindow(e,y.UPDATE_APP_DATA,{metaData:t?{appCode:t}:void 0})})}function ue(){return T.listenToMessageFromWindow(window,g.INTERCEPT_WINDOW_OPEN,({href:e,rel:t,target:n})=>{const s=e.toString();if(!s.startsWith("http")&&s.match(/^[a-zA-Z0-9]+:\/\//)){window.open(s,n,t);return}})}function de(e,t=x,n){return[T.listenToMessageFromWindow(window,g.UPDATE_HEIGHT,s=>{const p=s.height?s.height+ie:void 0;e.style.height=p?`${n?Math.min(p,n):p}px`:t}),T.listenToMessageFromWindow(window,g.SET_FULL_HEIGHT,({isUpToSmall:s})=>{e.style.height=s?t:`${n||document.body.offsetHeight}px`})]}const fe=Object.values(S);function pe(e,t,n){if(O(e)){const s=e[n];return C(s)?s[t]:s}if(C(e)){const s=e[t];return O(s)?s[n]:s}return e}function O(e){return typeof e!="object"?!1:Object.keys(e).every(t=>fe.includes(t))}const he=/^\d+$/;function C(e){return typeof e!="object"?!1:Object.keys(e).every(t=>he.test(t))}function le(e){return O(e)?Object.values(e).flatMap(t=>C(t)?Object.values(t):[t]):C(e)?Object.values(e).flatMap(t=>O(t)?Object.values(t):[t]):[e]}exports.TradeType=S;exports.WIDGET_PALETTE_COLORS=Y;exports.WidgetMethodsEmit=g;exports.WidgetMethodsListen=y;exports.createCowSwapWidget=oe;exports.isCowSwapWidgetPalette=V;exports.isPerNetworkConfig=C;exports.isPerTradeTypeConfig=O;exports.resolveFlexibleConfig=pe;exports.resolveFlexibleConfigValues=le;exports.widgetIframeTransport=T;
package/index.mjs CHANGED
@@ -1,257 +1,294 @@
1
- var F = Object.defineProperty;
2
- var k = (e, n, t) => n in e ? F(e, n, { enumerable: !0, configurable: !0, writable: !0, value: t }) : e[n] = t;
3
- var m = (e, n, t) => (k(e, typeof n != "symbol" ? n + "" : n, t), t);
4
- class b {
5
- constructor(n) {
6
- this.key = n;
1
+ class L {
2
+ key;
3
+ constructor(t) {
4
+ this.key = t;
7
5
  }
8
- postMessageToWindow(n, t, s) {
9
- const d = typeof s == "object" ? s : {}, l = {
6
+ // TODO: Add proper return type annotation
7
+ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
8
+ postMessageToWindow(t, n, s) {
9
+ const p = typeof s == "object" ? s : {}, l = {
10
10
  key: this.key,
11
- method: t,
12
- ...d
11
+ method: n,
12
+ ...p
13
13
  };
14
- n.postMessage(
15
- l,
16
- "*"
17
- // TODO: Change to CoW specific origin in production. https://github.com/cowprotocol/cowswap/issues/3828
18
- );
14
+ t.postMessage(l, "*");
19
15
  }
20
- listenToMessageFromWindow(n, t, s) {
21
- const d = (l) => {
22
- !x(l.data) || l.data.key !== this.key || l.data.method !== t || s(l.data);
16
+ listenToMessageFromWindow(t, n, s) {
17
+ const p = (l) => {
18
+ !k(l.data) || l.data.key !== this.key || l.data.method !== n || s(l.data);
23
19
  };
24
- return n.addEventListener("message", d), d;
20
+ return t.addEventListener("message", p), p;
25
21
  }
26
- stopListeningToMessageFromWindow(n, t, s) {
27
- n.removeEventListener("message", s);
22
+ // TODO: Add proper return type annotation
23
+ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
24
+ stopListeningToMessageFromWindow(t, n, s) {
25
+ t.removeEventListener("message", s);
28
26
  }
29
- stopListeningWindowListener(n, t) {
30
- n.removeEventListener("message", t);
27
+ // TODO: Add proper return type annotation
28
+ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
29
+ stopListeningWindowListener(t, n) {
30
+ t.removeEventListener("message", n);
31
31
  }
32
32
  }
33
- function x(e) {
33
+ function k(e) {
34
34
  return typeof e == "object" && e !== null && "key" in e && "method" in e && typeof e.key == "string" && typeof e.method == "string";
35
35
  }
36
- var I = /* @__PURE__ */ ((e) => (e.PROVIDER_RPC_REQUEST = "PROVIDER_RPC_REQUEST", e.PROVIDER_RPC_RESPONSE = "PROVIDER_RPC_RESPONSE", e.PROVIDER_ON_EVENT = "PROVIDER_ON_EVENT", e))(I || {});
37
- const O = new b(
38
- "cowSwapIframeRpcProviderTransport"
39
- ), H = ["connect", "disconnect", "close", "chainChanged", "accountsChanged"];
36
+ var m = /* @__PURE__ */ function(e) {
37
+ return e.PROVIDER_RPC_REQUEST = "PROVIDER_RPC_REQUEST", e.PROVIDER_RPC_RESPONSE = "PROVIDER_RPC_RESPONSE", e.PROVIDER_ON_EVENT = "PROVIDER_ON_EVENT", e.SEND_PROVIDER_META_INFO = "SEND_PROVIDER_META_INFO", e.REQUEST_PROVIDER_META_INFO = "REQUEST_PROVIDER_META_INFO", e;
38
+ }({});
39
+ const P = new L("cowSwapIframeRpcProviderTransport");
40
+ function H(e) {
41
+ if (e.isWalletConnect)
42
+ return e?.session?.peer?.metadata;
43
+ }
44
+ function Q(e, t) {
45
+ return t.find((n) => n.provider === e)?.info;
46
+ }
47
+ const j = [
48
+ "connect",
49
+ "disconnect",
50
+ "close",
51
+ "chainChanged",
52
+ "accountsChanged"
53
+ ], b = [];
54
+ window.addEventListener("eip6963:announceProvider", (e) => {
55
+ const t = e;
56
+ b.push(t.detail);
57
+ });
40
58
  class G {
59
+ iframeWidow;
41
60
  /**
42
- * Creates an instance of IframeRpcProviderBridge.
43
- * @param iframeWidow - The iFrame window that will post up general RPC messages and to which the IframeRpcProviderBridge will forward the RPC result.
44
- * Also it will receive some special RPC events coming from the wallet, like connect/chainChanged,accountChanged
45
- */
46
- constructor(n) {
47
- /**
48
- * The Ethereum provider instance.
49
- * When is null the JSON-RPC bridge is disconnected from the Ethereum provider.
50
- * */
51
- m(this, "ethereumProvider", null);
52
- /** Stored JSON-RPC requests, to queue them when disconnected. */
53
- m(this, "requestWaitingForConnection", {});
54
- m(this, "processRpcCallFromWindow", ({ rpcRequest: n }) => {
55
- if (!this.ethereumProvider) {
56
- n.id && (this.requestWaitingForConnection[n.id] = n);
57
- return;
58
- }
59
- this.processRpcRequest(n);
60
- });
61
- this.iframeWidow = n;
61
+ * The Ethereum provider instance.
62
+ * When is null the JSON-RPC bridge is disconnected from the Ethereum provider.
63
+ * */
64
+ ethereumProvider = null;
65
+ /** Stored JSON-RPC requests, to queue them when disconnected. */
66
+ requestWaitingForConnection = {};
67
+ /**
68
+ * Creates an instance of IframeRpcProviderBridge.
69
+ * @param iframeWidow - The iFrame window that will post up general RPC messages and to which the IframeRpcProviderBridge will forward the RPC result.
70
+ * Also it will receive some special RPC events coming from the wallet, like connect/chainChanged,accountChanged
71
+ */
72
+ constructor(t) {
73
+ this.iframeWidow = t;
62
74
  }
63
75
  /**
64
- * Disconnects the JSON-RPC bridge from the Ethereum provider.
65
- */
76
+ * Disconnects the JSON-RPC bridge from the Ethereum provider.
77
+ */
78
+ // TODO: Add proper return type annotation
79
+ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
66
80
  disconnect() {
67
- this.ethereumProvider = null, O.stopListeningToMessageFromWindow(
68
- window,
69
- I.PROVIDER_RPC_REQUEST,
70
- this.processRpcCallFromWindow
71
- );
81
+ this.ethereumProvider = null, P.stopListeningToMessageFromWindow(window, m.PROVIDER_RPC_REQUEST, this.processRpcCallFromWindow), P.stopListeningToMessageFromWindow(window, m.REQUEST_PROVIDER_META_INFO, this.processProviderMetaInfoRequest);
72
82
  }
73
83
  /**
74
- * Handles the 'connect' event and sets up event listeners for Ethereum provider events.
75
- * @param newProvider - The Ethereum provider to connect.
76
- */
77
- onConnect(n) {
78
- this.ethereumProvider ? this.disconnect() : O.listenToMessageFromWindow(
79
- window,
80
- I.PROVIDER_RPC_REQUEST,
81
- this.processRpcCallFromWindow
82
- ), this.ethereumProvider = n, this.processPendingRequests(), H.forEach((t) => {
83
- n.on(t, (s) => this.onProviderEvent(t, s));
84
- });
84
+ * Handles the 'connect' event and sets up event listeners for Ethereum provider events.
85
+ * @param newProvider - The Ethereum provider to connect.
86
+ */
87
+ // TODO: Add proper return type annotation
88
+ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
89
+ onConnect(t) {
90
+ this.ethereumProvider ? this.disconnect() : P.listenToMessageFromWindow(window, m.PROVIDER_RPC_REQUEST, this.processRpcCallFromWindow), this.ethereumProvider = t, this.processPendingRequests(), j.forEach((n) => {
91
+ t.on(n, (s) => this.onProviderEvent(n, s));
92
+ }), P.listenToMessageFromWindow(window, m.REQUEST_PROVIDER_META_INFO, this.processProviderMetaInfoRequest);
85
93
  }
94
+ // TODO: Add proper return type annotation
95
+ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
86
96
  processPendingRequests() {
87
- Object.keys(this.requestWaitingForConnection).forEach((n) => {
88
- this.processRpcRequest(this.requestWaitingForConnection[n]);
97
+ Object.keys(this.requestWaitingForConnection).forEach((t) => {
98
+ this.processRpcRequest(this.requestWaitingForConnection[t]);
89
99
  }), this.requestWaitingForConnection = {};
90
100
  }
91
101
  /**
92
- * Processes a JSON-RPC request and sends appropriate response or error via the content window.
93
- * @param request - The JSON-RPC request to be processed.
94
- */
95
- processRpcRequest(n) {
96
- const { id: t, jsonrpc: s, method: d } = n;
97
- if (!this.ethereumProvider || !t)
102
+ * Processes a JSON-RPC request and sends appropriate response or error via the content window.
103
+ * @param request - The JSON-RPC request to be processed.
104
+ */
105
+ // TODO: Add proper return type annotation
106
+ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
107
+ processRpcRequest(t) {
108
+ const { id: n, jsonrpc: s, method: p } = t;
109
+ if (!this.ethereumProvider || !n)
98
110
  return;
99
- (d === "enable" ? this.ethereumProvider.enable() : this.ethereumProvider.request({ ...n, id: t })).then(
100
- (w) => this.forwardRpcResponseToIframe({
101
- rpcResponse: { jsonrpc: s, id: t, result: w }
102
- })
103
- ).catch(
104
- (w) => this.forwardRpcResponseToIframe({
105
- rpcResponse: { jsonrpc: s, id: t, error: w }
106
- })
107
- );
111
+ // Keep the legacy "enable" method for backward compatibility
112
+ (p === "enable" ? this.ethereumProvider.request({
113
+ method: "eth_requestAccounts",
114
+ id: n
115
+ }) : this.ethereumProvider.request({
116
+ ...t,
117
+ id: n
118
+ })).then((w) => this.forwardRpcResponseToIframe({
119
+ rpcResponse: {
120
+ jsonrpc: s,
121
+ id: n,
122
+ result: w
123
+ }
124
+ })).catch((w) => this.forwardRpcResponseToIframe({
125
+ rpcResponse: {
126
+ jsonrpc: s,
127
+ id: n,
128
+ error: w
129
+ }
130
+ }));
108
131
  }
109
- onProviderEvent(n, t) {
110
- O.postMessageToWindow(this.iframeWidow, I.PROVIDER_ON_EVENT, {
111
- event: n,
112
- params: t
132
+ processRpcCallFromWindow = ({ rpcRequest: t }) => {
133
+ if (!this.ethereumProvider) {
134
+ t.id && (this.requestWaitingForConnection[t.id] = t);
135
+ return;
136
+ }
137
+ this.processRpcRequest(t);
138
+ };
139
+ processProviderMetaInfoRequest = () => {
140
+ if (!this.ethereumProvider) return;
141
+ const t = Q(this.ethereumProvider, b), n = H(this.ethereumProvider);
142
+ P.postMessageToWindow(this.iframeWidow, m.SEND_PROVIDER_META_INFO, {
143
+ providerEip6963Info: t,
144
+ providerWcMetadata: n
145
+ });
146
+ };
147
+ onProviderEvent(t, n) {
148
+ P.postMessageToWindow(this.iframeWidow, m.PROVIDER_ON_EVENT, {
149
+ event: t,
150
+ params: n
113
151
  });
114
152
  }
115
153
  /**
116
- * Forward a JSON-RPC message to the content window.
117
- */
118
- forwardRpcResponseToIframe(n) {
119
- O.postMessageToWindow(
120
- this.iframeWidow,
121
- I.PROVIDER_RPC_RESPONSE,
122
- n
123
- );
154
+ * Forward a JSON-RPC message to the content window.
155
+ */
156
+ // TODO: Add proper return type annotation
157
+ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
158
+ forwardRpcResponseToIframe(t) {
159
+ P.postMessageToWindow(this.iframeWidow, m.PROVIDER_RPC_RESPONSE, t);
124
160
  }
125
161
  }
126
- var Q = { exports: {} };
127
- (function(e) {
128
- var n = Object.prototype.hasOwnProperty, t = "~";
129
- function s() {
130
- }
131
- Object.create && (s.prototype = /* @__PURE__ */ Object.create(null), new s().__proto__ || (t = !1));
132
- function d(c, r, o) {
133
- this.fn = c, this.context = r, this.once = o || !1;
134
- }
135
- function l(c, r, o, i, E) {
136
- if (typeof o != "function")
137
- throw new TypeError("The listener must be a function");
138
- var f = new d(o, i || c, E), p = t ? t + r : r;
139
- return c._events[p] ? c._events[p].fn ? c._events[p] = [c._events[p], f] : c._events[p].push(f) : (c._events[p] = f, c._eventsCount++), c;
140
- }
141
- function w(c, r) {
142
- --c._eventsCount === 0 ? c._events = new s() : delete c._events[r];
143
- }
144
- function u() {
145
- this._events = new s(), this._eventsCount = 0;
146
- }
147
- u.prototype.eventNames = function() {
148
- var r = [], o, i;
149
- if (this._eventsCount === 0)
150
- return r;
151
- for (i in o = this._events)
152
- n.call(o, i) && r.push(t ? i.slice(1) : i);
153
- return Object.getOwnPropertySymbols ? r.concat(Object.getOwnPropertySymbols(o)) : r;
154
- }, u.prototype.listeners = function(r) {
155
- var o = t ? t + r : r, i = this._events[o];
156
- if (!i)
157
- return [];
158
- if (i.fn)
159
- return [i.fn];
160
- for (var E = 0, f = i.length, p = new Array(f); E < f; E++)
161
- p[E] = i[E].fn;
162
- return p;
163
- }, u.prototype.listenerCount = function(r) {
164
- var o = t ? t + r : r, i = this._events[o];
165
- return i ? i.fn ? 1 : i.length : 0;
166
- }, u.prototype.emit = function(r, o, i, E, f, p) {
167
- var _ = t ? t + r : r;
168
- if (!this._events[_])
169
- return !1;
170
- var a = this._events[_], T = arguments.length, P, h;
171
- if (a.fn) {
172
- switch (a.once && this.removeListener(r, a.fn, void 0, !0), T) {
173
- case 1:
174
- return a.fn.call(a.context), !0;
175
- case 2:
176
- return a.fn.call(a.context, o), !0;
177
- case 3:
178
- return a.fn.call(a.context, o, i), !0;
179
- case 4:
180
- return a.fn.call(a.context, o, i, E), !0;
181
- case 5:
182
- return a.fn.call(a.context, o, i, E, f), !0;
183
- case 6:
184
- return a.fn.call(a.context, o, i, E, f, p), !0;
185
- }
186
- for (h = 1, P = new Array(T - 1); h < T; h++)
187
- P[h - 1] = arguments[h];
188
- a.fn.apply(a.context, P);
189
- } else {
190
- var U = a.length, g;
191
- for (h = 0; h < U; h++)
192
- switch (a[h].once && this.removeListener(r, a[h].fn, void 0, !0), T) {
162
+ var C = { exports: {} }, y;
163
+ function q() {
164
+ return y || (y = 1, function(e) {
165
+ var t = Object.prototype.hasOwnProperty, n = "~";
166
+ function s() {
167
+ }
168
+ Object.create && (s.prototype = /* @__PURE__ */ Object.create(null), new s().__proto__ || (n = !1));
169
+ function p(c, r, o) {
170
+ this.fn = c, this.context = r, this.once = o || !1;
171
+ }
172
+ function l(c, r, o, i, E) {
173
+ if (typeof o != "function")
174
+ throw new TypeError("The listener must be a function");
175
+ var d = new p(o, i || c, E), f = n ? n + r : r;
176
+ return c._events[f] ? c._events[f].fn ? c._events[f] = [c._events[f], d] : c._events[f].push(d) : (c._events[f] = d, c._eventsCount++), c;
177
+ }
178
+ function w(c, r) {
179
+ --c._eventsCount === 0 ? c._events = new s() : delete c._events[r];
180
+ }
181
+ function u() {
182
+ this._events = new s(), this._eventsCount = 0;
183
+ }
184
+ u.prototype.eventNames = function() {
185
+ var r = [], o, i;
186
+ if (this._eventsCount === 0) return r;
187
+ for (i in o = this._events)
188
+ t.call(o, i) && r.push(n ? i.slice(1) : i);
189
+ return Object.getOwnPropertySymbols ? r.concat(Object.getOwnPropertySymbols(o)) : r;
190
+ }, u.prototype.listeners = function(r) {
191
+ var o = n ? n + r : r, i = this._events[o];
192
+ if (!i) return [];
193
+ if (i.fn) return [i.fn];
194
+ for (var E = 0, d = i.length, f = new Array(d); E < d; E++)
195
+ f[E] = i[E].fn;
196
+ return f;
197
+ }, u.prototype.listenerCount = function(r) {
198
+ var o = n ? n + r : r, i = this._events[o];
199
+ return i ? i.fn ? 1 : i.length : 0;
200
+ }, u.prototype.emit = function(r, o, i, E, d, f) {
201
+ var _ = n ? n + r : r;
202
+ if (!this._events[_]) return !1;
203
+ var a = this._events[_], T = arguments.length, R, h;
204
+ if (a.fn) {
205
+ switch (a.once && this.removeListener(r, a.fn, void 0, !0), T) {
193
206
  case 1:
194
- a[h].fn.call(a[h].context);
195
- break;
207
+ return a.fn.call(a.context), !0;
196
208
  case 2:
197
- a[h].fn.call(a[h].context, o);
198
- break;
209
+ return a.fn.call(a.context, o), !0;
199
210
  case 3:
200
- a[h].fn.call(a[h].context, o, i);
201
- break;
211
+ return a.fn.call(a.context, o, i), !0;
202
212
  case 4:
203
- a[h].fn.call(a[h].context, o, i, E);
204
- break;
205
- default:
206
- if (!P)
207
- for (g = 1, P = new Array(T - 1); g < T; g++)
208
- P[g - 1] = arguments[g];
209
- a[h].fn.apply(a[h].context, P);
213
+ return a.fn.call(a.context, o, i, E), !0;
214
+ case 5:
215
+ return a.fn.call(a.context, o, i, E, d), !0;
216
+ case 6:
217
+ return a.fn.call(a.context, o, i, E, d, f), !0;
210
218
  }
211
- }
212
- return !0;
213
- }, u.prototype.on = function(r, o, i) {
214
- return l(this, r, o, i, !1);
215
- }, u.prototype.once = function(r, o, i) {
216
- return l(this, r, o, i, !0);
217
- }, u.prototype.removeListener = function(r, o, i, E) {
218
- var f = t ? t + r : r;
219
- if (!this._events[f])
219
+ for (h = 1, R = new Array(T - 1); h < T; h++)
220
+ R[h - 1] = arguments[h];
221
+ a.fn.apply(a.context, R);
222
+ } else {
223
+ var x = a.length, g;
224
+ for (h = 0; h < x; h++)
225
+ switch (a[h].once && this.removeListener(r, a[h].fn, void 0, !0), T) {
226
+ case 1:
227
+ a[h].fn.call(a[h].context);
228
+ break;
229
+ case 2:
230
+ a[h].fn.call(a[h].context, o);
231
+ break;
232
+ case 3:
233
+ a[h].fn.call(a[h].context, o, i);
234
+ break;
235
+ case 4:
236
+ a[h].fn.call(a[h].context, o, i, E);
237
+ break;
238
+ default:
239
+ if (!R) for (g = 1, R = new Array(T - 1); g < T; g++)
240
+ R[g - 1] = arguments[g];
241
+ a[h].fn.apply(a[h].context, R);
242
+ }
243
+ }
244
+ return !0;
245
+ }, u.prototype.on = function(r, o, i) {
246
+ return l(this, r, o, i, !1);
247
+ }, u.prototype.once = function(r, o, i) {
248
+ return l(this, r, o, i, !0);
249
+ }, u.prototype.removeListener = function(r, o, i, E) {
250
+ var d = n ? n + r : r;
251
+ if (!this._events[d]) return this;
252
+ if (!o)
253
+ return w(this, d), this;
254
+ var f = this._events[d];
255
+ if (f.fn)
256
+ f.fn === o && (!E || f.once) && (!i || f.context === i) && w(this, d);
257
+ else {
258
+ for (var _ = 0, a = [], T = f.length; _ < T; _++)
259
+ (f[_].fn !== o || E && !f[_].once || i && f[_].context !== i) && a.push(f[_]);
260
+ a.length ? this._events[d] = a.length === 1 ? a[0] : a : w(this, d);
261
+ }
220
262
  return this;
221
- if (!o)
222
- return w(this, f), this;
223
- var p = this._events[f];
224
- if (p.fn)
225
- p.fn === o && (!E || p.once) && (!i || p.context === i) && w(this, f);
226
- else {
227
- for (var _ = 0, a = [], T = p.length; _ < T; _++)
228
- (p[_].fn !== o || E && !p[_].once || i && p[_].context !== i) && a.push(p[_]);
229
- a.length ? this._events[f] = a.length === 1 ? a[0] : a : w(this, f);
230
- }
231
- return this;
232
- }, u.prototype.removeAllListeners = function(r) {
233
- var o;
234
- return r ? (o = t ? t + r : r, this._events[o] && w(this, o)) : (this._events = new s(), this._eventsCount = 0), this;
235
- }, u.prototype.off = u.prototype.removeListener, u.prototype.addListener = u.prototype.on, u.prefixed = t, u.EventEmitter = u, e.exports = u;
236
- })(Q);
237
- class j {
238
- constructor() {
239
- m(this, "subscriptions", {});
240
- }
241
- on(n) {
242
- const { event: t, handler: s } = n;
243
- return this.subscriptions[t] || (this.subscriptions[t] = []), this.subscriptions[t].push(s), n;
263
+ }, u.prototype.removeAllListeners = function(r) {
264
+ var o;
265
+ return r ? (o = n ? n + r : r, this._events[o] && w(this, o)) : (this._events = new s(), this._eventsCount = 0), this;
266
+ }, u.prototype.off = u.prototype.removeListener, u.prototype.addListener = u.prototype.on, u.prefixed = n, u.EventEmitter = u, e.exports = u;
267
+ }(C)), C.exports;
268
+ }
269
+ q();
270
+ class $ {
271
+ subscriptions = {};
272
+ on(t) {
273
+ const { event: n, handler: s } = t;
274
+ return this.subscriptions[n] || (this.subscriptions[n] = []), this.subscriptions[n].push(s), t;
244
275
  }
245
- off(n) {
246
- const { event: t, handler: s } = n;
247
- return this.subscriptions[t] && (this.subscriptions[t] = this.subscriptions[t].filter((d) => d !== s)), n;
276
+ off(t) {
277
+ const { event: n, handler: s } = t;
278
+ return this.subscriptions[n] && (this.subscriptions[n] = this.subscriptions[n].filter((p) => p !== s)), t;
248
279
  }
249
- emit(n, t) {
250
- this.subscriptions[n] && this.subscriptions[n].forEach((s) => s(t));
280
+ emit(t, n) {
281
+ this.subscriptions[t] && this.subscriptions[t].forEach((s) => s(n));
251
282
  }
252
283
  }
253
- var R = /* @__PURE__ */ ((e) => (e.ACTIVATE = "ACTIVATE", e.UPDATE_HEIGHT = "UPDATE_HEIGHT", e.SET_FULL_HEIGHT = "SET_FULL_HEIGHT", e.EMIT_COW_EVENT = "EMIT_COW_EVENT", e.PROVIDER_RPC_REQUEST = "PROVIDER_RPC_REQUEST", e.INTERCEPT_WINDOW_OPEN = "INTERCEPT_WINDOW_OPEN", e))(R || {}), y = /* @__PURE__ */ ((e) => (e.UPDATE_PARAMS = "UPDATE_PARAMS", e.UPDATE_APP_DATA = "UPDATE_APP_DATA", e.PROVIDER_RPC_RESPONSE = "PROVIDER_RPC_RESPONSE", e.PROVIDER_ON_EVENT = "PROVIDER_ON_EVENT", e))(y || {}), C = /* @__PURE__ */ ((e) => (e.SWAP = "swap", e.LIMIT = "limit", e.ADVANCED = "advanced", e.YIELD = "yield", e))(C || {});
254
- const ue = [
284
+ var I = /* @__PURE__ */ function(e) {
285
+ return e.ACTIVATE = "ACTIVATE", e.UPDATE_HEIGHT = "UPDATE_HEIGHT", e.SET_FULL_HEIGHT = "SET_FULL_HEIGHT", e.EMIT_COW_EVENT = "EMIT_COW_EVENT", e.PROVIDER_RPC_REQUEST = "PROVIDER_RPC_REQUEST", e.INTERCEPT_WINDOW_OPEN = "INTERCEPT_WINDOW_OPEN", e;
286
+ }({}), M = /* @__PURE__ */ function(e) {
287
+ return e.UPDATE_PARAMS = "UPDATE_PARAMS", e.UPDATE_APP_DATA = "UPDATE_APP_DATA", e.PROVIDER_RPC_RESPONSE = "PROVIDER_RPC_RESPONSE", e.PROVIDER_ON_EVENT = "PROVIDER_ON_EVENT", e;
288
+ }({}), N = /* @__PURE__ */ function(e) {
289
+ return e.SWAP = "swap", e.LIMIT = "limit", e.ADVANCED = "advanced", e.YIELD = "yield", e;
290
+ }({});
291
+ const fe = [
255
292
  "primary",
256
293
  "background",
257
294
  "paper",
@@ -261,183 +298,202 @@ const ue = [
261
298
  "alert",
262
299
  "info",
263
300
  "success"
264
- ], v = new b("cowSwapWidget");
265
- class $ {
266
- constructor(n, t = []) {
267
- m(this, "eventEmitter", new j());
268
- m(this, "listeners", []);
269
- m(this, "widgetListener");
270
- this.contentWindow = n, this.updateListeners(t), this.widgetListener = v.listenToMessageFromWindow(
271
- this.contentWindow,
272
- R.EMIT_COW_EVENT,
273
- (s) => this.eventEmitter.emit(s.event, s.payload)
274
- );
301
+ ], v = new L("cowSwapWidget");
302
+ class B {
303
+ contentWindow;
304
+ eventEmitter = new $();
305
+ listeners = [];
306
+ widgetListener;
307
+ constructor(t, n = []) {
308
+ this.contentWindow = t, this.updateListeners(n), this.widgetListener = v.listenToMessageFromWindow(this.contentWindow, I.EMIT_COW_EVENT, (s) => this.eventEmitter.emit(s.event, s.payload));
275
309
  }
310
+ // TODO: Add proper return type annotation
311
+ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
276
312
  stopListeningIframe() {
277
313
  v.stopListeningWindowListener(this.contentWindow, this.widgetListener);
278
314
  }
279
- updateListeners(n) {
280
- for (const t of this.listeners)
281
- this.eventEmitter.off(t);
282
- this.listeners = n || [];
283
- for (const t of this.listeners)
284
- this.eventEmitter.on(t);
315
+ updateListeners(t) {
316
+ for (const n of this.listeners)
317
+ this.eventEmitter.off(n);
318
+ this.listeners = t || [];
319
+ for (const n of this.listeners)
320
+ this.eventEmitter.on(n);
285
321
  }
286
322
  }
287
- class B {
288
- constructor(n, t) {
289
- m(this, "forwardSdkMessage");
290
- this.appWindow = n, this.iframeWidow = t, this.forwardSdkMessage = (s) => {
291
- q(s.data) && s.origin !== window.location.origin && (Y(s.data) ? this.appWindow.parent.postMessage(s.data, "*") : z(s.data) && this.iframeWidow.postMessage(s.data, "*"));
323
+ class Y {
324
+ appWindow;
325
+ iframeWidow;
326
+ forwardSdkMessage;
327
+ constructor(t, n) {
328
+ this.appWindow = t, this.iframeWidow = n, this.forwardSdkMessage = (s) => {
329
+ z(s.data) && s.origin !== window.location.origin && (J(s.data) ? this.appWindow.parent.postMessage(s.data, "*") : K(s.data) && this.iframeWidow.postMessage(s.data, "*"));
292
330
  }, this.startListening();
293
331
  }
332
+ // TODO: Add proper return type annotation
333
+ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
294
334
  startListening() {
295
335
  this.appWindow.addEventListener("message", this.forwardSdkMessage);
296
336
  }
337
+ // TODO: Add proper return type annotation
338
+ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
297
339
  stopListening() {
298
340
  this.appWindow.removeEventListener("message", this.forwardSdkMessage);
299
341
  }
300
342
  }
301
- function q(e) {
343
+ function z(e) {
302
344
  return typeof e == "object" && e !== null && "id" in e && typeof e.id == "string";
303
345
  }
304
- function Y(e) {
346
+ function J(e) {
305
347
  return "method" in e && typeof e.method == "string" && "params" in e && "env" in e && typeof e.env == "object" && e.env !== null && "sdkVersion" in e.env;
306
348
  }
307
- function z(e) {
349
+ function K(e) {
308
350
  return "success" in e && typeof e.success == "boolean" && "version" in e && typeof e.version == "string";
309
351
  }
310
- function J(e) {
352
+ function X(e) {
311
353
  return !!(e && typeof e == "object");
312
354
  }
313
355
  const A = "_";
314
- function K(e) {
315
- const n = typeof e.baseUrl == "string" ? e.baseUrl : "https://swap.cow.fi", t = N(e);
316
- return n + "/#" + t + "?" + V(e);
317
- }
318
- function N(e) {
319
- const { chainId: n = 1, sell: t, buy: s, tradeType: d = C.SWAP } = e, l = [(t == null ? void 0 : t.asset) || A, (s == null ? void 0 : s.asset) || A].map(encodeURIComponent).join("/");
320
- return `/${n}/widget/${d}/${l}`;
356
+ function Z(e) {
357
+ const t = typeof e.baseUrl == "string" ? e.baseUrl : "https://swap.cow.fi", n = V(e);
358
+ return t + "/#" + n + "?" + F(e);
321
359
  }
322
360
  function V(e) {
323
- const n = new URLSearchParams();
324
- return Z(X(n, e), e);
361
+ const { chainId: t = 1, sell: n, buy: s, tradeType: p = N.SWAP } = e, l = [
362
+ n?.asset || A,
363
+ s?.asset || A
364
+ ].map(encodeURIComponent).join("/");
365
+ return `/${t}/widget/${p}/${l}`;
366
+ }
367
+ function F(e) {
368
+ const t = new URLSearchParams();
369
+ return ne(te(ee(t, e), e), e);
370
+ }
371
+ function ee(e, t) {
372
+ const { sell: n, buy: s } = t;
373
+ return n?.amount && e.append("sellAmount", n.amount), s?.amount && e.append("buyAmount", s.amount), e;
325
374
  }
326
- function X(e, n) {
327
- const { sell: t, buy: s } = n;
328
- return t != null && t.amount && e.append("sellAmount", t.amount), s != null && s.amount && e.append("buyAmount", s.amount), e;
375
+ function te(e, t) {
376
+ const n = t.theme;
377
+ return n ? (X(n) ? (e.append("palette", encodeURIComponent(JSON.stringify(n))), e.append("theme", n.baseTheme)) : (e.append("palette", "null"), e.append("theme", n)), e) : (e.append("palette", "null"), e);
329
378
  }
330
- function Z(e, n) {
331
- const t = n.theme;
332
- return t ? (J(t) ? (e.append("palette", encodeURIComponent(JSON.stringify(t))), e.append("theme", t.baseTheme)) : (e.append("palette", "null"), e.append("theme", t)), e) : (e.append("palette", "null"), e);
379
+ function ne(e, t) {
380
+ return t.targetChainId && e.append("targetChainId", t.targetChainId.toString()), e;
333
381
  }
334
- const M = "640px", ee = "450px", te = 20;
335
- function fe(e, n) {
336
- const { params: t, provider: s, listeners: d } = n;
337
- let l = s, w = t;
338
- const u = ne(t);
382
+ const U = "640px", se = "450px", re = 20;
383
+ function pe(e, t) {
384
+ const { params: n, provider: s, listeners: p } = t;
385
+ let l = s, w = n;
386
+ const u = oe(n);
339
387
  e.innerHTML = "", e.appendChild(u);
340
388
  const { contentWindow: c } = u;
341
389
  if (!c)
342
390
  throw console.error("Iframe does not contain a window", u), new Error("Iframe does not contain a window!");
343
391
  const r = [];
344
- r.push(se(c, t.appCode)), r.push(...oe(u, t.height, t.maxHeight)), r.push(re());
345
- const o = new $(window, d);
346
- let i = W(c, null, l);
347
- u.addEventListener("load", () => L(c, w, l));
348
- const E = new B(window, c);
392
+ r.push(ie(c, n.appCode)), r.push(...ce(u, n.height, n.maxHeight)), r.push(ae());
393
+ const o = new B(window, p);
394
+ let i = S(c, null, l);
395
+ u.addEventListener("load", () => D(c, w, l));
396
+ const E = new Y(window, c);
349
397
  return {
350
- updateParams: (f) => {
351
- w = f, L(c, w, l);
398
+ updateParams: (d) => {
399
+ w = d, D(c, w, l);
352
400
  },
353
- updateListeners: (f) => o.updateListeners(f),
354
- updateProvider: (f) => {
355
- l = f, i = W(c, i, f);
401
+ updateListeners: (d) => o.updateListeners(d),
402
+ updateProvider: (d) => {
403
+ l = d, i = S(c, i, d);
356
404
  },
357
405
  destroy: () => {
358
- i.disconnect(), o.stopListeningIframe(), r.forEach((f) => window.removeEventListener("message", f)), E.stopListening(), e.removeChild(u);
406
+ i.disconnect(), o.stopListeningIframe(), r.forEach((d) => window.removeEventListener("message", d)), E.stopListening(), e.removeChild(u);
359
407
  }
360
408
  };
361
409
  }
362
- function W(e, n, t) {
363
- n && n.disconnect();
364
- const s = n || new G(e);
365
- return t && s.onConnect(t), s;
410
+ function S(e, t, n) {
411
+ t && t.disconnect();
412
+ const s = t || new G(e);
413
+ return n && s.onConnect(n), s;
366
414
  }
367
- function ne(e) {
368
- const { width: n = ee, height: t = M } = e, s = document.createElement("iframe");
369
- return s.src = K(e), s.width = n, s.height = t, s.style.border = "0", s.allow = "clipboard-read; clipboard-write", s;
415
+ function oe(e) {
416
+ const { width: t = se, height: n = U } = e, s = document.createElement("iframe");
417
+ return s.src = Z(e), s.width = t, s.height = n, s.style.border = "0", s.allow = "clipboard-read; clipboard-write", s;
370
418
  }
371
- function L(e, n, t) {
372
- const s = !!t, d = N(n), l = V(n).toString(), { theme: w, ...u } = n;
373
- v.postMessageToWindow(e, y.UPDATE_PARAMS, {
419
+ function D(e, t, n) {
420
+ const s = !!n, p = V(t), l = F(t).toString(), { theme: w, ...u } = t;
421
+ v.postMessageToWindow(e, M.UPDATE_PARAMS, {
374
422
  urlParams: {
375
- pathname: d,
423
+ pathname: p,
376
424
  search: l
377
425
  },
378
426
  appParams: u,
379
427
  hasProvider: s
380
428
  });
381
429
  }
382
- function se(e, n) {
383
- return v.listenToMessageFromWindow(window, R.ACTIVATE, () => {
384
- v.postMessageToWindow(e, y.UPDATE_APP_DATA, {
385
- metaData: n ? { appCode: n } : void 0
430
+ function ie(e, t) {
431
+ return v.listenToMessageFromWindow(window, I.ACTIVATE, () => {
432
+ v.postMessageToWindow(e, M.UPDATE_APP_DATA, {
433
+ metaData: t ? {
434
+ appCode: t
435
+ } : void 0
386
436
  });
387
437
  });
388
438
  }
389
- function re() {
390
- return v.listenToMessageFromWindow(
391
- window,
392
- R.INTERCEPT_WINDOW_OPEN,
393
- ({ href: e, rel: n, target: t }) => {
394
- const s = e.toString();
395
- if (!s.startsWith("http") && s.match(/^[a-zA-Z0-9]+:\/\//)) {
396
- window.open(s, t, n);
397
- return;
398
- }
439
+ function ae() {
440
+ return v.listenToMessageFromWindow(window, I.INTERCEPT_WINDOW_OPEN, ({ href: e, rel: t, target: n }) => {
441
+ const s = e.toString();
442
+ if (!s.startsWith("http") && s.match(/^[a-zA-Z0-9]+:\/\//)) {
443
+ window.open(s, n, t);
444
+ return;
399
445
  }
400
- );
446
+ });
401
447
  }
402
- function oe(e, n = M, t) {
448
+ function ce(e, t = U, n) {
403
449
  return [
404
- v.listenToMessageFromWindow(window, R.UPDATE_HEIGHT, (s) => {
405
- const d = s.height ? s.height + te : void 0;
406
- e.style.height = d ? `${t ? Math.min(d, t) : d}px` : n;
450
+ v.listenToMessageFromWindow(window, I.UPDATE_HEIGHT, (s) => {
451
+ const p = s.height ? s.height + re : void 0;
452
+ e.style.height = p ? `${n ? Math.min(p, n) : p}px` : t;
407
453
  }),
408
- v.listenToMessageFromWindow(window, R.SET_FULL_HEIGHT, ({ isUpToSmall: s }) => {
409
- e.style.height = s ? n : `${t || document.body.offsetHeight}px`;
454
+ v.listenToMessageFromWindow(window, I.SET_FULL_HEIGHT, ({ isUpToSmall: s }) => {
455
+ e.style.height = s ? t : `${n || document.body.offsetHeight}px`;
410
456
  })
411
457
  ];
412
458
  }
413
- const ie = Object.values(C);
414
- function pe(e, n, t) {
415
- if (S(e)) {
416
- const s = e[t];
417
- return D(s) ? s[n] : s;
418
- }
419
- if (D(e)) {
459
+ const ue = Object.values(N);
460
+ function he(e, t, n) {
461
+ if (O(e)) {
420
462
  const s = e[n];
421
- return S(s) ? s[t] : s;
463
+ return W(s) ? s[t] : s;
464
+ }
465
+ if (W(e)) {
466
+ const s = e[t];
467
+ return O(s) ? s[n] : s;
422
468
  }
423
469
  return e;
424
470
  }
425
- function S(e) {
426
- return typeof e != "object" ? !1 : Object.keys(e).every((n) => ie.includes(n));
471
+ function O(e) {
472
+ return typeof e != "object" ? !1 : Object.keys(e).every((t) => ue.includes(t));
473
+ }
474
+ const de = /^\d+$/;
475
+ function W(e) {
476
+ return typeof e != "object" ? !1 : Object.keys(e).every((t) => de.test(t));
427
477
  }
428
- const ae = /^\d+$/;
429
- function D(e) {
430
- return typeof e != "object" ? !1 : Object.keys(e).every((n) => typeof n == "number" || ae.test(n));
478
+ function le(e) {
479
+ return O(e) ? Object.values(e).flatMap((t) => W(t) ? Object.values(t) : [
480
+ t
481
+ ]) : W(e) ? Object.values(e).flatMap((t) => O(t) ? Object.values(t) : [
482
+ t
483
+ ]) : [
484
+ e
485
+ ];
431
486
  }
432
487
  export {
433
- C as TradeType,
434
- ue as WIDGET_PALETTE_COLORS,
435
- R as WidgetMethodsEmit,
436
- y as WidgetMethodsListen,
437
- fe as createCowSwapWidget,
438
- J as isCowSwapWidgetPalette,
439
- D as isPerNetworkConfig,
440
- S as isPerTradeTypeConfig,
441
- pe as resolveFlexibleConfig,
488
+ N as TradeType,
489
+ fe as WIDGET_PALETTE_COLORS,
490
+ I as WidgetMethodsEmit,
491
+ M as WidgetMethodsListen,
492
+ pe as createCowSwapWidget,
493
+ X as isCowSwapWidgetPalette,
494
+ W as isPerNetworkConfig,
495
+ O as isPerTradeTypeConfig,
496
+ he as resolveFlexibleConfig,
497
+ le as resolveFlexibleConfigValues,
442
498
  v as widgetIframeTransport
443
499
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cowprotocol/widget-lib",
3
- "version": "0.18.0",
3
+ "version": "0.22.0",
4
4
  "type": "commonjs",
5
5
  "description": "CoW Swap Widget Library. Allows you to easily embed a CoW Swap widget on your website.",
6
6
  "main": "index.js",
@@ -21,7 +21,7 @@
21
21
  "widget-lib"
22
22
  ],
23
23
  "dependencies": {
24
- "@cowprotocol/events": "^1.5.0",
25
- "@cowprotocol/iframe-transport": "^1.1.0"
24
+ "@cowprotocol/events": "^2.0.2",
25
+ "@cowprotocol/iframe-transport": "^1.1.1"
26
26
  }
27
27
  }
@@ -0,0 +1,2 @@
1
+ import { FlexibleConfig } from './types';
2
+ export declare function resolveFlexibleConfigValues<T>(config: FlexibleConfig<T>): T[];
package/types.d.ts CHANGED
@@ -41,11 +41,6 @@ export interface EthereumProvider {
41
41
  * @returns A promise that resolves with the response.
42
42
  */
43
43
  request<T>(params: JsonRpcRequest): Promise<T>;
44
- /**
45
- * Requests permission to connect to the Ethereum provider.
46
- * @returns A promise that resolves once permission is granted.
47
- */
48
- enable(): Promise<void>;
49
44
  }
50
45
  export type CowSwapTheme = 'dark' | 'light';
51
46
  /**
@@ -130,23 +125,19 @@ export interface CowSwapWidgetImages {
130
125
  */
131
126
  emptyOrders?: string | null;
132
127
  }
133
- export interface CowSwapWidgetBanners {
134
- /**
135
- * Banner text: "Use Safe web app..."
136
- *
137
- * Conditions for displaying the banner:
138
- * - Safe-like app is connected to CoW Swap via WalletConnect
139
- * - Selling native token via Swap
140
- * - Sell token needs approval
141
- *
142
- * If the flag is set to true, the banner will not be displayed
143
- */
144
- hideSafeWebAppBanner?: boolean;
145
- }
146
128
  export interface CowSwapWidgetContent {
147
129
  feeLabel?: string;
148
130
  feeTooltipMarkdown?: string;
149
131
  }
132
+ export interface SlippageConfig {
133
+ /** Minimum slippage in basis points (e.g., 10 = 0.1%) */
134
+ min?: number;
135
+ /** Maximum slippage in basis points (e.g., 5000 = 50%) - 5000 is max value for dApp */
136
+ max?: number;
137
+ /** Default slippage value in basis points (e.g., 50 = 0.5%) - min <= defaultValue <= max */
138
+ defaultValue?: number;
139
+ }
140
+ export type FlexibleSlippageConfig = FlexibleConfig<SlippageConfig>;
150
141
  export interface CowSwapWidgetParams {
151
142
  /**
152
143
  * The unique identifier of the widget consumer.
@@ -169,6 +160,10 @@ export interface CowSwapWidgetParams {
169
160
  * Network ID.
170
161
  */
171
162
  chainId?: SupportedChainId;
163
+ /**
164
+ * An id of a network to bridge the output token.
165
+ */
166
+ targetChainId?: number;
172
167
  /**
173
168
  * The token lists urls to use in the widget
174
169
  */
@@ -209,6 +204,11 @@ export interface CowSwapWidgetParams {
209
204
  * Please contact https://cowprotocol.typeform.com/to/rONXaxHV
210
205
  */
211
206
  partnerFee?: PartnerFee;
207
+ /**
208
+ * Disables cross-chain swaps (bridging)
209
+ * Defaults to false.
210
+ */
211
+ disableCrossChainSwap?: boolean;
212
212
  /**
213
213
  * Disables showing the confirmation modal you get after posting an order.
214
214
  * Defaults to false.
@@ -266,10 +266,6 @@ export interface CowSwapWidgetParams {
266
266
  * Sounds configuration for the app.
267
267
  */
268
268
  sounds?: CowSwapWidgetSounds;
269
- /**
270
- * Flags to control the display of banners in the widget.
271
- */
272
- banners?: CowSwapWidgetBanners;
273
269
  /**
274
270
  * In case when widget does not support some tokens, you can provide a list of tokens to be used in the widget
275
271
  */
@@ -278,6 +274,10 @@ export interface CowSwapWidgetParams {
278
274
  * Customizable labels and content for the widget.
279
275
  */
280
276
  content?: CowSwapWidgetContent;
277
+ /**
278
+ * Customizable slippage settings for the widget.
279
+ */
280
+ slippage?: FlexibleSlippageConfig;
281
281
  }
282
282
  export interface WidgetMethodsEmitPayloadMap {
283
283
  [WidgetMethodsEmit.ACTIVATE]: void;