@cowprotocol/hook-dapp-lib 1.0.0-RC0 → 1.1.0-RC0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/consts.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ export declare enum HookDappType {
2
+ INTERNAL = "INTERNAL",
3
+ IFRAME = "IFRAME"
4
+ }
5
+ export declare enum HookDappWalletCompatibility {
6
+ EOA = "EOA",
7
+ SMART_CONTRACT = "SMART_CONTRACT"
8
+ }
9
+ export declare const HOOK_DAPP_ID_LENGTH = 64;
@@ -1,15 +1,19 @@
1
1
  import { IframeTransport } from '@cowprotocol/iframe-transport';
2
- import { CowHookCreation, CowHookDetails, HookDappContext } from './types';
2
+ import { CowHookCreation, CowHookDetails, HookDappContext, TokenData } from './types';
3
3
  export declare enum CoWHookDappEvents {
4
4
  ACTIVATE = "ACTIVATE",
5
5
  CONTEXT_UPDATE = "CONTEXT_UPDATE",
6
6
  ADD_HOOK = "ADD_HOOK",
7
- EDIT_HOOK = "EDIT_HOOK"
7
+ EDIT_HOOK = "EDIT_HOOK",
8
+ SET_SELL_TOKEN = "SET_SELL_TOKEN",
9
+ SET_BUY_TOKEN = "SET_BUY_TOKEN"
8
10
  }
9
11
  export interface HookDappEventsPayloadMap {
10
12
  [CoWHookDappEvents.ACTIVATE]: void;
11
13
  [CoWHookDappEvents.CONTEXT_UPDATE]: HookDappContext;
12
14
  [CoWHookDappEvents.ADD_HOOK]: CowHookCreation;
13
15
  [CoWHookDappEvents.EDIT_HOOK]: CowHookDetails;
16
+ [CoWHookDappEvents.SET_SELL_TOKEN]: TokenData;
17
+ [CoWHookDappEvents.SET_BUY_TOKEN]: TokenData;
14
18
  }
15
19
  export declare const hookDappIframeTransport: IframeTransport<HookDappEventsPayloadMap>;
package/index.d.ts CHANGED
@@ -1,3 +1,7 @@
1
1
  export { initCoWHookDapp } from './initCoWHookDapp';
2
2
  export * from './hookDappIframeTransport';
3
3
  export * from './types';
