@imtbl/x-provider 2.1.14-alpha.0 → 2.1.14-alpha.1
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/dist/browser/index.js +5 -6
- package/dist/node/index.cjs +8 -9
- package/dist/node/index.js +5 -6
- package/package.json +5 -6
package/dist/browser/index.js
CHANGED
|
@@ -2,12 +2,11 @@ import { imx } from '@imtbl/generated-clients';
|
|
|
2
2
|
import { convertToSignableToken, signRaw, signMessage } from '@imtbl/toolkit';
|
|
3
3
|
import { ImxConfiguration, Contracts, EncodingApi, MintsApi, signRegisterEthAddress } from '@imtbl/x-client';
|
|
4
4
|
import { isAxiosError } from 'axios';
|
|
5
|
-
import * as
|
|
6
|
-
import { parseUnits, BrowserProvider, toUtf8Bytes
|
|
7
|
-
import
|
|
8
|
-
import xr from '@metamask/detect-provider';
|
|
5
|
+
import * as N from 'enc-utils';
|
|
6
|
+
import { parseUnits, BrowserProvider, toUtf8Bytes } from 'ethers';
|
|
7
|
+
import ft from '@metamask/detect-provider';
|
|
9
8
|
import { Environment } from '@imtbl/config';
|
|
10
9
|
|
|
11
|
-
var nt={},Lt=!1;function Ke(){if(Lt)return nt;Lt=!0,nt.byteLength=f,nt.toByteArray=C,nt.fromByteArray=I;for(var a=[],o=[],u=typeof Uint8Array<"u"?Uint8Array:Array,c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",p=0,m=c.length;p<m;++p)a[p]=c[p],o[c.charCodeAt(p)]=p;o[45]=62,o[95]=63;function i(g){var E=g.length;if(E%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var T=g.indexOf("=");T===-1&&(T=E);var b=T===E?0:4-T%4;return [T,b]}function f(g){var E=i(g),T=E[0],b=E[1];return (T+b)*3/4-b}function h(g,E,T){return (E+T)*3/4-T}function C(g){var E,T=i(g),b=T[0],U=T[1],P=new u(h(g,b,U)),M=0,L=U>0?b-4:b,v;for(v=0;v<L;v+=4)E=o[g.charCodeAt(v)]<<18|o[g.charCodeAt(v+1)]<<12|o[g.charCodeAt(v+2)]<<6|o[g.charCodeAt(v+3)],P[M++]=E>>16&255,P[M++]=E>>8&255,P[M++]=E&255;return U===2&&(E=o[g.charCodeAt(v)]<<2|o[g.charCodeAt(v+1)]>>4,P[M++]=E&255),U===1&&(E=o[g.charCodeAt(v)]<<10|o[g.charCodeAt(v+1)]<<4|o[g.charCodeAt(v+2)]>>2,P[M++]=E>>8&255,P[M++]=E&255),P}function w(g){return a[g>>18&63]+a[g>>12&63]+a[g>>6&63]+a[g&63]}function A(g,E,T){for(var b,U=[],P=E;P<T;P+=3)b=(g[P]<<16&16711680)+(g[P+1]<<8&65280)+(g[P+2]&255),U.push(w(b));return U.join("")}function I(g){for(var E,T=g.length,b=T%3,U=[],P=16383,M=0,L=T-b;M<L;M+=P)U.push(A(g,M,M+P>L?L:M+P));return b===1?(E=g[T-1],U.push(a[E>>2]+a[E<<4&63]+"==")):b===2&&(E=(g[T-2]<<8)+g[T-1],U.push(a[E>>10]+a[E>>4&63]+a[E<<2&63]+"=")),U.join("")}return nt}var st={},Wt=!1;function Je(){if(Wt)return st;Wt=!0;return st.read=function(a,o,u,c,p){var m,i,f=p*8-c-1,h=(1<<f)-1,C=h>>1,w=-7,A=u?p-1:0,I=u?-1:1,g=a[o+A];for(A+=I,m=g&(1<<-w)-1,g>>=-w,w+=f;w>0;m=m*256+a[o+A],A+=I,w-=8);for(i=m&(1<<-w)-1,m>>=-w,w+=c;w>0;i=i*256+a[o+A],A+=I,w-=8);if(m===0)m=1-C;else {if(m===h)return i?NaN:(g?-1:1)*(1/0);i=i+Math.pow(2,c),m=m-C;}return (g?-1:1)*i*Math.pow(2,m-c)},st.write=function(a,o,u,c,p,m){var i,f,h,C=m*8-p-1,w=(1<<C)-1,A=w>>1,I=p===23?Math.pow(2,-24)-Math.pow(2,-77):0,g=c?0:m-1,E=c?1:-1,T=o<0||o===0&&1/o<0?1:0;for(o=Math.abs(o),isNaN(o)||o===1/0?(f=isNaN(o)?1:0,i=w):(i=Math.floor(Math.log(o)/Math.LN2),o*(h=Math.pow(2,-i))<1&&(i--,h*=2),i+A>=1?o+=I/h:o+=I*Math.pow(2,1-A),o*h>=2&&(i++,h/=2),i+A>=w?(f=0,i=w):i+A>=1?(f=(o*h-1)*Math.pow(2,p),i=i+A):(f=o*Math.pow(2,A-1)*Math.pow(2,p),i=0));p>=8;a[u+g]=f&255,g+=E,f/=256,p-=8);for(i=i<<p|f,C+=p;C>0;a[u+g]=i&255,g+=E,i/=256,C-=8);a[u+g-E]|=T*128;},st}var $={},Dt=!1;function Ze(){if(Dt)return $;Dt=!0;let a=Ke(),o=Je(),u=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;$.Buffer=i,$.SlowBuffer=U,$.INSPECT_MAX_BYTES=50;let c=2147483647;$.kMaxLength=c,i.TYPED_ARRAY_SUPPORT=p(),!i.TYPED_ARRAY_SUPPORT&&typeof console<"u"&&typeof console.error=="function"&&console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");function p(){try{let r=new Uint8Array(1),t={foo:function(){return 42}};return Object.setPrototypeOf(t,Uint8Array.prototype),Object.setPrototypeOf(r,t),r.foo()===42}catch{return !1}}Object.defineProperty(i.prototype,"parent",{enumerable:!0,get:function(){if(i.isBuffer(this))return this.buffer}}),Object.defineProperty(i.prototype,"offset",{enumerable:!0,get:function(){if(i.isBuffer(this))return this.byteOffset}});function m(r){if(r>c)throw new RangeError('The value "'+r+'" is invalid for option "size"');let t=new Uint8Array(r);return Object.setPrototypeOf(t,i.prototype),t}function i(r,t,e){if(typeof r=="number"){if(typeof t=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return w(r)}return f(r,t,e)}i.poolSize=8192;function f(r,t,e){if(typeof r=="string")return A(r,t);if(ArrayBuffer.isView(r))return g(r);if(r==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof r);if(q(r,ArrayBuffer)||r&&q(r.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(q(r,SharedArrayBuffer)||r&&q(r.buffer,SharedArrayBuffer)))return E(r,t,e);if(typeof r=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');let n=r.valueOf&&r.valueOf();if(n!=null&&n!==r)return i.from(n,t,e);let s=T(r);if(s)return s;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof r[Symbol.toPrimitive]=="function")return i.from(r[Symbol.toPrimitive]("string"),t,e);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof r)}i.from=function(r,t,e){return f(r,t,e)},Object.setPrototypeOf(i.prototype,Uint8Array.prototype),Object.setPrototypeOf(i,Uint8Array);function h(r){if(typeof r!="number")throw new TypeError('"size" argument must be of type number');if(r<0)throw new RangeError('The value "'+r+'" is invalid for option "size"')}function C(r,t,e){return h(r),r<=0?m(r):t!==void 0?typeof e=="string"?m(r).fill(t,e):m(r).fill(t):m(r)}i.alloc=function(r,t,e){return C(r,t,e)};function w(r){return h(r),m(r<0?0:b(r)|0)}i.allocUnsafe=function(r){return w(r)},i.allocUnsafeSlow=function(r){return w(r)};function A(r,t){if((typeof t!="string"||t==="")&&(t="utf8"),!i.isEncoding(t))throw new TypeError("Unknown encoding: "+t);let e=P(r,t)|0,n=m(e),s=n.write(r,t);return s!==e&&(n=n.slice(0,s)),n}function I(r){let t=r.length<0?0:b(r.length)|0,e=m(t);for(let n=0;n<t;n+=1)e[n]=r[n]&255;return e}function g(r){if(q(r,Uint8Array)){let t=new Uint8Array(r);return E(t.buffer,t.byteOffset,t.byteLength)}return I(r)}function E(r,t,e){if(t<0||r.byteLength<t)throw new RangeError('"offset" is outside of buffer bounds');if(r.byteLength<t+(e||0))throw new RangeError('"length" is outside of buffer bounds');let n;return t===void 0&&e===void 0?n=new Uint8Array(r):e===void 0?n=new Uint8Array(r,t):n=new Uint8Array(r,t,e),Object.setPrototypeOf(n,i.prototype),n}function T(r){if(i.isBuffer(r)){let t=b(r.length)|0,e=m(t);return e.length===0||r.copy(e,0,0,t),e}if(r.length!==void 0)return typeof r.length!="number"||Et(r.length)?m(0):I(r);if(r.type==="Buffer"&&Array.isArray(r.data))return I(r.data)}function b(r){if(r>=c)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+c.toString(16)+" bytes");return r|0}function U(r){return +r!=r&&(r=0),i.alloc(+r)}i.isBuffer=function(t){return t!=null&&t._isBuffer===!0&&t!==i.prototype},i.compare=function(t,e){if(q(t,Uint8Array)&&(t=i.from(t,t.offset,t.byteLength)),q(e,Uint8Array)&&(e=i.from(e,e.offset,e.byteLength)),!i.isBuffer(t)||!i.isBuffer(e))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(t===e)return 0;let n=t.length,s=e.length;for(let d=0,l=Math.min(n,s);d<l;++d)if(t[d]!==e[d]){n=t[d],s=e[d];break}return n<s?-1:s<n?1:0},i.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return !0;default:return !1}},i.concat=function(t,e){if(!Array.isArray(t))throw new TypeError('"list" argument must be an Array of Buffers');if(t.length===0)return i.alloc(0);let n;if(e===void 0)for(e=0,n=0;n<t.length;++n)e+=t[n].length;let s=i.allocUnsafe(e),d=0;for(n=0;n<t.length;++n){let l=t[n];if(q(l,Uint8Array))d+l.length>s.length?(i.isBuffer(l)||(l=i.from(l)),l.copy(s,d)):Uint8Array.prototype.set.call(s,l,d);else if(i.isBuffer(l))l.copy(s,d);else throw new TypeError('"list" argument must be an Array of Buffers');d+=l.length;}return s};function P(r,t){if(i.isBuffer(r))return r.length;if(ArrayBuffer.isView(r)||q(r,ArrayBuffer))return r.byteLength;if(typeof r!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof r);let e=r.length,n=arguments.length>2&&arguments[2]===!0;if(!n&&e===0)return 0;let s=!1;for(;;)switch(t){case"ascii":case"latin1":case"binary":return e;case"utf8":case"utf-8":return wt(r).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return e*2;case"hex":return e>>>1;case"base64":return Mt(r).length;default:if(s)return n?-1:wt(r).length;t=(""+t).toLowerCase(),s=!0;}}i.byteLength=P;function M(r,t,e){let n=!1;if((t===void 0||t<0)&&(t=0),t>this.length||((e===void 0||e>this.length)&&(e=this.length),e<=0)||(e>>>=0,t>>>=0,e<=t))return "";for(r||(r="utf8");;)switch(r){case"hex":return Fe(this,t,e);case"utf8":case"utf-8":return bt(this,t,e);case"ascii":return Xe(this,t,e);case"latin1":case"binary":return qe(this,t,e);case"base64":return We(this,t,e);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Ge(this,t,e);default:if(n)throw new TypeError("Unknown encoding: "+r);r=(r+"").toLowerCase(),n=!0;}}i.prototype._isBuffer=!0;function L(r,t,e){let n=r[t];r[t]=r[e],r[e]=n;}i.prototype.swap16=function(){let t=this.length;if(t%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let e=0;e<t;e+=2)L(this,e,e+1);return this},i.prototype.swap32=function(){let t=this.length;if(t%4!==0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(let e=0;e<t;e+=4)L(this,e,e+3),L(this,e+1,e+2);return this},i.prototype.swap64=function(){let t=this.length;if(t%8!==0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(let e=0;e<t;e+=8)L(this,e,e+7),L(this,e+1,e+6),L(this,e+2,e+5),L(this,e+3,e+4);return this},i.prototype.toString=function(){let t=this.length;return t===0?"":arguments.length===0?bt(this,0,t):M.apply(this,arguments)},i.prototype.toLocaleString=i.prototype.toString,i.prototype.equals=function(t){if(!i.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t?!0:i.compare(this,t)===0},i.prototype.inspect=function(){let t="",e=$.INSPECT_MAX_BYTES;return t=this.toString("hex",0,e).replace(/(.{2})/g,"$1 ").trim(),this.length>e&&(t+=" ... "),"<Buffer "+t+">"},u&&(i.prototype[u]=i.prototype.inspect),i.prototype.compare=function(t,e,n,s,d){if(q(t,Uint8Array)&&(t=i.from(t,t.offset,t.byteLength)),!i.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(e===void 0&&(e=0),n===void 0&&(n=t?t.length:0),s===void 0&&(s=0),d===void 0&&(d=this.length),e<0||n>t.length||s<0||d>this.length)throw new RangeError("out of range index");if(s>=d&&e>=n)return 0;if(s>=d)return -1;if(e>=n)return 1;if(e>>>=0,n>>>=0,s>>>=0,d>>>=0,this===t)return 0;let l=d-s,y=n-e,B=Math.min(l,y),x=this.slice(s,d),N=t.slice(e,n);for(let S=0;S<B;++S)if(x[S]!==N[S]){l=x[S],y=N[S];break}return l<y?-1:y<l?1:0};function v(r,t,e,n,s){if(r.length===0)return -1;if(typeof e=="string"?(n=e,e=0):e>2147483647?e=2147483647:e<-2147483648&&(e=-2147483648),e=+e,Et(e)&&(e=s?0:r.length-1),e<0&&(e=r.length+e),e>=r.length){if(s)return -1;e=r.length-1;}else if(e<0)if(s)e=0;else return -1;if(typeof t=="string"&&(t=i.from(t,n)),i.isBuffer(t))return t.length===0?-1:St(r,t,e,n,s);if(typeof t=="number")return t=t&255,typeof Uint8Array.prototype.indexOf=="function"?s?Uint8Array.prototype.indexOf.call(r,t,e):Uint8Array.prototype.lastIndexOf.call(r,t,e):St(r,[t],e,n,s);throw new TypeError("val must be string, number or Buffer")}function St(r,t,e,n,s){let d=1,l=r.length,y=t.length;if(n!==void 0&&(n=String(n).toLowerCase(),n==="ucs2"||n==="ucs-2"||n==="utf16le"||n==="utf-16le")){if(r.length<2||t.length<2)return -1;d=2,l/=2,y/=2,e/=2;}function B(N,S){return d===1?N[S]:N.readUInt16BE(S*d)}let x;if(s){let N=-1;for(x=e;x<l;x++)if(B(r,x)===B(t,N===-1?0:x-N)){if(N===-1&&(N=x),x-N+1===y)return N*d}else N!==-1&&(x-=x-N),N=-1;}else for(e+y>l&&(e=l-y),x=e;x>=0;x--){let N=!0;for(let S=0;S<y;S++)if(B(r,x+S)!==B(t,S)){N=!1;break}if(N)return x}return -1}i.prototype.includes=function(t,e,n){return this.indexOf(t,e,n)!==-1},i.prototype.indexOf=function(t,e,n){return v(this,t,e,n,!0)},i.prototype.lastIndexOf=function(t,e,n){return v(this,t,e,n,!1)};function Oe(r,t,e,n){e=Number(e)||0;let s=r.length-e;n?(n=Number(n),n>s&&(n=s)):n=s;let d=t.length;n>d/2&&(n=d/2);let l;for(l=0;l<n;++l){let y=parseInt(t.substr(l*2,2),16);if(Et(y))return l;r[e+l]=y;}return l}function ve(r,t,e,n){return at(wt(t,r.length-e),r,e,n)}function Ue(r,t,e,n){return at(Ye(t),r,e,n)}function Me(r,t,e,n){return at(Mt(t),r,e,n)}function Le(r,t,e,n){return at(Qe(t,r.length-e),r,e,n)}i.prototype.write=function(t,e,n,s){if(e===void 0)s="utf8",n=this.length,e=0;else if(n===void 0&&typeof e=="string")s=e,n=this.length,e=0;else if(isFinite(e))e=e>>>0,isFinite(n)?(n=n>>>0,s===void 0&&(s="utf8")):(s=n,n=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");let d=this.length-e;if((n===void 0||n>d)&&(n=d),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");s||(s="utf8");let l=!1;for(;;)switch(s){case"hex":return Oe(this,t,e,n);case"utf8":case"utf-8":return ve(this,t,e,n);case"ascii":case"latin1":case"binary":return Ue(this,t,e,n);case"base64":return Me(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Le(this,t,e,n);default:if(l)throw new TypeError("Unknown encoding: "+s);s=(""+s).toLowerCase(),l=!0;}},i.prototype.toJSON=function(){return {type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function We(r,t,e){return t===0&&e===r.length?a.fromByteArray(r):a.fromByteArray(r.slice(t,e))}function bt(r,t,e){e=Math.min(r.length,e);let n=[],s=t;for(;s<e;){let d=r[s],l=null,y=d>239?4:d>223?3:d>191?2:1;if(s+y<=e){let B,x,N,S;switch(y){case 1:d<128&&(l=d);break;case 2:B=r[s+1],(B&192)===128&&(S=(d&31)<<6|B&63,S>127&&(l=S));break;case 3:B=r[s+1],x=r[s+2],(B&192)===128&&(x&192)===128&&(S=(d&15)<<12|(B&63)<<6|x&63,S>2047&&(S<55296||S>57343)&&(l=S));break;case 4:B=r[s+1],x=r[s+2],N=r[s+3],(B&192)===128&&(x&192)===128&&(N&192)===128&&(S=(d&15)<<18|(B&63)<<12|(x&63)<<6|N&63,S>65535&&S<1114112&&(l=S));}}l===null?(l=65533,y=1):l>65535&&(l-=65536,n.push(l>>>10&1023|55296),l=56320|l&1023),n.push(l),s+=y;}return De(n)}let kt=4096;function De(r){let t=r.length;if(t<=kt)return String.fromCharCode.apply(String,r);let e="",n=0;for(;n<t;)e+=String.fromCharCode.apply(String,r.slice(n,n+=kt));return e}function Xe(r,t,e){let n="";e=Math.min(r.length,e);for(let s=t;s<e;++s)n+=String.fromCharCode(r[s]&127);return n}function qe(r,t,e){let n="";e=Math.min(r.length,e);for(let s=t;s<e;++s)n+=String.fromCharCode(r[s]);return n}function Fe(r,t,e){let n=r.length;(!t||t<0)&&(t=0),(!e||e<0||e>n)&&(e=n);let s="";for(let d=t;d<e;++d)s+=ze[r[d]];return s}function Ge(r,t,e){let n=r.slice(t,e),s="";for(let d=0;d<n.length-1;d+=2)s+=String.fromCharCode(n[d]+n[d+1]*256);return s}i.prototype.slice=function(t,e){let n=this.length;t=~~t,e=e===void 0?n:~~e,t<0?(t+=n,t<0&&(t=0)):t>n&&(t=n),e<0?(e+=n,e<0&&(e=0)):e>n&&(e=n),e<t&&(e=t);let s=this.subarray(t,e);return Object.setPrototypeOf(s,i.prototype),s};function O(r,t,e){if(r%1!==0||r<0)throw new RangeError("offset is not uint");if(r+t>e)throw new RangeError("Trying to access beyond buffer length")}i.prototype.readUintLE=i.prototype.readUIntLE=function(t,e,n){t=t>>>0,e=e>>>0,n||O(t,e,this.length);let s=this[t],d=1,l=0;for(;++l<e&&(d*=256);)s+=this[t+l]*d;return s},i.prototype.readUintBE=i.prototype.readUIntBE=function(t,e,n){t=t>>>0,e=e>>>0,n||O(t,e,this.length);let s=this[t+--e],d=1;for(;e>0&&(d*=256);)s+=this[t+--e]*d;return s},i.prototype.readUint8=i.prototype.readUInt8=function(t,e){return t=t>>>0,e||O(t,1,this.length),this[t]},i.prototype.readUint16LE=i.prototype.readUInt16LE=function(t,e){return t=t>>>0,e||O(t,2,this.length),this[t]|this[t+1]<<8},i.prototype.readUint16BE=i.prototype.readUInt16BE=function(t,e){return t=t>>>0,e||O(t,2,this.length),this[t]<<8|this[t+1]},i.prototype.readUint32LE=i.prototype.readUInt32LE=function(t,e){return t=t>>>0,e||O(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+this[t+3]*16777216},i.prototype.readUint32BE=i.prototype.readUInt32BE=function(t,e){return t=t>>>0,e||O(t,4,this.length),this[t]*16777216+(this[t+1]<<16|this[t+2]<<8|this[t+3])},i.prototype.readBigUInt64LE=G(function(t){t=t>>>0,j(t,"offset");let e=this[t],n=this[t+7];(e===void 0||n===void 0)&&rt(t,this.length-8);let s=e+this[++t]*2**8+this[++t]*2**16+this[++t]*2**24,d=this[++t]+this[++t]*2**8+this[++t]*2**16+n*2**24;return BigInt(s)+(BigInt(d)<<BigInt(32))}),i.prototype.readBigUInt64BE=G(function(t){t=t>>>0,j(t,"offset");let e=this[t],n=this[t+7];(e===void 0||n===void 0)&&rt(t,this.length-8);let s=e*2**24+this[++t]*2**16+this[++t]*2**8+this[++t],d=this[++t]*2**24+this[++t]*2**16+this[++t]*2**8+n;return (BigInt(s)<<BigInt(32))+BigInt(d)}),i.prototype.readIntLE=function(t,e,n){t=t>>>0,e=e>>>0,n||O(t,e,this.length);let s=this[t],d=1,l=0;for(;++l<e&&(d*=256);)s+=this[t+l]*d;return d*=128,s>=d&&(s-=Math.pow(2,8*e)),s},i.prototype.readIntBE=function(t,e,n){t=t>>>0,e=e>>>0,n||O(t,e,this.length);let s=e,d=1,l=this[t+--s];for(;s>0&&(d*=256);)l+=this[t+--s]*d;return d*=128,l>=d&&(l-=Math.pow(2,8*e)),l},i.prototype.readInt8=function(t,e){return t=t>>>0,e||O(t,1,this.length),this[t]&128?(255-this[t]+1)*-1:this[t]},i.prototype.readInt16LE=function(t,e){t=t>>>0,e||O(t,2,this.length);let n=this[t]|this[t+1]<<8;return n&32768?n|4294901760:n},i.prototype.readInt16BE=function(t,e){t=t>>>0,e||O(t,2,this.length);let n=this[t+1]|this[t]<<8;return n&32768?n|4294901760:n},i.prototype.readInt32LE=function(t,e){return t=t>>>0,e||O(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},i.prototype.readInt32BE=function(t,e){return t=t>>>0,e||O(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},i.prototype.readBigInt64LE=G(function(t){t=t>>>0,j(t,"offset");let e=this[t],n=this[t+7];(e===void 0||n===void 0)&&rt(t,this.length-8);let s=this[t+4]+this[t+5]*2**8+this[t+6]*2**16+(n<<24);return (BigInt(s)<<BigInt(32))+BigInt(e+this[++t]*2**8+this[++t]*2**16+this[++t]*2**24)}),i.prototype.readBigInt64BE=G(function(t){t=t>>>0,j(t,"offset");let e=this[t],n=this[t+7];(e===void 0||n===void 0)&&rt(t,this.length-8);let s=(e<<24)+this[++t]*2**16+this[++t]*2**8+this[++t];return (BigInt(s)<<BigInt(32))+BigInt(this[++t]*2**24+this[++t]*2**16+this[++t]*2**8+n)}),i.prototype.readFloatLE=function(t,e){return t=t>>>0,e||O(t,4,this.length),o.read(this,t,!0,23,4)},i.prototype.readFloatBE=function(t,e){return t=t>>>0,e||O(t,4,this.length),o.read(this,t,!1,23,4)},i.prototype.readDoubleLE=function(t,e){return t=t>>>0,e||O(t,8,this.length),o.read(this,t,!0,52,8)},i.prototype.readDoubleBE=function(t,e){return t=t>>>0,e||O(t,8,this.length),o.read(this,t,!1,52,8)};function W(r,t,e,n,s,d){if(!i.isBuffer(r))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>s||t<d)throw new RangeError('"value" argument is out of bounds');if(e+n>r.length)throw new RangeError("Index out of range")}i.prototype.writeUintLE=i.prototype.writeUIntLE=function(t,e,n,s){if(t=+t,e=e>>>0,n=n>>>0,!s){let y=Math.pow(2,8*n)-1;W(this,t,e,n,y,0);}let d=1,l=0;for(this[e]=t&255;++l<n&&(d*=256);)this[e+l]=t/d&255;return e+n},i.prototype.writeUintBE=i.prototype.writeUIntBE=function(t,e,n,s){if(t=+t,e=e>>>0,n=n>>>0,!s){let y=Math.pow(2,8*n)-1;W(this,t,e,n,y,0);}let d=n-1,l=1;for(this[e+d]=t&255;--d>=0&&(l*=256);)this[e+d]=t/l&255;return e+n},i.prototype.writeUint8=i.prototype.writeUInt8=function(t,e,n){return t=+t,e=e>>>0,n||W(this,t,e,1,255,0),this[e]=t&255,e+1},i.prototype.writeUint16LE=i.prototype.writeUInt16LE=function(t,e,n){return t=+t,e=e>>>0,n||W(this,t,e,2,65535,0),this[e]=t&255,this[e+1]=t>>>8,e+2},i.prototype.writeUint16BE=i.prototype.writeUInt16BE=function(t,e,n){return t=+t,e=e>>>0,n||W(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=t&255,e+2},i.prototype.writeUint32LE=i.prototype.writeUInt32LE=function(t,e,n){return t=+t,e=e>>>0,n||W(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=t&255,e+4},i.prototype.writeUint32BE=i.prototype.writeUInt32BE=function(t,e,n){return t=+t,e=e>>>0,n||W(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=t&255,e+4};function xt(r,t,e,n,s){Ut(t,n,s,r,e,7);let d=Number(t&BigInt(4294967295));r[e++]=d,d=d>>8,r[e++]=d,d=d>>8,r[e++]=d,d=d>>8,r[e++]=d;let l=Number(t>>BigInt(32)&BigInt(4294967295));return r[e++]=l,l=l>>8,r[e++]=l,l=l>>8,r[e++]=l,l=l>>8,r[e++]=l,e}function Pt(r,t,e,n,s){Ut(t,n,s,r,e,7);let d=Number(t&BigInt(4294967295));r[e+7]=d,d=d>>8,r[e+6]=d,d=d>>8,r[e+5]=d,d=d>>8,r[e+4]=d;let l=Number(t>>BigInt(32)&BigInt(4294967295));return r[e+3]=l,l=l>>8,r[e+2]=l,l=l>>8,r[e+1]=l,l=l>>8,r[e]=l,e+8}i.prototype.writeBigUInt64LE=G(function(t,e=0){return xt(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))}),i.prototype.writeBigUInt64BE=G(function(t,e=0){return Pt(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))}),i.prototype.writeIntLE=function(t,e,n,s){if(t=+t,e=e>>>0,!s){let B=Math.pow(2,8*n-1);W(this,t,e,n,B-1,-B);}let d=0,l=1,y=0;for(this[e]=t&255;++d<n&&(l*=256);)t<0&&y===0&&this[e+d-1]!==0&&(y=1),this[e+d]=(t/l>>0)-y&255;return e+n},i.prototype.writeIntBE=function(t,e,n,s){if(t=+t,e=e>>>0,!s){let B=Math.pow(2,8*n-1);W(this,t,e,n,B-1,-B);}let d=n-1,l=1,y=0;for(this[e+d]=t&255;--d>=0&&(l*=256);)t<0&&y===0&&this[e+d+1]!==0&&(y=1),this[e+d]=(t/l>>0)-y&255;return e+n},i.prototype.writeInt8=function(t,e,n){return t=+t,e=e>>>0,n||W(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=t&255,e+1},i.prototype.writeInt16LE=function(t,e,n){return t=+t,e=e>>>0,n||W(this,t,e,2,32767,-32768),this[e]=t&255,this[e+1]=t>>>8,e+2},i.prototype.writeInt16BE=function(t,e,n){return t=+t,e=e>>>0,n||W(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=t&255,e+2},i.prototype.writeInt32LE=function(t,e,n){return t=+t,e=e>>>0,n||W(this,t,e,4,2147483647,-2147483648),this[e]=t&255,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},i.prototype.writeInt32BE=function(t,e,n){return t=+t,e=e>>>0,n||W(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=t&255,e+4},i.prototype.writeBigInt64LE=G(function(t,e=0){return xt(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),i.prototype.writeBigInt64BE=G(function(t,e=0){return Pt(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function Bt(r,t,e,n,s,d){if(e+n>r.length)throw new RangeError("Index out of range");if(e<0)throw new RangeError("Index out of range")}function Nt(r,t,e,n,s){return t=+t,e=e>>>0,s||Bt(r,t,e,4),o.write(r,t,e,n,23,4),e+4}i.prototype.writeFloatLE=function(t,e,n){return Nt(this,t,e,!0,n)},i.prototype.writeFloatBE=function(t,e,n){return Nt(this,t,e,!1,n)};function Ot(r,t,e,n,s){return t=+t,e=e>>>0,s||Bt(r,t,e,8),o.write(r,t,e,n,52,8),e+8}i.prototype.writeDoubleLE=function(t,e,n){return Ot(this,t,e,!0,n)},i.prototype.writeDoubleBE=function(t,e,n){return Ot(this,t,e,!1,n)},i.prototype.copy=function(t,e,n,s){if(!i.isBuffer(t))throw new TypeError("argument should be a Buffer");if(n||(n=0),!s&&s!==0&&(s=this.length),e>=t.length&&(e=t.length),e||(e=0),s>0&&s<n&&(s=n),s===n||t.length===0||this.length===0)return 0;if(e<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("Index out of range");if(s<0)throw new RangeError("sourceEnd out of bounds");s>this.length&&(s=this.length),t.length-e<s-n&&(s=t.length-e+n);let d=s-n;return this===t&&typeof Uint8Array.prototype.copyWithin=="function"?this.copyWithin(e,n,s):Uint8Array.prototype.set.call(t,this.subarray(n,s),e),d},i.prototype.fill=function(t,e,n,s){if(typeof t=="string"){if(typeof e=="string"?(s=e,e=0,n=this.length):typeof n=="string"&&(s=n,n=this.length),s!==void 0&&typeof s!="string")throw new TypeError("encoding must be a string");if(typeof s=="string"&&!i.isEncoding(s))throw new TypeError("Unknown encoding: "+s);if(t.length===1){let l=t.charCodeAt(0);(s==="utf8"&&l<128||s==="latin1")&&(t=l);}}else typeof t=="number"?t=t&255:typeof t=="boolean"&&(t=Number(t));if(e<0||this.length<e||this.length<n)throw new RangeError("Out of range index");if(n<=e)return this;e=e>>>0,n=n===void 0?this.length:n>>>0,t||(t=0);let d;if(typeof t=="number")for(d=e;d<n;++d)this[d]=t;else {let l=i.isBuffer(t)?t:i.from(t,s),y=l.length;if(y===0)throw new TypeError('The value "'+t+'" is invalid for argument "value"');for(d=0;d<n-e;++d)this[d+e]=l[d%y];}return this};let z={};function ht(r,t,e){z[r]=class extends e{constructor(){super(),Object.defineProperty(this,"message",{value:t.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${r}]`,this.stack,delete this.name;}get code(){return r}set code(s){Object.defineProperty(this,"code",{configurable:!0,enumerable:!0,value:s,writable:!0});}toString(){return `${this.name} [${r}]: ${this.message}`}};}ht("ERR_BUFFER_OUT_OF_BOUNDS",function(r){return r?`${r} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"},RangeError),ht("ERR_INVALID_ARG_TYPE",function(r,t){return `The "${r}" argument must be of type number. Received type ${typeof t}`},TypeError),ht("ERR_OUT_OF_RANGE",function(r,t,e){let n=`The value of "${r}" is out of range.`,s=e;return Number.isInteger(e)&&Math.abs(e)>2**32?s=vt(String(e)):typeof e=="bigint"&&(s=String(e),(e>BigInt(2)**BigInt(32)||e<-(BigInt(2)**BigInt(32)))&&(s=vt(s)),s+="n"),n+=` It must be ${t}. Received ${s}`,n},RangeError);function vt(r){let t="",e=r.length,n=r[0]==="-"?1:0;for(;e>=n+4;e-=3)t=`_${r.slice(e-3,e)}${t}`;return `${r.slice(0,e)}${t}`}function Ve(r,t,e){j(t,"offset"),(r[t]===void 0||r[t+e]===void 0)&&rt(t,r.length-(e+1));}function Ut(r,t,e,n,s,d){if(r>e||r<t){let l=typeof t=="bigint"?"n":"",y;throw t===0||t===BigInt(0)?y=`>= 0${l} and < 2${l} ** ${(d+1)*8}${l}`:y=`>= -(2${l} ** ${(d+1)*8-1}${l}) and < 2 ** ${(d+1)*8-1}${l}`,new z.ERR_OUT_OF_RANGE("value",y,r)}Ve(n,s,d);}function j(r,t){if(typeof r!="number")throw new z.ERR_INVALID_ARG_TYPE(t,"number",r)}function rt(r,t,e){throw Math.floor(r)!==r?(j(r,e),new z.ERR_OUT_OF_RANGE("offset","an integer",r)):t<0?new z.ERR_BUFFER_OUT_OF_BOUNDS:new z.ERR_OUT_OF_RANGE("offset",`>= ${0} and <= ${t}`,r)}let $e=/[^+/0-9A-Za-z-_]/g;function He(r){if(r=r.split("=")[0],r=r.trim().replace($e,""),r.length<2)return "";for(;r.length%4!==0;)r=r+"=";return r}function wt(r,t){t=t||1/0;let e,n=r.length,s=null,d=[];for(let l=0;l<n;++l){if(e=r.charCodeAt(l),e>55295&&e<57344){if(!s){if(e>56319){(t-=3)>-1&&d.push(239,191,189);continue}else if(l+1===n){(t-=3)>-1&&d.push(239,191,189);continue}s=e;continue}if(e<56320){(t-=3)>-1&&d.push(239,191,189),s=e;continue}e=(s-55296<<10|e-56320)+65536;}else s&&(t-=3)>-1&&d.push(239,191,189);if(s=null,e<128){if((t-=1)<0)break;d.push(e);}else if(e<2048){if((t-=2)<0)break;d.push(e>>6|192,e&63|128);}else if(e<65536){if((t-=3)<0)break;d.push(e>>12|224,e>>6&63|128,e&63|128);}else if(e<1114112){if((t-=4)<0)break;d.push(e>>18|240,e>>12&63|128,e>>6&63|128,e&63|128);}else throw new Error("Invalid code point")}return d}function Ye(r){let t=[];for(let e=0;e<r.length;++e)t.push(r.charCodeAt(e)&255);return t}function Qe(r,t){let e,n,s,d=[];for(let l=0;l<r.length&&!((t-=2)<0);++l)e=r.charCodeAt(l),n=e>>8,s=e%256,d.push(s),d.push(n);return d}function Mt(r){return a.toByteArray(He(r))}function at(r,t,e,n){let s;for(s=0;s<n&&!(s+e>=t.length||s>=r.length);++s)t[s+e]=r[s];return s}function q(r,t){return r instanceof t||r!=null&&r.constructor!=null&&r.constructor.name!=null&&r.constructor.name===t.name}function Et(r){return r!==r}let ze=function(){let r="0123456789abcdef",t=new Array(256);for(let e=0;e<16;++e){let n=e*16;for(let s=0;s<16;++s)t[n+s]=r[e]+r[s];}return t}();function G(r){return typeof BigInt>"u"?je:r}function je(){throw new Error("BigInt not supported")}return $}var H=Ze();H.Buffer;H.SlowBuffer;H.INSPECT_MAX_BYTES;H.kMaxLength;var _=H.Buffer;H.INSPECT_MAX_BYTES;H.kMaxLength;function tr(a,o){return a===o.ethConfiguration.chainID}async function k(a,o){let u=(await a.provider?.getNetwork())?.chainId;if(!tr(Number(u),o))throw new Error("The wallet used for this operation is not connected to the correct network.")}async function Gt({signers:{ethSigner:a,starkSigner:o},request:u,config:c}){await k(a,c.immutableXConfig);let p=await a.getAddress(),m=new imx.TransfersApi(c.immutableXConfig.apiConfiguration),i=u.type==="ERC721"?"1":u.amount,f=await m.getSignableTransferV1({getSignableTransferRequest:{sender:p,token:convertToSignableToken(u),amount:i,receiver:u.receiver}}),{signable_message:h,payload_hash:C}=f.data,w=await signRaw(h,a),A=await o.signMessage(C),I={sender_stark_key:f.data.sender_stark_key,sender_vault_id:f.data.sender_vault_id,receiver_stark_key:f.data.receiver_stark_key,receiver_vault_id:f.data.receiver_vault_id,asset_id:f.data.asset_id,amount:f.data.amount,nonce:f.data.nonce,expiration_timestamp:f.data.expiration_timestamp,stark_signature:A},g=await m.createTransferV1({createTransferRequest:I,xImxEthAddress:p,xImxEthSignature:w});return {sent_signature:g?.data.sent_signature,status:g?.data.status?.toString(),time:g?.data.time,transfer_id:g?.data.transfer_id}}async function Vt({signers:{ethSigner:a,starkSigner:o},request:u,config:c}){await k(a,c.immutableXConfig);let p=await a.getAddress(),m=new imx.TransfersApi(c.immutableXConfig.apiConfiguration),i=u.map(g=>({amount:"1",token:convertToSignableToken({type:"ERC721",tokenId:g.tokenId,tokenAddress:g.tokenAddress}),receiver:g.receiver})),f=await m.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:p,signable_requests:i}}),h=f.data.signable_message;if(h===void 0)throw new Error("Invalid response from Signable registration offchain");let C=await signRaw(h,a),w=[];for(let g of f.data.signable_responses){let E=await o.signMessage(g.payload_hash),T={sender_vault_id:g.sender_vault_id,receiver_stark_key:g.receiver_stark_key,receiver_vault_id:g.receiver_vault_id,asset_id:g.asset_id,amount:g.amount,nonce:g.nonce,expiration_timestamp:g.expiration_timestamp,stark_signature:E};w.push(T);}let A={sender_stark_key:f.data.sender_stark_key,requests:w};return {transfer_ids:(await m.createTransfer({createTransferRequestV2:A,xImxEthAddress:p,xImxEthSignature:C}))?.data.transfer_ids}}async function Qt({signers:a,request:o,config:u}){await k(a.ethSigner,u.immutableXConfig);let c=await a.ethSigner.getAddress(),p=new imx.OrdersApi(u.immutableXConfig.apiConfiguration),m=o.sell.type==="ERC721"?"1":o.sell.amount,i=o.buy.type==="ERC721"?"1":o.buy.amount,f={user:c,amount_buy:i,token_buy:convertToSignableToken(o.buy),amount_sell:m,token_sell:convertToSignableToken(o.sell),fees:o.fees,expiration_timestamp:o.expiration_timestamp},h=await p.getSignableOrder({getSignableOrderRequestV3:f}),{signable_message:C,payload_hash:w}=h.data,A=await signRaw(C,a.ethSigner),I=await a.starkSigner.signMessage(w),g=h.data,E={createOrderRequest:{amount_buy:g.amount_buy,amount_sell:g.amount_sell,asset_id_buy:g.asset_id_buy,asset_id_sell:g.asset_id_sell,expiration_timestamp:g.expiration_timestamp,fees:o.fees,nonce:g.nonce,stark_key:g.stark_key,stark_signature:I,vault_id_buy:g.vault_id_buy,vault_id_sell:g.vault_id_sell},xImxEthAddress:c,xImxEthSignature:A};return {...(await p.createOrderV3(E)).data}}async function zt({signers:a,request:o,config:u}){let c=new imx.OrdersApi(u.immutableXConfig.apiConfiguration),p=await c.getSignableCancelOrderV3({getSignableCancelOrderRequest:{order_id:o.order_id}}),{signable_message:m,payload_hash:i}=p.data,f=await signRaw(m,a.ethSigner),h=await a.starkSigner.signMessage(i),C=await a.ethSigner.getAddress(),w=await c.cancelOrderV3({id:o.order_id.toString(),cancelOrderRequest:{order_id:o.order_id,stark_signature:h},xImxEthAddress:C,xImxEthSignature:f});return {order_id:w.data.order_id,status:w.data.status}}async function Kt(a,o){await k(a.ethSigner,o.immutableXConfig);let u=new imx.UsersApi(o.immutableXConfig.apiConfiguration),c=await a.ethSigner.getAddress(),p=await a.starkSigner.getAddress(),m=await u.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:c,stark_key:p}}),{signable_message:i,payload_hash:f}=m.data,h=await signRaw(i,a.ethSigner),C=await a.starkSigner.signMessage(f);return (await u.registerUser({registerUserRequest:{eth_signature:h,ether_key:c,stark_signature:C,stark_key:p}})).data}async function Jt(a,o){try{let c=await new imx.UsersApi(o.immutableXConfig.apiConfiguration).getUsers({user:a}),{accounts:p}=c.data;return p?.length>0}catch(u){if(isAxiosError(u)&&u.response?.status===404)return !1;throw u}}async function V(a,o,u){await k(o,u.immutableXConfig);let c=u.immutableXConfig,p=Contracts.RegistrationV4.connect(c.ethConfiguration.registrationV4ContractAddress||c.ethConfiguration.registrationContractAddress,o);try{return await p.isRegistered(a)}catch(m){if(m.reason==="USER_UNREGISTERED")return !1;throw m}}var Y=a=>{if(a!==void 0)return a;throw new Error("undefined field exception")};async function Zt(a,o){let{signers:{ethSigner:u,starkSigner:c}}=a;await k(u,a.config);let p=a.type==="ERC721"?"1":a.amount,m=await o.getSignableWithdrawalV2({getSignableWithdrawalRequest:{user:await u.getAddress(),token:convertToSignableToken(a),amount:p}}),{signable_message:i,payload_hash:f}=m.data,h=await c.signMessage(f),{ethAddress:C,ethSignature:w}=await signMessage(i,u);return (await o.createWithdrawalV2({createWithdrawalRequestV2:{sender_stark_key:Y(m.data.sender_stark_key),sender_vault_id:Y(m.data.sender_vault_id),receiver_stark_key:Y(m.data.receiver_stark_key),receiver_vault_id:Y(m.data.receiver_vault_id),amount:p,asset_id:Y(m.data.asset_id),expiration_timestamp:Y(m.data.expiration_timestamp),nonce:Y(m.data.nonce),stark_signature:h},xImxEthAddress:C,xImxEthSignature:w})).data}async function D(a,o,u,c){return (await new imx.EncodingApi(u.apiConfiguration).encodeAsset({assetType:a,encodeAssetRequest:{token:{type:o,...c&&{data:c}}}})).data}async function ut(a,o,u,c){return Contracts.CoreV4.connect(c.ethConfiguration.coreContractAddress,a).getWithdrawalBalance(o,u)}async function cr(a,o,u){let c=await D("asset","ETH",u);return await ut(a,o,c.asset_id,u)}async function dr(a,o,u,c){let p=await D("asset","ERC20",c,{token_address:u});return await ut(a,o,p.asset_id,c)}async function pr(a,o,u,c,p,m){try{let i=await p.getMintableTokenDetailsByClientTokenId({tokenAddress:u.tokenAddress,tokenId:u.tokenId}),f=await D("mintable-asset","ERC721",m,{id:u.tokenId,token_address:u.tokenAddress,...i.data.blueprint&&{blueprint:i.data.blueprint}});return await ut(a,o,f.asset_id,m)}catch(i){if(i.response?.status===404){let f=await D("asset","ERC721",m,{token_id:u.tokenId,token_address:u.tokenAddress});return await ut(a,o,f.asset_id,m)}throw i}}async function ct(a,o,u,c,p,m){switch(u.type){case"ETH":return await cr(a,o,m);case"ERC20":return await dr(a,o,u.tokenAddress,m);case"ERC721":return await pr(a,o,u,c,p,m);default:throw new Error("Unsupported token type")}}async function dt(a,o,u,c,p){let m=new EncodingApi(p.apiConfiguration),i=new MintsApi(p.apiConfiguration),f=await ct(a,o,c,m,i,p),h=await ct(a,u,c,m,i,p);return {v3Balance:f,v4Balance:h}}async function ee(a,o,u,c,p,m){let i=new EncodingApi(p.apiConfiguration),f=await ct(a,o,c,i,m,p),h=await ct(a,u,c,i,m,p);return {v3Balance:f,v4Balance:h}}var re="ERC20";async function yt(a,o,u,c,p){let m=await a.getAddress(),i=await signRegisterEthAddress(o,m,u),h=await Contracts.RegistrationV4.connect(p.ethConfiguration.registrationV4ContractAddress||p.ethConfiguration.registrationContractAddress,a).registerAndWithdrawAll.populateTransaction(m,u,i,c);return a.sendTransaction(h)}async function _t(a,o,u,c){let m=await Contracts.RegistrationV4.connect(c.ethConfiguration.registrationV4ContractAddress||c.ethConfiguration.registrationContractAddress,a).withdrawAll.populateTransaction(await a.getAddress(),o,u);return a.sendTransaction(m)}async function Tt(a,o,u,c){let m=await Contracts.CoreV4.connect(c.ethConfiguration.coreContractAddress,a).withdraw.populateTransaction(await a.getAddress(),u);return a.sendTransaction(m)}async function ne({ethSigner:a,starkSigner:o,starkPublicKey:u,token:c,config:p}){await k(a,p.immutableXConfig);let{v3Balance:m,v4Balance:i}=await dt(a,u,await a.getAddress(),{type:re,tokenAddress:c.tokenAddress},p.immutableXConfig),f=await D("asset",re,p.immutableXConfig,{token_address:c.tokenAddress});if(m>0)return await V(u,a,p)?_t(a,u,f.asset_type,p.immutableXConfig):yt(a,o,u,f.asset_type,p.immutableXConfig);if(i>0)return Tt(a,u,f.asset_type,p.immutableXConfig);throw new Error("No balance to withdraw")}var Q="ERC721";function ae(a){let{id:o}=a.data,u=a.data.blueprint||"";return mt.sanitizeHex(mt.utf8ToHex(`{${o}}:{${u}}`))}async function lr(a,o,u,c){let p=await a.getAddress(),m=await o.getAddress(),i=await D("asset",Q,c,{token_id:u.tokenId,token_address:u.tokenAddress}),f=await signRegisterEthAddress(o,p,m),C=await Contracts.RegistrationV4.connect(c.ethConfiguration.registrationV4ContractAddress||c.ethConfiguration.registrationContractAddress,a).registerAndWithdrawNft.populateTransaction(p,m,f,i.asset_type,u.tokenId);return a.sendTransaction(C)}async function gr(a,o,u,c){let p=await a.getAddress(),m=await o.getAddress(),i=await D("mintable-asset",Q,c,{id:u.data.id,token_address:u.data.tokenAddress,...u.data.blueprint&&{blueprint:u.data.blueprint}}),f=ae(u),h=await signRegisterEthAddress(o,p,m),w=await Contracts.RegistrationV4.connect(c.ethConfiguration.registrationV4ContractAddress||c.ethConfiguration.registrationContractAddress,a).registerWithdrawAndMint.populateTransaction(p,m,h,i.asset_type,f);return a.sendTransaction(w)}async function fr(a,o,u,c,p){return a.getMintableTokenDetailsByClientTokenId({tokenAddress:c.tokenAddress,tokenId:c.tokenId}).then(m=>gr(o,u,{type:Q,data:{id:c.tokenId,tokenAddress:c.tokenAddress,blueprint:m.data.blueprint}},p)).catch(m=>{if(m.response?.status===404)return lr(o,u,c,p);throw m})}async function hr(a,o,u,c){let p=await D("mintable-asset",Q,c,{id:u.data.id,token_address:u.data.tokenAddress,...u.data.blueprint&&{blueprint:u.data.blueprint}}),m=ae(u),f=await Contracts.CoreV4.connect(c.ethConfiguration.coreContractAddress,a).withdrawAndMint.populateTransaction(o,p.asset_type,m);return a.sendTransaction(f)}async function wr(a,o,u,c){let p=await D("asset",Q,c,{token_id:u.tokenId,token_address:u.tokenAddress}),i=await Contracts.CoreV4.connect(c.ethConfiguration.coreContractAddress,a).withdrawNft.populateTransaction(o,p.asset_type,u.tokenId);return a.sendTransaction(i)}async function ie(a,o,u,c,p){return a.getMintableTokenDetailsByClientTokenId({tokenAddress:c.tokenAddress,tokenId:c.tokenId}).then(m=>hr(o,u,{type:Q,data:{id:c.tokenId,tokenAddress:c.tokenAddress,blueprint:m.data.blueprint}},p)).catch(m=>{if(m.response?.status===404)return wr(o,u,c,p);throw m})}async function se({ethSigner:a,starkSigner:o,starkPublicKey:u,token:c,config:p},m){await k(a,p.immutableXConfig);let i=await a.getAddress(),{v3Balance:f,v4Balance:h}=await ee(a,u,i,{type:Q,tokenAddress:c.tokenAddress,tokenId:c.tokenId},p.immutableXConfig,m);if(f>0)return await V(u,a,p)?ie(m,a,u,c,p.immutableXConfig):fr(m,a,o,c,p.immutableXConfig);if(h>0)return ie(m,a,i,c,p.immutableXConfig);throw new Error("No balance to withdraw")}var ue="ETH";async function ce({ethSigner:a,starkSigner:o,starkPublicKey:u,config:c}){await k(a,c.immutableXConfig);let{v3Balance:p,v4Balance:m}=await dt(a,u,await a.getAddress(),{type:ue},c.immutableXConfig),i=await D("asset",ue,c.immutableXConfig);if(p>0)return await V(u,a,c)?_t(a,u,i.asset_type,c.immutableXConfig):yt(a,o,u,i.asset_type,c.immutableXConfig);if(m>0)return Tt(a,u,i.asset_type,c.immutableXConfig);throw new Error("No balance to withdraw")}async function pe({signers:a,withdrawal:o,config:u}){let c=new imx.WithdrawalsApi(u.immutableXConfig.apiConfiguration);return Zt({signers:a,config:u.immutableXConfig,...o},c)}async function me({signers:{ethSigner:a,starkSigner:o},starkPublicKey:u,token:c,config:p}){let m=new imx.MintsApi(p.immutableXConfig.apiConfiguration);switch(c.type){case"ETH":return ce({ethSigner:a,starkSigner:o,starkPublicKey:u,config:p});case"ERC20":return ne({ethSigner:a,starkSigner:o,starkPublicKey:u,token:c,config:p});case"ERC721":return se({ethSigner:a,starkSigner:o,starkPublicKey:u,token:c,config:p},m)}}async function le({signers:{ethSigner:a,starkSigner:o},request:u,config:c}){await k(a,c.immutableXConfig);let p=await a.getAddress(),m=new imx.TradesApi(c.immutableXConfig.apiConfiguration),i=await m.getSignableTrade({getSignableTradeRequest:{user:p,order_id:u.order_id,fees:u.fees}}),{signable_message:f,payload_hash:h}=i.data,C=await signRaw(f,a),w=await o.signMessage(h);return (await m.createTradeV3({createTradeRequest:{amount_buy:i.data.amount_buy,amount_sell:i.data.amount_sell,asset_id_buy:i.data.asset_id_buy,asset_id_sell:i.data.asset_id_sell,expiration_timestamp:i.data.expiration_timestamp,fee_info:i.data.fee_info,fees:u.fees,include_fees:!0,nonce:i.data.nonce,order_id:u.order_id,stark_key:i.data.stark_key,vault_id_buy:i.data.vault_id_buy,vault_id_sell:i.data.vault_id_sell,stark_signature:w},xImxEthAddress:p,xImxEthSignature:C})).data}async function Tr(a,o,u,c,p,m){let f=await Contracts.CoreV4.connect(m.ethConfiguration.coreContractAddress,a)["deposit(uint256,uint256,uint256)"].populateTransaction(c,u,p);return a.sendTransaction({...f,value:o})}async function fe({signers:{ethSigner:a},deposit:o,config:u}){await k(a,u.immutableXConfig);let c=await a.getAddress(),p={decimals:18},m=parseUnits(o.amount,"wei"),i=u.immutableXConfig,f=new imx.DepositsApi(i.apiConfiguration),h=new imx.EncodingApi(i.apiConfiguration),C={user:c,token:{type:o.type,data:p},amount:m.toString()},w=await f.getSignableDeposit({getSignableDepositRequest:C}),I=(await h.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:o.type}}})).data.asset_type,g=w.data.stark_key,E=w.data.vault_id;return Tr(a,m,I,g,E,i)}async function Ar(a,o,u,c,p,m){let f=await Contracts.CoreV4.connect(m.coreContractAddress,a).depositERC20.populateTransaction(c,u,p,o);return a.sendTransaction(f)}async function we({signers:{ethSigner:a},deposit:o,config:u}){await k(a,u.immutableXConfig);let{apiConfiguration:c,ethConfiguration:p}=u.immutableXConfig,m=await a.getAddress(),i=new imx.TokensApi(c),f=new imx.DepositsApi(c),h=new imx.EncodingApi(c),C=await i.getToken({address:o.tokenAddress}),A={decimals:parseInt(C.data.decimals),token_address:o.tokenAddress},I=parseUnits(o.amount,0),E=await Contracts.IERC20.connect(o.tokenAddress,a).approve.populateTransaction(p.coreContractAddress,I);await a.sendTransaction(E);let T={user:m,token:{type:o.type,data:A},amount:I.toString()},b=await f.getSignableDeposit({getSignableDepositRequest:T}),P=(await h.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:o.type,data:{token_address:o.tokenAddress}}}})).data.asset_type,M=b.data.stark_key,L=b.data.vault_id,v=BigInt(b.data.amount);return Ar(a,v,P,M,L,p)}async function Ir(a,o,u,c,p,m){let f=await Contracts.CoreV4.connect(m.ethConfiguration.coreContractAddress,a).depositNft.populateTransaction(c,u,p,o);return a.sendTransaction(f)}async function ye({signers:{ethSigner:a},deposit:o,config:u}){await k(a,u.immutableXConfig);let c=await a.getAddress(),{immutableXConfig:p}=u,m=new imx.DepositsApi(p.apiConfiguration),i=new imx.EncodingApi(p.apiConfiguration),f={token_address:o.tokenAddress,token_id:o.tokenId},C={user:c,token:{type:o.type,data:f},amount:"1".toString()},w=await m.getSignableDeposit({getSignableDepositRequest:C}),I=(await i.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:o.type,data:{token_address:o.tokenAddress,token_id:o.tokenId}}}})).data.asset_type,g=w.data.stark_key,E=w.data.vault_id,T=Contracts.IERC721.connect(o.tokenAddress,a),b=p.ethConfiguration.coreContractAddress;return await T.isApprovedForAll(c,b)||await T.setApprovalForAll(b,!0),Ir(a,o.tokenId,I,g,E,p)}async function _e({signers:a,deposit:o,config:u}){switch(o.type){case"ETH":return fe({signers:a,deposit:o,config:u});case"ERC20":return we({signers:a,deposit:o,config:u});case"ERC721":return ye({signers:a,deposit:o,config:u})}}async function Te({signers:a,request:o,config:u}){await k(a.ethSigner,u.immutableXConfig);let c=new imx.ExchangesApi(u.immutableXConfig.apiConfiguration),p=await a.ethSigner.getAddress(),m=o.amount,i=await c.getExchangeSignableTransfer({id:o.transactionID,getSignableTransferRequest:{sender:p,token:convertToSignableToken(o),amount:m,receiver:o.receiver}}),{signable_message:f,payload_hash:h}=i.data,C=await signRaw(f,a.ethSigner),w=await a.starkSigner.signMessage(h),A={sender_stark_key:i.data.sender_stark_key,sender_vault_id:i.data.sender_vault_id,receiver_stark_key:i.data.receiver_stark_key,receiver_vault_id:i.data.receiver_vault_id,asset_id:i.data.asset_id,amount:i.data.amount,nonce:i.data.nonce,expiration_timestamp:i.data.expiration_timestamp,stark_signature:w},I=await c.createExchangeTransfer({id:o.transactionID,createTransferRequest:A,xImxEthAddress:p,xImxEthSignature:C});return {sent_signature:I?.data.sent_signature,status:I?.data.status?.toString(),time:I?.data.time,transfer_id:I?.data.transfer_id}}var it=class{config;signers;constructor(o,u,c){this.config=o,this.signers={ethSigner:u,starkSigner:c};}async getAddress(){return this.signers.ethSigner.getAddress()}async isRegisteredOffchain(){let o=await this.getAddress();return Jt(o,this.config)}registerOffchain(){return Kt(this.signers,this.config)}batchNftTransfer(o){return Vt({signers:this.signers,request:o,config:this.config})}cancelOrder(o){return zt({signers:this.signers,request:o,config:this.config})}completeWithdrawal(o,u){return me({config:this.config,signers:this.signers,token:u,starkPublicKey:o})}createOrder(o){return Qt({signers:this.signers,request:o,config:this.config})}createTrade(o){return le({signers:this.signers,request:o,config:this.config})}deposit(o){return _e({signers:this.signers,deposit:o,config:this.config})}exchangeTransfer(o){return Te({signers:this.signers,request:o,config:this.config})}async isRegisteredOnchain(){let o=await this.signers.starkSigner.getAddress();return V(o,this.signers.ethSigner,this.config)}prepareWithdrawal(o){return pe({signers:this.signers,withdrawal:o,config:this.config})}transfer(o){return Gt({signers:this.signers,request:o,config:this.config})}};var Re={SWITCH_CHAIN:"wallet_switchEthereumChain",CONNECT:"eth_requestAccounts"};function Ae(a){return !!a?.request}async function Ie(a,o){await a.request({method:Re.CONNECT}),o&&await a.request({method:Re.SWITCH_CHAIN,params:[{chainId:`0x${o.toString(16)}`}]});}var Br={PROVIDER_NOT_FOUND:"The Metamask provider was not found"};async function Se({chainID:a}){let o=await xr();if(!Ae(o))throw new Error(Br.PROVIDER_NOT_FOUND);return await Ie(o,a),new BrowserProvider(o)}var F="message";function K(a,o){a&&a.contentWindow&&a.contentWindow.postMessage(o,new URL(a.src).origin);}function J(a,o,u,c){if(a&&o.source!==a.contentWindow)return;let p=o.data;p.type===u&&c(p.details);}var lt=class{publicAddress;iframe;constructor(o,u){this.publicAddress=o,this.iframe=u;}getAddress(){return this.publicAddress}signMessage(o){return new Promise((u,c)=>{let p=m=>{J(this.iframe,m,"SIGN_MESSAGE_RESPONSE",i=>{window.removeEventListener(F,p),i.success||c(new Error(i.error?.message)),u(i.data.signedMessage);});};window.addEventListener(F,p),K(this.iframe,{type:"SIGN_MESSAGE_REQUEST",details:{starkPublicKey:this.publicAddress,message:o}});})}getIFrame(){return this.iframe}getYCoordinate(){return new Promise((o,u)=>{let c=p=>{J(this.iframe,p,"GET_Y_COORDINATE_RESPONSE",m=>{window.removeEventListener(F,c),m.success||u(new Error(m.error?.message)),o(m.data.yCoordinate);});};window.addEventListener(F,c),K(this.iframe,{type:"GET_Y_COORDINATE_REQUEST",details:{starkPublicKey:this.publicAddress}});})}};var ke="imx-wallet-app",vr={[Environment.SANDBOX]:"https://wallets.sandbox.immutable.com",[Environment.PRODUCTION]:"https://wallets.immutable.com"},Ur="display: none;";function Mr(){return document.querySelector(`iframe#${ke}`)}async function Lr(a){return new Promise(o=>{let u=document.createElement("iframe");u.setAttribute("id",ke),u.setAttribute("src",vr[a]),u.setAttribute("style",Ur),document.body.appendChild(u),u.onload=()=>o(u);})}async function xe(a){let o=Mr();return o||await Lr(a)}var tt=new Uint8Array([79,110,108,121,32,115,105,103,110,32,116,104,105,115,32,114,101,113,117,101,115,116,32,105,102,32,121,111,117,226,128,153,118,101,32,105,110,105,116,105,97,116,101,100,32,97,110,32,97,99,116,105,111,110,32,119,105,116,104,32,73,109,109,117,116,97,98,108,101,32,88,46]),ot="Only sign this request if you\u2019ve initiated an action with Immutable X.",gt=_.from(ot,"utf8").toString("utf8"),Dr="The L2 IMX Wallet connection has failed";function Xr(){track("xProvider","log",{param:"navigator.language",val:navigator?.language}),track("xProvider","log",{param:"navigator.languages",val:navigator?.languages?.join(",")}),track("xProvider","log",{param:"document.characterSet",val:document?.characterSet}),track("xProvider","log",{param:"DEFAULT_CONNECTION_STRING_2",val:gt}),track("xProvider","log",{param:"DEFAULT_CONNECTION_BYTES",val:tt.toString()}),track("xProvider","log",{param:"DEFAULT_CONNECTION_STRING_1",val:toUtf8Bytes(ot).toString()}),track("xProvider","log",{param:"DEFAULT_CONNECTION_STRING_2",val:toUtf8Bytes(gt).toString()}),track("xProvider","log",{param:"DEFAULT_CONNECTION_STRING_1.normalize()",val:toUtf8Bytes(ot.normalize()).toString()}),track("xProvider","log",{param:"DEFAULT_CONNECTION_STRING_2.normalize()",val:toUtf8Bytes(gt.normalize()).toString()}),track("xProvider","log",{param:"Buffer.from(DEFAULT_CONNECTION_STRING_1, utf8).toString()",val:_.from(ot,"utf8").toString()}),track("xProvider","log",{param:"DEFAULT_CONNECTION_BYTES === toUtf8Bytes(DEFAULT_CONNECTION_STRING_1)",val:tt.toString()===toUtf8Bytes(ot).toString()}),track("xProvider","log",{param:"DEFAULT_CONNECTION_BYTES === toUtf8Bytes(DEFAULT_CONNECTION_STRING_2)",val:tt.toString()===toUtf8Bytes(gt).toString()}),track("xProvider","log",{param:"DEFAULT_CONNECTION_BYTES",val:tt.toString()}),track("xProvider","log",{param:"DEFAULT_CONNECTION_BYTES.toUtf8String()",val:toUtf8String(tt)});}async function Pe(a,o){let u=await a.getSigner(),c=await u.getAddress();Xr();let p=await u.signMessage(tt),m=await xe(o);return new Promise((i,f)=>{let h=C=>{J(m,C,"CONNECT_WALLET_RESPONSE",w=>{window.removeEventListener(F,h),w.success||f(new Error(Dr)),i(new lt(w.data.starkPublicKey,m));});};window.addEventListener(F,h),K(m,{type:"CONNECT_WALLET_REQUEST",details:{ethAddress:c,signature:p}});})}async function Be(a){let o=a.getIFrame();return new Promise((u,c)=>{let p=m=>{J(o,m,"DISCONNECT_WALLET_RESPONSE",i=>{window.removeEventListener(F,p),!i.success&&i.error&&c(i.error),o.remove(),u();});};window.addEventListener(F,p),K(o,{type:"DISCONNECT_WALLET_REQUEST",details:{starkPublicKey:a.getAddress()}});})}var et=class extends Error{type;constructor(o,u){super(o),this.type=u;}},ft=async(a,o)=>{try{return await a()}catch(u){let c=o.message||`${u.message}`||"UnknownError";throw new et(c,o.type)}};var At=class a extends it{static imxSigner;static async connect(o){return await ft(async()=>{let u=await Se({chainID:o.immutableXConfig.ethConfiguration.chainID});this.imxSigner=await Pe(u,o.baseConfig.environment);let c=await u.getSigner();return track("xProvider","log",{param:"metaMaskProvider.getSigner().getAddress()",val:await c.getAddress()}),track("xProvider","log",{param:"imxSigner.getAddress()",val:this.imxSigner.getAddress()}),new a(o,c,this.imxSigner)},{type:"WALLET_CONNECTION_ERROR"})}static async disconnect(){if(!this.imxSigner)throw new et("Attempted to disconnect from the MetaMask IMX provider without an established connection","PROVIDER_CONNECTION_ERROR");return ft(async()=>{await Be(this.imxSigner);},{type:"PROVIDER_CONNECTION_ERROR"})}static async signMessage(o){if(!this.imxSigner)throw new et("Attempted to sign a message with the MetaMask IMX provider without an established connection","PROVIDER_CONNECTION_ERROR");return ft(async()=>await this.imxSigner.signMessage(o),{type:"PROVIDER_CONNECTION_ERROR"})}};var It=class{immutableXConfig;baseConfig;constructor({baseConfig:o,overrides:u}){if(this.baseConfig=o,u)this.immutableXConfig=u.immutableXConfig;else {let c=new ImxConfiguration({baseConfig:o});this.immutableXConfig=c.immutableXConfig;}}};/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
|
|
10
|
+
function Ue(t,e){return t===e.ethConfiguration.chainID}async function l(t,e){let r=(await t.provider?.getNetwork())?.chainId;if(!Ue(Number(r),e))throw new Error("The wallet used for this operation is not connected to the correct network.")}async function Y({signers:{ethSigner:t,starkSigner:e},request:r,config:n}){await l(t,n.immutableXConfig);let a=await t.getAddress(),i=new imx.TransfersApi(n.immutableXConfig.apiConfiguration),s=r.type==="ERC721"?"1":r.amount,o=await i.getSignableTransferV1({getSignableTransferRequest:{sender:a,token:convertToSignableToken(r),amount:s,receiver:r.receiver}}),{signable_message:d,payload_hash:p}=o.data,g=await signRaw(d,t),E=await e.signMessage(p),f={sender_stark_key:o.data.sender_stark_key,sender_vault_id:o.data.sender_vault_id,receiver_stark_key:o.data.receiver_stark_key,receiver_vault_id:o.data.receiver_vault_id,asset_id:o.data.asset_id,amount:o.data.amount,nonce:o.data.nonce,expiration_timestamp:o.data.expiration_timestamp,stark_signature:E},c=await i.createTransferV1({createTransferRequest:f,xImxEthAddress:a,xImxEthSignature:g});return {sent_signature:c?.data.sent_signature,status:c?.data.status?.toString(),time:c?.data.time,transfer_id:c?.data.transfer_id}}async function Q({signers:{ethSigner:t,starkSigner:e},request:r,config:n}){await l(t,n.immutableXConfig);let a=await t.getAddress(),i=new imx.TransfersApi(n.immutableXConfig.apiConfiguration),s=r.map(c=>({amount:"1",token:convertToSignableToken({type:"ERC721",tokenId:c.tokenId,tokenAddress:c.tokenAddress}),receiver:c.receiver})),o=await i.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:a,signable_requests:s}}),d=o.data.signable_message;if(d===void 0)throw new Error("Invalid response from Signable registration offchain");let p=await signRaw(d,t),g=[];for(let c of o.data.signable_responses){let w=await e.signMessage(c.payload_hash),T={sender_vault_id:c.sender_vault_id,receiver_stark_key:c.receiver_stark_key,receiver_vault_id:c.receiver_vault_id,asset_id:c.asset_id,amount:c.amount,nonce:c.nonce,expiration_timestamp:c.expiration_timestamp,stark_signature:w};g.push(T);}let E={sender_stark_key:o.data.sender_stark_key,requests:g};return {transfer_ids:(await i.createTransfer({createTransferRequestV2:E,xImxEthAddress:a,xImxEthSignature:p}))?.data.transfer_ids}}async function j({signers:t,request:e,config:r}){await l(t.ethSigner,r.immutableXConfig);let n=await t.ethSigner.getAddress(),a=new imx.OrdersApi(r.immutableXConfig.apiConfiguration),i=e.sell.type==="ERC721"?"1":e.sell.amount,s=e.buy.type==="ERC721"?"1":e.buy.amount,o={user:n,amount_buy:s,token_buy:convertToSignableToken(e.buy),amount_sell:i,token_sell:convertToSignableToken(e.sell),fees:e.fees,expiration_timestamp:e.expiration_timestamp},d=await a.getSignableOrder({getSignableOrderRequestV3:o}),{signable_message:p,payload_hash:g}=d.data,E=await signRaw(p,t.ethSigner),f=await t.starkSigner.signMessage(g),c=d.data,w={createOrderRequest:{amount_buy:c.amount_buy,amount_sell:c.amount_sell,asset_id_buy:c.asset_id_buy,asset_id_sell:c.asset_id_sell,expiration_timestamp:c.expiration_timestamp,fees:e.fees,nonce:c.nonce,stark_key:c.stark_key,stark_signature:f,vault_id_buy:c.vault_id_buy,vault_id_sell:c.vault_id_sell},xImxEthAddress:n,xImxEthSignature:E};return {...(await a.createOrderV3(w)).data}}async function J({signers:t,request:e,config:r}){let n=new imx.OrdersApi(r.immutableXConfig.apiConfiguration),a=await n.getSignableCancelOrderV3({getSignableCancelOrderRequest:{order_id:e.order_id}}),{signable_message:i,payload_hash:s}=a.data,o=await signRaw(i,t.ethSigner),d=await t.starkSigner.signMessage(s),p=await t.ethSigner.getAddress(),g=await n.cancelOrderV3({id:e.order_id.toString(),cancelOrderRequest:{order_id:e.order_id,stark_signature:d},xImxEthAddress:p,xImxEthSignature:o});return {order_id:g.data.order_id,status:g.data.status}}async function ee(t,e){await l(t.ethSigner,e.immutableXConfig);let r=new imx.UsersApi(e.immutableXConfig.apiConfiguration),n=await t.ethSigner.getAddress(),a=await t.starkSigner.getAddress(),i=await r.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:n,stark_key:a}}),{signable_message:s,payload_hash:o}=i.data,d=await signRaw(s,t.ethSigner),p=await t.starkSigner.signMessage(o);return (await r.registerUser({registerUserRequest:{eth_signature:d,ether_key:n,stark_signature:p,stark_key:a}})).data}async function te(t,e){try{let n=await new imx.UsersApi(e.immutableXConfig.apiConfiguration).getUsers({user:t}),{accounts:a}=n.data;return a?.length>0}catch(r){if(isAxiosError(r)&&r.response?.status===404)return !1;throw r}}async function _(t,e,r){await l(e,r.immutableXConfig);let n=r.immutableXConfig,a=Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,e);try{return await a.isRegistered(t)}catch(i){if(i.reason==="USER_UNREGISTERED")return !1;throw i}}var h=t=>{if(t!==void 0)return t;throw new Error("undefined field exception")};async function re(t,e){let{signers:{ethSigner:r,starkSigner:n}}=t;await l(r,t.config);let a=t.type==="ERC721"?"1":t.amount,i=await e.getSignableWithdrawalV2({getSignableWithdrawalRequest:{user:await r.getAddress(),token:convertToSignableToken(t),amount:a}}),{signable_message:s,payload_hash:o}=i.data,d=await n.signMessage(o),{ethAddress:p,ethSignature:g}=await signMessage(s,r);return (await e.createWithdrawalV2({createWithdrawalRequestV2:{sender_stark_key:h(i.data.sender_stark_key),sender_vault_id:h(i.data.sender_vault_id),receiver_stark_key:h(i.data.receiver_stark_key),receiver_vault_id:h(i.data.receiver_vault_id),amount:a,asset_id:h(i.data.asset_id),expiration_timestamp:h(i.data.expiration_timestamp),nonce:h(i.data.nonce),stark_signature:d},xImxEthAddress:p,xImxEthSignature:g})).data}async function C(t,e,r,n){return (await new imx.EncodingApi(r.apiConfiguration).encodeAsset({assetType:t,encodeAssetRequest:{token:{type:e,...n&&{data:n}}}})).data}async function v(t,e,r,n){return Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).getWithdrawalBalance(e,r)}async function ze(t,e,r){let n=await C("asset","ETH",r);return await v(t,e,n.asset_id,r)}async function Ke(t,e,r,n){let a=await C("asset","ERC20",n,{token_address:r});return await v(t,e,a.asset_id,n)}async function je(t,e,r,n,a,i){try{let s=await a.getMintableTokenDetailsByClientTokenId({tokenAddress:r.tokenAddress,tokenId:r.tokenId}),o=await C("mintable-asset","ERC721",i,{id:r.tokenId,token_address:r.tokenAddress,...s.data.blueprint&&{blueprint:s.data.blueprint}});return await v(t,e,o.asset_id,i)}catch(s){if(s.response?.status===404){let o=await C("asset","ERC721",i,{token_id:r.tokenId,token_address:r.tokenAddress});return await v(t,e,o.asset_id,i)}throw s}}async function x(t,e,r,n,a,i){switch(r.type){case"ETH":return await ze(t,e,i);case"ERC20":return await Ke(t,e,r.tokenAddress,i);case"ERC721":return await je(t,e,r,n,a,i);default:throw new Error("Unsupported token type")}}async function I(t,e,r,n,a){let i=new EncodingApi(a.apiConfiguration),s=new MintsApi(a.apiConfiguration),o=await x(t,e,n,i,s,a),d=await x(t,r,n,i,s,a);return {v3Balance:o,v4Balance:d}}async function ae(t,e,r,n,a,i){let s=new EncodingApi(a.apiConfiguration),o=await x(t,e,n,s,i,a),d=await x(t,r,n,s,i,a);return {v3Balance:o,v4Balance:d}}var ie="ERC20";async function D(t,e,r,n,a){let i=await t.getAddress(),s=await signRegisterEthAddress(e,i,r),d=await Contracts.RegistrationV4.connect(a.ethConfiguration.registrationV4ContractAddress||a.ethConfiguration.registrationContractAddress,t).registerAndWithdrawAll.populateTransaction(i,r,s,n);return t.sendTransaction(d)}async function q(t,e,r,n){let i=await Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).withdrawAll.populateTransaction(await t.getAddress(),e,r);return t.sendTransaction(i)}async function L(t,e,r,n){let i=await Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).withdraw.populateTransaction(await t.getAddress(),r);return t.sendTransaction(i)}async function se({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a}){await l(t,a.immutableXConfig);let{v3Balance:i,v4Balance:s}=await I(t,r,await t.getAddress(),{type:ie,tokenAddress:n.tokenAddress},a.immutableXConfig),o=await C("asset",ie,a.immutableXConfig,{token_address:n.tokenAddress});if(i>0)return await _(r,t,a)?q(t,r,o.asset_type,a.immutableXConfig):D(t,e,r,o.asset_type,a.immutableXConfig);if(s>0)return L(t,r,o.asset_type,a.immutableXConfig);throw new Error("No balance to withdraw")}var A="ERC721";function ce(t){let{id:e}=t.data,r=t.data.blueprint||"";return N.sanitizeHex(N.utf8ToHex(`{${e}}:{${r}}`))}async function Ze(t,e,r,n){let a=await t.getAddress(),i=await e.getAddress(),s=await C("asset",A,n,{token_id:r.tokenId,token_address:r.tokenAddress}),o=await signRegisterEthAddress(e,a,i),p=await Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).registerAndWithdrawNft.populateTransaction(a,i,o,s.asset_type,r.tokenId);return t.sendTransaction(p)}async function et(t,e,r,n){let a=await t.getAddress(),i=await e.getAddress(),s=await C("mintable-asset",A,n,{id:r.data.id,token_address:r.data.tokenAddress,...r.data.blueprint&&{blueprint:r.data.blueprint}}),o=ce(r),d=await signRegisterEthAddress(e,a,i),g=await Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).registerWithdrawAndMint.populateTransaction(a,i,d,s.asset_type,o);return t.sendTransaction(g)}async function tt(t,e,r,n,a){return t.getMintableTokenDetailsByClientTokenId({tokenAddress:n.tokenAddress,tokenId:n.tokenId}).then(i=>et(e,r,{type:A,data:{id:n.tokenId,tokenAddress:n.tokenAddress,blueprint:i.data.blueprint}},a)).catch(i=>{if(i.response?.status===404)return Ze(e,r,n,a);throw i})}async function rt(t,e,r,n){let a=await C("mintable-asset",A,n,{id:r.data.id,token_address:r.data.tokenAddress,...r.data.blueprint&&{blueprint:r.data.blueprint}}),i=ce(r),o=await Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).withdrawAndMint.populateTransaction(e,a.asset_type,i);return t.sendTransaction(o)}async function nt(t,e,r,n){let a=await C("asset",A,n,{token_id:r.tokenId,token_address:r.tokenAddress}),s=await Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).withdrawNft.populateTransaction(e,a.asset_type,r.tokenId);return t.sendTransaction(s)}async function oe(t,e,r,n,a){return t.getMintableTokenDetailsByClientTokenId({tokenAddress:n.tokenAddress,tokenId:n.tokenId}).then(i=>rt(e,r,{type:A,data:{id:n.tokenId,tokenAddress:n.tokenAddress,blueprint:i.data.blueprint}},a)).catch(i=>{if(i.response?.status===404)return nt(e,r,n,a);throw i})}async function me({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a},i){await l(t,a.immutableXConfig);let s=await t.getAddress(),{v3Balance:o,v4Balance:d}=await ae(t,r,s,{type:A,tokenAddress:n.tokenAddress,tokenId:n.tokenId},a.immutableXConfig,i);if(o>0)return await _(r,t,a)?oe(i,t,r,n,a.immutableXConfig):tt(i,t,e,n,a.immutableXConfig);if(d>0)return oe(i,t,s,n,a.immutableXConfig);throw new Error("No balance to withdraw")}var ue="ETH";async function ge({ethSigner:t,starkSigner:e,starkPublicKey:r,config:n}){await l(t,n.immutableXConfig);let{v3Balance:a,v4Balance:i}=await I(t,r,await t.getAddress(),{type:ue},n.immutableXConfig),s=await C("asset",ue,n.immutableXConfig);if(a>0)return await _(r,t,n)?q(t,r,s.asset_type,n.immutableXConfig):D(t,e,r,s.asset_type,n.immutableXConfig);if(i>0)return L(t,r,s.asset_type,n.immutableXConfig);throw new Error("No balance to withdraw")}async function le({signers:t,withdrawal:e,config:r}){let n=new imx.WithdrawalsApi(r.immutableXConfig.apiConfiguration);return re({signers:t,config:r.immutableXConfig,...e},n)}async function fe({signers:{ethSigner:t,starkSigner:e},starkPublicKey:r,token:n,config:a}){let i=new imx.MintsApi(a.immutableXConfig.apiConfiguration);switch(n.type){case"ETH":return ge({ethSigner:t,starkSigner:e,starkPublicKey:r,config:a});case"ERC20":return se({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a});case"ERC721":return me({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a},i)}}async function Ce({signers:{ethSigner:t,starkSigner:e},request:r,config:n}){await l(t,n.immutableXConfig);let a=await t.getAddress(),i=new imx.TradesApi(n.immutableXConfig.apiConfiguration),s=await i.getSignableTrade({getSignableTradeRequest:{user:a,order_id:r.order_id,fees:r.fees}}),{signable_message:o,payload_hash:d}=s.data,p=await signRaw(o,t),g=await e.signMessage(d);return (await i.createTradeV3({createTradeRequest:{amount_buy:s.data.amount_buy,amount_sell:s.data.amount_sell,asset_id_buy:s.data.asset_id_buy,asset_id_sell:s.data.asset_id_sell,expiration_timestamp:s.data.expiration_timestamp,fee_info:s.data.fee_info,fees:r.fees,include_fees:!0,nonce:s.data.nonce,order_id:r.order_id,stark_key:s.data.stark_key,vault_id_buy:s.data.vault_id_buy,vault_id_sell:s.data.vault_id_sell,stark_signature:g},xImxEthAddress:a,xImxEthSignature:p})).data}async function dt(t,e,r,n,a,i){let o=await Contracts.CoreV4.connect(i.ethConfiguration.coreContractAddress,t)["deposit(uint256,uint256,uint256)"].populateTransaction(n,r,a);return t.sendTransaction({...o,value:e})}async function Re({signers:{ethSigner:t},deposit:e,config:r}){await l(t,r.immutableXConfig);let n=await t.getAddress(),a={decimals:18},i=parseUnits(e.amount,"wei"),s=r.immutableXConfig,o=new imx.DepositsApi(s.apiConfiguration),d=new imx.EncodingApi(s.apiConfiguration),p={user:n,token:{type:e.type,data:a},amount:i.toString()},g=await o.getSignableDeposit({getSignableDepositRequest:p}),f=(await d.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type}}})).data.asset_type,c=g.data.stark_key,w=g.data.vault_id;return dt(t,i,f,c,w,s)}async function mt(t,e,r,n,a,i){let o=await Contracts.CoreV4.connect(i.coreContractAddress,t).depositERC20.populateTransaction(n,r,a,e);return t.sendTransaction(o)}async function _e({signers:{ethSigner:t},deposit:e,config:r}){await l(t,r.immutableXConfig);let{apiConfiguration:n,ethConfiguration:a}=r.immutableXConfig,i=await t.getAddress(),s=new imx.TokensApi(n),o=new imx.DepositsApi(n),d=new imx.EncodingApi(n),p=await s.getToken({address:e.tokenAddress}),E={decimals:parseInt(p.data.decimals),token_address:e.tokenAddress},f=parseUnits(e.amount,0),w=await Contracts.IERC20.connect(e.tokenAddress,t).approve.populateTransaction(a.coreContractAddress,f);await t.sendTransaction(w);let T={user:i,token:{type:e.type,data:E},amount:f.toString()},b=await o.getSignableDeposit({getSignableDepositRequest:T}),Xe=(await d.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type,data:{token_address:e.tokenAddress}}}})).data.asset_type,De=b.data.stark_key,qe=b.data.vault_id,Le=BigInt(b.data.amount);return mt(t,Le,Xe,De,qe,a)}async function ut(t,e,r,n,a,i){let o=await Contracts.CoreV4.connect(i.ethConfiguration.coreContractAddress,t).depositNft.populateTransaction(n,r,a,e);return t.sendTransaction(o)}async function Ae({signers:{ethSigner:t},deposit:e,config:r}){await l(t,r.immutableXConfig);let n=await t.getAddress(),{immutableXConfig:a}=r,i=new imx.DepositsApi(a.apiConfiguration),s=new imx.EncodingApi(a.apiConfiguration),o={token_address:e.tokenAddress,token_id:e.tokenId},p={user:n,token:{type:e.type,data:o},amount:"1".toString()},g=await i.getSignableDeposit({getSignableDepositRequest:p}),f=(await s.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type,data:{token_address:e.tokenAddress,token_id:e.tokenId}}}})).data.asset_type,c=g.data.stark_key,w=g.data.vault_id,T=Contracts.IERC721.connect(e.tokenAddress,t),b=a.ethConfiguration.coreContractAddress;return await T.isApprovedForAll(n,b)||await T.setApprovalForAll(b,!0),ut(t,e.tokenId,f,c,w,a)}async function be({signers:t,deposit:e,config:r}){switch(e.type){case"ETH":return Re({signers:t,deposit:e,config:r});case"ERC20":return _e({signers:t,deposit:e,config:r});case"ERC721":return Ae({signers:t,deposit:e,config:r})}}async function ye({signers:t,request:e,config:r}){await l(t.ethSigner,r.immutableXConfig);let n=new imx.ExchangesApi(r.immutableXConfig.apiConfiguration),a=await t.ethSigner.getAddress(),i=e.amount,s=await n.getExchangeSignableTransfer({id:e.transactionID,getSignableTransferRequest:{sender:a,token:convertToSignableToken(e),amount:i,receiver:e.receiver}}),{signable_message:o,payload_hash:d}=s.data,p=await signRaw(o,t.ethSigner),g=await t.starkSigner.signMessage(d),E={sender_stark_key:s.data.sender_stark_key,sender_vault_id:s.data.sender_vault_id,receiver_stark_key:s.data.receiver_stark_key,receiver_vault_id:s.data.receiver_vault_id,asset_id:s.data.asset_id,amount:s.data.amount,nonce:s.data.nonce,expiration_timestamp:s.data.expiration_timestamp,stark_signature:g},f=await n.createExchangeTransfer({id:e.transactionID,createTransferRequest:E,xImxEthAddress:a,xImxEthSignature:p});return {sent_signature:f?.data.sent_signature,status:f?.data.status?.toString(),time:f?.data.time,transfer_id:f?.data.transfer_id}}var P=class{config;signers;constructor(e,r,n){this.config=e,this.signers={ethSigner:r,starkSigner:n};}async getAddress(){return this.signers.ethSigner.getAddress()}async isRegisteredOffchain(){let e=await this.getAddress();return te(e,this.config)}registerOffchain(){return ee(this.signers,this.config)}batchNftTransfer(e){return Q({signers:this.signers,request:e,config:this.config})}cancelOrder(e){return J({signers:this.signers,request:e,config:this.config})}completeWithdrawal(e,r){return fe({config:this.config,signers:this.signers,token:r,starkPublicKey:e})}createOrder(e){return j({signers:this.signers,request:e,config:this.config})}createTrade(e){return Ce({signers:this.signers,request:e,config:this.config})}deposit(e){return be({signers:this.signers,deposit:e,config:this.config})}exchangeTransfer(e){return ye({signers:this.signers,request:e,config:this.config})}async isRegisteredOnchain(){let e=await this.signers.starkSigner.getAddress();return _(e,this.signers.ethSigner,this.config)}prepareWithdrawal(e){return le({signers:this.signers,withdrawal:e,config:this.config})}transfer(e){return Y({signers:this.signers,request:e,config:this.config})}};var Se={SWITCH_CHAIN:"wallet_switchEthereumChain",CONNECT:"eth_requestAccounts"};function ke(t){return !!t?.request}async function Pe(t,e){await t.request({method:Se.CONNECT}),e&&await t.request({method:Se.SWITCH_CHAIN,params:[{chainId:`0x${e.toString(16)}`}]});}var Et={PROVIDER_NOT_FOUND:"The Metamask provider was not found"};async function ve({chainID:t}){let e=await ft();if(!ke(e))throw new Error(Et.PROVIDER_NOT_FOUND);return await Pe(e,t),new BrowserProvider(e)}var R="message";function y(t,e){t&&t.contentWindow&&t.contentWindow.postMessage(e,new URL(t.src).origin);}function S(t,e,r,n){if(t&&e.source!==t.contentWindow)return;let a=e.data;a.type===r&&n(a.details);}var M=class{publicAddress;iframe;constructor(e,r){this.publicAddress=e,this.iframe=r;}getAddress(){return this.publicAddress}signMessage(e){return new Promise((r,n)=>{let a=i=>{S(this.iframe,i,"SIGN_MESSAGE_RESPONSE",s=>{window.removeEventListener(R,a),s.success||n(new Error(s.error?.message)),r(s.data.signedMessage);});};window.addEventListener(R,a),y(this.iframe,{type:"SIGN_MESSAGE_REQUEST",details:{starkPublicKey:this.publicAddress,message:e}});})}getIFrame(){return this.iframe}getYCoordinate(){return new Promise((e,r)=>{let n=a=>{S(this.iframe,a,"GET_Y_COORDINATE_RESPONSE",i=>{window.removeEventListener(R,n),i.success||r(new Error(i.error?.message)),e(i.data.yCoordinate);});};window.addEventListener(R,n),y(this.iframe,{type:"GET_Y_COORDINATE_REQUEST",details:{starkPublicKey:this.publicAddress}});})}};var Ie="imx-wallet-app",_t={[Environment.SANDBOX]:"https://wallets.sandbox.immutable.com",[Environment.PRODUCTION]:"https://wallets.immutable.com"},Tt="display: none;";function ht(){return document.querySelector(`iframe#${Ie}`)}async function At(t){return new Promise(e=>{let r=document.createElement("iframe");r.setAttribute("id",Ie),r.setAttribute("src",_t[t]),r.setAttribute("style",Tt),document.body.appendChild(r),r.onload=()=>e(r);})}async function Oe(t){let e=ht();return e||await At(t)}var yt="Only sign this request if you\u2019ve initiated an action with Immutable X.",St="The L2 IMX Wallet connection has failed";async function Ne(t,e){let r=await t.getSigner(),n=await r.getAddress(),a=await r.signMessage(toUtf8Bytes(yt)),i=await Oe(e);return new Promise((s,o)=>{let d=p=>{S(i,p,"CONNECT_WALLET_RESPONSE",g=>{window.removeEventListener(R,d),g.success||o(new Error(St)),s(new M(g.data.starkPublicKey,i));});};window.addEventListener(R,d),y(i,{type:"CONNECT_WALLET_REQUEST",details:{ethAddress:n,signature:a}});})}async function Me(t){let e=t.getIFrame();return new Promise((r,n)=>{let a=i=>{S(e,i,"DISCONNECT_WALLET_RESPONSE",s=>{window.removeEventListener(R,a),!s.success&&s.error&&n(s.error),e.remove(),r();});};window.addEventListener(R,a),y(e,{type:"DISCONNECT_WALLET_REQUEST",details:{starkPublicKey:t.getAddress()}});})}var k=class extends Error{type;constructor(e,r){super(e),this.type=r;}},W=async(t,e)=>{try{return await t()}catch(r){let n=e.message||`${r.message}`||"UnknownError";throw new k(n,e.type)}};var V=class t extends P{static imxSigner;static async connect(e){return await W(async()=>{let r=await ve({chainID:e.immutableXConfig.ethConfiguration.chainID});return this.imxSigner=await Ne(r,e.baseConfig.environment),new t(e,await r.getSigner(),this.imxSigner)},{type:"WALLET_CONNECTION_ERROR"})}static async disconnect(){if(!this.imxSigner)throw new k("Attempted to disconnect from the MetaMask IMX provider without an established connection","PROVIDER_CONNECTION_ERROR");return W(async()=>{await Me(this.imxSigner);},{type:"PROVIDER_CONNECTION_ERROR"})}static async signMessage(e){if(!this.imxSigner)throw new k("Attempted to sign a message with the MetaMask IMX provider without an established connection","PROVIDER_CONNECTION_ERROR");return W(async()=>await this.imxSigner.signMessage(e),{type:"PROVIDER_CONNECTION_ERROR"})}};var B=class{immutableXConfig;baseConfig;constructor({baseConfig:e,overrides:r}){if(this.baseConfig=e,r)this.immutableXConfig=r.immutableXConfig;else {let n=new ImxConfiguration({baseConfig:e});this.immutableXConfig=n.immutableXConfig;}}};
|
|
12
11
|
|
|
13
|
-
export {
|
|
12
|
+
export { P as GenericIMXProvider, V as MetaMaskIMXProvider, B as ProviderConfiguration };
|
package/dist/node/index.cjs
CHANGED
|
@@ -4,10 +4,9 @@ var generatedClients = require('@imtbl/generated-clients');
|
|
|
4
4
|
var toolkit = require('@imtbl/toolkit');
|
|
5
5
|
var xClient = require('@imtbl/x-client');
|
|
6
6
|
var axios = require('axios');
|
|
7
|
-
var
|
|
7
|
+
var I = require('enc-utils');
|
|
8
8
|
var ethers = require('ethers');
|
|
9
|
-
var
|
|
10
|
-
var Tt = require('@metamask/detect-provider');
|
|
9
|
+
var pt = require('@metamask/detect-provider');
|
|
11
10
|
var config = require('@imtbl/config');
|
|
12
11
|
|
|
13
12
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -30,11 +29,11 @@ function _interopNamespace(e) {
|
|
|
30
29
|
return Object.freeze(n);
|
|
31
30
|
}
|
|
32
31
|
|
|
33
|
-
var
|
|
34
|
-
var
|
|
32
|
+
var I__namespace = /*#__PURE__*/_interopNamespace(I);
|
|
33
|
+
var pt__default = /*#__PURE__*/_interopDefault(pt);
|
|
35
34
|
|
|
36
|
-
function Ve(t,e){return t===e.ethConfiguration.chainID}async function u(t,e){let r=(await t.provider?.getNetwork())?.chainId;if(!Ve(Number(r),e))throw new Error("The wallet used for this operation is not connected to the correct network.")}async function $({signers:{ethSigner:t,starkSigner:e},request:r,config:a}){await u(t,a.immutableXConfig);let n=await t.getAddress(),i=new generatedClients.imx.TransfersApi(a.immutableXConfig.apiConfiguration),s=r.type==="ERC721"?"1":r.amount,o=await i.getSignableTransferV1({getSignableTransferRequest:{sender:n,token:toolkit.convertToSignableToken(r),amount:s,receiver:r.receiver}}),{signable_message:d,payload_hash:g}=o.data,m=await toolkit.signRaw(d,t),C=await e.signMessage(g),p={sender_stark_key:o.data.sender_stark_key,sender_vault_id:o.data.sender_vault_id,receiver_stark_key:o.data.receiver_stark_key,receiver_vault_id:o.data.receiver_vault_id,asset_id:o.data.asset_id,amount:o.data.amount,nonce:o.data.nonce,expiration_timestamp:o.data.expiration_timestamp,stark_signature:C},c=await i.createTransferV1({createTransferRequest:p,xImxEthAddress:n,xImxEthSignature:m});return {sent_signature:c?.data.sent_signature,status:c?.data.status?.toString(),time:c?.data.time,transfer_id:c?.data.transfer_id}}async function K({signers:{ethSigner:t,starkSigner:e},request:r,config:a}){await u(t,a.immutableXConfig);let n=await t.getAddress(),i=new generatedClients.imx.TransfersApi(a.immutableXConfig.apiConfiguration),s=r.map(c=>({amount:"1",token:toolkit.convertToSignableToken({type:"ERC721",tokenId:c.tokenId,tokenAddress:c.tokenAddress}),receiver:c.receiver})),o=await i.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:n,signable_requests:s}}),d=o.data.signable_message;if(d===void 0)throw new Error("Invalid response from Signable registration offchain");let g=await toolkit.signRaw(d,t),m=[];for(let c of o.data.signable_responses){let _=await e.signMessage(c.payload_hash),R={sender_vault_id:c.sender_vault_id,receiver_stark_key:c.receiver_stark_key,receiver_vault_id:c.receiver_vault_id,asset_id:c.asset_id,amount:c.amount,nonce:c.nonce,expiration_timestamp:c.expiration_timestamp,stark_signature:_};m.push(R);}let C={sender_stark_key:o.data.sender_stark_key,requests:m};return {transfer_ids:(await i.createTransfer({createTransferRequestV2:C,xImxEthAddress:n,xImxEthSignature:g}))?.data.transfer_ids}}async function ee({signers:t,request:e,config:r}){await u(t.ethSigner,r.immutableXConfig);let a=await t.ethSigner.getAddress(),n=new generatedClients.imx.OrdersApi(r.immutableXConfig.apiConfiguration),i=e.sell.type==="ERC721"?"1":e.sell.amount,s=e.buy.type==="ERC721"?"1":e.buy.amount,o={user:a,amount_buy:s,token_buy:toolkit.convertToSignableToken(e.buy),amount_sell:i,token_sell:toolkit.convertToSignableToken(e.sell),fees:e.fees,expiration_timestamp:e.expiration_timestamp},d=await n.getSignableOrder({getSignableOrderRequestV3:o}),{signable_message:g,payload_hash:m}=d.data,C=await toolkit.signRaw(g,t.ethSigner),p=await t.starkSigner.signMessage(m),c=d.data,_={createOrderRequest:{amount_buy:c.amount_buy,amount_sell:c.amount_sell,asset_id_buy:c.asset_id_buy,asset_id_sell:c.asset_id_sell,expiration_timestamp:c.expiration_timestamp,fees:e.fees,nonce:c.nonce,stark_key:c.stark_key,stark_signature:p,vault_id_buy:c.vault_id_buy,vault_id_sell:c.vault_id_sell},xImxEthAddress:a,xImxEthSignature:C};return {...(await n.createOrderV3(_)).data}}async function te({signers:t,request:e,config:r}){let a=new generatedClients.imx.OrdersApi(r.immutableXConfig.apiConfiguration),n=await a.getSignableCancelOrderV3({getSignableCancelOrderRequest:{order_id:e.order_id}}),{signable_message:i,payload_hash:s}=n.data,o=await toolkit.signRaw(i,t.ethSigner),d=await t.starkSigner.signMessage(s),g=await t.ethSigner.getAddress(),m=await a.cancelOrderV3({id:e.order_id.toString(),cancelOrderRequest:{order_id:e.order_id,stark_signature:d},xImxEthAddress:g,xImxEthSignature:o});return {order_id:m.data.order_id,status:m.data.status}}async function ae(t,e){await u(t.ethSigner,e.immutableXConfig);let r=new generatedClients.imx.UsersApi(e.immutableXConfig.apiConfiguration),a=await t.ethSigner.getAddress(),n=await t.starkSigner.getAddress(),i=await r.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:a,stark_key:n}}),{signable_message:s,payload_hash:o}=i.data,d=await toolkit.signRaw(s,t.ethSigner),g=await t.starkSigner.signMessage(o);return (await r.registerUser({registerUserRequest:{eth_signature:d,ether_key:a,stark_signature:g,stark_key:n}})).data}async function ne(t,e){try{let a=await new generatedClients.imx.UsersApi(e.immutableXConfig.apiConfiguration).getUsers({user:t}),{accounts:n}=a.data;return n?.length>0}catch(r){if(axios.isAxiosError(r)&&r.response?.status===404)return !1;throw r}}async function T(t,e,r){await u(e,r.immutableXConfig);let a=r.immutableXConfig,n=xClient.Contracts.RegistrationV4.connect(a.ethConfiguration.registrationV4ContractAddress||a.ethConfiguration.registrationContractAddress,e);try{return await n.isRegistered(t)}catch(i){if(i.reason==="USER_UNREGISTERED")return !1;throw i}}var w=t=>{if(t!==void 0)return t;throw new Error("undefined field exception")};async function ie(t,e){let{signers:{ethSigner:r,starkSigner:a}}=t;await u(r,t.config);let n=t.type==="ERC721"?"1":t.amount,i=await e.getSignableWithdrawalV2({getSignableWithdrawalRequest:{user:await r.getAddress(),token:toolkit.convertToSignableToken(t),amount:n}}),{signable_message:s,payload_hash:o}=i.data,d=await a.signMessage(o),{ethAddress:g,ethSignature:m}=await toolkit.signMessage(s,r);return (await e.createWithdrawalV2({createWithdrawalRequestV2:{sender_stark_key:w(i.data.sender_stark_key),sender_vault_id:w(i.data.sender_vault_id),receiver_stark_key:w(i.data.receiver_stark_key),receiver_vault_id:w(i.data.receiver_vault_id),amount:n,asset_id:w(i.data.asset_id),expiration_timestamp:w(i.data.expiration_timestamp),nonce:w(i.data.nonce),stark_signature:d},xImxEthAddress:g,xImxEthSignature:m})).data}async function l(t,e,r,a){return (await new generatedClients.imx.EncodingApi(r.apiConfiguration).encodeAsset({assetType:t,encodeAssetRequest:{token:{type:e,...a&&{data:a}}}})).data}async function I(t,e,r,a){return xClient.Contracts.CoreV4.connect(a.ethConfiguration.coreContractAddress,t).getWithdrawalBalance(e,r)}async function Ze(t,e,r){let a=await l("asset","ETH",r);return await I(t,e,a.asset_id,r)}async function et(t,e,r,a){let n=await l("asset","ERC20",a,{token_address:r});return await I(t,e,n.asset_id,a)}async function tt(t,e,r,a,n,i){try{let s=await n.getMintableTokenDetailsByClientTokenId({tokenAddress:r.tokenAddress,tokenId:r.tokenId}),o=await l("mintable-asset","ERC721",i,{id:r.tokenId,token_address:r.tokenAddress,...s.data.blueprint&&{blueprint:s.data.blueprint}});return await I(t,e,o.asset_id,i)}catch(s){if(s.response?.status===404){let o=await l("asset","ERC721",i,{token_id:r.tokenId,token_address:r.tokenAddress});return await I(t,e,o.asset_id,i)}throw s}}async function O(t,e,r,a,n,i){switch(r.type){case"ETH":return await Ze(t,e,i);case"ERC20":return await et(t,e,r.tokenAddress,i);case"ERC721":return await tt(t,e,r,a,n,i);default:throw new Error("Unsupported token type")}}async function N(t,e,r,a,n){let i=new xClient.EncodingApi(n.apiConfiguration),s=new xClient.MintsApi(n.apiConfiguration),o=await O(t,e,a,i,s,n),d=await O(t,r,a,i,s,n);return {v3Balance:o,v4Balance:d}}async function oe(t,e,r,a,n,i){let s=new xClient.EncodingApi(n.apiConfiguration),o=await O(t,e,a,s,i,n),d=await O(t,r,a,s,i,n);return {v3Balance:o,v4Balance:d}}var de="ERC20";async function q(t,e,r,a,n){let i=await t.getAddress(),s=await xClient.signRegisterEthAddress(e,i,r),d=await xClient.Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).registerAndWithdrawAll.populateTransaction(i,r,s,a);return t.sendTransaction(d)}async function B(t,e,r,a){let i=await xClient.Contracts.RegistrationV4.connect(a.ethConfiguration.registrationV4ContractAddress||a.ethConfiguration.registrationContractAddress,t).withdrawAll.populateTransaction(await t.getAddress(),e,r);return t.sendTransaction(i)}async function G(t,e,r,a){let i=await xClient.Contracts.CoreV4.connect(a.ethConfiguration.coreContractAddress,t).withdraw.populateTransaction(await t.getAddress(),r);return t.sendTransaction(i)}async function ce({ethSigner:t,starkSigner:e,starkPublicKey:r,token:a,config:n}){await u(t,n.immutableXConfig);let{v3Balance:i,v4Balance:s}=await N(t,r,await t.getAddress(),{type:de,tokenAddress:a.tokenAddress},n.immutableXConfig),o=await l("asset",de,n.immutableXConfig,{token_address:a.tokenAddress});if(i>0)return await T(r,t,n)?B(t,r,o.asset_type,n.immutableXConfig):q(t,e,r,o.asset_type,n.immutableXConfig);if(s>0)return G(t,r,o.asset_type,n.immutableXConfig);throw new Error("No balance to withdraw")}var h="ERC721";function ue(t){let{id:e}=t.data,r=t.data.blueprint||"";return W__namespace.sanitizeHex(W__namespace.utf8ToHex(`{${e}}:{${r}}`))}async function at(t,e,r,a){let n=await t.getAddress(),i=await e.getAddress(),s=await l("asset",h,a,{token_id:r.tokenId,token_address:r.tokenAddress}),o=await xClient.signRegisterEthAddress(e,n,i),g=await xClient.Contracts.RegistrationV4.connect(a.ethConfiguration.registrationV4ContractAddress||a.ethConfiguration.registrationContractAddress,t).registerAndWithdrawNft.populateTransaction(n,i,o,s.asset_type,r.tokenId);return t.sendTransaction(g)}async function nt(t,e,r,a){let n=await t.getAddress(),i=await e.getAddress(),s=await l("mintable-asset",h,a,{id:r.data.id,token_address:r.data.tokenAddress,...r.data.blueprint&&{blueprint:r.data.blueprint}}),o=ue(r),d=await xClient.signRegisterEthAddress(e,n,i),m=await xClient.Contracts.RegistrationV4.connect(a.ethConfiguration.registrationV4ContractAddress||a.ethConfiguration.registrationContractAddress,t).registerWithdrawAndMint.populateTransaction(n,i,d,s.asset_type,o);return t.sendTransaction(m)}async function it(t,e,r,a,n){return t.getMintableTokenDetailsByClientTokenId({tokenAddress:a.tokenAddress,tokenId:a.tokenId}).then(i=>nt(e,r,{type:h,data:{id:a.tokenId,tokenAddress:a.tokenAddress,blueprint:i.data.blueprint}},n)).catch(i=>{if(i.response?.status===404)return at(e,r,a,n);throw i})}async function st(t,e,r,a){let n=await l("mintable-asset",h,a,{id:r.data.id,token_address:r.data.tokenAddress,...r.data.blueprint&&{blueprint:r.data.blueprint}}),i=ue(r),o=await xClient.Contracts.CoreV4.connect(a.ethConfiguration.coreContractAddress,t).withdrawAndMint.populateTransaction(e,n.asset_type,i);return t.sendTransaction(o)}async function ot(t,e,r,a){let n=await l("asset",h,a,{token_id:r.tokenId,token_address:r.tokenAddress}),s=await xClient.Contracts.CoreV4.connect(a.ethConfiguration.coreContractAddress,t).withdrawNft.populateTransaction(e,n.asset_type,r.tokenId);return t.sendTransaction(s)}async function me(t,e,r,a,n){return t.getMintableTokenDetailsByClientTokenId({tokenAddress:a.tokenAddress,tokenId:a.tokenId}).then(i=>st(e,r,{type:h,data:{id:a.tokenId,tokenAddress:a.tokenAddress,blueprint:i.data.blueprint}},n)).catch(i=>{if(i.response?.status===404)return ot(e,r,a,n);throw i})}async function pe({ethSigner:t,starkSigner:e,starkPublicKey:r,token:a,config:n},i){await u(t,n.immutableXConfig);let s=await t.getAddress(),{v3Balance:o,v4Balance:d}=await oe(t,r,s,{type:h,tokenAddress:a.tokenAddress,tokenId:a.tokenId},n.immutableXConfig,i);if(o>0)return await T(r,t,n)?me(i,t,r,a,n.immutableXConfig):it(i,t,e,a,n.immutableXConfig);if(d>0)return me(i,t,s,a,n.immutableXConfig);throw new Error("No balance to withdraw")}var le="ETH";async function fe({ethSigner:t,starkSigner:e,starkPublicKey:r,config:a}){await u(t,a.immutableXConfig);let{v3Balance:n,v4Balance:i}=await N(t,r,await t.getAddress(),{type:le},a.immutableXConfig),s=await l("asset",le,a.immutableXConfig);if(n>0)return await T(r,t,a)?B(t,r,s.asset_type,a.immutableXConfig):q(t,e,r,s.asset_type,a.immutableXConfig);if(i>0)return G(t,r,s.asset_type,a.immutableXConfig);throw new Error("No balance to withdraw")}async function Ee({signers:t,withdrawal:e,config:r}){let a=new generatedClients.imx.WithdrawalsApi(r.immutableXConfig.apiConfiguration);return ie({signers:t,config:r.immutableXConfig,...e},a)}async function _e({signers:{ethSigner:t,starkSigner:e},starkPublicKey:r,token:a,config:n}){let i=new generatedClients.imx.MintsApi(n.immutableXConfig.apiConfiguration);switch(a.type){case"ETH":return fe({ethSigner:t,starkSigner:e,starkPublicKey:r,config:n});case"ERC20":return ce({ethSigner:t,starkSigner:e,starkPublicKey:r,token:a,config:n});case"ERC721":return pe({ethSigner:t,starkSigner:e,starkPublicKey:r,token:a,config:n},i)}}async function Te({signers:{ethSigner:t,starkSigner:e},request:r,config:a}){await u(t,a.immutableXConfig);let n=await t.getAddress(),i=new generatedClients.imx.TradesApi(a.immutableXConfig.apiConfiguration),s=await i.getSignableTrade({getSignableTradeRequest:{user:n,order_id:r.order_id,fees:r.fees}}),{signable_message:o,payload_hash:d}=s.data,g=await toolkit.signRaw(o,t),m=await e.signMessage(d);return (await i.createTradeV3({createTradeRequest:{amount_buy:s.data.amount_buy,amount_sell:s.data.amount_sell,asset_id_buy:s.data.asset_id_buy,asset_id_sell:s.data.asset_id_sell,expiration_timestamp:s.data.expiration_timestamp,fee_info:s.data.fee_info,fees:r.fees,include_fees:!0,nonce:s.data.nonce,order_id:r.order_id,stark_key:s.data.stark_key,vault_id_buy:s.data.vault_id_buy,vault_id_sell:s.data.vault_id_sell,stark_signature:m},xImxEthAddress:n,xImxEthSignature:g})).data}async function ut(t,e,r,a,n,i){let o=await xClient.Contracts.CoreV4.connect(i.ethConfiguration.coreContractAddress,t)["deposit(uint256,uint256,uint256)"].populateTransaction(a,r,n);return t.sendTransaction({...o,value:e})}async function we({signers:{ethSigner:t},deposit:e,config:r}){await u(t,r.immutableXConfig);let a=await t.getAddress(),n={decimals:18},i=ethers.parseUnits(e.amount,"wei"),s=r.immutableXConfig,o=new generatedClients.imx.DepositsApi(s.apiConfiguration),d=new generatedClients.imx.EncodingApi(s.apiConfiguration),g={user:a,token:{type:e.type,data:n},amount:i.toString()},m=await o.getSignableDeposit({getSignableDepositRequest:g}),p=(await d.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type}}})).data.asset_type,c=m.data.stark_key,_=m.data.vault_id;return ut(t,i,p,c,_,s)}async function lt(t,e,r,a,n,i){let o=await xClient.Contracts.CoreV4.connect(i.coreContractAddress,t).depositERC20.populateTransaction(a,r,n,e);return t.sendTransaction(o)}async function Ae({signers:{ethSigner:t},deposit:e,config:r}){await u(t,r.immutableXConfig);let{apiConfiguration:a,ethConfiguration:n}=r.immutableXConfig,i=await t.getAddress(),s=new generatedClients.imx.TokensApi(a),o=new generatedClients.imx.DepositsApi(a),d=new generatedClients.imx.EncodingApi(a),g=await s.getToken({address:e.tokenAddress}),C={decimals:parseInt(g.data.decimals),token_address:e.tokenAddress},p=ethers.parseUnits(e.amount,0),_=await xClient.Contracts.IERC20.connect(e.tokenAddress,t).approve.populateTransaction(n.coreContractAddress,p);await t.sendTransaction(_);let R={user:i,token:{type:e.type,data:C},amount:p.toString()},A=await o.getSignableDeposit({getSignableDepositRequest:R}),qe=(await d.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type,data:{token_address:e.tokenAddress}}}})).data.asset_type,Be=A.data.stark_key,Ge=A.data.vault_id,Fe=BigInt(A.data.amount);return lt(t,Fe,qe,Be,Ge,n)}async function ft(t,e,r,a,n,i){let o=await xClient.Contracts.CoreV4.connect(i.ethConfiguration.coreContractAddress,t).depositNft.populateTransaction(a,r,n,e);return t.sendTransaction(o)}async function ye({signers:{ethSigner:t},deposit:e,config:r}){await u(t,r.immutableXConfig);let a=await t.getAddress(),{immutableXConfig:n}=r,i=new generatedClients.imx.DepositsApi(n.apiConfiguration),s=new generatedClients.imx.EncodingApi(n.apiConfiguration),o={token_address:e.tokenAddress,token_id:e.tokenId},g={user:a,token:{type:e.type,data:o},amount:"1".toString()},m=await i.getSignableDeposit({getSignableDepositRequest:g}),p=(await s.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type,data:{token_address:e.tokenAddress,token_id:e.tokenId}}}})).data.asset_type,c=m.data.stark_key,_=m.data.vault_id,R=xClient.Contracts.IERC721.connect(e.tokenAddress,t),A=n.ethConfiguration.coreContractAddress;return await R.isApprovedForAll(a,A)||await R.setApprovalForAll(A,!0),ft(t,e.tokenId,p,c,_,n)}async function ke({signers:t,deposit:e,config:r}){switch(e.type){case"ETH":return we({signers:t,deposit:e,config:r});case"ERC20":return Ae({signers:t,deposit:e,config:r});case"ERC721":return ye({signers:t,deposit:e,config:r})}}async function ve({signers:t,request:e,config:r}){await u(t.ethSigner,r.immutableXConfig);let a=new generatedClients.imx.ExchangesApi(r.immutableXConfig.apiConfiguration),n=await t.ethSigner.getAddress(),i=e.amount,s=await a.getExchangeSignableTransfer({id:e.transactionID,getSignableTransferRequest:{sender:n,token:toolkit.convertToSignableToken(e),amount:i,receiver:e.receiver}}),{signable_message:o,payload_hash:d}=s.data,g=await toolkit.signRaw(o,t.ethSigner),m=await t.starkSigner.signMessage(d),C={sender_stark_key:s.data.sender_stark_key,sender_vault_id:s.data.sender_vault_id,receiver_stark_key:s.data.receiver_stark_key,receiver_vault_id:s.data.receiver_vault_id,asset_id:s.data.asset_id,amount:s.data.amount,nonce:s.data.nonce,expiration_timestamp:s.data.expiration_timestamp,stark_signature:m},p=await a.createExchangeTransfer({id:e.transactionID,createTransferRequest:C,xImxEthAddress:n,xImxEthSignature:g});return {sent_signature:p?.data.sent_signature,status:p?.data.status?.toString(),time:p?.data.time,transfer_id:p?.data.transfer_id}}var P=class{config;signers;constructor(e,r,a){this.config=e,this.signers={ethSigner:r,starkSigner:a};}async getAddress(){return this.signers.ethSigner.getAddress()}async isRegisteredOffchain(){let e=await this.getAddress();return ne(e,this.config)}registerOffchain(){return ae(this.signers,this.config)}batchNftTransfer(e){return K({signers:this.signers,request:e,config:this.config})}cancelOrder(e){return te({signers:this.signers,request:e,config:this.config})}completeWithdrawal(e,r){return _e({config:this.config,signers:this.signers,token:r,starkPublicKey:e})}createOrder(e){return ee({signers:this.signers,request:e,config:this.config})}createTrade(e){return Te({signers:this.signers,request:e,config:this.config})}deposit(e){return ke({signers:this.signers,deposit:e,config:this.config})}exchangeTransfer(e){return ve({signers:this.signers,request:e,config:this.config})}async isRegisteredOnchain(){let e=await this.signers.starkSigner.getAddress();return T(e,this.signers.ethSigner,this.config)}prepareWithdrawal(e){return Ee({signers:this.signers,withdrawal:e,config:this.config})}transfer(e){return $({signers:this.signers,request:e,config:this.config})}};var Pe={SWITCH_CHAIN:"wallet_switchEthereumChain",CONNECT:"eth_requestAccounts"};function xe(t){return !!t?.request}async function Ie(t,e){await t.request({method:Pe.CONNECT}),e&&await t.request({method:Pe.SWITCH_CHAIN,params:[{chainId:`0x${e.toString(16)}`}]});}var wt={PROVIDER_NOT_FOUND:"The Metamask provider was not found"};async function Oe({chainID:t}){let e=await Tt__default.default();if(!xe(e))throw new Error(wt.PROVIDER_NOT_FOUND);return await Ie(e,t),new ethers.BrowserProvider(e)}var E="message";function b(t,e){t&&t.contentWindow&&t.contentWindow.postMessage(e,new URL(t.src).origin);}function S(t,e,r,a){if(t&&e.source!==t.contentWindow)return;let n=e.data;n.type===r&&a(n.details);}var X=class{publicAddress;iframe;constructor(e,r){this.publicAddress=e,this.iframe=r;}getAddress(){return this.publicAddress}signMessage(e){return new Promise((r,a)=>{let n=i=>{S(this.iframe,i,"SIGN_MESSAGE_RESPONSE",s=>{window.removeEventListener(E,n),s.success||a(new Error(s.error?.message)),r(s.data.signedMessage);});};window.addEventListener(E,n),b(this.iframe,{type:"SIGN_MESSAGE_REQUEST",details:{starkPublicKey:this.publicAddress,message:e}});})}getIFrame(){return this.iframe}getYCoordinate(){return new Promise((e,r)=>{let a=n=>{S(this.iframe,n,"GET_Y_COORDINATE_RESPONSE",i=>{window.removeEventListener(E,a),i.success||r(new Error(i.error?.message)),e(i.data.yCoordinate);});};window.addEventListener(E,a),b(this.iframe,{type:"GET_Y_COORDINATE_REQUEST",details:{starkPublicKey:this.publicAddress}});})}};var Me="imx-wallet-app",bt={[config.Environment.SANDBOX]:"https://wallets.sandbox.immutable.com",[config.Environment.PRODUCTION]:"https://wallets.immutable.com"},St="display: none;";function yt(){return document.querySelector(`iframe#${Me}`)}async function kt(t){return new Promise(e=>{let r=document.createElement("iframe");r.setAttribute("id",Me),r.setAttribute("src",bt[t]),r.setAttribute("style",St),document.body.appendChild(r),r.onload=()=>e(r);})}async function We(t){let e=yt();return e||await kt(t)}var k=new Uint8Array([79,110,108,121,32,115,105,103,110,32,116,104,105,115,32,114,101,113,117,101,115,116,32,105,102,32,121,111,117,226,128,153,118,101,32,105,110,105,116,105,97,116,101,100,32,97,110,32,97,99,116,105,111,110,32,119,105,116,104,32,73,109,109,117,116,97,98,108,101,32,88,46]),x="Only sign this request if you\u2019ve initiated an action with Immutable X.",D=Buffer.from(x,"utf8").toString("utf8"),Pt="The L2 IMX Wallet connection has failed";function xt(){metrics.track("xProvider","log",{param:"navigator.language",val:navigator?.language}),metrics.track("xProvider","log",{param:"navigator.languages",val:navigator?.languages?.join(",")}),metrics.track("xProvider","log",{param:"document.characterSet",val:document?.characterSet}),metrics.track("xProvider","log",{param:"DEFAULT_CONNECTION_STRING_2",val:D}),metrics.track("xProvider","log",{param:"DEFAULT_CONNECTION_BYTES",val:k.toString()}),metrics.track("xProvider","log",{param:"DEFAULT_CONNECTION_STRING_1",val:ethers.toUtf8Bytes(x).toString()}),metrics.track("xProvider","log",{param:"DEFAULT_CONNECTION_STRING_2",val:ethers.toUtf8Bytes(D).toString()}),metrics.track("xProvider","log",{param:"DEFAULT_CONNECTION_STRING_1.normalize()",val:ethers.toUtf8Bytes(x.normalize()).toString()}),metrics.track("xProvider","log",{param:"DEFAULT_CONNECTION_STRING_2.normalize()",val:ethers.toUtf8Bytes(D.normalize()).toString()}),metrics.track("xProvider","log",{param:"Buffer.from(DEFAULT_CONNECTION_STRING_1, utf8).toString()",val:Buffer.from(x,"utf8").toString()}),metrics.track("xProvider","log",{param:"DEFAULT_CONNECTION_BYTES === toUtf8Bytes(DEFAULT_CONNECTION_STRING_1)",val:k.toString()===ethers.toUtf8Bytes(x).toString()}),metrics.track("xProvider","log",{param:"DEFAULT_CONNECTION_BYTES === toUtf8Bytes(DEFAULT_CONNECTION_STRING_2)",val:k.toString()===ethers.toUtf8Bytes(D).toString()}),metrics.track("xProvider","log",{param:"DEFAULT_CONNECTION_BYTES",val:k.toString()}),metrics.track("xProvider","log",{param:"DEFAULT_CONNECTION_BYTES.toUtf8String()",val:ethers.toUtf8String(k)});}async function Xe(t,e){let r=await t.getSigner(),a=await r.getAddress();xt();let n=await r.signMessage(k),i=await We(e);return new Promise((s,o)=>{let d=g=>{S(i,g,"CONNECT_WALLET_RESPONSE",m=>{window.removeEventListener(E,d),m.success||o(new Error(Pt)),s(new X(m.data.starkPublicKey,i));});};window.addEventListener(E,d),b(i,{type:"CONNECT_WALLET_REQUEST",details:{ethAddress:a,signature:n}});})}async function De(t){let e=t.getIFrame();return new Promise((r,a)=>{let n=i=>{S(e,i,"DISCONNECT_WALLET_RESPONSE",s=>{window.removeEventListener(E,n),!s.success&&s.error&&a(s.error),e.remove(),r();});};window.addEventListener(E,n),b(e,{type:"DISCONNECT_WALLET_REQUEST",details:{starkPublicKey:t.getAddress()}});})}var v=class extends Error{type;constructor(e,r){super(e),this.type=r;}},L=async(t,e)=>{try{return await t()}catch(r){let a=e.message||`${r.message}`||"UnknownError";throw new v(a,e.type)}};var V=class t extends P{static imxSigner;static async connect(e){return await L(async()=>{let r=await Oe({chainID:e.immutableXConfig.ethConfiguration.chainID});this.imxSigner=await Xe(r,e.baseConfig.environment);let a=await r.getSigner();return metrics.track("xProvider","log",{param:"metaMaskProvider.getSigner().getAddress()",val:await a.getAddress()}),metrics.track("xProvider","log",{param:"imxSigner.getAddress()",val:this.imxSigner.getAddress()}),new t(e,a,this.imxSigner)},{type:"WALLET_CONNECTION_ERROR"})}static async disconnect(){if(!this.imxSigner)throw new v("Attempted to disconnect from the MetaMask IMX provider without an established connection","PROVIDER_CONNECTION_ERROR");return L(async()=>{await De(this.imxSigner);},{type:"PROVIDER_CONNECTION_ERROR"})}static async signMessage(e){if(!this.imxSigner)throw new v("Attempted to sign a message with the MetaMask IMX provider without an established connection","PROVIDER_CONNECTION_ERROR");return L(async()=>await this.imxSigner.signMessage(e),{type:"PROVIDER_CONNECTION_ERROR"})}};var H=class{immutableXConfig;baseConfig;constructor({baseConfig:e,overrides:r}){if(this.baseConfig=e,r)this.immutableXConfig=r.immutableXConfig;else {let a=new xClient.ImxConfiguration({baseConfig:e});this.immutableXConfig=a.immutableXConfig;}}};
|
|
35
|
+
function qe(t,e){return t===e.ethConfiguration.chainID}async function g(t,e){let r=(await t.provider?.getNetwork())?.chainId;if(!qe(Number(r),e))throw new Error("The wallet used for this operation is not connected to the correct network.")}async function H({signers:{ethSigner:t,starkSigner:e},request:r,config:n}){await g(t,n.immutableXConfig);let a=await t.getAddress(),i=new generatedClients.imx.TransfersApi(n.immutableXConfig.apiConfiguration),s=r.type==="ERC721"?"1":r.amount,o=await i.getSignableTransferV1({getSignableTransferRequest:{sender:a,token:toolkit.convertToSignableToken(r),amount:s,receiver:r.receiver}}),{signable_message:d,payload_hash:u}=o.data,m=await toolkit.signRaw(d,t),f=await e.signMessage(u),p={sender_stark_key:o.data.sender_stark_key,sender_vault_id:o.data.sender_vault_id,receiver_stark_key:o.data.receiver_stark_key,receiver_vault_id:o.data.receiver_vault_id,asset_id:o.data.asset_id,amount:o.data.amount,nonce:o.data.nonce,expiration_timestamp:o.data.expiration_timestamp,stark_signature:f},c=await i.createTransferV1({createTransferRequest:p,xImxEthAddress:a,xImxEthSignature:m});return {sent_signature:c?.data.sent_signature,status:c?.data.status?.toString(),time:c?.data.time,transfer_id:c?.data.transfer_id}}async function F({signers:{ethSigner:t,starkSigner:e},request:r,config:n}){await g(t,n.immutableXConfig);let a=await t.getAddress(),i=new generatedClients.imx.TransfersApi(n.immutableXConfig.apiConfiguration),s=r.map(c=>({amount:"1",token:toolkit.convertToSignableToken({type:"ERC721",tokenId:c.tokenId,tokenAddress:c.tokenAddress}),receiver:c.receiver})),o=await i.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:a,signable_requests:s}}),d=o.data.signable_message;if(d===void 0)throw new Error("Invalid response from Signable registration offchain");let u=await toolkit.signRaw(d,t),m=[];for(let c of o.data.signable_responses){let E=await e.signMessage(c.payload_hash),w={sender_vault_id:c.sender_vault_id,receiver_stark_key:c.receiver_stark_key,receiver_vault_id:c.receiver_vault_id,asset_id:c.asset_id,amount:c.amount,nonce:c.nonce,expiration_timestamp:c.expiration_timestamp,stark_signature:E};m.push(w);}let f={sender_stark_key:o.data.sender_stark_key,requests:m};return {transfer_ids:(await i.createTransfer({createTransferRequestV2:f,xImxEthAddress:a,xImxEthSignature:u}))?.data.transfer_ids}}async function z({signers:t,request:e,config:r}){await g(t.ethSigner,r.immutableXConfig);let n=await t.ethSigner.getAddress(),a=new generatedClients.imx.OrdersApi(r.immutableXConfig.apiConfiguration),i=e.sell.type==="ERC721"?"1":e.sell.amount,s=e.buy.type==="ERC721"?"1":e.buy.amount,o={user:n,amount_buy:s,token_buy:toolkit.convertToSignableToken(e.buy),amount_sell:i,token_sell:toolkit.convertToSignableToken(e.sell),fees:e.fees,expiration_timestamp:e.expiration_timestamp},d=await a.getSignableOrder({getSignableOrderRequestV3:o}),{signable_message:u,payload_hash:m}=d.data,f=await toolkit.signRaw(u,t.ethSigner),p=await t.starkSigner.signMessage(m),c=d.data,E={createOrderRequest:{amount_buy:c.amount_buy,amount_sell:c.amount_sell,asset_id_buy:c.asset_id_buy,asset_id_sell:c.asset_id_sell,expiration_timestamp:c.expiration_timestamp,fees:e.fees,nonce:c.nonce,stark_key:c.stark_key,stark_signature:p,vault_id_buy:c.vault_id_buy,vault_id_sell:c.vault_id_sell},xImxEthAddress:n,xImxEthSignature:f};return {...(await a.createOrderV3(E)).data}}async function K({signers:t,request:e,config:r}){let n=new generatedClients.imx.OrdersApi(r.immutableXConfig.apiConfiguration),a=await n.getSignableCancelOrderV3({getSignableCancelOrderRequest:{order_id:e.order_id}}),{signable_message:i,payload_hash:s}=a.data,o=await toolkit.signRaw(i,t.ethSigner),d=await t.starkSigner.signMessage(s),u=await t.ethSigner.getAddress(),m=await n.cancelOrderV3({id:e.order_id.toString(),cancelOrderRequest:{order_id:e.order_id,stark_signature:d},xImxEthAddress:u,xImxEthSignature:o});return {order_id:m.data.order_id,status:m.data.status}}async function J(t,e){await g(t.ethSigner,e.immutableXConfig);let r=new generatedClients.imx.UsersApi(e.immutableXConfig.apiConfiguration),n=await t.ethSigner.getAddress(),a=await t.starkSigner.getAddress(),i=await r.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:n,stark_key:a}}),{signable_message:s,payload_hash:o}=i.data,d=await toolkit.signRaw(s,t.ethSigner),u=await t.starkSigner.signMessage(o);return (await r.registerUser({registerUserRequest:{eth_signature:d,ether_key:n,stark_signature:u,stark_key:a}})).data}async function Z(t,e){try{let n=await new generatedClients.imx.UsersApi(e.immutableXConfig.apiConfiguration).getUsers({user:t}),{accounts:a}=n.data;return a?.length>0}catch(r){if(axios.isAxiosError(r)&&r.response?.status===404)return !1;throw r}}async function R(t,e,r){await g(e,r.immutableXConfig);let n=r.immutableXConfig,a=xClient.Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,e);try{return await a.isRegistered(t)}catch(i){if(i.reason==="USER_UNREGISTERED")return !1;throw i}}var _=t=>{if(t!==void 0)return t;throw new Error("undefined field exception")};async function ee(t,e){let{signers:{ethSigner:r,starkSigner:n}}=t;await g(r,t.config);let a=t.type==="ERC721"?"1":t.amount,i=await e.getSignableWithdrawalV2({getSignableWithdrawalRequest:{user:await r.getAddress(),token:toolkit.convertToSignableToken(t),amount:a}}),{signable_message:s,payload_hash:o}=i.data,d=await n.signMessage(o),{ethAddress:u,ethSignature:m}=await toolkit.signMessage(s,r);return (await e.createWithdrawalV2({createWithdrawalRequestV2:{sender_stark_key:_(i.data.sender_stark_key),sender_vault_id:_(i.data.sender_vault_id),receiver_stark_key:_(i.data.receiver_stark_key),receiver_vault_id:_(i.data.receiver_vault_id),amount:a,asset_id:_(i.data.asset_id),expiration_timestamp:_(i.data.expiration_timestamp),nonce:_(i.data.nonce),stark_signature:d},xImxEthAddress:u,xImxEthSignature:m})).data}async function l(t,e,r,n){return (await new generatedClients.imx.EncodingApi(r.apiConfiguration).encodeAsset({assetType:t,encodeAssetRequest:{token:{type:e,...n&&{data:n}}}})).data}async function k(t,e,r,n){return xClient.Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).getWithdrawalBalance(e,r)}async function Qe(t,e,r){let n=await l("asset","ETH",r);return await k(t,e,n.asset_id,r)}async function $e(t,e,r,n){let a=await l("asset","ERC20",n,{token_address:r});return await k(t,e,a.asset_id,n)}async function ze(t,e,r,n,a,i){try{let s=await a.getMintableTokenDetailsByClientTokenId({tokenAddress:r.tokenAddress,tokenId:r.tokenId}),o=await l("mintable-asset","ERC721",i,{id:r.tokenId,token_address:r.tokenAddress,...s.data.blueprint&&{blueprint:s.data.blueprint}});return await k(t,e,o.asset_id,i)}catch(s){if(s.response?.status===404){let o=await l("asset","ERC721",i,{token_id:r.tokenId,token_address:r.tokenAddress});return await k(t,e,o.asset_id,i)}throw s}}async function P(t,e,r,n,a,i){switch(r.type){case"ETH":return await Qe(t,e,i);case"ERC20":return await $e(t,e,r.tokenAddress,i);case"ERC721":return await ze(t,e,r,n,a,i);default:throw new Error("Unsupported token type")}}async function v(t,e,r,n,a){let i=new xClient.EncodingApi(a.apiConfiguration),s=new xClient.MintsApi(a.apiConfiguration),o=await P(t,e,n,i,s,a),d=await P(t,r,n,i,s,a);return {v3Balance:o,v4Balance:d}}async function re(t,e,r,n,a,i){let s=new xClient.EncodingApi(a.apiConfiguration),o=await P(t,e,n,s,i,a),d=await P(t,r,n,s,i,a);return {v3Balance:o,v4Balance:d}}var ne="ERC20";async function W(t,e,r,n,a){let i=await t.getAddress(),s=await xClient.signRegisterEthAddress(e,i,r),d=await xClient.Contracts.RegistrationV4.connect(a.ethConfiguration.registrationV4ContractAddress||a.ethConfiguration.registrationContractAddress,t).registerAndWithdrawAll.populateTransaction(i,r,s,n);return t.sendTransaction(d)}async function X(t,e,r,n){let i=await xClient.Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).withdrawAll.populateTransaction(await t.getAddress(),e,r);return t.sendTransaction(i)}async function D(t,e,r,n){let i=await xClient.Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).withdraw.populateTransaction(await t.getAddress(),r);return t.sendTransaction(i)}async function ae({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a}){await g(t,a.immutableXConfig);let{v3Balance:i,v4Balance:s}=await v(t,r,await t.getAddress(),{type:ne,tokenAddress:n.tokenAddress},a.immutableXConfig),o=await l("asset",ne,a.immutableXConfig,{token_address:n.tokenAddress});if(i>0)return await R(r,t,a)?X(t,r,o.asset_type,a.immutableXConfig):W(t,e,r,o.asset_type,a.immutableXConfig);if(s>0)return D(t,r,o.asset_type,a.immutableXConfig);throw new Error("No balance to withdraw")}var T="ERC721";function oe(t){let{id:e}=t.data,r=t.data.blueprint||"";return I__namespace.sanitizeHex(I__namespace.utf8ToHex(`{${e}}:{${r}}`))}async function je(t,e,r,n){let a=await t.getAddress(),i=await e.getAddress(),s=await l("asset",T,n,{token_id:r.tokenId,token_address:r.tokenAddress}),o=await xClient.signRegisterEthAddress(e,a,i),u=await xClient.Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).registerAndWithdrawNft.populateTransaction(a,i,o,s.asset_type,r.tokenId);return t.sendTransaction(u)}async function Je(t,e,r,n){let a=await t.getAddress(),i=await e.getAddress(),s=await l("mintable-asset",T,n,{id:r.data.id,token_address:r.data.tokenAddress,...r.data.blueprint&&{blueprint:r.data.blueprint}}),o=oe(r),d=await xClient.signRegisterEthAddress(e,a,i),m=await xClient.Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).registerWithdrawAndMint.populateTransaction(a,i,d,s.asset_type,o);return t.sendTransaction(m)}async function Ze(t,e,r,n,a){return t.getMintableTokenDetailsByClientTokenId({tokenAddress:n.tokenAddress,tokenId:n.tokenId}).then(i=>Je(e,r,{type:T,data:{id:n.tokenId,tokenAddress:n.tokenAddress,blueprint:i.data.blueprint}},a)).catch(i=>{if(i.response?.status===404)return je(e,r,n,a);throw i})}async function et(t,e,r,n){let a=await l("mintable-asset",T,n,{id:r.data.id,token_address:r.data.tokenAddress,...r.data.blueprint&&{blueprint:r.data.blueprint}}),i=oe(r),o=await xClient.Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).withdrawAndMint.populateTransaction(e,a.asset_type,i);return t.sendTransaction(o)}async function tt(t,e,r,n){let a=await l("asset",T,n,{token_id:r.tokenId,token_address:r.tokenAddress}),s=await xClient.Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).withdrawNft.populateTransaction(e,a.asset_type,r.tokenId);return t.sendTransaction(s)}async function ie(t,e,r,n,a){return t.getMintableTokenDetailsByClientTokenId({tokenAddress:n.tokenAddress,tokenId:n.tokenId}).then(i=>et(e,r,{type:T,data:{id:n.tokenId,tokenAddress:n.tokenAddress,blueprint:i.data.blueprint}},a)).catch(i=>{if(i.response?.status===404)return tt(e,r,n,a);throw i})}async function de({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a},i){await g(t,a.immutableXConfig);let s=await t.getAddress(),{v3Balance:o,v4Balance:d}=await re(t,r,s,{type:T,tokenAddress:n.tokenAddress,tokenId:n.tokenId},a.immutableXConfig,i);if(o>0)return await R(r,t,a)?ie(i,t,r,n,a.immutableXConfig):Ze(i,t,e,n,a.immutableXConfig);if(d>0)return ie(i,t,s,n,a.immutableXConfig);throw new Error("No balance to withdraw")}var ce="ETH";async function me({ethSigner:t,starkSigner:e,starkPublicKey:r,config:n}){await g(t,n.immutableXConfig);let{v3Balance:a,v4Balance:i}=await v(t,r,await t.getAddress(),{type:ce},n.immutableXConfig),s=await l("asset",ce,n.immutableXConfig);if(a>0)return await R(r,t,n)?X(t,r,s.asset_type,n.immutableXConfig):W(t,e,r,s.asset_type,n.immutableXConfig);if(i>0)return D(t,r,s.asset_type,n.immutableXConfig);throw new Error("No balance to withdraw")}async function ge({signers:t,withdrawal:e,config:r}){let n=new generatedClients.imx.WithdrawalsApi(r.immutableXConfig.apiConfiguration);return ee({signers:t,config:r.immutableXConfig,...e},n)}async function pe({signers:{ethSigner:t,starkSigner:e},starkPublicKey:r,token:n,config:a}){let i=new generatedClients.imx.MintsApi(a.immutableXConfig.apiConfiguration);switch(n.type){case"ETH":return me({ethSigner:t,starkSigner:e,starkPublicKey:r,config:a});case"ERC20":return ae({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a});case"ERC721":return de({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a},i)}}async function le({signers:{ethSigner:t,starkSigner:e},request:r,config:n}){await g(t,n.immutableXConfig);let a=await t.getAddress(),i=new generatedClients.imx.TradesApi(n.immutableXConfig.apiConfiguration),s=await i.getSignableTrade({getSignableTradeRequest:{user:a,order_id:r.order_id,fees:r.fees}}),{signable_message:o,payload_hash:d}=s.data,u=await toolkit.signRaw(o,t),m=await e.signMessage(d);return (await i.createTradeV3({createTradeRequest:{amount_buy:s.data.amount_buy,amount_sell:s.data.amount_sell,asset_id_buy:s.data.asset_id_buy,asset_id_sell:s.data.asset_id_sell,expiration_timestamp:s.data.expiration_timestamp,fee_info:s.data.fee_info,fees:r.fees,include_fees:!0,nonce:s.data.nonce,order_id:r.order_id,stark_key:s.data.stark_key,vault_id_buy:s.data.vault_id_buy,vault_id_sell:s.data.vault_id_sell,stark_signature:m},xImxEthAddress:a,xImxEthSignature:u})).data}async function st(t,e,r,n,a,i){let o=await xClient.Contracts.CoreV4.connect(i.ethConfiguration.coreContractAddress,t)["deposit(uint256,uint256,uint256)"].populateTransaction(n,r,a);return t.sendTransaction({...o,value:e})}async function Ce({signers:{ethSigner:t},deposit:e,config:r}){await g(t,r.immutableXConfig);let n=await t.getAddress(),a={decimals:18},i=ethers.parseUnits(e.amount,"wei"),s=r.immutableXConfig,o=new generatedClients.imx.DepositsApi(s.apiConfiguration),d=new generatedClients.imx.EncodingApi(s.apiConfiguration),u={user:n,token:{type:e.type,data:a},amount:i.toString()},m=await o.getSignableDeposit({getSignableDepositRequest:u}),p=(await d.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type}}})).data.asset_type,c=m.data.stark_key,E=m.data.vault_id;return st(t,i,p,c,E,s)}async function dt(t,e,r,n,a,i){let o=await xClient.Contracts.CoreV4.connect(i.coreContractAddress,t).depositERC20.populateTransaction(n,r,a,e);return t.sendTransaction(o)}async function Re({signers:{ethSigner:t},deposit:e,config:r}){await g(t,r.immutableXConfig);let{apiConfiguration:n,ethConfiguration:a}=r.immutableXConfig,i=await t.getAddress(),s=new generatedClients.imx.TokensApi(n),o=new generatedClients.imx.DepositsApi(n),d=new generatedClients.imx.EncodingApi(n),u=await s.getToken({address:e.tokenAddress}),f={decimals:parseInt(u.data.decimals),token_address:e.tokenAddress},p=ethers.parseUnits(e.amount,0),E=await xClient.Contracts.IERC20.connect(e.tokenAddress,t).approve.populateTransaction(a.coreContractAddress,p);await t.sendTransaction(E);let w={user:i,token:{type:e.type,data:f},amount:p.toString()},h=await o.getSignableDeposit({getSignableDepositRequest:w}),Me=(await d.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type,data:{token_address:e.tokenAddress}}}})).data.asset_type,We=h.data.stark_key,Xe=h.data.vault_id,De=BigInt(h.data.amount);return dt(t,De,Me,We,Xe,a)}async function ct(t,e,r,n,a,i){let o=await xClient.Contracts.CoreV4.connect(i.ethConfiguration.coreContractAddress,t).depositNft.populateTransaction(n,r,a,e);return t.sendTransaction(o)}async function Te({signers:{ethSigner:t},deposit:e,config:r}){await g(t,r.immutableXConfig);let n=await t.getAddress(),{immutableXConfig:a}=r,i=new generatedClients.imx.DepositsApi(a.apiConfiguration),s=new generatedClients.imx.EncodingApi(a.apiConfiguration),o={token_address:e.tokenAddress,token_id:e.tokenId},u={user:n,token:{type:e.type,data:o},amount:"1".toString()},m=await i.getSignableDeposit({getSignableDepositRequest:u}),p=(await s.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type,data:{token_address:e.tokenAddress,token_id:e.tokenId}}}})).data.asset_type,c=m.data.stark_key,E=m.data.vault_id,w=xClient.Contracts.IERC721.connect(e.tokenAddress,t),h=a.ethConfiguration.coreContractAddress;return await w.isApprovedForAll(n,h)||await w.setApprovalForAll(h,!0),ct(t,e.tokenId,p,c,E,a)}async function he({signers:t,deposit:e,config:r}){switch(e.type){case"ETH":return Ce({signers:t,deposit:e,config:r});case"ERC20":return Re({signers:t,deposit:e,config:r});case"ERC721":return Te({signers:t,deposit:e,config:r})}}async function Ae({signers:t,request:e,config:r}){await g(t.ethSigner,r.immutableXConfig);let n=new generatedClients.imx.ExchangesApi(r.immutableXConfig.apiConfiguration),a=await t.ethSigner.getAddress(),i=e.amount,s=await n.getExchangeSignableTransfer({id:e.transactionID,getSignableTransferRequest:{sender:a,token:toolkit.convertToSignableToken(e),amount:i,receiver:e.receiver}}),{signable_message:o,payload_hash:d}=s.data,u=await toolkit.signRaw(o,t.ethSigner),m=await t.starkSigner.signMessage(d),f={sender_stark_key:s.data.sender_stark_key,sender_vault_id:s.data.sender_vault_id,receiver_stark_key:s.data.receiver_stark_key,receiver_vault_id:s.data.receiver_vault_id,asset_id:s.data.asset_id,amount:s.data.amount,nonce:s.data.nonce,expiration_timestamp:s.data.expiration_timestamp,stark_signature:m},p=await n.createExchangeTransfer({id:e.transactionID,createTransferRequest:f,xImxEthAddress:a,xImxEthSignature:u});return {sent_signature:p?.data.sent_signature,status:p?.data.status?.toString(),time:p?.data.time,transfer_id:p?.data.transfer_id}}var S=class{config;signers;constructor(e,r,n){this.config=e,this.signers={ethSigner:r,starkSigner:n};}async getAddress(){return this.signers.ethSigner.getAddress()}async isRegisteredOffchain(){let e=await this.getAddress();return Z(e,this.config)}registerOffchain(){return J(this.signers,this.config)}batchNftTransfer(e){return F({signers:this.signers,request:e,config:this.config})}cancelOrder(e){return K({signers:this.signers,request:e,config:this.config})}completeWithdrawal(e,r){return pe({config:this.config,signers:this.signers,token:r,starkPublicKey:e})}createOrder(e){return z({signers:this.signers,request:e,config:this.config})}createTrade(e){return le({signers:this.signers,request:e,config:this.config})}deposit(e){return he({signers:this.signers,deposit:e,config:this.config})}exchangeTransfer(e){return Ae({signers:this.signers,request:e,config:this.config})}async isRegisteredOnchain(){let e=await this.signers.starkSigner.getAddress();return R(e,this.signers.ethSigner,this.config)}prepareWithdrawal(e){return ge({signers:this.signers,withdrawal:e,config:this.config})}transfer(e){return H({signers:this.signers,request:e,config:this.config})}};var be={SWITCH_CHAIN:"wallet_switchEthereumChain",CONNECT:"eth_requestAccounts"};function ye(t){return !!t?.request}async function Se(t,e){await t.request({method:be.CONNECT}),e&&await t.request({method:be.SWITCH_CHAIN,params:[{chainId:`0x${e.toString(16)}`}]});}var ft={PROVIDER_NOT_FOUND:"The Metamask provider was not found"};async function ke({chainID:t}){let e=await pt__default.default();if(!ye(e))throw new Error(ft.PROVIDER_NOT_FOUND);return await Se(e,t),new ethers.BrowserProvider(e)}var C="message";function A(t,e){t&&t.contentWindow&&t.contentWindow.postMessage(e,new URL(t.src).origin);}function b(t,e,r,n){if(t&&e.source!==t.contentWindow)return;let a=e.data;a.type===r&&n(a.details);}var O=class{publicAddress;iframe;constructor(e,r){this.publicAddress=e,this.iframe=r;}getAddress(){return this.publicAddress}signMessage(e){return new Promise((r,n)=>{let a=i=>{b(this.iframe,i,"SIGN_MESSAGE_RESPONSE",s=>{window.removeEventListener(C,a),s.success||n(new Error(s.error?.message)),r(s.data.signedMessage);});};window.addEventListener(C,a),A(this.iframe,{type:"SIGN_MESSAGE_REQUEST",details:{starkPublicKey:this.publicAddress,message:e}});})}getIFrame(){return this.iframe}getYCoordinate(){return new Promise((e,r)=>{let n=a=>{b(this.iframe,a,"GET_Y_COORDINATE_RESPONSE",i=>{window.removeEventListener(C,n),i.success||r(new Error(i.error?.message)),e(i.data.yCoordinate);});};window.addEventListener(C,n),A(this.iframe,{type:"GET_Y_COORDINATE_REQUEST",details:{starkPublicKey:this.publicAddress}});})}};var ve="imx-wallet-app",Rt={[config.Environment.SANDBOX]:"https://wallets.sandbox.immutable.com",[config.Environment.PRODUCTION]:"https://wallets.immutable.com"},wt="display: none;";function _t(){return document.querySelector(`iframe#${ve}`)}async function Tt(t){return new Promise(e=>{let r=document.createElement("iframe");r.setAttribute("id",ve),r.setAttribute("src",Rt[t]),r.setAttribute("style",wt),document.body.appendChild(r),r.onload=()=>e(r);})}async function xe(t){let e=_t();return e||await Tt(t)}var At="Only sign this request if you\u2019ve initiated an action with Immutable X.",bt="The L2 IMX Wallet connection has failed";async function Ie(t,e){let r=await t.getSigner(),n=await r.getAddress(),a=await r.signMessage(ethers.toUtf8Bytes(At)),i=await xe(e);return new Promise((s,o)=>{let d=u=>{b(i,u,"CONNECT_WALLET_RESPONSE",m=>{window.removeEventListener(C,d),m.success||o(new Error(bt)),s(new O(m.data.starkPublicKey,i));});};window.addEventListener(C,d),A(i,{type:"CONNECT_WALLET_REQUEST",details:{ethAddress:n,signature:a}});})}async function Oe(t){let e=t.getIFrame();return new Promise((r,n)=>{let a=i=>{b(e,i,"DISCONNECT_WALLET_RESPONSE",s=>{window.removeEventListener(C,a),!s.success&&s.error&&n(s.error),e.remove(),r();});};window.addEventListener(C,a),A(e,{type:"DISCONNECT_WALLET_REQUEST",details:{starkPublicKey:t.getAddress()}});})}var y=class extends Error{type;constructor(e,r){super(e),this.type=r;}},N=async(t,e)=>{try{return await t()}catch(r){let n=e.message||`${r.message}`||"UnknownError";throw new y(n,e.type)}};var L=class t extends S{static imxSigner;static async connect(e){return await N(async()=>{let r=await ke({chainID:e.immutableXConfig.ethConfiguration.chainID});return this.imxSigner=await Ie(r,e.baseConfig.environment),new t(e,await r.getSigner(),this.imxSigner)},{type:"WALLET_CONNECTION_ERROR"})}static async disconnect(){if(!this.imxSigner)throw new y("Attempted to disconnect from the MetaMask IMX provider without an established connection","PROVIDER_CONNECTION_ERROR");return N(async()=>{await Oe(this.imxSigner);},{type:"PROVIDER_CONNECTION_ERROR"})}static async signMessage(e){if(!this.imxSigner)throw new y("Attempted to sign a message with the MetaMask IMX provider without an established connection","PROVIDER_CONNECTION_ERROR");return N(async()=>await this.imxSigner.signMessage(e),{type:"PROVIDER_CONNECTION_ERROR"})}};var U=class{immutableXConfig;baseConfig;constructor({baseConfig:e,overrides:r}){if(this.baseConfig=e,r)this.immutableXConfig=r.immutableXConfig;else {let n=new xClient.ImxConfiguration({baseConfig:e});this.immutableXConfig=n.immutableXConfig;}}};
|
|
37
36
|
|
|
38
|
-
exports.GenericIMXProvider =
|
|
39
|
-
exports.MetaMaskIMXProvider =
|
|
40
|
-
exports.ProviderConfiguration =
|
|
37
|
+
exports.GenericIMXProvider = S;
|
|
38
|
+
exports.MetaMaskIMXProvider = L;
|
|
39
|
+
exports.ProviderConfiguration = U;
|
package/dist/node/index.js
CHANGED
|
@@ -2,12 +2,11 @@ import { imx } from '@imtbl/generated-clients';
|
|
|
2
2
|
import { convertToSignableToken, signRaw, signMessage } from '@imtbl/toolkit';
|
|
3
3
|
import { ImxConfiguration, Contracts, EncodingApi, MintsApi, signRegisterEthAddress } from '@imtbl/x-client';
|
|
4
4
|
import { isAxiosError } from 'axios';
|
|
5
|
-
import * as
|
|
6
|
-
import { parseUnits, BrowserProvider, toUtf8Bytes
|
|
7
|
-
import
|
|
8
|
-
import Tt from '@metamask/detect-provider';
|
|
5
|
+
import * as I from 'enc-utils';
|
|
6
|
+
import { parseUnits, BrowserProvider, toUtf8Bytes } from 'ethers';
|
|
7
|
+
import pt from '@metamask/detect-provider';
|
|
9
8
|
import { Environment } from '@imtbl/config';
|
|
10
9
|
|
|
11
|
-
function Ve(t,e){return t===e.ethConfiguration.chainID}async function u(t,e){let r=(await t.provider?.getNetwork())?.chainId;if(!Ve(Number(r),e))throw new Error("The wallet used for this operation is not connected to the correct network.")}async function $({signers:{ethSigner:t,starkSigner:e},request:r,config:a}){await u(t,a.immutableXConfig);let n=await t.getAddress(),i=new imx.TransfersApi(a.immutableXConfig.apiConfiguration),s=r.type==="ERC721"?"1":r.amount,o=await i.getSignableTransferV1({getSignableTransferRequest:{sender:n,token:convertToSignableToken(r),amount:s,receiver:r.receiver}}),{signable_message:d,payload_hash:g}=o.data,m=await signRaw(d,t),C=await e.signMessage(g),p={sender_stark_key:o.data.sender_stark_key,sender_vault_id:o.data.sender_vault_id,receiver_stark_key:o.data.receiver_stark_key,receiver_vault_id:o.data.receiver_vault_id,asset_id:o.data.asset_id,amount:o.data.amount,nonce:o.data.nonce,expiration_timestamp:o.data.expiration_timestamp,stark_signature:C},c=await i.createTransferV1({createTransferRequest:p,xImxEthAddress:n,xImxEthSignature:m});return {sent_signature:c?.data.sent_signature,status:c?.data.status?.toString(),time:c?.data.time,transfer_id:c?.data.transfer_id}}async function K({signers:{ethSigner:t,starkSigner:e},request:r,config:a}){await u(t,a.immutableXConfig);let n=await t.getAddress(),i=new imx.TransfersApi(a.immutableXConfig.apiConfiguration),s=r.map(c=>({amount:"1",token:convertToSignableToken({type:"ERC721",tokenId:c.tokenId,tokenAddress:c.tokenAddress}),receiver:c.receiver})),o=await i.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:n,signable_requests:s}}),d=o.data.signable_message;if(d===void 0)throw new Error("Invalid response from Signable registration offchain");let g=await signRaw(d,t),m=[];for(let c of o.data.signable_responses){let _=await e.signMessage(c.payload_hash),R={sender_vault_id:c.sender_vault_id,receiver_stark_key:c.receiver_stark_key,receiver_vault_id:c.receiver_vault_id,asset_id:c.asset_id,amount:c.amount,nonce:c.nonce,expiration_timestamp:c.expiration_timestamp,stark_signature:_};m.push(R);}let C={sender_stark_key:o.data.sender_stark_key,requests:m};return {transfer_ids:(await i.createTransfer({createTransferRequestV2:C,xImxEthAddress:n,xImxEthSignature:g}))?.data.transfer_ids}}async function ee({signers:t,request:e,config:r}){await u(t.ethSigner,r.immutableXConfig);let a=await t.ethSigner.getAddress(),n=new imx.OrdersApi(r.immutableXConfig.apiConfiguration),i=e.sell.type==="ERC721"?"1":e.sell.amount,s=e.buy.type==="ERC721"?"1":e.buy.amount,o={user:a,amount_buy:s,token_buy:convertToSignableToken(e.buy),amount_sell:i,token_sell:convertToSignableToken(e.sell),fees:e.fees,expiration_timestamp:e.expiration_timestamp},d=await n.getSignableOrder({getSignableOrderRequestV3:o}),{signable_message:g,payload_hash:m}=d.data,C=await signRaw(g,t.ethSigner),p=await t.starkSigner.signMessage(m),c=d.data,_={createOrderRequest:{amount_buy:c.amount_buy,amount_sell:c.amount_sell,asset_id_buy:c.asset_id_buy,asset_id_sell:c.asset_id_sell,expiration_timestamp:c.expiration_timestamp,fees:e.fees,nonce:c.nonce,stark_key:c.stark_key,stark_signature:p,vault_id_buy:c.vault_id_buy,vault_id_sell:c.vault_id_sell},xImxEthAddress:a,xImxEthSignature:C};return {...(await n.createOrderV3(_)).data}}async function te({signers:t,request:e,config:r}){let a=new imx.OrdersApi(r.immutableXConfig.apiConfiguration),n=await a.getSignableCancelOrderV3({getSignableCancelOrderRequest:{order_id:e.order_id}}),{signable_message:i,payload_hash:s}=n.data,o=await signRaw(i,t.ethSigner),d=await t.starkSigner.signMessage(s),g=await t.ethSigner.getAddress(),m=await a.cancelOrderV3({id:e.order_id.toString(),cancelOrderRequest:{order_id:e.order_id,stark_signature:d},xImxEthAddress:g,xImxEthSignature:o});return {order_id:m.data.order_id,status:m.data.status}}async function ae(t,e){await u(t.ethSigner,e.immutableXConfig);let r=new imx.UsersApi(e.immutableXConfig.apiConfiguration),a=await t.ethSigner.getAddress(),n=await t.starkSigner.getAddress(),i=await r.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:a,stark_key:n}}),{signable_message:s,payload_hash:o}=i.data,d=await signRaw(s,t.ethSigner),g=await t.starkSigner.signMessage(o);return (await r.registerUser({registerUserRequest:{eth_signature:d,ether_key:a,stark_signature:g,stark_key:n}})).data}async function ne(t,e){try{let a=await new imx.UsersApi(e.immutableXConfig.apiConfiguration).getUsers({user:t}),{accounts:n}=a.data;return n?.length>0}catch(r){if(isAxiosError(r)&&r.response?.status===404)return !1;throw r}}async function T(t,e,r){await u(e,r.immutableXConfig);let a=r.immutableXConfig,n=Contracts.RegistrationV4.connect(a.ethConfiguration.registrationV4ContractAddress||a.ethConfiguration.registrationContractAddress,e);try{return await n.isRegistered(t)}catch(i){if(i.reason==="USER_UNREGISTERED")return !1;throw i}}var w=t=>{if(t!==void 0)return t;throw new Error("undefined field exception")};async function ie(t,e){let{signers:{ethSigner:r,starkSigner:a}}=t;await u(r,t.config);let n=t.type==="ERC721"?"1":t.amount,i=await e.getSignableWithdrawalV2({getSignableWithdrawalRequest:{user:await r.getAddress(),token:convertToSignableToken(t),amount:n}}),{signable_message:s,payload_hash:o}=i.data,d=await a.signMessage(o),{ethAddress:g,ethSignature:m}=await signMessage(s,r);return (await e.createWithdrawalV2({createWithdrawalRequestV2:{sender_stark_key:w(i.data.sender_stark_key),sender_vault_id:w(i.data.sender_vault_id),receiver_stark_key:w(i.data.receiver_stark_key),receiver_vault_id:w(i.data.receiver_vault_id),amount:n,asset_id:w(i.data.asset_id),expiration_timestamp:w(i.data.expiration_timestamp),nonce:w(i.data.nonce),stark_signature:d},xImxEthAddress:g,xImxEthSignature:m})).data}async function l(t,e,r,a){return (await new imx.EncodingApi(r.apiConfiguration).encodeAsset({assetType:t,encodeAssetRequest:{token:{type:e,...a&&{data:a}}}})).data}async function I(t,e,r,a){return Contracts.CoreV4.connect(a.ethConfiguration.coreContractAddress,t).getWithdrawalBalance(e,r)}async function Ze(t,e,r){let a=await l("asset","ETH",r);return await I(t,e,a.asset_id,r)}async function et(t,e,r,a){let n=await l("asset","ERC20",a,{token_address:r});return await I(t,e,n.asset_id,a)}async function tt(t,e,r,a,n,i){try{let s=await n.getMintableTokenDetailsByClientTokenId({tokenAddress:r.tokenAddress,tokenId:r.tokenId}),o=await l("mintable-asset","ERC721",i,{id:r.tokenId,token_address:r.tokenAddress,...s.data.blueprint&&{blueprint:s.data.blueprint}});return await I(t,e,o.asset_id,i)}catch(s){if(s.response?.status===404){let o=await l("asset","ERC721",i,{token_id:r.tokenId,token_address:r.tokenAddress});return await I(t,e,o.asset_id,i)}throw s}}async function O(t,e,r,a,n,i){switch(r.type){case"ETH":return await Ze(t,e,i);case"ERC20":return await et(t,e,r.tokenAddress,i);case"ERC721":return await tt(t,e,r,a,n,i);default:throw new Error("Unsupported token type")}}async function N(t,e,r,a,n){let i=new EncodingApi(n.apiConfiguration),s=new MintsApi(n.apiConfiguration),o=await O(t,e,a,i,s,n),d=await O(t,r,a,i,s,n);return {v3Balance:o,v4Balance:d}}async function oe(t,e,r,a,n,i){let s=new EncodingApi(n.apiConfiguration),o=await O(t,e,a,s,i,n),d=await O(t,r,a,s,i,n);return {v3Balance:o,v4Balance:d}}var de="ERC20";async function q(t,e,r,a,n){let i=await t.getAddress(),s=await signRegisterEthAddress(e,i,r),d=await Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).registerAndWithdrawAll.populateTransaction(i,r,s,a);return t.sendTransaction(d)}async function B(t,e,r,a){let i=await Contracts.RegistrationV4.connect(a.ethConfiguration.registrationV4ContractAddress||a.ethConfiguration.registrationContractAddress,t).withdrawAll.populateTransaction(await t.getAddress(),e,r);return t.sendTransaction(i)}async function G(t,e,r,a){let i=await Contracts.CoreV4.connect(a.ethConfiguration.coreContractAddress,t).withdraw.populateTransaction(await t.getAddress(),r);return t.sendTransaction(i)}async function ce({ethSigner:t,starkSigner:e,starkPublicKey:r,token:a,config:n}){await u(t,n.immutableXConfig);let{v3Balance:i,v4Balance:s}=await N(t,r,await t.getAddress(),{type:de,tokenAddress:a.tokenAddress},n.immutableXConfig),o=await l("asset",de,n.immutableXConfig,{token_address:a.tokenAddress});if(i>0)return await T(r,t,n)?B(t,r,o.asset_type,n.immutableXConfig):q(t,e,r,o.asset_type,n.immutableXConfig);if(s>0)return G(t,r,o.asset_type,n.immutableXConfig);throw new Error("No balance to withdraw")}var h="ERC721";function ue(t){let{id:e}=t.data,r=t.data.blueprint||"";return W.sanitizeHex(W.utf8ToHex(`{${e}}:{${r}}`))}async function at(t,e,r,a){let n=await t.getAddress(),i=await e.getAddress(),s=await l("asset",h,a,{token_id:r.tokenId,token_address:r.tokenAddress}),o=await signRegisterEthAddress(e,n,i),g=await Contracts.RegistrationV4.connect(a.ethConfiguration.registrationV4ContractAddress||a.ethConfiguration.registrationContractAddress,t).registerAndWithdrawNft.populateTransaction(n,i,o,s.asset_type,r.tokenId);return t.sendTransaction(g)}async function nt(t,e,r,a){let n=await t.getAddress(),i=await e.getAddress(),s=await l("mintable-asset",h,a,{id:r.data.id,token_address:r.data.tokenAddress,...r.data.blueprint&&{blueprint:r.data.blueprint}}),o=ue(r),d=await signRegisterEthAddress(e,n,i),m=await Contracts.RegistrationV4.connect(a.ethConfiguration.registrationV4ContractAddress||a.ethConfiguration.registrationContractAddress,t).registerWithdrawAndMint.populateTransaction(n,i,d,s.asset_type,o);return t.sendTransaction(m)}async function it(t,e,r,a,n){return t.getMintableTokenDetailsByClientTokenId({tokenAddress:a.tokenAddress,tokenId:a.tokenId}).then(i=>nt(e,r,{type:h,data:{id:a.tokenId,tokenAddress:a.tokenAddress,blueprint:i.data.blueprint}},n)).catch(i=>{if(i.response?.status===404)return at(e,r,a,n);throw i})}async function st(t,e,r,a){let n=await l("mintable-asset",h,a,{id:r.data.id,token_address:r.data.tokenAddress,...r.data.blueprint&&{blueprint:r.data.blueprint}}),i=ue(r),o=await Contracts.CoreV4.connect(a.ethConfiguration.coreContractAddress,t).withdrawAndMint.populateTransaction(e,n.asset_type,i);return t.sendTransaction(o)}async function ot(t,e,r,a){let n=await l("asset",h,a,{token_id:r.tokenId,token_address:r.tokenAddress}),s=await Contracts.CoreV4.connect(a.ethConfiguration.coreContractAddress,t).withdrawNft.populateTransaction(e,n.asset_type,r.tokenId);return t.sendTransaction(s)}async function me(t,e,r,a,n){return t.getMintableTokenDetailsByClientTokenId({tokenAddress:a.tokenAddress,tokenId:a.tokenId}).then(i=>st(e,r,{type:h,data:{id:a.tokenId,tokenAddress:a.tokenAddress,blueprint:i.data.blueprint}},n)).catch(i=>{if(i.response?.status===404)return ot(e,r,a,n);throw i})}async function pe({ethSigner:t,starkSigner:e,starkPublicKey:r,token:a,config:n},i){await u(t,n.immutableXConfig);let s=await t.getAddress(),{v3Balance:o,v4Balance:d}=await oe(t,r,s,{type:h,tokenAddress:a.tokenAddress,tokenId:a.tokenId},n.immutableXConfig,i);if(o>0)return await T(r,t,n)?me(i,t,r,a,n.immutableXConfig):it(i,t,e,a,n.immutableXConfig);if(d>0)return me(i,t,s,a,n.immutableXConfig);throw new Error("No balance to withdraw")}var le="ETH";async function fe({ethSigner:t,starkSigner:e,starkPublicKey:r,config:a}){await u(t,a.immutableXConfig);let{v3Balance:n,v4Balance:i}=await N(t,r,await t.getAddress(),{type:le},a.immutableXConfig),s=await l("asset",le,a.immutableXConfig);if(n>0)return await T(r,t,a)?B(t,r,s.asset_type,a.immutableXConfig):q(t,e,r,s.asset_type,a.immutableXConfig);if(i>0)return G(t,r,s.asset_type,a.immutableXConfig);throw new Error("No balance to withdraw")}async function Ee({signers:t,withdrawal:e,config:r}){let a=new imx.WithdrawalsApi(r.immutableXConfig.apiConfiguration);return ie({signers:t,config:r.immutableXConfig,...e},a)}async function _e({signers:{ethSigner:t,starkSigner:e},starkPublicKey:r,token:a,config:n}){let i=new imx.MintsApi(n.immutableXConfig.apiConfiguration);switch(a.type){case"ETH":return fe({ethSigner:t,starkSigner:e,starkPublicKey:r,config:n});case"ERC20":return ce({ethSigner:t,starkSigner:e,starkPublicKey:r,token:a,config:n});case"ERC721":return pe({ethSigner:t,starkSigner:e,starkPublicKey:r,token:a,config:n},i)}}async function Te({signers:{ethSigner:t,starkSigner:e},request:r,config:a}){await u(t,a.immutableXConfig);let n=await t.getAddress(),i=new imx.TradesApi(a.immutableXConfig.apiConfiguration),s=await i.getSignableTrade({getSignableTradeRequest:{user:n,order_id:r.order_id,fees:r.fees}}),{signable_message:o,payload_hash:d}=s.data,g=await signRaw(o,t),m=await e.signMessage(d);return (await i.createTradeV3({createTradeRequest:{amount_buy:s.data.amount_buy,amount_sell:s.data.amount_sell,asset_id_buy:s.data.asset_id_buy,asset_id_sell:s.data.asset_id_sell,expiration_timestamp:s.data.expiration_timestamp,fee_info:s.data.fee_info,fees:r.fees,include_fees:!0,nonce:s.data.nonce,order_id:r.order_id,stark_key:s.data.stark_key,vault_id_buy:s.data.vault_id_buy,vault_id_sell:s.data.vault_id_sell,stark_signature:m},xImxEthAddress:n,xImxEthSignature:g})).data}async function ut(t,e,r,a,n,i){let o=await Contracts.CoreV4.connect(i.ethConfiguration.coreContractAddress,t)["deposit(uint256,uint256,uint256)"].populateTransaction(a,r,n);return t.sendTransaction({...o,value:e})}async function we({signers:{ethSigner:t},deposit:e,config:r}){await u(t,r.immutableXConfig);let a=await t.getAddress(),n={decimals:18},i=parseUnits(e.amount,"wei"),s=r.immutableXConfig,o=new imx.DepositsApi(s.apiConfiguration),d=new imx.EncodingApi(s.apiConfiguration),g={user:a,token:{type:e.type,data:n},amount:i.toString()},m=await o.getSignableDeposit({getSignableDepositRequest:g}),p=(await d.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type}}})).data.asset_type,c=m.data.stark_key,_=m.data.vault_id;return ut(t,i,p,c,_,s)}async function lt(t,e,r,a,n,i){let o=await Contracts.CoreV4.connect(i.coreContractAddress,t).depositERC20.populateTransaction(a,r,n,e);return t.sendTransaction(o)}async function Ae({signers:{ethSigner:t},deposit:e,config:r}){await u(t,r.immutableXConfig);let{apiConfiguration:a,ethConfiguration:n}=r.immutableXConfig,i=await t.getAddress(),s=new imx.TokensApi(a),o=new imx.DepositsApi(a),d=new imx.EncodingApi(a),g=await s.getToken({address:e.tokenAddress}),C={decimals:parseInt(g.data.decimals),token_address:e.tokenAddress},p=parseUnits(e.amount,0),_=await Contracts.IERC20.connect(e.tokenAddress,t).approve.populateTransaction(n.coreContractAddress,p);await t.sendTransaction(_);let R={user:i,token:{type:e.type,data:C},amount:p.toString()},A=await o.getSignableDeposit({getSignableDepositRequest:R}),qe=(await d.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type,data:{token_address:e.tokenAddress}}}})).data.asset_type,Be=A.data.stark_key,Ge=A.data.vault_id,Fe=BigInt(A.data.amount);return lt(t,Fe,qe,Be,Ge,n)}async function ft(t,e,r,a,n,i){let o=await Contracts.CoreV4.connect(i.ethConfiguration.coreContractAddress,t).depositNft.populateTransaction(a,r,n,e);return t.sendTransaction(o)}async function ye({signers:{ethSigner:t},deposit:e,config:r}){await u(t,r.immutableXConfig);let a=await t.getAddress(),{immutableXConfig:n}=r,i=new imx.DepositsApi(n.apiConfiguration),s=new imx.EncodingApi(n.apiConfiguration),o={token_address:e.tokenAddress,token_id:e.tokenId},g={user:a,token:{type:e.type,data:o},amount:"1".toString()},m=await i.getSignableDeposit({getSignableDepositRequest:g}),p=(await s.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type,data:{token_address:e.tokenAddress,token_id:e.tokenId}}}})).data.asset_type,c=m.data.stark_key,_=m.data.vault_id,R=Contracts.IERC721.connect(e.tokenAddress,t),A=n.ethConfiguration.coreContractAddress;return await R.isApprovedForAll(a,A)||await R.setApprovalForAll(A,!0),ft(t,e.tokenId,p,c,_,n)}async function ke({signers:t,deposit:e,config:r}){switch(e.type){case"ETH":return we({signers:t,deposit:e,config:r});case"ERC20":return Ae({signers:t,deposit:e,config:r});case"ERC721":return ye({signers:t,deposit:e,config:r})}}async function ve({signers:t,request:e,config:r}){await u(t.ethSigner,r.immutableXConfig);let a=new imx.ExchangesApi(r.immutableXConfig.apiConfiguration),n=await t.ethSigner.getAddress(),i=e.amount,s=await a.getExchangeSignableTransfer({id:e.transactionID,getSignableTransferRequest:{sender:n,token:convertToSignableToken(e),amount:i,receiver:e.receiver}}),{signable_message:o,payload_hash:d}=s.data,g=await signRaw(o,t.ethSigner),m=await t.starkSigner.signMessage(d),C={sender_stark_key:s.data.sender_stark_key,sender_vault_id:s.data.sender_vault_id,receiver_stark_key:s.data.receiver_stark_key,receiver_vault_id:s.data.receiver_vault_id,asset_id:s.data.asset_id,amount:s.data.amount,nonce:s.data.nonce,expiration_timestamp:s.data.expiration_timestamp,stark_signature:m},p=await a.createExchangeTransfer({id:e.transactionID,createTransferRequest:C,xImxEthAddress:n,xImxEthSignature:g});return {sent_signature:p?.data.sent_signature,status:p?.data.status?.toString(),time:p?.data.time,transfer_id:p?.data.transfer_id}}var P=class{config;signers;constructor(e,r,a){this.config=e,this.signers={ethSigner:r,starkSigner:a};}async getAddress(){return this.signers.ethSigner.getAddress()}async isRegisteredOffchain(){let e=await this.getAddress();return ne(e,this.config)}registerOffchain(){return ae(this.signers,this.config)}batchNftTransfer(e){return K({signers:this.signers,request:e,config:this.config})}cancelOrder(e){return te({signers:this.signers,request:e,config:this.config})}completeWithdrawal(e,r){return _e({config:this.config,signers:this.signers,token:r,starkPublicKey:e})}createOrder(e){return ee({signers:this.signers,request:e,config:this.config})}createTrade(e){return Te({signers:this.signers,request:e,config:this.config})}deposit(e){return ke({signers:this.signers,deposit:e,config:this.config})}exchangeTransfer(e){return ve({signers:this.signers,request:e,config:this.config})}async isRegisteredOnchain(){let e=await this.signers.starkSigner.getAddress();return T(e,this.signers.ethSigner,this.config)}prepareWithdrawal(e){return Ee({signers:this.signers,withdrawal:e,config:this.config})}transfer(e){return $({signers:this.signers,request:e,config:this.config})}};var Pe={SWITCH_CHAIN:"wallet_switchEthereumChain",CONNECT:"eth_requestAccounts"};function xe(t){return !!t?.request}async function Ie(t,e){await t.request({method:Pe.CONNECT}),e&&await t.request({method:Pe.SWITCH_CHAIN,params:[{chainId:`0x${e.toString(16)}`}]});}var wt={PROVIDER_NOT_FOUND:"The Metamask provider was not found"};async function Oe({chainID:t}){let e=await Tt();if(!xe(e))throw new Error(wt.PROVIDER_NOT_FOUND);return await Ie(e,t),new BrowserProvider(e)}var E="message";function b(t,e){t&&t.contentWindow&&t.contentWindow.postMessage(e,new URL(t.src).origin);}function S(t,e,r,a){if(t&&e.source!==t.contentWindow)return;let n=e.data;n.type===r&&a(n.details);}var X=class{publicAddress;iframe;constructor(e,r){this.publicAddress=e,this.iframe=r;}getAddress(){return this.publicAddress}signMessage(e){return new Promise((r,a)=>{let n=i=>{S(this.iframe,i,"SIGN_MESSAGE_RESPONSE",s=>{window.removeEventListener(E,n),s.success||a(new Error(s.error?.message)),r(s.data.signedMessage);});};window.addEventListener(E,n),b(this.iframe,{type:"SIGN_MESSAGE_REQUEST",details:{starkPublicKey:this.publicAddress,message:e}});})}getIFrame(){return this.iframe}getYCoordinate(){return new Promise((e,r)=>{let a=n=>{S(this.iframe,n,"GET_Y_COORDINATE_RESPONSE",i=>{window.removeEventListener(E,a),i.success||r(new Error(i.error?.message)),e(i.data.yCoordinate);});};window.addEventListener(E,a),b(this.iframe,{type:"GET_Y_COORDINATE_REQUEST",details:{starkPublicKey:this.publicAddress}});})}};var Me="imx-wallet-app",bt={[Environment.SANDBOX]:"https://wallets.sandbox.immutable.com",[Environment.PRODUCTION]:"https://wallets.immutable.com"},St="display: none;";function yt(){return document.querySelector(`iframe#${Me}`)}async function kt(t){return new Promise(e=>{let r=document.createElement("iframe");r.setAttribute("id",Me),r.setAttribute("src",bt[t]),r.setAttribute("style",St),document.body.appendChild(r),r.onload=()=>e(r);})}async function We(t){let e=yt();return e||await kt(t)}var k=new Uint8Array([79,110,108,121,32,115,105,103,110,32,116,104,105,115,32,114,101,113,117,101,115,116,32,105,102,32,121,111,117,226,128,153,118,101,32,105,110,105,116,105,97,116,101,100,32,97,110,32,97,99,116,105,111,110,32,119,105,116,104,32,73,109,109,117,116,97,98,108,101,32,88,46]),x="Only sign this request if you\u2019ve initiated an action with Immutable X.",D=Buffer.from(x,"utf8").toString("utf8"),Pt="The L2 IMX Wallet connection has failed";function xt(){track("xProvider","log",{param:"navigator.language",val:navigator?.language}),track("xProvider","log",{param:"navigator.languages",val:navigator?.languages?.join(",")}),track("xProvider","log",{param:"document.characterSet",val:document?.characterSet}),track("xProvider","log",{param:"DEFAULT_CONNECTION_STRING_2",val:D}),track("xProvider","log",{param:"DEFAULT_CONNECTION_BYTES",val:k.toString()}),track("xProvider","log",{param:"DEFAULT_CONNECTION_STRING_1",val:toUtf8Bytes(x).toString()}),track("xProvider","log",{param:"DEFAULT_CONNECTION_STRING_2",val:toUtf8Bytes(D).toString()}),track("xProvider","log",{param:"DEFAULT_CONNECTION_STRING_1.normalize()",val:toUtf8Bytes(x.normalize()).toString()}),track("xProvider","log",{param:"DEFAULT_CONNECTION_STRING_2.normalize()",val:toUtf8Bytes(D.normalize()).toString()}),track("xProvider","log",{param:"Buffer.from(DEFAULT_CONNECTION_STRING_1, utf8).toString()",val:Buffer.from(x,"utf8").toString()}),track("xProvider","log",{param:"DEFAULT_CONNECTION_BYTES === toUtf8Bytes(DEFAULT_CONNECTION_STRING_1)",val:k.toString()===toUtf8Bytes(x).toString()}),track("xProvider","log",{param:"DEFAULT_CONNECTION_BYTES === toUtf8Bytes(DEFAULT_CONNECTION_STRING_2)",val:k.toString()===toUtf8Bytes(D).toString()}),track("xProvider","log",{param:"DEFAULT_CONNECTION_BYTES",val:k.toString()}),track("xProvider","log",{param:"DEFAULT_CONNECTION_BYTES.toUtf8String()",val:toUtf8String(k)});}async function Xe(t,e){let r=await t.getSigner(),a=await r.getAddress();xt();let n=await r.signMessage(k),i=await We(e);return new Promise((s,o)=>{let d=g=>{S(i,g,"CONNECT_WALLET_RESPONSE",m=>{window.removeEventListener(E,d),m.success||o(new Error(Pt)),s(new X(m.data.starkPublicKey,i));});};window.addEventListener(E,d),b(i,{type:"CONNECT_WALLET_REQUEST",details:{ethAddress:a,signature:n}});})}async function De(t){let e=t.getIFrame();return new Promise((r,a)=>{let n=i=>{S(e,i,"DISCONNECT_WALLET_RESPONSE",s=>{window.removeEventListener(E,n),!s.success&&s.error&&a(s.error),e.remove(),r();});};window.addEventListener(E,n),b(e,{type:"DISCONNECT_WALLET_REQUEST",details:{starkPublicKey:t.getAddress()}});})}var v=class extends Error{type;constructor(e,r){super(e),this.type=r;}},L=async(t,e)=>{try{return await t()}catch(r){let a=e.message||`${r.message}`||"UnknownError";throw new v(a,e.type)}};var V=class t extends P{static imxSigner;static async connect(e){return await L(async()=>{let r=await Oe({chainID:e.immutableXConfig.ethConfiguration.chainID});this.imxSigner=await Xe(r,e.baseConfig.environment);let a=await r.getSigner();return track("xProvider","log",{param:"metaMaskProvider.getSigner().getAddress()",val:await a.getAddress()}),track("xProvider","log",{param:"imxSigner.getAddress()",val:this.imxSigner.getAddress()}),new t(e,a,this.imxSigner)},{type:"WALLET_CONNECTION_ERROR"})}static async disconnect(){if(!this.imxSigner)throw new v("Attempted to disconnect from the MetaMask IMX provider without an established connection","PROVIDER_CONNECTION_ERROR");return L(async()=>{await De(this.imxSigner);},{type:"PROVIDER_CONNECTION_ERROR"})}static async signMessage(e){if(!this.imxSigner)throw new v("Attempted to sign a message with the MetaMask IMX provider without an established connection","PROVIDER_CONNECTION_ERROR");return L(async()=>await this.imxSigner.signMessage(e),{type:"PROVIDER_CONNECTION_ERROR"})}};var H=class{immutableXConfig;baseConfig;constructor({baseConfig:e,overrides:r}){if(this.baseConfig=e,r)this.immutableXConfig=r.immutableXConfig;else {let a=new ImxConfiguration({baseConfig:e});this.immutableXConfig=a.immutableXConfig;}}};
|
|
10
|
+
function qe(t,e){return t===e.ethConfiguration.chainID}async function g(t,e){let r=(await t.provider?.getNetwork())?.chainId;if(!qe(Number(r),e))throw new Error("The wallet used for this operation is not connected to the correct network.")}async function H({signers:{ethSigner:t,starkSigner:e},request:r,config:n}){await g(t,n.immutableXConfig);let a=await t.getAddress(),i=new imx.TransfersApi(n.immutableXConfig.apiConfiguration),s=r.type==="ERC721"?"1":r.amount,o=await i.getSignableTransferV1({getSignableTransferRequest:{sender:a,token:convertToSignableToken(r),amount:s,receiver:r.receiver}}),{signable_message:d,payload_hash:u}=o.data,m=await signRaw(d,t),f=await e.signMessage(u),p={sender_stark_key:o.data.sender_stark_key,sender_vault_id:o.data.sender_vault_id,receiver_stark_key:o.data.receiver_stark_key,receiver_vault_id:o.data.receiver_vault_id,asset_id:o.data.asset_id,amount:o.data.amount,nonce:o.data.nonce,expiration_timestamp:o.data.expiration_timestamp,stark_signature:f},c=await i.createTransferV1({createTransferRequest:p,xImxEthAddress:a,xImxEthSignature:m});return {sent_signature:c?.data.sent_signature,status:c?.data.status?.toString(),time:c?.data.time,transfer_id:c?.data.transfer_id}}async function F({signers:{ethSigner:t,starkSigner:e},request:r,config:n}){await g(t,n.immutableXConfig);let a=await t.getAddress(),i=new imx.TransfersApi(n.immutableXConfig.apiConfiguration),s=r.map(c=>({amount:"1",token:convertToSignableToken({type:"ERC721",tokenId:c.tokenId,tokenAddress:c.tokenAddress}),receiver:c.receiver})),o=await i.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:a,signable_requests:s}}),d=o.data.signable_message;if(d===void 0)throw new Error("Invalid response from Signable registration offchain");let u=await signRaw(d,t),m=[];for(let c of o.data.signable_responses){let E=await e.signMessage(c.payload_hash),w={sender_vault_id:c.sender_vault_id,receiver_stark_key:c.receiver_stark_key,receiver_vault_id:c.receiver_vault_id,asset_id:c.asset_id,amount:c.amount,nonce:c.nonce,expiration_timestamp:c.expiration_timestamp,stark_signature:E};m.push(w);}let f={sender_stark_key:o.data.sender_stark_key,requests:m};return {transfer_ids:(await i.createTransfer({createTransferRequestV2:f,xImxEthAddress:a,xImxEthSignature:u}))?.data.transfer_ids}}async function z({signers:t,request:e,config:r}){await g(t.ethSigner,r.immutableXConfig);let n=await t.ethSigner.getAddress(),a=new imx.OrdersApi(r.immutableXConfig.apiConfiguration),i=e.sell.type==="ERC721"?"1":e.sell.amount,s=e.buy.type==="ERC721"?"1":e.buy.amount,o={user:n,amount_buy:s,token_buy:convertToSignableToken(e.buy),amount_sell:i,token_sell:convertToSignableToken(e.sell),fees:e.fees,expiration_timestamp:e.expiration_timestamp},d=await a.getSignableOrder({getSignableOrderRequestV3:o}),{signable_message:u,payload_hash:m}=d.data,f=await signRaw(u,t.ethSigner),p=await t.starkSigner.signMessage(m),c=d.data,E={createOrderRequest:{amount_buy:c.amount_buy,amount_sell:c.amount_sell,asset_id_buy:c.asset_id_buy,asset_id_sell:c.asset_id_sell,expiration_timestamp:c.expiration_timestamp,fees:e.fees,nonce:c.nonce,stark_key:c.stark_key,stark_signature:p,vault_id_buy:c.vault_id_buy,vault_id_sell:c.vault_id_sell},xImxEthAddress:n,xImxEthSignature:f};return {...(await a.createOrderV3(E)).data}}async function K({signers:t,request:e,config:r}){let n=new imx.OrdersApi(r.immutableXConfig.apiConfiguration),a=await n.getSignableCancelOrderV3({getSignableCancelOrderRequest:{order_id:e.order_id}}),{signable_message:i,payload_hash:s}=a.data,o=await signRaw(i,t.ethSigner),d=await t.starkSigner.signMessage(s),u=await t.ethSigner.getAddress(),m=await n.cancelOrderV3({id:e.order_id.toString(),cancelOrderRequest:{order_id:e.order_id,stark_signature:d},xImxEthAddress:u,xImxEthSignature:o});return {order_id:m.data.order_id,status:m.data.status}}async function J(t,e){await g(t.ethSigner,e.immutableXConfig);let r=new imx.UsersApi(e.immutableXConfig.apiConfiguration),n=await t.ethSigner.getAddress(),a=await t.starkSigner.getAddress(),i=await r.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:n,stark_key:a}}),{signable_message:s,payload_hash:o}=i.data,d=await signRaw(s,t.ethSigner),u=await t.starkSigner.signMessage(o);return (await r.registerUser({registerUserRequest:{eth_signature:d,ether_key:n,stark_signature:u,stark_key:a}})).data}async function Z(t,e){try{let n=await new imx.UsersApi(e.immutableXConfig.apiConfiguration).getUsers({user:t}),{accounts:a}=n.data;return a?.length>0}catch(r){if(isAxiosError(r)&&r.response?.status===404)return !1;throw r}}async function R(t,e,r){await g(e,r.immutableXConfig);let n=r.immutableXConfig,a=Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,e);try{return await a.isRegistered(t)}catch(i){if(i.reason==="USER_UNREGISTERED")return !1;throw i}}var _=t=>{if(t!==void 0)return t;throw new Error("undefined field exception")};async function ee(t,e){let{signers:{ethSigner:r,starkSigner:n}}=t;await g(r,t.config);let a=t.type==="ERC721"?"1":t.amount,i=await e.getSignableWithdrawalV2({getSignableWithdrawalRequest:{user:await r.getAddress(),token:convertToSignableToken(t),amount:a}}),{signable_message:s,payload_hash:o}=i.data,d=await n.signMessage(o),{ethAddress:u,ethSignature:m}=await signMessage(s,r);return (await e.createWithdrawalV2({createWithdrawalRequestV2:{sender_stark_key:_(i.data.sender_stark_key),sender_vault_id:_(i.data.sender_vault_id),receiver_stark_key:_(i.data.receiver_stark_key),receiver_vault_id:_(i.data.receiver_vault_id),amount:a,asset_id:_(i.data.asset_id),expiration_timestamp:_(i.data.expiration_timestamp),nonce:_(i.data.nonce),stark_signature:d},xImxEthAddress:u,xImxEthSignature:m})).data}async function l(t,e,r,n){return (await new imx.EncodingApi(r.apiConfiguration).encodeAsset({assetType:t,encodeAssetRequest:{token:{type:e,...n&&{data:n}}}})).data}async function k(t,e,r,n){return Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).getWithdrawalBalance(e,r)}async function Qe(t,e,r){let n=await l("asset","ETH",r);return await k(t,e,n.asset_id,r)}async function $e(t,e,r,n){let a=await l("asset","ERC20",n,{token_address:r});return await k(t,e,a.asset_id,n)}async function ze(t,e,r,n,a,i){try{let s=await a.getMintableTokenDetailsByClientTokenId({tokenAddress:r.tokenAddress,tokenId:r.tokenId}),o=await l("mintable-asset","ERC721",i,{id:r.tokenId,token_address:r.tokenAddress,...s.data.blueprint&&{blueprint:s.data.blueprint}});return await k(t,e,o.asset_id,i)}catch(s){if(s.response?.status===404){let o=await l("asset","ERC721",i,{token_id:r.tokenId,token_address:r.tokenAddress});return await k(t,e,o.asset_id,i)}throw s}}async function P(t,e,r,n,a,i){switch(r.type){case"ETH":return await Qe(t,e,i);case"ERC20":return await $e(t,e,r.tokenAddress,i);case"ERC721":return await ze(t,e,r,n,a,i);default:throw new Error("Unsupported token type")}}async function v(t,e,r,n,a){let i=new EncodingApi(a.apiConfiguration),s=new MintsApi(a.apiConfiguration),o=await P(t,e,n,i,s,a),d=await P(t,r,n,i,s,a);return {v3Balance:o,v4Balance:d}}async function re(t,e,r,n,a,i){let s=new EncodingApi(a.apiConfiguration),o=await P(t,e,n,s,i,a),d=await P(t,r,n,s,i,a);return {v3Balance:o,v4Balance:d}}var ne="ERC20";async function W(t,e,r,n,a){let i=await t.getAddress(),s=await signRegisterEthAddress(e,i,r),d=await Contracts.RegistrationV4.connect(a.ethConfiguration.registrationV4ContractAddress||a.ethConfiguration.registrationContractAddress,t).registerAndWithdrawAll.populateTransaction(i,r,s,n);return t.sendTransaction(d)}async function X(t,e,r,n){let i=await Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).withdrawAll.populateTransaction(await t.getAddress(),e,r);return t.sendTransaction(i)}async function D(t,e,r,n){let i=await Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).withdraw.populateTransaction(await t.getAddress(),r);return t.sendTransaction(i)}async function ae({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a}){await g(t,a.immutableXConfig);let{v3Balance:i,v4Balance:s}=await v(t,r,await t.getAddress(),{type:ne,tokenAddress:n.tokenAddress},a.immutableXConfig),o=await l("asset",ne,a.immutableXConfig,{token_address:n.tokenAddress});if(i>0)return await R(r,t,a)?X(t,r,o.asset_type,a.immutableXConfig):W(t,e,r,o.asset_type,a.immutableXConfig);if(s>0)return D(t,r,o.asset_type,a.immutableXConfig);throw new Error("No balance to withdraw")}var T="ERC721";function oe(t){let{id:e}=t.data,r=t.data.blueprint||"";return I.sanitizeHex(I.utf8ToHex(`{${e}}:{${r}}`))}async function je(t,e,r,n){let a=await t.getAddress(),i=await e.getAddress(),s=await l("asset",T,n,{token_id:r.tokenId,token_address:r.tokenAddress}),o=await signRegisterEthAddress(e,a,i),u=await Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).registerAndWithdrawNft.populateTransaction(a,i,o,s.asset_type,r.tokenId);return t.sendTransaction(u)}async function Je(t,e,r,n){let a=await t.getAddress(),i=await e.getAddress(),s=await l("mintable-asset",T,n,{id:r.data.id,token_address:r.data.tokenAddress,...r.data.blueprint&&{blueprint:r.data.blueprint}}),o=oe(r),d=await signRegisterEthAddress(e,a,i),m=await Contracts.RegistrationV4.connect(n.ethConfiguration.registrationV4ContractAddress||n.ethConfiguration.registrationContractAddress,t).registerWithdrawAndMint.populateTransaction(a,i,d,s.asset_type,o);return t.sendTransaction(m)}async function Ze(t,e,r,n,a){return t.getMintableTokenDetailsByClientTokenId({tokenAddress:n.tokenAddress,tokenId:n.tokenId}).then(i=>Je(e,r,{type:T,data:{id:n.tokenId,tokenAddress:n.tokenAddress,blueprint:i.data.blueprint}},a)).catch(i=>{if(i.response?.status===404)return je(e,r,n,a);throw i})}async function et(t,e,r,n){let a=await l("mintable-asset",T,n,{id:r.data.id,token_address:r.data.tokenAddress,...r.data.blueprint&&{blueprint:r.data.blueprint}}),i=oe(r),o=await Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).withdrawAndMint.populateTransaction(e,a.asset_type,i);return t.sendTransaction(o)}async function tt(t,e,r,n){let a=await l("asset",T,n,{token_id:r.tokenId,token_address:r.tokenAddress}),s=await Contracts.CoreV4.connect(n.ethConfiguration.coreContractAddress,t).withdrawNft.populateTransaction(e,a.asset_type,r.tokenId);return t.sendTransaction(s)}async function ie(t,e,r,n,a){return t.getMintableTokenDetailsByClientTokenId({tokenAddress:n.tokenAddress,tokenId:n.tokenId}).then(i=>et(e,r,{type:T,data:{id:n.tokenId,tokenAddress:n.tokenAddress,blueprint:i.data.blueprint}},a)).catch(i=>{if(i.response?.status===404)return tt(e,r,n,a);throw i})}async function de({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a},i){await g(t,a.immutableXConfig);let s=await t.getAddress(),{v3Balance:o,v4Balance:d}=await re(t,r,s,{type:T,tokenAddress:n.tokenAddress,tokenId:n.tokenId},a.immutableXConfig,i);if(o>0)return await R(r,t,a)?ie(i,t,r,n,a.immutableXConfig):Ze(i,t,e,n,a.immutableXConfig);if(d>0)return ie(i,t,s,n,a.immutableXConfig);throw new Error("No balance to withdraw")}var ce="ETH";async function me({ethSigner:t,starkSigner:e,starkPublicKey:r,config:n}){await g(t,n.immutableXConfig);let{v3Balance:a,v4Balance:i}=await v(t,r,await t.getAddress(),{type:ce},n.immutableXConfig),s=await l("asset",ce,n.immutableXConfig);if(a>0)return await R(r,t,n)?X(t,r,s.asset_type,n.immutableXConfig):W(t,e,r,s.asset_type,n.immutableXConfig);if(i>0)return D(t,r,s.asset_type,n.immutableXConfig);throw new Error("No balance to withdraw")}async function ge({signers:t,withdrawal:e,config:r}){let n=new imx.WithdrawalsApi(r.immutableXConfig.apiConfiguration);return ee({signers:t,config:r.immutableXConfig,...e},n)}async function pe({signers:{ethSigner:t,starkSigner:e},starkPublicKey:r,token:n,config:a}){let i=new imx.MintsApi(a.immutableXConfig.apiConfiguration);switch(n.type){case"ETH":return me({ethSigner:t,starkSigner:e,starkPublicKey:r,config:a});case"ERC20":return ae({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a});case"ERC721":return de({ethSigner:t,starkSigner:e,starkPublicKey:r,token:n,config:a},i)}}async function le({signers:{ethSigner:t,starkSigner:e},request:r,config:n}){await g(t,n.immutableXConfig);let a=await t.getAddress(),i=new imx.TradesApi(n.immutableXConfig.apiConfiguration),s=await i.getSignableTrade({getSignableTradeRequest:{user:a,order_id:r.order_id,fees:r.fees}}),{signable_message:o,payload_hash:d}=s.data,u=await signRaw(o,t),m=await e.signMessage(d);return (await i.createTradeV3({createTradeRequest:{amount_buy:s.data.amount_buy,amount_sell:s.data.amount_sell,asset_id_buy:s.data.asset_id_buy,asset_id_sell:s.data.asset_id_sell,expiration_timestamp:s.data.expiration_timestamp,fee_info:s.data.fee_info,fees:r.fees,include_fees:!0,nonce:s.data.nonce,order_id:r.order_id,stark_key:s.data.stark_key,vault_id_buy:s.data.vault_id_buy,vault_id_sell:s.data.vault_id_sell,stark_signature:m},xImxEthAddress:a,xImxEthSignature:u})).data}async function st(t,e,r,n,a,i){let o=await Contracts.CoreV4.connect(i.ethConfiguration.coreContractAddress,t)["deposit(uint256,uint256,uint256)"].populateTransaction(n,r,a);return t.sendTransaction({...o,value:e})}async function Ce({signers:{ethSigner:t},deposit:e,config:r}){await g(t,r.immutableXConfig);let n=await t.getAddress(),a={decimals:18},i=parseUnits(e.amount,"wei"),s=r.immutableXConfig,o=new imx.DepositsApi(s.apiConfiguration),d=new imx.EncodingApi(s.apiConfiguration),u={user:n,token:{type:e.type,data:a},amount:i.toString()},m=await o.getSignableDeposit({getSignableDepositRequest:u}),p=(await d.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type}}})).data.asset_type,c=m.data.stark_key,E=m.data.vault_id;return st(t,i,p,c,E,s)}async function dt(t,e,r,n,a,i){let o=await Contracts.CoreV4.connect(i.coreContractAddress,t).depositERC20.populateTransaction(n,r,a,e);return t.sendTransaction(o)}async function Re({signers:{ethSigner:t},deposit:e,config:r}){await g(t,r.immutableXConfig);let{apiConfiguration:n,ethConfiguration:a}=r.immutableXConfig,i=await t.getAddress(),s=new imx.TokensApi(n),o=new imx.DepositsApi(n),d=new imx.EncodingApi(n),u=await s.getToken({address:e.tokenAddress}),f={decimals:parseInt(u.data.decimals),token_address:e.tokenAddress},p=parseUnits(e.amount,0),E=await Contracts.IERC20.connect(e.tokenAddress,t).approve.populateTransaction(a.coreContractAddress,p);await t.sendTransaction(E);let w={user:i,token:{type:e.type,data:f},amount:p.toString()},h=await o.getSignableDeposit({getSignableDepositRequest:w}),Me=(await d.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type,data:{token_address:e.tokenAddress}}}})).data.asset_type,We=h.data.stark_key,Xe=h.data.vault_id,De=BigInt(h.data.amount);return dt(t,De,Me,We,Xe,a)}async function ct(t,e,r,n,a,i){let o=await Contracts.CoreV4.connect(i.ethConfiguration.coreContractAddress,t).depositNft.populateTransaction(n,r,a,e);return t.sendTransaction(o)}async function Te({signers:{ethSigner:t},deposit:e,config:r}){await g(t,r.immutableXConfig);let n=await t.getAddress(),{immutableXConfig:a}=r,i=new imx.DepositsApi(a.apiConfiguration),s=new imx.EncodingApi(a.apiConfiguration),o={token_address:e.tokenAddress,token_id:e.tokenId},u={user:n,token:{type:e.type,data:o},amount:"1".toString()},m=await i.getSignableDeposit({getSignableDepositRequest:u}),p=(await s.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:e.type,data:{token_address:e.tokenAddress,token_id:e.tokenId}}}})).data.asset_type,c=m.data.stark_key,E=m.data.vault_id,w=Contracts.IERC721.connect(e.tokenAddress,t),h=a.ethConfiguration.coreContractAddress;return await w.isApprovedForAll(n,h)||await w.setApprovalForAll(h,!0),ct(t,e.tokenId,p,c,E,a)}async function he({signers:t,deposit:e,config:r}){switch(e.type){case"ETH":return Ce({signers:t,deposit:e,config:r});case"ERC20":return Re({signers:t,deposit:e,config:r});case"ERC721":return Te({signers:t,deposit:e,config:r})}}async function Ae({signers:t,request:e,config:r}){await g(t.ethSigner,r.immutableXConfig);let n=new imx.ExchangesApi(r.immutableXConfig.apiConfiguration),a=await t.ethSigner.getAddress(),i=e.amount,s=await n.getExchangeSignableTransfer({id:e.transactionID,getSignableTransferRequest:{sender:a,token:convertToSignableToken(e),amount:i,receiver:e.receiver}}),{signable_message:o,payload_hash:d}=s.data,u=await signRaw(o,t.ethSigner),m=await t.starkSigner.signMessage(d),f={sender_stark_key:s.data.sender_stark_key,sender_vault_id:s.data.sender_vault_id,receiver_stark_key:s.data.receiver_stark_key,receiver_vault_id:s.data.receiver_vault_id,asset_id:s.data.asset_id,amount:s.data.amount,nonce:s.data.nonce,expiration_timestamp:s.data.expiration_timestamp,stark_signature:m},p=await n.createExchangeTransfer({id:e.transactionID,createTransferRequest:f,xImxEthAddress:a,xImxEthSignature:u});return {sent_signature:p?.data.sent_signature,status:p?.data.status?.toString(),time:p?.data.time,transfer_id:p?.data.transfer_id}}var S=class{config;signers;constructor(e,r,n){this.config=e,this.signers={ethSigner:r,starkSigner:n};}async getAddress(){return this.signers.ethSigner.getAddress()}async isRegisteredOffchain(){let e=await this.getAddress();return Z(e,this.config)}registerOffchain(){return J(this.signers,this.config)}batchNftTransfer(e){return F({signers:this.signers,request:e,config:this.config})}cancelOrder(e){return K({signers:this.signers,request:e,config:this.config})}completeWithdrawal(e,r){return pe({config:this.config,signers:this.signers,token:r,starkPublicKey:e})}createOrder(e){return z({signers:this.signers,request:e,config:this.config})}createTrade(e){return le({signers:this.signers,request:e,config:this.config})}deposit(e){return he({signers:this.signers,deposit:e,config:this.config})}exchangeTransfer(e){return Ae({signers:this.signers,request:e,config:this.config})}async isRegisteredOnchain(){let e=await this.signers.starkSigner.getAddress();return R(e,this.signers.ethSigner,this.config)}prepareWithdrawal(e){return ge({signers:this.signers,withdrawal:e,config:this.config})}transfer(e){return H({signers:this.signers,request:e,config:this.config})}};var be={SWITCH_CHAIN:"wallet_switchEthereumChain",CONNECT:"eth_requestAccounts"};function ye(t){return !!t?.request}async function Se(t,e){await t.request({method:be.CONNECT}),e&&await t.request({method:be.SWITCH_CHAIN,params:[{chainId:`0x${e.toString(16)}`}]});}var ft={PROVIDER_NOT_FOUND:"The Metamask provider was not found"};async function ke({chainID:t}){let e=await pt();if(!ye(e))throw new Error(ft.PROVIDER_NOT_FOUND);return await Se(e,t),new BrowserProvider(e)}var C="message";function A(t,e){t&&t.contentWindow&&t.contentWindow.postMessage(e,new URL(t.src).origin);}function b(t,e,r,n){if(t&&e.source!==t.contentWindow)return;let a=e.data;a.type===r&&n(a.details);}var O=class{publicAddress;iframe;constructor(e,r){this.publicAddress=e,this.iframe=r;}getAddress(){return this.publicAddress}signMessage(e){return new Promise((r,n)=>{let a=i=>{b(this.iframe,i,"SIGN_MESSAGE_RESPONSE",s=>{window.removeEventListener(C,a),s.success||n(new Error(s.error?.message)),r(s.data.signedMessage);});};window.addEventListener(C,a),A(this.iframe,{type:"SIGN_MESSAGE_REQUEST",details:{starkPublicKey:this.publicAddress,message:e}});})}getIFrame(){return this.iframe}getYCoordinate(){return new Promise((e,r)=>{let n=a=>{b(this.iframe,a,"GET_Y_COORDINATE_RESPONSE",i=>{window.removeEventListener(C,n),i.success||r(new Error(i.error?.message)),e(i.data.yCoordinate);});};window.addEventListener(C,n),A(this.iframe,{type:"GET_Y_COORDINATE_REQUEST",details:{starkPublicKey:this.publicAddress}});})}};var ve="imx-wallet-app",Rt={[Environment.SANDBOX]:"https://wallets.sandbox.immutable.com",[Environment.PRODUCTION]:"https://wallets.immutable.com"},wt="display: none;";function _t(){return document.querySelector(`iframe#${ve}`)}async function Tt(t){return new Promise(e=>{let r=document.createElement("iframe");r.setAttribute("id",ve),r.setAttribute("src",Rt[t]),r.setAttribute("style",wt),document.body.appendChild(r),r.onload=()=>e(r);})}async function xe(t){let e=_t();return e||await Tt(t)}var At="Only sign this request if you\u2019ve initiated an action with Immutable X.",bt="The L2 IMX Wallet connection has failed";async function Ie(t,e){let r=await t.getSigner(),n=await r.getAddress(),a=await r.signMessage(toUtf8Bytes(At)),i=await xe(e);return new Promise((s,o)=>{let d=u=>{b(i,u,"CONNECT_WALLET_RESPONSE",m=>{window.removeEventListener(C,d),m.success||o(new Error(bt)),s(new O(m.data.starkPublicKey,i));});};window.addEventListener(C,d),A(i,{type:"CONNECT_WALLET_REQUEST",details:{ethAddress:n,signature:a}});})}async function Oe(t){let e=t.getIFrame();return new Promise((r,n)=>{let a=i=>{b(e,i,"DISCONNECT_WALLET_RESPONSE",s=>{window.removeEventListener(C,a),!s.success&&s.error&&n(s.error),e.remove(),r();});};window.addEventListener(C,a),A(e,{type:"DISCONNECT_WALLET_REQUEST",details:{starkPublicKey:t.getAddress()}});})}var y=class extends Error{type;constructor(e,r){super(e),this.type=r;}},N=async(t,e)=>{try{return await t()}catch(r){let n=e.message||`${r.message}`||"UnknownError";throw new y(n,e.type)}};var L=class t extends S{static imxSigner;static async connect(e){return await N(async()=>{let r=await ke({chainID:e.immutableXConfig.ethConfiguration.chainID});return this.imxSigner=await Ie(r,e.baseConfig.environment),new t(e,await r.getSigner(),this.imxSigner)},{type:"WALLET_CONNECTION_ERROR"})}static async disconnect(){if(!this.imxSigner)throw new y("Attempted to disconnect from the MetaMask IMX provider without an established connection","PROVIDER_CONNECTION_ERROR");return N(async()=>{await Oe(this.imxSigner);},{type:"PROVIDER_CONNECTION_ERROR"})}static async signMessage(e){if(!this.imxSigner)throw new y("Attempted to sign a message with the MetaMask IMX provider without an established connection","PROVIDER_CONNECTION_ERROR");return N(async()=>await this.imxSigner.signMessage(e),{type:"PROVIDER_CONNECTION_ERROR"})}};var U=class{immutableXConfig;baseConfig;constructor({baseConfig:e,overrides:r}){if(this.baseConfig=e,r)this.immutableXConfig=r.immutableXConfig;else {let n=new ImxConfiguration({baseConfig:e});this.immutableXConfig=n.immutableXConfig;}}};
|
|
12
11
|
|
|
13
|
-
export {
|
|
12
|
+
export { S as GenericIMXProvider, L as MetaMaskIMXProvider, U as ProviderConfiguration };
|
package/package.json
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@imtbl/x-provider",
|
|
3
3
|
"description": "Provider package for Immutable SDK",
|
|
4
|
-
"version": "2.1.14-alpha.
|
|
4
|
+
"version": "2.1.14-alpha.1",
|
|
5
5
|
"author": "Immutable",
|
|
6
6
|
"bugs": "https://github.com/immutable/ts-immutable-sdk/issues",
|
|
7
7
|
"dependencies": {
|
|
8
|
-
"@imtbl/config": "2.1.14-alpha.
|
|
9
|
-
"@imtbl/generated-clients": "2.1.14-alpha.
|
|
10
|
-
"@imtbl/toolkit": "2.1.14-alpha.
|
|
11
|
-
"@imtbl/x-client": "2.1.14-alpha.
|
|
12
|
-
"@imtbl/metrics": "2.1.14-alpha.0",
|
|
8
|
+
"@imtbl/config": "2.1.14-alpha.1",
|
|
9
|
+
"@imtbl/generated-clients": "2.1.14-alpha.1",
|
|
10
|
+
"@imtbl/toolkit": "2.1.14-alpha.1",
|
|
11
|
+
"@imtbl/x-client": "2.1.14-alpha.1",
|
|
13
12
|
"@magic-ext/oidc": "12.0.2",
|
|
14
13
|
"@metamask/detect-provider": "^2.0.0",
|
|
15
14
|
"axios": "^1.6.5",
|