4
+ export * from './consts';
5
+ export * from './utils';
6
+ import * as hookDappsRegistry from './hookDappsRegistry.json';
7
+ export { hookDappsRegistry };
package/index.iife.js CHANGED
@@ -1 +1 @@
1
- var cowSwapWidget=function(v){"use strict";var H=Object.defineProperty;var U=(v,_,T)=>_ in v?H(v,_,{enumerable:!0,configurable:!0,writable:!0,value:T}):v[_]=T;var g=(v,_,T)=>(U(v,typeof _!="symbol"?_+"":_,T),T);class _{constructor(p){this.key=p}postMessageToWindow(p,e,t){const l=typeof t=="object"?t:{},f={key:this.key,method:e,...l};p.postMessage(f,"*")}listenToMessageFromWindow(p,e,t){const l=f=>{!T(f.data)||f.data.key!==this.key||f.data.method!==e||t(f.data)};return p.addEventListener("message",l),l}stopListeningToMessageFromWindow(p,e,t){p.removeEventListener("message",t)}stopListeningWindowListener(p,e){p.removeEventListener("message",e)}}function T(o){return typeof o=="object"&&o!==null&&"key"in o&&"method"in o&&typeof o.key=="string"&&typeof o.method=="string"}var b=(o=>(o.PROVIDER_RPC_REQUEST="PROVIDER_RPC_REQUEST",o.PROVIDER_RPC_RESPONSE="PROVIDER_RPC_RESPONSE",o.PROVIDER_ON_EVENT="PROVIDER_ON_EVENT",o))(b||{});const k=new _("cowSwapIframeRpcProviderTransport");var D={exports:{}};(function(o){var p=Object.prototype.hasOwnProperty,e="~";function t(){}Object.create&&(t.prototype=Object.create(null),new t().__proto__||(e=!1));function l(a,r,s){this.fn=a,this.context=r,this.once=s||!1}function f(a,r,s,i,m){if(typeof s!="function")throw new TypeError("The listener must be a function");var d=new l(s,i||a,m),c=e?e+r:r;return a._events[c]?a._events[c].fn?a._events[c]=[a._events[c],d]:a._events[c].push(d):(a._events[c]=d,a._eventsCount++),a}function E(a,r){--a._eventsCount===0?a._events=new t:delete a._events[r]}function h(){this._events=new t,this._eventsCount=0}h.prototype.eventNames=function(){var r=[],s,i;if(this._eventsCount===0)return r;for(i in s=this._events)p.call(s,i)&&r.push(e?i.slice(1):i);return Object.getOwnPropertySymbols?r.concat(Object.getOwnPropertySymbols(s)):r},h.prototype.listeners=function(r){var s=e?e+r:r,i=this._events[s];if(!i)return[];if(i.fn)return[i.fn];for(var m=0,d=i.length,c=new Array(d);m<d;m++)c[m]=i[m].fn;return c},h.prototype.listenerCount=function(r){var s=e?e+r:r,i=this._events[s];return i?i.fn?1:i.length:0},h.prototype.emit=function(r,s,i,m,d,c){var w=e?e+r:r;if(!this._events[w])return!1;var n=this._events[w],y=arguments.length,O,u;if(n.fn){switch(n.once&&this.removeListener(r,n.fn,void 0,!0),y){case 1:return n.fn.call(n.context),!0;case 2:return n.fn.call(n.context,s),!0;case 3:return n.fn.call(n.context,s,i),!0;case 4:return n.fn.call(n.context,s,i,m),!0;case 5:return n.fn.call(n.context,s,i,m,d),!0;case 6:return n.fn.call(n.context,s,i,m,d,c),!0}for(u=1,O=new Array(y-1);u<y;u++)O[u-1]=arguments[u];n.fn.apply(n.context,O)}else{var W=n.length,R;for(u=0;u<W;u++)switch(n[u].once&&this.removeListener(r,n[u].fn,void 0,!0),y){case 1:n[u].fn.call(n[u].context);break;case 2:n[u].fn.call(n[u].context,s);break;case 3:n[u].fn.call(n[u].context,s,i);break;case 4:n[u].fn.call(n[u].context,s,i,m);break;default:if(!O)for(R=1,O=new Array(y-1);R<y;R++)O[R-1]=arguments[R];n[u].fn.apply(n[u].context,O)}}return!0},h.prototype.on=function(r,s,i){return f(this,r,s,i,!1)},h.prototype.once=function(r,s,i){return f(this,r,s,i,!0)},h.prototype.removeListener=function(r,s,i,m){var d=e?e+r:r;if(!this._events[d])return this;if(!s)return E(this,d),this;var c=this._events[d];if(c.fn)c.fn===s&&(!m||c.once)&&(!i||c.context===i)&&E(this,d);else{for(var w=0,n=[],y=c.length;w<y;w++)(c[w].fn!==s||m&&!c[w].once||i&&c[w].context!==i)&&n.push(c[w]);n.length?this._events[d]=n.length===1?n[0]:n:E(this,d)}return this},h.prototype.removeAllListeners=function(r){var s;return r?(s=e?e+r:r,this._events[s]&&E(this,s)):(this._events=new t,this._eventsCount=0),this},h.prototype.off=h.prototype.removeListener,h.prototype.addListener=h.prototype.on,h.prefixed=e,h.EventEmitter=h,o.exports=h})(D);var A=D.exports;const S=6e5,I="2.0";function N(){return Math.floor(Math.random()*Number.MAX_SAFE_INTEGER)}class M extends Error{constructor(e,t){super(`${e}: ${t}`);g(this,"isRpcError",!0);g(this,"code");g(this,"reason");this.code=e,this.reason=t}}class x extends A.EventEmitter{constructor({timeoutMilliseconds:e=S,eventSource:t=window,eventTarget:l=window.parent}={}){super();g(this,"enabled",null);g(this,"timeoutMilliseconds");g(this,"eventSource");g(this,"eventTarget");g(this,"completers",{});g(this,"handleRpcRequests",({rpcResponse:e})=>{if(e.id===void 0||e.id===null)return;const t=this.completers[""+e.id];t&&("error"in e||"result"in e?t.resolve(e):t.reject(new Error("Response from provider did not have error or result key")),delete this.completers[e.id])});this.timeoutMilliseconds=e,this.eventSource=t,this.eventTarget=l,k.listenToMessageFromWindow(this.eventSource,b.PROVIDER_RPC_RESPONSE,f=>{this.handleRpcRequests(f)}),k.listenToMessageFromWindow(this.eventSource,b.PROVIDER_ON_EVENT,f=>{this.handleOnEvent(f)})}request({method:e,params:t}){return this.send(e,t)}isConnected(){return!0}get isIFrame(){return!0}get currentProvider(){return this}async execute(e,t){const l=N(),f={jsonrpc:I,id:l,method:e,params:t},E=new Promise((h,a)=>this.completers[l]={resolve:h,reject:a});return k.postMessageToWindow(this.eventTarget,b.PROVIDER_RPC_REQUEST,{rpcRequest:f}),setTimeout(()=>{this.completers[l]&&(this.completers[l].reject(new Error("Request timed out. Please try again and submit it faster.")),delete this.completers[l])},this.timeoutMilliseconds),E}async send(e,t){const{method:l,params:f}=typeof e=="string"?{method:e,params:t}:{method:e.method,params:e.params},E=await this.execute(l,f);if("error"in E)throw new M(E.error.code,E.error.message);return E.result}async enable(){if(this.enabled===null){const e=this.enabled=this.send("enable",[]).catch(t=>{throw this.enabled===e&&(this.enabled=null),t})}return this.enabled}async sendAsync(e,t){try{const l=await this.execute(e.method,e.params);t(null,l)}catch(l){t(l,null)}}handleOnEvent(e){const t=e.params;switch(e.event){case"notification":this.emitNotification(t);break;case"connect":this.emitConnect(t);break;case"disconnect":this.emitDisconnect(t);break;case"chainChanged":this.emitChainChanged(t);break;case"accountsChanged":this.emitAccountsChanged(t);break;case"message":this.emitMessage(t);break;case"networkChanged":this.emitNetworkChanged(t);break;case"close":this.emitClose(t);break;default:console.warn(`[WidgetEthereumProvider] Unknown event type: ${e.event}`);break}}emitNotification(e){this.emit("notification",e)}emitConnect(e){this.enabled===null&&(this.enabled=Promise.resolve([])),this.emit("connect",e)}emitClose(e){Array.isArray(e)&&e.length===2?this.emit("close",e[0],e[1]):this.emit("close")}emitDisconnect(e){this.emit("disconnect",e)}emitChainChanged(e){this.emit("chainChanged",e)}emitNetworkChanged(e){this.emit("networkChanged",e)}emitAccountsChanged(e){this.enabled=Promise.resolve(e),this.emit("accountsChanged",e)}emitMessage(e){this.emit("message",e)}}var C=(o=>(o.ACTIVATE="ACTIVATE",o.CONTEXT_UPDATE="CONTEXT_UPDATE",o.ADD_HOOK="ADD_HOOK",o.EDIT_HOOK="EDIT_HOOK",o))(C||{});const P=new _("cowSwapHookDapp");function L({onContext:o}){const p=window.parent,e=new x,t=V();return P.listenToMessageFromWindow(window,C.CONTEXT_UPDATE,o),P.postMessageToWindow(p,C.ACTIVATE,void 0),{actions:t,provider:e}}function V(){return{addHook(o){P.postMessageToWindow(parent,C.ADD_HOOK,o)},editHook(o){P.postMessageToWindow(parent,C.EDIT_HOOK,o)}}}return v.CoWHookDappEvents=C,v.hookDappIframeTransport=P,v.initCoWHookDapp=L,Object.defineProperty(v,Symbol.toStringTag,{value:"Module"}),v}({});
1
+ var cowSwapWidget=function(f){"use strict";var $=Object.defineProperty;var Q=(f,_,O)=>_ in f?$(f,_,{enumerable:!0,configurable:!0,writable:!0,value:O}):f[_]=O;var T=(f,_,O)=>(Q(f,typeof _!="symbol"?_+"":_,O),O);class _{constructor(h){this.key=h}postMessageToWindow(h,e,t){const a=typeof t=="object"?t:{},p={key:this.key,method:e,...a};h.postMessage(p,"*")}listenToMessageFromWindow(h,e,t){const a=p=>{!O(p.data)||p.data.key!==this.key||p.data.method!==e||t(p.data)};return h.addEventListener("message",a),a}stopListeningToMessageFromWindow(h,e,t){h.removeEventListener("message",t)}stopListeningWindowListener(h,e){h.removeEventListener("message",e)}}function O(o){return typeof o=="object"&&o!==null&&"key"in o&&"method"in o&&typeof o.key=="string"&&typeof o.method=="string"}var R=(o=>(o.PROVIDER_RPC_REQUEST="PROVIDER_RPC_REQUEST",o.PROVIDER_RPC_RESPONSE="PROVIDER_RPC_RESPONSE",o.PROVIDER_ON_EVENT="PROVIDER_ON_EVENT",o))(R||{});const A=new _("cowSwapIframeRpcProviderTransport");var N={exports:{}};(function(o){var h=Object.prototype.hasOwnProperty,e="~";function t(){}Object.create&&(t.prototype=Object.create(null),new t().__proto__||(e=!1));function a(c,r,s){this.fn=c,this.context=r,this.once=s||!1}function p(c,r,s,i,w){if(typeof s!="function")throw new TypeError("The listener must be a function");var m=new a(s,i||c,w),l=e?e+r:r;return c._events[l]?c._events[l].fn?c._events[l]=[c._events[l],m]:c._events[l].push(m):(c._events[l]=m,c._eventsCount++),c}function g(c,r){--c._eventsCount===0?c._events=new t:delete c._events[r]}function u(){this._events=new t,this._eventsCount=0}u.prototype.eventNames=function(){var r=[],s,i;if(this._eventsCount===0)return r;for(i in s=this._events)h.call(s,i)&&r.push(e?i.slice(1):i);return Object.getOwnPropertySymbols?r.concat(Object.getOwnPropertySymbols(s)):r},u.prototype.listeners=function(r){var s=e?e+r:r,i=this._events[s];if(!i)return[];if(i.fn)return[i.fn];for(var w=0,m=i.length,l=new Array(m);w<m;w++)l[w]=i[w].fn;return l},u.prototype.listenerCount=function(r){var s=e?e+r:r,i=this._events[s];return i?i.fn?1:i.length:0},u.prototype.emit=function(r,s,i,w,m,l){var v=e?e+r:r;if(!this._events[v])return!1;var n=this._events[v],y=arguments.length,C,d;if(n.fn){switch(n.once&&this.removeListener(r,n.fn,void 0,!0),y){case 1:return n.fn.call(n.context),!0;case 2:return n.fn.call(n.context,s),!0;case 3:return n.fn.call(n.context,s,i),!0;case 4:return n.fn.call(n.context,s,i,w),!0;case 5:return n.fn.call(n.context,s,i,w,m),!0;case 6:return n.fn.call(n.context,s,i,w,m,l),!0}for(d=1,C=new Array(y-1);d<y;d++)C[d-1]=arguments[d];n.fn.apply(n.context,C)}else{var Y=n.length,k;for(d=0;d<Y;d++)switch(n[d].once&&this.removeListener(r,n[d].fn,void 0,!0),y){case 1:n[d].fn.call(n[d].context);break;case 2:n[d].fn.call(n[d].context,s);break;case 3:n[d].fn.call(n[d].context,s,i);break;case 4:n[d].fn.call(n[d].context,s,i,w);break;default:if(!C)for(k=1,C=new Array(y-1);k<y;k++)C[k-1]=arguments[k];n[d].fn.apply(n[d].context,C)}}return!0},u.prototype.on=function(r,s,i){return p(this,r,s,i,!1)},u.prototype.once=function(r,s,i){return p(this,r,s,i,!0)},u.prototype.removeListener=function(r,s,i,w){var m=e?e+r:r;if(!this._events[m])return this;if(!s)return g(this,m),this;var l=this._events[m];if(l.fn)l.fn===s&&(!w||l.once)&&(!i||l.context===i)&&g(this,m);else{for(var v=0,n=[],y=l.length;v<y;v++)(l[v].fn!==s||w&&!l[v].once||i&&l[v].context!==i)&&n.push(l[v]);n.length?this._events[m]=n.length===1?n[0]:n:g(this,m)}return this},u.prototype.removeAllListeners=function(r){var s;return r?(s=e?e+r:r,this._events[s]&&g(this,s)):(this._events=new t,this._eventsCount=0),this},u.prototype.off=u.prototype.removeListener,u.prototype.addListener=u.prototype.on,u.prefixed=e,u.EventEmitter=u,o.exports=u})(N);var K=N.exports;const V=6e5,U="2.0";function x(){return Math.floor(Math.random()*Number.MAX_SAFE_INTEGER)}class F extends Error{constructor(e,t){super(`${e}: ${t}`);T(this,"isRpcError",!0);T(this,"code");T(this,"reason");this.code=e,this.reason=t}}class G extends K.EventEmitter{constructor({timeoutMilliseconds:e=V,eventSource:t=window,eventTarget:a=window.parent}={}){super();T(this,"enabled",null);T(this,"timeoutMilliseconds");T(this,"eventSource");T(this,"eventTarget");T(this,"completers",{});T(this,"handleRpcRequests",({rpcResponse:e})=>{if(e.id===void 0||e.id===null)return;const t=this.completers[""+e.id];t&&("error"in e||"result"in e?t.resolve(e):t.reject(new Error("Response from provider did not have error or result key")),delete this.completers[e.id])});this.timeoutMilliseconds=e,this.eventSource=t,this.eventTarget=a,A.listenToMessageFromWindow(this.eventSource,R.PROVIDER_RPC_RESPONSE,p=>{this.handleRpcRequests(p)}),A.listenToMessageFromWindow(this.eventSource,R.PROVIDER_ON_EVENT,p=>{this.handleOnEvent(p)})}request({method:e,params:t}){return this.send(e,t)}isConnected(){return!0}get isIFrame(){return!0}get currentProvider(){return this}async execute(e,t){const a=x(),p={jsonrpc:U,id:a,method:e,params:t},g=new Promise((u,c)=>this.completers[a]={resolve:u,reject:c});return A.postMessageToWindow(this.eventTarget,R.PROVIDER_RPC_REQUEST,{rpcRequest:p}),setTimeout(()=>{this.completers[a]&&(this.completers[a].reject(new Error("Request timed out. Please try again and submit it faster.")),delete this.completers[a])},this.timeoutMilliseconds),g}async send(e,t){const{method:a,params:p}=typeof e=="string"?{method:e,params:t}:{method:e.method,params:e.params},g=await this.execute(a,p);if("error"in g)throw new F(g.error.code,g.error.message);return g.result}async enable(){if(this.enabled===null){const e=this.enabled=this.send("enable",[]).catch(t=>{throw this.enabled===e&&(this.enabled=null),t})}return this.enabled}async sendAsync(e,t){try{const a=await this.execute(e.method,e.params);t(null,a)}catch(a){t(a,null)}}handleOnEvent(e){const t=e.params;switch(e.event){case"notification":this.emitNotification(t);break;case"connect":this.emitConnect(t);break;case"disconnect":this.emitDisconnect(t);break;case"chainChanged":this.emitChainChanged(t);break;case"accountsChanged":this.emitAccountsChanged(t);break;case"message":this.emitMessage(t);break;case"networkChanged":this.emitNetworkChanged(t);break;case"close":this.emitClose(t);break;default:console.warn(`[WidgetEthereumProvider] Unknown event type: ${e.event}`);break}}emitNotification(e){this.emit("notification",e)}emitConnect(e){this.enabled===null&&(this.enabled=Promise.resolve([])),this.emit("connect",e)}emitClose(e){Array.isArray(e)&&e.length===2?this.emit("close",e[0],e[1]):this.emit("close")}emitDisconnect(e){this.emit("disconnect",e)}emitChainChanged(e){this.emit("chainChanged",e)}emitNetworkChanged(e){this.emit("networkChanged",e)}emitAccountsChanged(e){this.enabled=Promise.resolve(e),this.emit("accountsChanged",e)}emitMessage(e){this.emit("message",e)}}var E=(o=>(o.ACTIVATE="ACTIVATE",o.CONTEXT_UPDATE="CONTEXT_UPDATE",o.ADD_HOOK="ADD_HOOK",o.EDIT_HOOK="EDIT_HOOK",o.SET_SELL_TOKEN="SET_SELL_TOKEN",o.SET_BUY_TOKEN="SET_BUY_TOKEN",o))(E||{});const b=new _("cowSwapHookDapp");function B({onContext:o}){const h=window.parent,e=new G,t=q();return b.listenToMessageFromWindow(window,E.CONTEXT_UPDATE,o),b.postMessageToWindow(h,E.ACTIVATE,void 0),{actions:t,provider:e}}function q(){return{addHook(o){b.postMessageToWindow(parent,E.ADD_HOOK,o)},editHook(o){b.postMessageToWindow(parent,E.EDIT_HOOK,o)},setSellToken(o){b.postMessageToWindow(parent,E.SET_SELL_TOKEN,o)},setBuyToken(o){b.postMessageToWindow(parent,E.SET_BUY_TOKEN,o)}}}var S=(o=>(o.INTERNAL="INTERNAL",o.IFRAME="IFRAME",o))(S||{}),I=(o=>(o.EOA="EOA",o.SMART_CONTRACT="SMART_CONTRACT",o))(I||{});const j=64,D={id:"c768665aa144bcf18c14eea0249b6322050e5daeba046d7e94df743a2e504586",type:"INTERNAL",name:"Build your own hook",descriptionShort:"Call any smart contract with your own parameters",description:"Didn't find a suitable hook? You can always create your own! To do this, you need to specify which smart contract you want to call, the parameters for the call and the gas limit.",image:"https://raw.githubusercontent.com/cowprotocol/cowswap/refs/heads/develop/apps/cowswap-frontend/src/modules/hooksStore/dapps/BuildHookApp/build.png",version:"v0.1.0",website:"https://docs.cow.fi/cow-protocol/tutorials/hook-dapp"},P={id:"ee4a6b1065cda592972b9ff7448ec111f29a566f137fef101ead7fbf8b01dd0b",type:"INTERNAL",name:"Claim GNO from validators",descriptionShort:"Withdraw rewards from your Gnosis validators.",description:"This hook allows you to withdraw rewards from your Gnosis Chain validators through CoW Swap. It automates the process of interacting with the Gnosis Deposit Contract, enabling you to claim any available rewards directly to your specified withdrawal address. The hook monitors your validator's accrued rewards and triggers the claimWithdrawals function when rewards are ready for withdrawal. This simplifies the management of Gnosis validator earnings without requiring ready for withdrawal. This simplifies the management of Gnosis validator earnings without requiring manual contract interaction, providing a smoother and more efficient experience for users.",image:"https://raw.githubusercontent.com/cowprotocol/cowswap/897ce91ca60a6b2d3823e6a002c3bf64c5384afe/libs/assets/src/cow-swap/network-gnosis-chain-logo.svg",version:"v0.1.1",website:"https://www.gnosis.io",conditions:{supportedNetworks:[100],position:"pre"}},L={id:"1db4bacb661a90fb6b475fd5b585acba9745bc373573c65ecc3e8f5bfd5dee1f",type:"INTERNAL",name:"Permit a token",descriptionShort:"Infinite permit an address to spend one token on your behalf.",description:"This hook allows you to permit an address to spend your tokens on your behalf. This is useful for allowing a smart contract to spend your tokens without needing to approve each transaction.",image:"https://raw.githubusercontent.com/cowprotocol/cowswap/refs/heads/develop/apps/cowswap-frontend/src/modules/hooksStore/dapps/PermitHookApp/icon.png",version:"v0.1.0",website:"https://docs.cow.fi/cow-protocol/tutorials/hook-dapp",conditions:{walletCompatibility:["EOA"],supportedNetworks:[11155111]}},M={id:"40ed08569519f3b58c410ba35a8e684612663a7c9b58025e0a9c3a54551fb0ff",type:"INTERNAL",name:"Claim COW Airdrop",descriptionShort:"Retrieve COW tokens before or after a swap.",description:"Effortless Airdrop Claims! The Claim COW Airdrop feature simplifies the process of collecting free COW tokens before or after your swap, seamlessly integrating into the CoW Swap platform. Whether you're claiming new airdrops or exploring CoW on a new network, this tool ensures you get your rewards quickly and easily.",image:"https://raw.githubusercontent.com/cowprotocol/cowswap/897ce91ca60a6b2d3823e6a002c3bf64c5384afe/apps/cowswap-frontend/src/modules/hooksStore/dapps/AirdropHookApp/airdrop.svg",version:"v0.1.0",website:"https://github.com/bleu/cow-airdrop-contract-deployer",conditions:{supportedNetworks:[11155111]}},W=Object.freeze(Object.defineProperty({__proto__:null,BUILD_CUSTOM_HOOK:D,CLAIM_COW_AIRDROP:M,CLAIM_GNO_FROM_VALIDATORS:P,PERMIT_TOKEN:L,default:{BUILD_CUSTOM_HOOK:D,CLAIM_GNO_FROM_VALIDATORS:P,PERMIT_TOKEN:L,CLAIM_COW_AIRDROP:M}},Symbol.toStringTag,{value:"Module"}));function H(o,h){const e=h.reduce((t,a)=>(t[a.id]=a,t),{});return o.filter(t=>!!t.dappId).map(t=>{const a=t,p=e[a.dappId];return{hook:a,dapp:p||null}})}function X(o,h=[]){return H(o,Object.values(W).concat(h))}return f.CoWHookDappEvents=E,f.HOOK_DAPP_ID_LENGTH=j,f.HookDappType=S,f.HookDappWalletCompatibility=I,f.hookDappIframeTransport=b,f.hookDappsRegistry=W,f.initCoWHookDapp=B,f.matchHooksToDapps=H,f.matchHooksToDappsRegistry=X,Object.defineProperty(f,Symbol.toStringTag,{value:"Module"}),f}({});
package/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var D=Object.defineProperty;var A=(r,c,e)=>c in r?D(r,c,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[c]=e;var E=(r,c,e)=>(A(r,typeof c!="symbol"?c+"":c,e),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class R{constructor(c){this.key=c}postMessageToWindow(c,e,t){const h=typeof t=="object"?t:{},d={key:this.key,method:e,...h};c.postMessage(d,"*")}listenToMessageFromWindow(c,e,t){const h=d=>{!I(d.data)||d.data.key!==this.key||d.data.method!==e||t(d.data)};return c.addEventListener("message",h),h}stopListeningToMessageFromWindow(c,e,t){c.removeEventListener("message",t)}stopListeningWindowListener(c,e){c.removeEventListener("message",e)}}function I(r){return typeof r=="object"&&r!==null&&"key"in r&&"method"in r&&typeof r.key=="string"&&typeof r.method=="string"}var C=(r=>(r.PROVIDER_RPC_REQUEST="PROVIDER_RPC_REQUEST",r.PROVIDER_RPC_RESPONSE="PROVIDER_RPC_RESPONSE",r.PROVIDER_ON_EVENT="PROVIDER_ON_EVENT",r))(C||{});const P=new R("cowSwapIframeRpcProviderTransport");var b={exports:{}};(function(r){var c=Object.prototype.hasOwnProperty,e="~";function t(){}Object.create&&(t.prototype=Object.create(null),new t().__proto__||(e=!1));function h(a,s,o){this.fn=a,this.context=s,this.once=o||!1}function d(a,s,o,i,m){if(typeof o!="function")throw new TypeError("The listener must be a function");var p=new h(o,i||a,m),l=e?e+s:s;return a._events[l]?a._events[l].fn?a._events[l]=[a._events[l],p]:a._events[l].push(p):(a._events[l]=p,a._eventsCount++),a}function v(a,s){--a._eventsCount===0?a._events=new t:delete a._events[s]}function f(){this._events=new t,this._eventsCount=0}f.prototype.eventNames=function(){var s=[],o,i;if(this._eventsCount===0)return s;for(i in o=this._events)c.call(o,i)&&s.push(e?i.slice(1):i);return Object.getOwnPropertySymbols?s.concat(Object.getOwnPropertySymbols(o)):s},f.prototype.listeners=function(s){var o=e?e+s:s,i=this._events[o];if(!i)return[];if(i.fn)return[i.fn];for(var m=0,p=i.length,l=new Array(p);m<p;m++)l[m]=i[m].fn;return l},f.prototype.listenerCount=function(s){var o=e?e+s:s,i=this._events[o];return i?i.fn?1:i.length:0},f.prototype.emit=function(s,o,i,m,p,l){var _=e?e+s:s;if(!this._events[_])return!1;var n=this._events[_],g=arguments.length,w,u;if(n.fn){switch(n.once&&this.removeListener(s,n.fn,void 0,!0),g){case 1:return n.fn.call(n.context),!0;case 2:return n.fn.call(n.context,o),!0;case 3:return n.fn.call(n.context,o,i),!0;case 4:return n.fn.call(n.context,o,i,m),!0;case 5:return n.fn.call(n.context,o,i,m,p),!0;case 6:return n.fn.call(n.context,o,i,m,p,l),!0}for(u=1,w=new Array(g-1);u<g;u++)w[u-1]=arguments[u];n.fn.apply(n.context,w)}else{var k=n.length,T;for(u=0;u<k;u++)switch(n[u].once&&this.removeListener(s,n[u].fn,void 0,!0),g){case 1:n[u].fn.call(n[u].context);break;case 2:n[u].fn.call(n[u].context,o);break;case 3:n[u].fn.call(n[u].context,o,i);break;case 4:n[u].fn.call(n[u].context,o,i,m);break;default:if(!w)for(T=1,w=new Array(g-1);T<g;T++)w[T-1]=arguments[T];n[u].fn.apply(n[u].context,w)}}return!0},f.prototype.on=function(s,o,i){return d(this,s,o,i,!1)},f.prototype.once=function(s,o,i){return d(this,s,o,i,!0)},f.prototype.removeListener=function(s,o,i,m){var p=e?e+s:s;if(!this._events[p])return this;if(!o)return v(this,p),this;var l=this._events[p];if(l.fn)l.fn===o&&(!m||l.once)&&(!i||l.context===i)&&v(this,p);else{for(var _=0,n=[],g=l.length;_<g;_++)(l[_].fn!==o||m&&!l[_].once||i&&l[_].context!==i)&&n.push(l[_]);n.length?this._events[p]=n.length===1?n[0]:n:v(this,p)}return this},f.prototype.removeAllListeners=function(s){var o;return s?(o=e?e+s:s,this._events[o]&&v(this,o)):(this._events=new t,this._eventsCount=0),this},f.prototype.off=f.prototype.removeListener,f.prototype.addListener=f.prototype.on,f.prefixed=e,f.EventEmitter=f,r.exports=f})(b);var S=b.exports;const x=6e5,N="2.0";function M(){return Math.floor(Math.random()*Number.MAX_SAFE_INTEGER)}class L extends Error{constructor(e,t){super(`${e}: ${t}`);E(this,"isRpcError",!0);E(this,"code");E(this,"reason");this.code=e,this.reason=t}}class V extends S.EventEmitter{constructor({timeoutMilliseconds:e=x,eventSource:t=window,eventTarget:h=window.parent}={}){super();E(this,"enabled",null);E(this,"timeoutMilliseconds");E(this,"eventSource");E(this,"eventTarget");E(this,"completers",{});E(this,"handleRpcRequests",({rpcResponse:e})=>{if(e.id===void 0||e.id===null)return;const t=this.completers[""+e.id];t&&("error"in e||"result"in e?t.resolve(e):t.reject(new Error("Response from provider did not have error or result key")),delete this.completers[e.id])});this.timeoutMilliseconds=e,this.eventSource=t,this.eventTarget=h,P.listenToMessageFromWindow(this.eventSource,C.PROVIDER_RPC_RESPONSE,d=>{this.handleRpcRequests(d)}),P.listenToMessageFromWindow(this.eventSource,C.PROVIDER_ON_EVENT,d=>{this.handleOnEvent(d)})}request({method:e,params:t}){return this.send(e,t)}isConnected(){return!0}get isIFrame(){return!0}get currentProvider(){return this}async execute(e,t){const h=M(),d={jsonrpc:N,id:h,method:e,params:t},v=new Promise((f,a)=>this.completers[h]={resolve:f,reject:a});return P.postMessageToWindow(this.eventTarget,C.PROVIDER_RPC_REQUEST,{rpcRequest:d}),setTimeout(()=>{this.completers[h]&&(this.completers[h].reject(new Error("Request timed out. Please try again and submit it faster.")),delete this.completers[h])},this.timeoutMilliseconds),v}async send(e,t){const{method:h,params:d}=typeof e=="string"?{method:e,params:t}:{method:e.method,params:e.params},v=await this.execute(h,d);if("error"in v)throw new L(v.error.code,v.error.message);return v.result}async enable(){if(this.enabled===null){const e=this.enabled=this.send("enable",[]).catch(t=>{throw this.enabled===e&&(this.enabled=null),t})}return this.enabled}async sendAsync(e,t){try{const h=await this.execute(e.method,e.params);t(null,h)}catch(h){t(h,null)}}handleOnEvent(e){const t=e.params;switch(e.event){case"notification":this.emitNotification(t);break;case"connect":this.emitConnect(t);break;case"disconnect":this.emitDisconnect(t);break;case"chainChanged":this.emitChainChanged(t);break;case"accountsChanged":this.emitAccountsChanged(t);break;case"message":this.emitMessage(t);break;case"networkChanged":this.emitNetworkChanged(t);break;case"close":this.emitClose(t);break;default:console.warn(`[WidgetEthereumProvider] Unknown event type: ${e.event}`);break}}emitNotification(e){this.emit("notification",e)}emitConnect(e){this.enabled===null&&(this.enabled=Promise.resolve([])),this.emit("connect",e)}emitClose(e){Array.isArray(e)&&e.length===2?this.emit("close",e[0],e[1]):this.emit("close")}emitDisconnect(e){this.emit("disconnect",e)}emitChainChanged(e){this.emit("chainChanged",e)}emitNetworkChanged(e){this.emit("networkChanged",e)}emitAccountsChanged(e){this.enabled=Promise.resolve(e),this.emit("accountsChanged",e)}emitMessage(e){this.emit("message",e)}}var y=(r=>(r.ACTIVATE="ACTIVATE",r.CONTEXT_UPDATE="CONTEXT_UPDATE",r.ADD_HOOK="ADD_HOOK",r.EDIT_HOOK="EDIT_HOOK",r))(y||{});const O=new R("cowSwapHookDapp");function W({onContext:r}){const c=window.parent,e=new V,t=H();return O.listenToMessageFromWindow(window,y.CONTEXT_UPDATE,r),O.postMessageToWindow(c,y.ACTIVATE,void 0),{actions:t,provider:e}}function H(){return{addHook(r){O.postMessageToWindow(parent,y.ADD_HOOK,r)},editHook(r){O.postMessageToWindow(parent,y.EDIT_HOOK,r)}}}exports.CoWHookDappEvents=y;exports.hookDappIframeTransport=O;exports.initCoWHookDapp=W;
1
+ "use strict";var x=Object.defineProperty;var H=(t,a,e)=>a in t?x(t,a,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[a]=e;var g=(t,a,e)=>(H(t,typeof a!="symbol"?a+"":a,e),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class k{constructor(a){this.key=a}postMessageToWindow(a,e,o){const c=typeof o=="object"?o:{},h={key:this.key,method:e,...c};a.postMessage(h,"*")}listenToMessageFromWindow(a,e,o){const c=h=>{!K(h.data)||h.data.key!==this.key||h.data.method!==e||o(h.data)};return a.addEventListener("message",c),c}stopListeningToMessageFromWindow(a,e,o){a.removeEventListener("message",o)}stopListeningWindowListener(a,e){a.removeEventListener("message",e)}}function K(t){return typeof t=="object"&&t!==null&&"key"in t&&"method"in t&&typeof t.key=="string"&&typeof t.method=="string"}var b=(t=>(t.PROVIDER_RPC_REQUEST="PROVIDER_RPC_REQUEST",t.PROVIDER_RPC_RESPONSE="PROVIDER_RPC_RESPONSE",t.PROVIDER_ON_EVENT="PROVIDER_ON_EVENT",t))(b||{});const C=new k("cowSwapIframeRpcProviderTransport");var R={exports:{}};(function(t){var a=Object.prototype.hasOwnProperty,e="~";function o(){}Object.create&&(o.prototype=Object.create(null),new o().__proto__||(e=!1));function c(l,r,s){this.fn=l,this.context=r,this.once=s||!1}function h(l,r,s,i,m){if(typeof s!="function")throw new TypeError("The listener must be a function");var f=new c(s,i||l,m),p=e?e+r:r;return l._events[p]?l._events[p].fn?l._events[p]=[l._events[p],f]:l._events[p].push(f):(l._events[p]=f,l._eventsCount++),l}function w(l,r){--l._eventsCount===0?l._events=new o:delete l._events[r]}function u(){this._events=new o,this._eventsCount=0}u.prototype.eventNames=function(){var r=[],s,i;if(this._eventsCount===0)return r;for(i in s=this._events)a.call(s,i)&&r.push(e?i.slice(1):i);return Object.getOwnPropertySymbols?r.concat(Object.getOwnPropertySymbols(s)):r},u.prototype.listeners=function(r){var s=e?e+r:r,i=this._events[s];if(!i)return[];if(i.fn)return[i.fn];for(var m=0,f=i.length,p=new Array(f);m<f;m++)p[m]=i[m].fn;return p},u.prototype.listenerCount=function(r){var s=e?e+r:r,i=this._events[s];return i?i.fn?1:i.length:0},u.prototype.emit=function(r,s,i,m,f,p){var _=e?e+r:r;if(!this._events[_])return!1;var n=this._events[_],T=arguments.length,E,d;if(n.fn){switch(n.once&&this.removeListener(r,n.fn,void 0,!0),T){case 1:return n.fn.call(n.context),!0;case 2:return n.fn.call(n.context,s),!0;case 3:return n.fn.call(n.context,s,i),!0;case 4:return n.fn.call(n.context,s,i,m),!0;case 5:return n.fn.call(n.context,s,i,m,f),!0;case 6:return n.fn.call(n.context,s,i,m,f,p),!0}for(d=1,E=new Array(T-1);d<T;d++)E[d-1]=arguments[d];n.fn.apply(n.context,E)}else{var W=n.length,O;for(d=0;d<W;d++)switch(n[d].once&&this.removeListener(r,n[d].fn,void 0,!0),T){case 1:n[d].fn.call(n[d].context);break;case 2:n[d].fn.call(n[d].context,s);break;case 3:n[d].fn.call(n[d].context,s,i);break;case 4:n[d].fn.call(n[d].context,s,i,m);break;default:if(!E)for(O=1,E=new Array(T-1);O<T;O++)E[O-1]=arguments[O];n[d].fn.apply(n[d].context,E)}}return!0},u.prototype.on=function(r,s,i){return h(this,r,s,i,!1)},u.prototype.once=function(r,s,i){return h(this,r,s,i,!0)},u.prototype.removeListener=function(r,s,i,m){var f=e?e+r:r;if(!this._events[f])return this;if(!s)return w(this,f),this;var p=this._events[f];if(p.fn)p.fn===s&&(!m||p.once)&&(!i||p.context===i)&&w(this,f);else{for(var _=0,n=[],T=p.length;_<T;_++)(p[_].fn!==s||m&&!p[_].once||i&&p[_].context!==i)&&n.push(p[_]);n.length?this._events[f]=n.length===1?n[0]:n:w(this,f)}return this},u.prototype.removeAllListeners=function(r){var s;return r?(s=e?e+r:r,this._events[s]&&w(this,s)):(this._events=new o,this._eventsCount=0),this},u.prototype.off=u.prototype.removeListener,u.prototype.addListener=u.prototype.on,u.prefixed=e,u.EventEmitter=u,t.exports=u})(R);var V=R.exports;const U=6e5,F="2.0";function G(){return Math.floor(Math.random()*Number.MAX_SAFE_INTEGER)}class B extends Error{constructor(e,o){super(`${e}: ${o}`);g(this,"isRpcError",!0);g(this,"code");g(this,"reason");this.code=e,this.reason=o}}class q extends V.EventEmitter{constructor({timeoutMilliseconds:e=U,eventSource:o=window,eventTarget:c=window.parent}={}){super();g(this,"enabled",null);g(this,"timeoutMilliseconds");g(this,"eventSource");g(this,"eventTarget");g(this,"completers",{});g(this,"handleRpcRequests",({rpcResponse:e})=>{if(e.id===void 0||e.id===null)return;const o=this.completers[""+e.id];o&&("error"in e||"result"in e?o.resolve(e):o.reject(new Error("Response from provider did not have error or result key")),delete this.completers[e.id])});this.timeoutMilliseconds=e,this.eventSource=o,this.eventTarget=c,C.listenToMessageFromWindow(this.eventSource,b.PROVIDER_RPC_RESPONSE,h=>{this.handleRpcRequests(h)}),C.listenToMessageFromWindow(this.eventSource,b.PROVIDER_ON_EVENT,h=>{this.handleOnEvent(h)})}request({method:e,params:o}){return this.send(e,o)}isConnected(){return!0}get isIFrame(){return!0}get currentProvider(){return this}async execute(e,o){const c=G(),h={jsonrpc:F,id:c,method:e,params:o},w=new Promise((u,l)=>this.completers[c]={resolve:u,reject:l});return C.postMessageToWindow(this.eventTarget,b.PROVIDER_RPC_REQUEST,{rpcRequest:h}),setTimeout(()=>{this.completers[c]&&(this.completers[c].reject(new Error("Request timed out. Please try again and submit it faster.")),delete this.completers[c])},this.timeoutMilliseconds),w}async send(e,o){const{method:c,params:h}=typeof e=="string"?{method:e,params:o}:{method:e.method,params:e.params},w=await this.execute(c,h);if("error"in w)throw new B(w.error.code,w.error.message);return w.result}async enable(){if(this.enabled===null){const e=this.enabled=this.send("enable",[]).catch(o=>{throw this.enabled===e&&(this.enabled=null),o})}return this.enabled}async sendAsync(e,o){try{const c=await this.execute(e.method,e.params);o(null,c)}catch(c){o(c,null)}}handleOnEvent(e){const o=e.params;switch(e.event){case"notification":this.emitNotification(o);break;case"connect":this.emitConnect(o);break;case"disconnect":this.emitDisconnect(o);break;case"chainChanged":this.emitChainChanged(o);break;case"accountsChanged":this.emitAccountsChanged(o);break;case"message":this.emitMessage(o);break;case"networkChanged":this.emitNetworkChanged(o);break;case"close":this.emitClose(o);break;default:console.warn(`[WidgetEthereumProvider] Unknown event type: ${e.event}`);break}}emitNotification(e){this.emit("notification",e)}emitConnect(e){this.enabled===null&&(this.enabled=Promise.resolve([])),this.emit("connect",e)}emitClose(e){Array.isArray(e)&&e.length===2?this.emit("close",e[0],e[1]):this.emit("close")}emitDisconnect(e){this.emit("disconnect",e)}emitChainChanged(e){this.emit("chainChanged",e)}emitNetworkChanged(e){this.emit("networkChanged",e)}emitAccountsChanged(e){this.enabled=Promise.resolve(e),this.emit("accountsChanged",e)}emitMessage(e){this.emit("message",e)}}var v=(t=>(t.ACTIVATE="ACTIVATE",t.CONTEXT_UPDATE="CONTEXT_UPDATE",t.ADD_HOOK="ADD_HOOK",t.EDIT_HOOK="EDIT_HOOK",t.SET_SELL_TOKEN="SET_SELL_TOKEN",t.SET_BUY_TOKEN="SET_BUY_TOKEN",t))(v||{});const y=new k("cowSwapHookDapp");function j({onContext:t}){const a=window.parent,e=new q,o=X();return y.listenToMessageFromWindow(window,v.CONTEXT_UPDATE,t),y.postMessageToWindow(a,v.ACTIVATE,void 0),{actions:o,provider:e}}function X(){return{addHook(t){y.postMessageToWindow(parent,v.ADD_HOOK,t)},editHook(t){y.postMessageToWindow(parent,v.EDIT_HOOK,t)},setSellToken(t){y.postMessageToWindow(parent,v.SET_SELL_TOKEN,t)},setBuyToken(t){y.postMessageToWindow(parent,v.SET_BUY_TOKEN,t)}}}var A=(t=>(t.INTERNAL="INTERNAL",t.IFRAME="IFRAME",t))(A||{}),N=(t=>(t.EOA="EOA",t.SMART_CONTRACT="SMART_CONTRACT",t))(N||{});const Y=64,S={id:"c768665aa144bcf18c14eea0249b6322050e5daeba046d7e94df743a2e504586",type:"INTERNAL",name:"Build your own hook",descriptionShort:"Call any smart contract with your own parameters",description:"Didn't find a suitable hook? You can always create your own! To do this, you need to specify which smart contract you want to call, the parameters for the call and the gas limit.",image:"https://raw.githubusercontent.com/cowprotocol/cowswap/refs/heads/develop/apps/cowswap-frontend/src/modules/hooksStore/dapps/BuildHookApp/build.png",version:"v0.1.0",website:"https://docs.cow.fi/cow-protocol/tutorials/hook-dapp"},I={id:"ee4a6b1065cda592972b9ff7448ec111f29a566f137fef101ead7fbf8b01dd0b",type:"INTERNAL",name:"Claim GNO from validators",descriptionShort:"Withdraw rewards from your Gnosis validators.",description:"This hook allows you to withdraw rewards from your Gnosis Chain validators through CoW Swap. It automates the process of interacting with the Gnosis Deposit Contract, enabling you to claim any available rewards directly to your specified withdrawal address. The hook monitors your validator's accrued rewards and triggers the claimWithdrawals function when rewards are ready for withdrawal. This simplifies the management of Gnosis validator earnings without requiring ready for withdrawal. This simplifies the management of Gnosis validator earnings without requiring manual contract interaction, providing a smoother and more efficient experience for users.",image:"https://raw.githubusercontent.com/cowprotocol/cowswap/897ce91ca60a6b2d3823e6a002c3bf64c5384afe/libs/assets/src/cow-swap/network-gnosis-chain-logo.svg",version:"v0.1.1",website:"https://www.gnosis.io",conditions:{supportedNetworks:[100],position:"pre"}},D={id:"1db4bacb661a90fb6b475fd5b585acba9745bc373573c65ecc3e8f5bfd5dee1f",type:"INTERNAL",name:"Permit a token",descriptionShort:"Infinite permit an address to spend one token on your behalf.",description:"This hook allows you to permit an address to spend your tokens on your behalf. This is useful for allowing a smart contract to spend your tokens without needing to approve each transaction.",image:"https://raw.githubusercontent.com/cowprotocol/cowswap/refs/heads/develop/apps/cowswap-frontend/src/modules/hooksStore/dapps/PermitHookApp/icon.png",version:"v0.1.0",website:"https://docs.cow.fi/cow-protocol/tutorials/hook-dapp",conditions:{walletCompatibility:["EOA"],supportedNetworks:[11155111]}},P={id:"40ed08569519f3b58c410ba35a8e684612663a7c9b58025e0a9c3a54551fb0ff",type:"INTERNAL",name:"Claim COW Airdrop",descriptionShort:"Retrieve COW tokens before or after a swap.",description:"Effortless Airdrop Claims! The Claim COW Airdrop feature simplifies the process of collecting free COW tokens before or after your swap, seamlessly integrating into the CoW Swap platform. Whether you're claiming new airdrops or exploring CoW on a new network, this tool ensures you get your rewards quickly and easily.",image:"https://raw.githubusercontent.com/cowprotocol/cowswap/897ce91ca60a6b2d3823e6a002c3bf64c5384afe/apps/cowswap-frontend/src/modules/hooksStore/dapps/AirdropHookApp/airdrop.svg",version:"v0.1.0",website:"https://github.com/bleu/cow-airdrop-contract-deployer",conditions:{supportedNetworks:[11155111]}},$={BUILD_CUSTOM_HOOK:S,CLAIM_GNO_FROM_VALIDATORS:I,PERMIT_TOKEN:D,CLAIM_COW_AIRDROP:P},L=Object.freeze(Object.defineProperty({__proto__:null,BUILD_CUSTOM_HOOK:S,CLAIM_COW_AIRDROP:P,CLAIM_GNO_FROM_VALIDATORS:I,PERMIT_TOKEN:D,default:$},Symbol.toStringTag,{value:"Module"}));function M(t,a){const e=a.reduce((o,c)=>(o[c.id]=c,o),{});return t.filter(o=>!!o.dappId).map(o=>{const c=o,h=e[c.dappId];return{hook:c,dapp:h||null}})}function Q(t,a=[]){return M(t,Object.values(L).concat(a))}exports.CoWHookDappEvents=v;exports.HOOK_DAPP_ID_LENGTH=Y;exports.HookDappType=A;exports.HookDappWalletCompatibility=N;exports.hookDappIframeTransport=y;exports.hookDappsRegistry=L;exports.initCoWHookDapp=j;exports.matchHooksToDapps=M;exports.matchHooksToDappsRegistry=Q;
package/index.mjs CHANGED
@@ -1,204 +1,204 @@
1
- var D = Object.defineProperty;
2
- var A = (s, c, e) => c in s ? D(s, c, { enumerable: !0, configurable: !0, writable: !0, value: e }) : s[c] = e;
3
- var E = (s, c, e) => (A(s, typeof c != "symbol" ? c + "" : c, e), e);
1
+ var L = Object.defineProperty;
2
+ var M = (t, a, e) => a in t ? L(t, a, { enumerable: !0, configurable: !0, writable: !0, value: e }) : t[a] = e;
3
+ var g = (t, a, e) => (M(t, typeof a != "symbol" ? a + "" : a, e), e);
4
4
  class R {
5
- constructor(c) {
6
- this.key = c;
5
+ constructor(a) {
6
+ this.key = a;
7
7
  }
8
- postMessageToWindow(c, e, t) {
9
- const h = typeof t == "object" ? t : {}, d = {
8
+ postMessageToWindow(a, e, o) {
9
+ const c = typeof o == "object" ? o : {}, u = {
10
10
  key: this.key,
11
11
  method: e,
12
- ...h
12
+ ...c
13
13
  };
14
- c.postMessage(
15
- d,
14
+ a.postMessage(
15
+ u,
16
16
  "*"
17
17
  // TODO: Change to CoW specific origin in production. https://github.com/cowprotocol/cowswap/issues/3828
18
18
  );
19
19
  }
20
- listenToMessageFromWindow(c, e, t) {
21
- const h = (d) => {
22
- !x(d.data) || d.data.key !== this.key || d.data.method !== e || t(d.data);
20
+ listenToMessageFromWindow(a, e, o) {
21
+ const c = (u) => {
22
+ !D(u.data) || u.data.key !== this.key || u.data.method !== e || o(u.data);
23
23
  };
24
- return c.addEventListener("message", h), h;
24
+ return a.addEventListener("message", c), c;
25
25
  }
26
- stopListeningToMessageFromWindow(c, e, t) {
27
- c.removeEventListener("message", t);
26
+ stopListeningToMessageFromWindow(a, e, o) {
27
+ a.removeEventListener("message", o);
28
28
  }
29
- stopListeningWindowListener(c, e) {
30
- c.removeEventListener("message", e);
29
+ stopListeningWindowListener(a, e) {
30
+ a.removeEventListener("message", e);
31
31
  }
32
32
  }
33
- function x(s) {
34
- return typeof s == "object" && s !== null && "key" in s && "method" in s && typeof s.key == "string" && typeof s.method == "string";
33
+ function D(t) {
34
+ return typeof t == "object" && t !== null && "key" in t && "method" in t && typeof t.key == "string" && typeof t.method == "string";
35
35
  }
36
- var O = /* @__PURE__ */ ((s) => (s.PROVIDER_RPC_REQUEST = "PROVIDER_RPC_REQUEST", s.PROVIDER_RPC_RESPONSE = "PROVIDER_RPC_RESPONSE", s.PROVIDER_ON_EVENT = "PROVIDER_ON_EVENT", s))(O || {});
37
- const P = new R(
36
+ var b = /* @__PURE__ */ ((t) => (t.PROVIDER_RPC_REQUEST = "PROVIDER_RPC_REQUEST", t.PROVIDER_RPC_RESPONSE = "PROVIDER_RPC_RESPONSE", t.PROVIDER_ON_EVENT = "PROVIDER_ON_EVENT", t))(b || {});
37
+ const C = new R(
38
38
  "cowSwapIframeRpcProviderTransport"
39
39
  );
40
- var b = { exports: {} };
41
- (function(s) {
42
- var c = Object.prototype.hasOwnProperty, e = "~";
43
- function t() {
40
+ var A = { exports: {} };
41
+ (function(t) {
42
+ var a = Object.prototype.hasOwnProperty, e = "~";
43
+ function o() {
44
44
  }
45
- Object.create && (t.prototype = /* @__PURE__ */ Object.create(null), new t().__proto__ || (e = !1));
46
- function h(a, r, i) {
47
- this.fn = a, this.context = r, this.once = i || !1;
45
+ Object.create && (o.prototype = /* @__PURE__ */ Object.create(null), new o().__proto__ || (e = !1));
46
+ function c(l, r, s) {
47
+ this.fn = l, this.context = r, this.once = s || !1;
48
48
  }
49
- function d(a, r, i, o, m) {
50
- if (typeof i != "function")
49
+ function u(l, r, s, i, m) {
50
+ if (typeof s != "function")
51
51
  throw new TypeError("The listener must be a function");
52
- var p = new h(i, o || a, m), l = e ? e + r : r;
53
- return a._events[l] ? a._events[l].fn ? a._events[l] = [a._events[l], p] : a._events[l].push(p) : (a._events[l] = p, a._eventsCount++), a;
52
+ var f = new c(s, i || l, m), d = e ? e + r : r;
53
+ return l._events[d] ? l._events[d].fn ? l._events[d] = [l._events[d], f] : l._events[d].push(f) : (l._events[d] = f, l._eventsCount++), l;
54
54
  }
55
- function v(a, r) {
56
- --a._eventsCount === 0 ? a._events = new t() : delete a._events[r];
55
+ function w(l, r) {
56
+ --l._eventsCount === 0 ? l._events = new o() : delete l._events[r];
57
57
  }
58
- function f() {
59
- this._events = new t(), this._eventsCount = 0;
58
+ function p() {
59
+ this._events = new o(), this._eventsCount = 0;
60
60
  }
61
- f.prototype.eventNames = function() {
62
- var r = [], i, o;
61
+ p.prototype.eventNames = function() {
62
+ var r = [], s, i;
63
63
  if (this._eventsCount === 0)
64
64
  return r;
65
- for (o in i = this._events)
66
- c.call(i, o) && r.push(e ? o.slice(1) : o);
67
- return Object.getOwnPropertySymbols ? r.concat(Object.getOwnPropertySymbols(i)) : r;
68
- }, f.prototype.listeners = function(r) {
69
- var i = e ? e + r : r, o = this._events[i];
70
- if (!o)
65
+ for (i in s = this._events)
66
+ a.call(s, i) && r.push(e ? i.slice(1) : i);
67
+ return Object.getOwnPropertySymbols ? r.concat(Object.getOwnPropertySymbols(s)) : r;
68
+ }, p.prototype.listeners = function(r) {
69
+ var s = e ? e + r : r, i = this._events[s];
70
+ if (!i)
71
71
  return [];
72
- if (o.fn)
73
- return [o.fn];
74
- for (var m = 0, p = o.length, l = new Array(p); m < p; m++)
75
- l[m] = o[m].fn;
76
- return l;
77
- }, f.prototype.listenerCount = function(r) {
78
- var i = e ? e + r : r, o = this._events[i];
79
- return o ? o.fn ? 1 : o.length : 0;
80
- }, f.prototype.emit = function(r, i, o, m, p, l) {
72
+ if (i.fn)
73
+ return [i.fn];
74
+ for (var m = 0, f = i.length, d = new Array(f); m < f; m++)
75
+ d[m] = i[m].fn;
76
+ return d;
77
+ }, p.prototype.listenerCount = function(r) {
78
+ var s = e ? e + r : r, i = this._events[s];
79
+ return i ? i.fn ? 1 : i.length : 0;
80
+ }, p.prototype.emit = function(r, s, i, m, f, d) {
81
81
  var _ = e ? e + r : r;
82
82
  if (!this._events[_])
83
83
  return !1;
84
- var n = this._events[_], g = arguments.length, w, u;
84
+ var n = this._events[_], v = arguments.length, E, h;
85
85
  if (n.fn) {
86
- switch (n.once && this.removeListener(r, n.fn, void 0, !0), g) {
86
+ switch (n.once && this.removeListener(r, n.fn, void 0, !0), v) {
87
87
  case 1:
88
88
  return n.fn.call(n.context), !0;
89
89
  case 2:
90
- return n.fn.call(n.context, i), !0;
90
+ return n.fn.call(n.context, s), !0;
91
91
  case 3:
92
- return n.fn.call(n.context, i, o), !0;
92
+ return n.fn.call(n.context, s, i), !0;
93
93
  case 4:
94
- return n.fn.call(n.context, i, o, m), !0;
94
+ return n.fn.call(n.context, s, i, m), !0;
95
95
  case 5:
96
- return n.fn.call(n.context, i, o, m, p), !0;
96
+ return n.fn.call(n.context, s, i, m, f), !0;
97
97
  case 6:
98
- return n.fn.call(n.context, i, o, m, p, l), !0;
98
+ return n.fn.call(n.context, s, i, m, f, d), !0;
99
99
  }
100
- for (u = 1, w = new Array(g - 1); u < g; u++)
101
- w[u - 1] = arguments[u];
102
- n.fn.apply(n.context, w);
100
+ for (h = 1, E = new Array(v - 1); h < v; h++)
101
+ E[h - 1] = arguments[h];
102
+ n.fn.apply(n.context, E);
103
103
  } else {
104
- var k = n.length, y;
105
- for (u = 0; u < k; u++)
106
- switch (n[u].once && this.removeListener(r, n[u].fn, void 0, !0), g) {
104
+ var P = n.length, O;
105
+ for (h = 0; h < P; h++)
106
+ switch (n[h].once && this.removeListener(r, n[h].fn, void 0, !0), v) {
107
107
  case 1:
108
- n[u].fn.call(n[u].context);
108
+ n[h].fn.call(n[h].context);
109
109
  break;
110
110
  case 2:
111
- n[u].fn.call(n[u].context, i);
111
+ n[h].fn.call(n[h].context, s);
112
112
  break;
113
113
  case 3:
114
- n[u].fn.call(n[u].context, i, o);
114
+ n[h].fn.call(n[h].context, s, i);
115
115
  break;
116
116
  case 4:
117
- n[u].fn.call(n[u].context, i, o, m);
117
+ n[h].fn.call(n[h].context, s, i, m);
118
118
  break;
119
119
  default:
120
- if (!w)
121
- for (y = 1, w = new Array(g - 1); y < g; y++)
122
- w[y - 1] = arguments[y];
123
- n[u].fn.apply(n[u].context, w);
120
+ if (!E)
121
+ for (O = 1, E = new Array(v - 1); O < v; O++)
122
+ E[O - 1] = arguments[O];
123
+ n[h].fn.apply(n[h].context, E);
124
124
  }
125
125
  }
126
126
  return !0;
127
- }, f.prototype.on = function(r, i, o) {
128
- return d(this, r, i, o, !1);
129
- }, f.prototype.once = function(r, i, o) {
130
- return d(this, r, i, o, !0);
131
- }, f.prototype.removeListener = function(r, i, o, m) {
132
- var p = e ? e + r : r;
133
- if (!this._events[p])
127
+ }, p.prototype.on = function(r, s, i) {
128
+ return u(this, r, s, i, !1);
129
+ }, p.prototype.once = function(r, s, i) {
130
+ return u(this, r, s, i, !0);
131
+ }, p.prototype.removeListener = function(r, s, i, m) {
132
+ var f = e ? e + r : r;
133
+ if (!this._events[f])
134
134
  return this;
135
- if (!i)
136
- return v(this, p), this;
137
- var l = this._events[p];
138
- if (l.fn)
139
- l.fn === i && (!m || l.once) && (!o || l.context === o) && v(this, p);
135
+ if (!s)
136
+ return w(this, f), this;
137
+ var d = this._events[f];
138
+ if (d.fn)
139
+ d.fn === s && (!m || d.once) && (!i || d.context === i) && w(this, f);
140
140
  else {
141
- for (var _ = 0, n = [], g = l.length; _ < g; _++)
142
- (l[_].fn !== i || m && !l[_].once || o && l[_].context !== o) && n.push(l[_]);
143
- n.length ? this._events[p] = n.length === 1 ? n[0] : n : v(this, p);
141
+ for (var _ = 0, n = [], v = d.length; _ < v; _++)
142
+ (d[_].fn !== s || m && !d[_].once || i && d[_].context !== i) && n.push(d[_]);
143
+ n.length ? this._events[f] = n.length === 1 ? n[0] : n : w(this, f);
144
144
  }
145
145
  return this;
146
- }, f.prototype.removeAllListeners = function(r) {
147
- var i;
148
- return r ? (i = e ? e + r : r, this._events[i] && v(this, i)) : (this._events = new t(), this._eventsCount = 0), this;
149
- }, f.prototype.off = f.prototype.removeListener, f.prototype.addListener = f.prototype.on, f.prefixed = e, f.EventEmitter = f, s.exports = f;
150
- })(b);
151
- var I = b.exports;
152
- const N = 6e5, S = "2.0";
153
- function M() {
146
+ }, p.prototype.removeAllListeners = function(r) {
147
+ var s;
148
+ return r ? (s = e ? e + r : r, this._events[s] && w(this, s)) : (this._events = new o(), this._eventsCount = 0), this;
149
+ }, p.prototype.off = p.prototype.removeListener, p.prototype.addListener = p.prototype.on, p.prefixed = e, p.EventEmitter = p, t.exports = p;
150
+ })(A);
151
+ var x = A.exports;
152
+ const W = 6e5, V = "2.0";
153
+ function K() {
154
154
  return Math.floor(Math.random() * Number.MAX_SAFE_INTEGER);
155
155
  }
156
- class L extends Error {
157
- constructor(e, t) {
158
- super(`${e}: ${t}`);
159
- E(this, "isRpcError", !0);
160
- E(this, "code");
161
- E(this, "reason");
162
- this.code = e, this.reason = t;
156
+ class U extends Error {
157
+ constructor(e, o) {
158
+ super(`${e}: ${o}`);
159
+ g(this, "isRpcError", !0);
160
+ g(this, "code");
161
+ g(this, "reason");
162
+ this.code = e, this.reason = o;
163
163
  }
164
164
  }
165
- class V extends I.EventEmitter {
165
+ class H extends x.EventEmitter {
166
166
  constructor({
167
- timeoutMilliseconds: e = N,
168
- eventSource: t = window,
169
- eventTarget: h = window.parent
167
+ timeoutMilliseconds: e = W,
168
+ eventSource: o = window,
169
+ eventTarget: c = window.parent
170
170
  } = {}) {
171
171
  super();
172
- E(this, "enabled", null);
173
- E(this, "timeoutMilliseconds");
174
- E(this, "eventSource");
175
- E(this, "eventTarget");
176
- E(this, "completers", {});
172
+ g(this, "enabled", null);
173
+ g(this, "timeoutMilliseconds");
174
+ g(this, "eventSource");
175
+ g(this, "eventTarget");
176
+ g(this, "completers", {});
177
177
  /**
178
178
  * Handle a Rpc Request
179
179
  */
180
- E(this, "handleRpcRequests", ({ rpcResponse: e }) => {
180
+ g(this, "handleRpcRequests", ({ rpcResponse: e }) => {
181
181
  if (e.id === void 0 || e.id === null)
182
182
  return;
183
- const t = this.completers["" + e.id];
184
- t && ("error" in e || "result" in e ? t.resolve(e) : t.reject(new Error("Response from provider did not have error or result key")), delete this.completers[e.id]);
183
+ const o = this.completers["" + e.id];
184
+ o && ("error" in e || "result" in e ? o.resolve(e) : o.reject(new Error("Response from provider did not have error or result key")), delete this.completers[e.id]);
185
185
  });
186
- this.timeoutMilliseconds = e, this.eventSource = t, this.eventTarget = h, P.listenToMessageFromWindow(
186
+ this.timeoutMilliseconds = e, this.eventSource = o, this.eventTarget = c, C.listenToMessageFromWindow(
187
187
  this.eventSource,
188
- O.PROVIDER_RPC_RESPONSE,
189
- (d) => {
190
- this.handleRpcRequests(d);
188
+ b.PROVIDER_RPC_RESPONSE,
189
+ (u) => {
190
+ this.handleRpcRequests(u);
191
191
  }
192
- ), P.listenToMessageFromWindow(
192
+ ), C.listenToMessageFromWindow(
193
193
  this.eventSource,
194
- O.PROVIDER_ON_EVENT,
195
- (d) => {
196
- this.handleOnEvent(d);
194
+ b.PROVIDER_ON_EVENT,
195
+ (u) => {
196
+ this.handleOnEvent(u);
197
197
  }
198
198
  );
199
199
  }
200
- request({ method: e, params: t }) {
201
- return this.send(e, t);
200
+ request({ method: e, params: o }) {
201
+ return this.send(e, o);
202
202
  }
203
203
  isConnected() {
204
204
  return !0;
@@ -220,34 +220,34 @@ class V extends I.EventEmitter {
220
220
  * @param method method to execute
221
221
  * @param params params to pass the method
222
222
  */
223
- async execute(e, t) {
224
- const h = M(), d = {
225
- jsonrpc: S,
226
- id: h,
223
+ async execute(e, o) {
224
+ const c = K(), u = {
225
+ jsonrpc: V,
226
+ id: c,
227
227
  method: e,
228
- params: t
229
- }, v = new Promise(
230
- (f, a) => this.completers[h] = { resolve: f, reject: a }
228
+ params: o
229
+ }, w = new Promise(
230
+ (p, l) => this.completers[c] = { resolve: p, reject: l }
231
231
  );
232
- return P.postMessageToWindow(this.eventTarget, O.PROVIDER_RPC_REQUEST, {
233
- rpcRequest: d
232
+ return C.postMessageToWindow(this.eventTarget, b.PROVIDER_RPC_REQUEST, {
233
+ rpcRequest: u
234
234
  }), setTimeout(() => {
235
- this.completers[h] && (this.completers[h].reject(new Error("Request timed out. Please try again and submit it faster.")), delete this.completers[h]);
236
- }, this.timeoutMilliseconds), v;
235
+ this.completers[c] && (this.completers[c].reject(new Error("Request timed out. Please try again and submit it faster.")), delete this.completers[c]);
236
+ }, this.timeoutMilliseconds), w;
237
237
  }
238
- async send(e, t) {
239
- const { method: h, params: d } = typeof e == "string" ? { method: e, params: t } : { method: e.method, params: e.params }, v = await this.execute(h, d);
240
- if ("error" in v)
241
- throw new L(v.error.code, v.error.message);
242
- return v.result;
238
+ async send(e, o) {
239
+ const { method: c, params: u } = typeof e == "string" ? { method: e, params: o } : { method: e.method, params: e.params }, w = await this.execute(c, u);
240
+ if ("error" in w)
241
+ throw new U(w.error.code, w.error.message);
242
+ return w.result;
243
243
  }
244
244
  /**
245
245
  * Request the parent window to enable access to the user's web3 provider. Return accounts list immediately if already enabled.
246
246
  */
247
247
  async enable() {
248
248
  if (this.enabled === null) {
249
- const e = this.enabled = this.send("enable", []).catch((t) => {
250
- throw this.enabled === e && (this.enabled = null), t;
249
+ const e = this.enabled = this.send("enable", []).catch((o) => {
250
+ throw this.enabled === e && (this.enabled = null), o;
251
251
  });
252
252
  }
253
253
  return this.enabled;
@@ -257,40 +257,40 @@ class V extends I.EventEmitter {
257
257
  * @param payload payload to send to the provider
258
258
  * @param callback callback to be called when the provider resolves
259
259
  */
260
- async sendAsync(e, t) {
260
+ async sendAsync(e, o) {
261
261
  try {
262
- const h = await this.execute(e.method, e.params);
263
- t(null, h);
264
- } catch (h) {
265
- t(h, null);
262
+ const c = await this.execute(e.method, e.params);
263
+ o(null, c);
264
+ } catch (c) {
265
+ o(c, null);
266
266
  }
267
267
  }
268
268
  handleOnEvent(e) {
269
- const t = e.params;
269
+ const o = e.params;
270
270
  switch (e.event) {
271
271
  case "notification":
272
- this.emitNotification(t);
272
+ this.emitNotification(o);
273
273
  break;
274
274
  case "connect":
275
- this.emitConnect(t);
275
+ this.emitConnect(o);
276
276
  break;
277
277
  case "disconnect":
278
- this.emitDisconnect(t);
278
+ this.emitDisconnect(o);
279
279
  break;
280
280
  case "chainChanged":
281
- this.emitChainChanged(t);
281
+ this.emitChainChanged(o);
282
282
  break;
283
283
  case "accountsChanged":
284
- this.emitAccountsChanged(t);
284
+ this.emitAccountsChanged(o);
285
285
  break;
286
286
  case "message":
287
- this.emitMessage(t);
287
+ this.emitMessage(o);
288
288
  break;
289
289
  case "networkChanged":
290
- this.emitNetworkChanged(t);
290
+ this.emitNetworkChanged(o);
291
291
  break;
292
292
  case "close":
293
- this.emitClose(t);
293
+ this.emitClose(o);
294
294
  break;
295
295
  default:
296
296
  console.warn(`[WidgetEthereumProvider] Unknown event type: ${e.event}`);
@@ -328,24 +328,121 @@ class V extends I.EventEmitter {
328
328
  this.emit("message", e);
329
329
  }
330
330
  }
331
- var T = /* @__PURE__ */ ((s) => (s.ACTIVATE = "ACTIVATE", s.CONTEXT_UPDATE = "CONTEXT_UPDATE", s.ADD_HOOK = "ADD_HOOK", s.EDIT_HOOK = "EDIT_HOOK", s))(T || {});
332
- const C = new R("cowSwapHookDapp");
333
- function F({ onContext: s }) {
334
- const c = window.parent, e = new V(), t = W();
335
- return C.listenToMessageFromWindow(window, T.CONTEXT_UPDATE, s), C.postMessageToWindow(c, T.ACTIVATE, void 0), { actions: t, provider: e };
331
+ var T = /* @__PURE__ */ ((t) => (t.ACTIVATE = "ACTIVATE", t.CONTEXT_UPDATE = "CONTEXT_UPDATE", t.ADD_HOOK = "ADD_HOOK", t.EDIT_HOOK = "EDIT_HOOK", t.SET_SELL_TOKEN = "SET_SELL_TOKEN", t.SET_BUY_TOKEN = "SET_BUY_TOKEN", t))(T || {});
332
+ const y = new R("cowSwapHookDapp");
333
+ function $({ onContext: t }) {
334
+ const a = window.parent, e = new H(), o = F();
335
+ return y.listenToMessageFromWindow(window, T.CONTEXT_UPDATE, t), y.postMessageToWindow(a, T.ACTIVATE, void 0), { actions: o, provider: e };
336
336
  }
337
- function W() {
337
+ function F() {
338
338
  return {
339
- addHook(s) {
340
- C.postMessageToWindow(parent, T.ADD_HOOK, s);
339
+ addHook(t) {
340
+ y.postMessageToWindow(parent, T.ADD_HOOK, t);
341
+ },
342
+ editHook(t) {
343
+ y.postMessageToWindow(parent, T.EDIT_HOOK, t);
341
344
  },
342
- editHook(s) {
343
- C.postMessageToWindow(parent, T.EDIT_HOOK, s);
345
+ setSellToken(t) {
346
+ y.postMessageToWindow(parent, T.SET_SELL_TOKEN, t);
347
+ },
348
+ setBuyToken(t) {
349
+ y.postMessageToWindow(parent, T.SET_BUY_TOKEN, t);
344
350
  }
345
351
  };
346
352
  }
353
+ var G = /* @__PURE__ */ ((t) => (t.INTERNAL = "INTERNAL", t.IFRAME = "IFRAME", t))(G || {}), B = /* @__PURE__ */ ((t) => (t.EOA = "EOA", t.SMART_CONTRACT = "SMART_CONTRACT", t))(B || {});
354
+ const Q = 64, k = {
355
+ id: "c768665aa144bcf18c14eea0249b6322050e5daeba046d7e94df743a2e504586",
356
+ type: "INTERNAL",
357
+ name: "Build your own hook",
358
+ descriptionShort: "Call any smart contract with your own parameters",
359
+ description: "Didn't find a suitable hook? You can always create your own! To do this, you need to specify which smart contract you want to call, the parameters for the call and the gas limit.",
360
+ image: "https://raw.githubusercontent.com/cowprotocol/cowswap/refs/heads/develop/apps/cowswap-frontend/src/modules/hooksStore/dapps/BuildHookApp/build.png",
361
+ version: "v0.1.0",
362
+ website: "https://docs.cow.fi/cow-protocol/tutorials/hook-dapp"
363
+ }, N = {
364
+ id: "ee4a6b1065cda592972b9ff7448ec111f29a566f137fef101ead7fbf8b01dd0b",
365
+ type: "INTERNAL",
366
+ name: "Claim GNO from validators",
367
+ descriptionShort: "Withdraw rewards from your Gnosis validators.",
368
+ description: "This hook allows you to withdraw rewards from your Gnosis Chain validators through CoW Swap. It automates the process of interacting with the Gnosis Deposit Contract, enabling you to claim any available rewards directly to your specified withdrawal address. The hook monitors your validator's accrued rewards and triggers the claimWithdrawals function when rewards are ready for withdrawal. This simplifies the management of Gnosis validator earnings without requiring ready for withdrawal. This simplifies the management of Gnosis validator earnings without requiring manual contract interaction, providing a smoother and more efficient experience for users.",
369
+ image: "https://raw.githubusercontent.com/cowprotocol/cowswap/897ce91ca60a6b2d3823e6a002c3bf64c5384afe/libs/assets/src/cow-swap/network-gnosis-chain-logo.svg",
370
+ version: "v0.1.1",
371
+ website: "https://www.gnosis.io",
372
+ conditions: {
373
+ supportedNetworks: [
374
+ 100
375
+ ],
376
+ position: "pre"
377
+ }
378
+ }, S = {
379
+ id: "1db4bacb661a90fb6b475fd5b585acba9745bc373573c65ecc3e8f5bfd5dee1f",
380
+ type: "INTERNAL",
381
+ name: "Permit a token",
382
+ descriptionShort: "Infinite permit an address to spend one token on your behalf.",
383
+ description: "This hook allows you to permit an address to spend your tokens on your behalf. This is useful for allowing a smart contract to spend your tokens without needing to approve each transaction.",
384
+ image: "https://raw.githubusercontent.com/cowprotocol/cowswap/refs/heads/develop/apps/cowswap-frontend/src/modules/hooksStore/dapps/PermitHookApp/icon.png",
385
+ version: "v0.1.0",
386
+ website: "https://docs.cow.fi/cow-protocol/tutorials/hook-dapp",
387
+ conditions: {
388
+ walletCompatibility: [
389
+ "EOA"
390
+ ],
391
+ supportedNetworks: [
392
+ 11155111
393
+ ]
394
+ }
395
+ }, I = {
396
+ id: "40ed08569519f3b58c410ba35a8e684612663a7c9b58025e0a9c3a54551fb0ff",
397
+ type: "INTERNAL",
398
+ name: "Claim COW Airdrop",
399
+ descriptionShort: "Retrieve COW tokens before or after a swap.",
400
+ description: "Effortless Airdrop Claims! The Claim COW Airdrop feature simplifies the process of collecting free COW tokens before or after your swap, seamlessly integrating into the CoW Swap platform. Whether you're claiming new airdrops or exploring CoW on a new network, this tool ensures you get your rewards quickly and easily.",
401
+ image: "https://raw.githubusercontent.com/cowprotocol/cowswap/897ce91ca60a6b2d3823e6a002c3bf64c5384afe/apps/cowswap-frontend/src/modules/hooksStore/dapps/AirdropHookApp/airdrop.svg",
402
+ version: "v0.1.0",
403
+ website: "https://github.com/bleu/cow-airdrop-contract-deployer",
404
+ conditions: {
405
+ supportedNetworks: [
406
+ 11155111
407
+ ]
408
+ }
409
+ }, q = {
410
+ BUILD_CUSTOM_HOOK: k,
411
+ CLAIM_GNO_FROM_VALIDATORS: N,
412
+ PERMIT_TOKEN: S,
413
+ CLAIM_COW_AIRDROP: I
414
+ }, j = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
415
+ __proto__: null,
416
+ BUILD_CUSTOM_HOOK: k,
417
+ CLAIM_COW_AIRDROP: I,
418
+ CLAIM_GNO_FROM_VALIDATORS: N,
419
+ PERMIT_TOKEN: S,
420
+ default: q
421
+ }, Symbol.toStringTag, { value: "Module" }));
422
+ function X(t, a) {
423
+ const e = a.reduce(
424
+ (o, c) => (o[c.id] = c, o),
425
+ {}
426
+ );
427
+ return t.filter((o) => !!o.dappId).map((o) => {
428
+ const c = o, u = e[c.dappId];
429
+ return {
430
+ hook: c,
431
+ dapp: u || null
432
+ };
433
+ });
434
+ }
435
+ function z(t, a = []) {
436
+ return X(t, Object.values(j).concat(a));
437
+ }
347
438
  export {
348
439
  T as CoWHookDappEvents,
349
- C as hookDappIframeTransport,
350
- F as initCoWHookDapp
440
+ Q as HOOK_DAPP_ID_LENGTH,
441
+ G as HookDappType,
442
+ B as HookDappWalletCompatibility,
443
+ y as hookDappIframeTransport,
444
+ j as hookDappsRegistry,
445
+ $ as initCoWHookDapp,
446
+ X as matchHooksToDapps,
447
+ z as matchHooksToDappsRegistry
351
448
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cowprotocol/hook-dapp-lib",
3
- "version": "1.0.0-RC0",
3
+ "version": "1.1.0-RC0",
4
4
  "type": "commonjs",
5
5
  "description": "CoW Swap Hook Dapp Library. Allows you to develop pre/post hooks dapps for CoW Protocol.",
6
6
  "main": "index.js",
@@ -21,7 +21,6 @@
21
21
  "hook-dapp-lib"
22
22
  ],
23
23
  "dependencies": {
24
- "@cowprotocol/cow-sdk": "^5.4.1",
25
24
  "@cowprotocol/iframe-transport": "^1.0.0"
26
25
  }
27
26
  }
package/types.d.ts CHANGED
@@ -1,29 +1,60 @@
1
- import { SupportedChainId } from '@cowprotocol/cow-sdk';
1
+ import { ReactNode } from 'react';
2
+ import { HookDappType, HookDappWalletCompatibility } from './consts';
2
3
  export interface CowHook {
3
4
  target: string;
4
5
  callData: string;
5
6
  gasLimit: string;
7
+ dappId: string;
8
+ }
9
+ export interface HookDappConditions {
10
+ position?: 'post' | 'pre';
11
+ walletCompatibility?: HookDappWalletCompatibility[];
12
+ supportedNetworks?: number[];
6
13
  }
7
14
  export interface CowHookCreation {
8
- hook: CowHook;
15
+ hook: Omit<CowHook, 'dappId'>;
9
16
  recipientOverride?: string;
10
17
  }
18
+ export interface TokenData {
19
+ address: string;
20
+ }
11
21
  export interface CowHookDetails extends CowHookCreation {
22
+ hook: CowHook;
23
+ uuid: string;
24
+ }
25
+ export interface CowHookToEdit extends CowHookCreation {
12
26
  uuid: string;
13
27
  }
14
28
  export interface CoWHookDappActions {
15
29
  addHook(payload: CowHookCreation): void;
16
- editHook(payload: CowHookDetails): void;
30
+ editHook(payload: CowHookToEdit): void;
31
+ setSellToken(token: TokenData): void;
32
+ setBuyToken(token: TokenData): void;
17
33
  }
18
34
  export interface HookDappOrderParams {
19
35
  validTo: number;
20
36
  sellTokenAddress: string;
21
37
  buyTokenAddress: string;
38
+ sellAmount: string;
39
+ buyAmount: string;
22
40
  }
23
41
  export interface HookDappContext {
24
- chainId: SupportedChainId;
42
+ chainId: number;
25
43
  account?: string;
26
44
  orderParams: HookDappOrderParams | null;
27
45
  hookToEdit?: CowHookDetails;
28
46
  isSmartContract: boolean | undefined;
47
+ isPreHook: boolean;
48
+ isDarkMode: boolean;
49
+ }
50
+ export interface HookDappBase {
51
+ id: string;
52
+ name: string;
53
+ descriptionShort?: string;
54
+ description?: ReactNode | string;
55
+ type: HookDappType;
56
+ version: string;
57
+ website: string;
58
+ image: string;
59
+ conditions?: HookDappConditions;
29
60
  }
package/utils.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ import { CowHook, HookDappBase } from './types';
2
+ type StrictCowHook = Omit<CowHook, 'dappId'> & {
3
+ dappId?: string;
4
+ };
5
+ export interface HookToDappMatch {
6
+ dapp: HookDappBase | null;
7
+ hook: CowHook;
8
+ }
9
+ export declare function matchHooksToDapps(hooks: StrictCowHook[], dapps: HookDappBase[]): HookToDappMatch[];
10
+ export declare function matchHooksToDappsRegistry(hooks: StrictCowHook[], additionalHookDapps?: HookDappBase[]): HookToDappMatch[];
11
+ export {};