@imtbl/sdk 0.31.0 → 0.31.2-alpha

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.
Files changed (52) hide show
  1. package/.eslintrc +13 -0
  2. package/.gitignore +8 -0
  3. package/blockchain_data.js +1 -0
  4. package/checkout_sdk.js +9 -0
  5. package/config.js +1 -0
  6. package/dist/browser/checkout/sdk.js +1 -1
  7. package/dist/index.browser.js +3 -3
  8. package/dist/index.browser.js.map +1 -1
  9. package/immutablex_client.js +1 -0
  10. package/index.cjs +9 -0
  11. package/index.d.ts +18603 -0
  12. package/index.js +9 -0
  13. package/module-release.json +30 -0
  14. package/orderbook.js +1 -0
  15. package/package.json +24 -18
  16. package/passport.js +1 -0
  17. package/provider.js +1 -0
  18. package/rollup.config.js +158 -0
  19. package/scripts/copyBrowserBundles.js +62 -0
  20. package/scripts/generate-package-list.sh +5 -0
  21. package/scripts/generateIndex.js +44 -0
  22. package/scripts/updateDependencies.js +137 -0
  23. package/scripts/updateExports.js +62 -0
  24. package/src/blockchain_data.ts +1 -0
  25. package/src/checkout_sdk.ts +1 -0
  26. package/src/checkout_widgets.ts +1 -0
  27. package/src/config.ts +1 -0
  28. package/src/immutablex_client.ts +1 -0
  29. package/src/index.ts +7 -0
  30. package/src/orderbook.ts +1 -0
  31. package/src/passport.ts +1 -0
  32. package/src/provider.ts +1 -0
  33. package/tsconfig.json +27 -0
  34. package/typedoc.json +4 -0
  35. package/workspace-packages.json +31 -0
  36. package/dist/blockchain_data.js +0 -4010
  37. package/dist/checkout_sdk.js +0 -26016
  38. package/dist/config.js +0 -37
  39. package/dist/immutablex_client.js +0 -523
  40. package/dist/index.cjs +0 -34452
  41. package/dist/index.js +0 -34424
  42. package/dist/orderbook.js +0 -1583
  43. package/dist/passport.js +0 -9159
  44. package/dist/provider.js +0 -1165
  45. /package/{dist/blockchain_data.d.ts → blockchain_data.d.ts} +0 -0
  46. /package/{dist/checkout_sdk.d.ts → checkout_sdk.d.ts} +0 -0
  47. /package/{dist/config.d.ts → config.d.ts} +0 -0
  48. /package/{dist/immutablex_client.d.ts → immutablex_client.d.ts} +0 -0
  49. /package/{dist/index.d.ts → index.d.cts} +0 -0
  50. /package/{dist/orderbook.d.ts → orderbook.d.ts} +0 -0
  51. /package/{dist/passport.d.ts → passport.d.ts} +0 -0
  52. /package/{dist/provider.d.ts → provider.d.ts} +0 -0
@@ -0,0 +1,30 @@
1
+ {
2
+ "__readme__": [
3
+ "This file is responsible for which modules",
4
+ "get bundled and released as part of alpha and prod",
5
+ "releases of the SDK.",
6
+ "Under `modules`, each key is a file in `src`, and each value is either alpha or prod",
7
+ "Under `fileCopy`, each object has `src` and `dest` keys, as well, which are paths relative to this file"
8
+ ],
9
+ "modules": {
10
+ "config": "prod",
11
+ "blockchain_data": "prod",
12
+ "immutablex_client": "prod",
13
+ "passport": "prod",
14
+ "orderbook": "prod",
15
+ "provider": "prod",
16
+ "checkout_sdk": "prod"
17
+ },
18
+ "fileCopy": [
19
+ {
20
+ "src": "../packages/checkout/widgets-lib/dist/widgets.js",
21
+ "dest": "./dist/browser/checkout/widgets.js",
22
+ "stage": "prod"
23
+ },
24
+ {
25
+ "src": "../packages/checkout/sdk/dist/browser.js",
26
+ "dest": "./dist/browser/checkout/sdk.js",
27
+ "stage": "prod"
28
+ }
29
+ ]
30
+ }
package/orderbook.js ADDED
@@ -0,0 +1 @@
1
+ import e from"axios";import t from"form-data";import{providers as r,BigNumber as a,constants as s}from"ethers";import{Seaport as n}from"@opensea/seaport-js";var o;!function(e){e.PRODUCTION="production",e.SANDBOX="sandbox"}(o||(o={}));class i{config;constructor(e){this.config=e}}class d extends Error{url;status;statusText;body;request;constructor(e,t,r){super(r),this.name="ApiError",this.url=t.url,this.status=t.status,this.statusText=t.statusText,this.body=t.body,this.request=e}}class c extends Error{constructor(e){super(e),this.name="CancelError"}get isCancelled(){return!0}}class u{[Symbol.toStringTag];_isResolved;_isRejected;_isCancelled;_cancelHandlers;_promise;_resolve;_reject;constructor(e){this._isResolved=!1,this._isRejected=!1,this._isCancelled=!1,this._cancelHandlers=[],this._promise=new Promise(((t,r)=>{this._resolve=t,this._reject=r;const a=e=>{this._isResolved||this._isRejected||this._isCancelled||this._cancelHandlers.push(e)};return Object.defineProperty(a,"isResolved",{get:()=>this._isResolved}),Object.defineProperty(a,"isRejected",{get:()=>this._isRejected}),Object.defineProperty(a,"isCancelled",{get:()=>this._isCancelled}),e((e=>{this._isResolved||this._isRejected||this._isCancelled||(this._isResolved=!0,this._resolve?.(e))}),(e=>{this._isResolved||this._isRejected||this._isCancelled||(this._isRejected=!0,this._reject?.(e))}),a)}))}then(e,t){return this._promise.then(e,t)}catch(e){return this._promise.catch(e)}finally(e){return this._promise.finally(e)}cancel(){if(!(this._isResolved||this._isRejected||this._isCancelled)){if(this._isCancelled=!0,this._cancelHandlers.length)try{for(const e of this._cancelHandlers)e()}catch(e){return void console.warn("Cancellation threw an error",e)}this._cancelHandlers.length=0,this._reject?.(new c("Request aborted"))}}get isCancelled(){return this._isCancelled}}const l=e=>null!=e,p=e=>"string"==typeof e,h=e=>p(e)&&""!==e,m=e=>"object"==typeof e&&"string"==typeof e.type&&"function"==typeof e.stream&&"function"==typeof e.arrayBuffer&&"function"==typeof e.constructor&&"string"==typeof e.constructor.name&&/^(Blob|File)$/.test(e.constructor.name)&&/^(Blob|File)$/.test(e[Symbol.toStringTag]),f=e=>{const t=[],r=(e,a)=>{l(a)&&(Array.isArray(a)?a.forEach((t=>{r(e,t)})):"object"==typeof a?Object.entries(a).forEach((([t,a])=>{r(`${e}[${t}]`,a)})):((e,r)=>{t.push(`${encodeURIComponent(e)}=${encodeURIComponent(String(r))}`)})(e,a))};return Object.entries(e).forEach((([e,t])=>{r(e,t)})),t.length>0?`?${t.join("&")}`:""},_=async(e,t)=>"function"==typeof t?t(e):t,E=async(e,r,a)=>{const s=await _(r,e.TOKEN),n=await _(r,e.USERNAME),o=await _(r,e.PASSWORD),i=await _(r,e.HEADERS),d="function"==typeof a?.getHeaders&&a?.getHeaders()||{},c=Object.entries({Accept:"application/json",...i,...r.headers,...d}).filter((([e,t])=>l(t))).reduce(((e,[t,r])=>({...e,[t]:String(r)})),{});if(h(s)&&(c.Authorization=`Bearer ${s}`),h(n)&&h(o)){const e=(e=>{try{return btoa(e)}catch(t){return Buffer.from(e).toString("base64")}})(`${n}:${o}`);c.Authorization=`Basic ${e}`}return r.body&&(r.mediaType?c["Content-Type"]=r.mediaType:m(r.body)?c["Content-Type"]=r.body.type||"application/octet-stream":p(r.body)?c["Content-Type"]="text/plain":r.body instanceof t||(c["Content-Type"]="application/json")),c},C=(r,a)=>new u((async(s,n,o)=>{try{const n=((e,t)=>{const r=e.ENCODE_PATH||encodeURI,a=t.url.replace("{api-version}",e.VERSION).replace(/{(.*?)}/g,((e,a)=>t.path?.hasOwnProperty(a)?r(String(t.path[a])):e)),s=`${e.BASE}${a}`;return t.query?`${s}${f(t.query)}`:s})(r,a),c=(e=>{if(e.formData){const r=new t,a=(e,t)=>{p(t)||m(t)?r.append(e,t):r.append(e,JSON.stringify(t))};return Object.entries(e.formData).filter((([e,t])=>l(t))).forEach((([e,t])=>{Array.isArray(t)?t.forEach((t=>a(e,t))):a(e,t)})),r}})(a),u=(e=>{if(e.body)return e.body})(a),h=await E(r,a,c);if(!o.isCancelled){const t=await(async(t,r,a,s,n,o,i)=>{const d=e.CancelToken.source(),c={url:a,headers:o,data:s??n,method:r.method,withCredentials:t.WITH_CREDENTIALS,cancelToken:d.token};i((()=>d.cancel("The user aborted a request.")));try{return await e.request(c)}catch(e){const t=e;if(t.response)return t.response;throw e}})(r,a,n,u,c,h,o),l=(e=>{if(204!==e.status)return e.data})(t),m=((e,t)=>{if(t){const r=e.headers[t];if(p(r))return r}})(t,a.responseHeader),f={url:n,ok:(i=t.status,i>=200&&i<300),status:t.status,statusText:t.statusText,body:m??l};((e,t)=>{const r={400:"Bad Request",401:"Unauthorized",403:"Forbidden",404:"Not Found",500:"Internal Server Error",502:"Bad Gateway",503:"Service Unavailable",...e.errors}[t.status];if(r)throw new d(e,t,r);if(!t.ok)throw new d(e,t,"Generic Error")})(a,f),s(f.body)}}catch(e){n(e)}var i}));class y extends i{constructor(e){super(e)}request(e){return C(this.config,e)}}class T{httpRequest;constructor(e){this.httpRequest=e}cancelOrders({chainName:e,requestBody:t}){return this.httpRequest.request({method:"POST",url:"/v1/chains/{chain_name}/orders/cancel",path:{chain_name:e},body:t,mediaType:"application/json",errors:{400:"Bad Request (400)",401:"Unauthorised Request (401)",404:"The specified resource was not found (404)",429:"Too Many Requests (429)",500:"Internal Server Error (500)",501:"Not Implemented Error (501)"}})}listListings({chainName:e,status:t,sellItemContractAddress:r,buyItemContractAddress:a,sellItemTokenId:s,fromUpdatedAt:n,pageSize:o,sortBy:i,sortDirection:d,pageCursor:c}){return this.httpRequest.request({method:"GET",url:"/v1/chains/{chain_name}/orders/listings",path:{chain_name:e},query:{status:t,sell_item_contract_address:r,buy_item_contract_address:a,sell_item_token_id:s,from_updated_at:n,page_size:o,sort_by:i,sort_direction:d,page_cursor:c},errors:{400:"Bad Request (400)",404:"The specified resource was not found (404)",500:"Internal Server Error (500)"}})}createListing({chainName:e,requestBody:t}){return this.httpRequest.request({method:"POST",url:"/v1/chains/{chain_name}/orders/listings",path:{chain_name:e},body:t,mediaType:"application/json",errors:{400:"Bad Request (400)",404:"The specified resource was not found (404)",500:"Internal Server Error (500)"}})}getListing({chainName:e,listingId:t}){return this.httpRequest.request({method:"GET",url:"/v1/chains/{chain_name}/orders/listings/{listing_id}",path:{chain_name:e,listing_id:t},errors:{400:"Bad Request (400)",404:"The specified resource was not found (404)",500:"Internal Server Error (500)"}})}fulfillmentData({chainName:e,requestBody:t}){return this.httpRequest.request({method:"POST",url:"/v1/chains/{chain_name}/orders/fulfillment-data",path:{chain_name:e},body:t,mediaType:"application/json",errors:{400:"Bad Request (400)",404:"The specified resource was not found (404)",500:"Internal Server Error (500)"}})}listTrades({chainName:e,accountAddress:t,fromIndexedAt:r,pageSize:a,sortBy:s,sortDirection:n,pageCursor:o}){return this.httpRequest.request({method:"GET",url:"/v1/chains/{chain_name}/trades",path:{chain_name:e},query:{account_address:t,from_indexed_at:r,page_size:a,sort_by:s,sort_direction:n,page_cursor:o},errors:{400:"Bad Request (400)",404:"The specified resource was not found (404)",500:"Internal Server Error (500)"}})}getTrade({chainName:e,tradeId:t}){return this.httpRequest.request({method:"GET",url:"/v1/chains/{chain_name}/trades/{trade_id}",path:{chain_name:e,trade_id:t},errors:{400:"Bad Request (400)",404:"The specified resource was not found (404)",500:"Internal Server Error (500)"}})}}class A{orders;request;constructor(e,t=y){this.request=new t({BASE:e?.BASE??"https://api.sandbox.immutable.com",VERSION:e?.VERSION??"1.0.0",WITH_CREDENTIALS:e?.WITH_CREDENTIALS??!1,CREDENTIALS:e?.CREDENTIALS??"include",TOKEN:e?.TOKEN,USERNAME:e?.USERNAME,PASSWORD:e?.PASSWORD,HEADERS:e?.HEADERS,ENCODE_PATH:e?.ENCODE_PATH}),this.orders=new T(this.request)}}var R,O,I,g,b,S,N,w,L;function v(e){const t=e.buy.map((e=>{if("ERC20"===e.item_type)return{type:"ERC20",contractAddress:e.contract_address,amount:e.amount};if("NATIVE"===e.item_type)return{type:"NATIVE",amount:e.amount};throw new Error("Buy items must be either ERC20 or NATIVE")})),r=e.sell.map((e=>{if("ERC721"===e.item_type)return{type:"ERC721",contractAddress:e.contract_address,tokenId:e.token_id};throw new Error("Sell items must ERC721")}));return{id:e.id,accountAddress:e.account_address,buy:t,sell:r,fees:e.fees.map((e=>({amount:e.amount,recipient:e.recipient,type:e.fee_type}))),chain:e.chain,createdAt:e.created_at,endAt:e.end_at,protocolData:{counter:e.protocol_data.counter,orderType:e.protocol_data.order_type,seaportAddress:e.protocol_data.seaport_address,seaportVersion:e.protocol_data.seaport_version,zoneAddress:e.protocol_data.zone_address},salt:e.salt,signature:e.signature,startAt:e.start_at,status:e.status,updatedAt:e.updated_at}}function k(e){const t=e.buy.map((e=>{if("ERC20"===e.item_type)return{type:"ERC20",contractAddress:e.contract_address,amount:e.amount};if("NATIVE"===e.item_type)return{type:"NATIVE",amount:e.amount};throw new Error("Buy items must be either ERC20 or NATIVE")})),r=e.sell.map((e=>{if("ERC721"===e.item_type)return{type:"ERC721",contractAddress:e.contract_address,tokenId:e.token_id};throw new Error("Sell items must ERC721")}));return{id:e.id,orderId:e.order_id,buy:t,sell:r,buyerFees:e.buyer_fees.map((e=>({amount:e.amount,recipient:e.recipient,type:e.fee_type}))),chain:e.chain,indexedAt:e.indexed_at,blockchainMetadata:{blockNumber:e.blockchain_metadata.block_number,logIndex:e.blockchain_metadata.log_index,transactionHash:e.blockchain_metadata.transaction_hash,transactionIndex:e.blockchain_metadata.transaction_index},buyerAddress:e.buyer_address,makerAddress:e.maker_address,sellerAddress:e.seller_address,takerAddress:e.taker_address}}function D(e){return{nextCursor:e.next_cursor,previousCursor:e.previous_cursor}}!function(e){var t;(t=e.cancellation_type||(e.cancellation_type={})).ON_CHAIN="ON_CHAIN",t.OFF_CHAIN="OFF_CHAIN"}(R||(R={})),function(e){(e.reason_code||(e.reason_code={})).FILLED="FILLED"}(O||(O={})),function(e){var t;(t=e.fee_type||(e.fee_type={})).ROYALTY="ROYALTY",t.MAKER_ECOSYSTEM="MAKER_ECOSYSTEM",t.TAKER_ECOSYSTEM="TAKER_ECOSYSTEM",t.PROTOCOL="PROTOCOL"}(I||(I={})),function(e){e.PENDING="PENDING",e.ACTIVE="ACTIVE",e.INACTIVE="INACTIVE",e.FILLED="FILLED",e.EXPIRED="EXPIRED",e.CANCELLED="CANCELLED"}(g||(g={})),function(e){(e.order_type||(e.order_type={})).FULL_RESTRICTED="FULL_RESTRICTED"}(b||(b={})),function(e){e.MAKER_ECOSYSTEM="MAKER_ECOSYSTEM",e.TAKER_ECOSYSTEM="TAKER_ECOSYSTEM",e.PROTOCOL="PROTOCOL",e.ROYALTY="ROYALTY"}(S||(S={})),function(e){e.APPROVAL="APPROVAL",e.FULFILL_ORDER="FULFILL_ORDER",e.CANCEL="CANCEL"}(N||(N={})),function(e){e.CREATE_LISTING="CREATE_LISTING",e.OFF_CHAIN_CANCELLATION="OFF_CHAIN_CANCELLATION"}(w||(w={})),function(e){e.TRANSACTION="TRANSACTION",e.SIGNABLE="SIGNABLE"}(L||(L={}));const F="1.5",P={OrderComponents:[{name:"offerer",type:"address"},{name:"zone",type:"address"},{name:"offer",type:"OfferItem[]"},{name:"consideration",type:"ConsiderationItem[]"},{name:"orderType",type:"uint8"},{name:"startTime",type:"uint256"},{name:"endTime",type:"uint256"},{name:"zoneHash",type:"bytes32"},{name:"salt",type:"uint256"},{name:"conduitKey",type:"bytes32"},{name:"counter",type:"uint256"}],OfferItem:[{name:"itemType",type:"uint8"},{name:"token",type:"address"},{name:"identifierOrCriteria",type:"uint256"},{name:"startAmount",type:"uint256"},{name:"endAmount",type:"uint256"}],ConsiderationItem:[{name:"itemType",type:"uint8"},{name:"token",type:"address"},{name:"identifierOrCriteria",type:"uint256"},{name:"startAmount",type:"uint256"},{name:"endAmount",type:"uint256"},{name:"recipient",type:"address"}]};var x,B,q,H;function V(e,t){return async()=>{const r=await e.buildTransaction();return r.gasLimit=await e.estimateGas(),r.gasLimit=r.gasLimit.add(r.gasLimit.div(5)),r.chainId=t,r}}!function(e){e[e.FULL_OPEN=0]="FULL_OPEN",e[e.PARTIAL_OPEN=1]="PARTIAL_OPEN",e[e.FULL_RESTRICTED=2]="FULL_RESTRICTED",e[e.PARTIAL_RESTRICTED=3]="PARTIAL_RESTRICTED"}(x||(x={})),function(e){e[e.NATIVE=0]="NATIVE",e[e.ERC20=1]="ERC20",e[e.ERC721=2]="ERC721",e[e.ERC1155=3]="ERC1155",e[e.ERC721_WITH_CRITERIA=4]="ERC721_WITH_CRITERIA",e[e.ERC1155_WITH_CRITERIA=5]="ERC1155_WITH_CRITERIA"}(B||(B={})),function(e){e[e.OFFER=0]="OFFER",e[e.CONSIDERATION=1]="CONSIDERATION"}(q||(q={})),function(e){e[e.ETH_TO_ERC721=0]="ETH_TO_ERC721",e[e.ETH_TO_ERC1155=1]="ETH_TO_ERC1155",e[e.ERC20_TO_ERC721=2]="ERC20_TO_ERC721",e[e.ERC20_TO_ERC1155=3]="ERC20_TO_ERC1155",e[e.ERC721_TO_ERC20=4]="ERC721_TO_ERC20",e[e.ERC1155_TO_ERC20=5]="ERC1155_TO_ERC20"}(H||(H={}));class j{seaportLibFactory;provider;seaportContractAddress;zoneContractAddress;constructor(e,t,r,a){this.seaportLibFactory=e,this.provider=t,this.seaportContractAddress=r,this.zoneContractAddress=a}async prepareSeaportOrder(e,t,r,s,n){const{actions:o}=await this.createSeaportOrder(e,t,r,s,n),i=[],d=o.find((e=>"approval"===e.type));d&&i.push({type:L.TRANSACTION,purpose:N.APPROVAL,buildTransaction:V(d.transactionMethods,(await this.provider.getNetwork()).chainId)});const c=o.find((e=>"create"===e.type));if(!c)throw new Error("No create order action found");const u=function(e){const t=JSON.parse(e).message;return t.salt=a.from(t.salt).toHexString(),t}(await c.getMessageToSign());return i.push({type:L.SIGNABLE,purpose:w.CREATE_LISTING,message:await this.getTypedDataFromOrderComponents(u)}),{actions:i,orderComponents:u,orderHash:this.getSeaportLib().getOrderHash(u)}}async fulfillOrder(e,t,r){const{orderComponents:a,tips:s}=this.mapImmutableOrderToSeaportOrderComponents(e),n=this.getSeaportLib(e),{actions:o}=await n.fulfillOrders({accountAddress:t,fulfillOrderDetails:[{order:{parameters:a,signature:e.signature},extraData:r,tips:s}]}),i=[],d=o.find((e=>"approval"===e.type));d&&i.push({type:L.TRANSACTION,buildTransaction:V(d.transactionMethods,(await this.provider.getNetwork()).chainId),purpose:N.APPROVAL});const c=o.find((e=>"exchange"===e.type));if(!c)throw new Error("No exchange action found");return i.push({type:L.TRANSACTION,buildTransaction:V(c.transactionMethods,(await this.provider.getNetwork()).chainId),purpose:N.FULFILL_ORDER}),{actions:i,expiration:j.getExpirationISOTimeFromExtraData(r),order:v(e)}}async fulfillBulkOrders(e,t){const r=e.map((e=>{const{orderComponents:t,tips:r}=this.mapImmutableOrderToSeaportOrderComponents(e.order);return{order:{parameters:t,signature:e.order.signature},extraData:e.extra_data,tips:r}})),{actions:a}=await this.getSeaportLib().fulfillOrders({fulfillOrderDetails:r,accountAddress:t}),s=[],n=a.find((e=>"approval"===e.type));n&&s.push({type:L.TRANSACTION,buildTransaction:V(n.transactionMethods,(await this.provider.getNetwork()).chainId),purpose:N.APPROVAL});const o=a.find((e=>"exchange"===e.type));if(!o)throw new Error("No exchange action found");return s.push({type:L.TRANSACTION,buildTransaction:V(o.transactionMethods,(await this.provider.getNetwork()).chainId),purpose:N.FULFILL_ORDER}),{actions:s,expiration:r.map((e=>j.getExpirationISOTimeFromExtraData(e.extraData))).reduce(((e,t)=>new Date(e)<new Date(t)?e:t))}}async cancelOrders(e,t){const r=e.map((e=>this.mapImmutableOrderToSeaportOrderComponents(e).orderComponents)),a=this.getSeaportLib(e[0]),s=await a.cancelOrders(r,t);return{type:L.TRANSACTION,buildTransaction:V(s,(await this.provider.getNetwork()).chainId),purpose:N.CANCEL}}mapImmutableOrderToSeaportOrderComponents(e){return function(e,t,r){const a=e.buy.map((t=>{switch(t.item_type){case"NATIVE":return{startAmount:t.amount,endAmount:t.amount,itemType:B.NATIVE,recipient:e.account_address,token:s.AddressZero,identifierOrCriteria:"0"};case"ERC20":return{startAmount:t.amount,endAmount:t.amount,itemType:B.ERC20,recipient:e.account_address,token:t.contract_address||s.AddressZero,identifierOrCriteria:"0"};default:return{startAmount:"1",endAmount:"1",itemType:B.ERC721,recipient:e.account_address,token:t.contract_address||s.AddressZero,identifierOrCriteria:"0"}}})),n=e.fees.map((t=>({amount:t.amount,itemType:"ERC20"===e.buy[0].item_type?B.ERC20:B.NATIVE,recipient:t.recipient,token:"ERC20"===e.buy[0].item_type?e.buy[0].contract_address:s.AddressZero,identifierOrCriteria:"0"})));return{orderComponents:{conduitKey:s.HashZero,consideration:[...a],offer:e.sell.map((e=>{const t=e;return{startAmount:"1",endAmount:"1",itemType:B.ERC721,token:t.contract_address,identifierOrCriteria:t.token_id}})),counter:t,endTime:Math.round(new Date(e.end_at).getTime()/1e3).toString(),startTime:Math.round(new Date(e.start_at).getTime()/1e3).toString(),salt:e.salt,offerer:e.account_address,zone:r,totalOriginalConsiderationItems:a.length,orderType:x.FULL_RESTRICTED,zoneHash:s.HashZero},tips:n}}(e,e.protocol_data.counter,this.zoneContractAddress)}createSeaportOrder(e,t,r,a,s){return this.getSeaportLib().createOrder({allowPartialFills:!1,offer:[{itemType:B.ERC721,token:t.contractAddress,identifier:t.tokenId}],consideration:[{token:"ERC20"===r.type?r.contractAddress:void 0,amount:r.amount,recipient:e}],startTime:(a.getTime()/1e3).toFixed(0),endTime:(s.getTime()/1e3).toFixed(0),zone:this.zoneContractAddress,restrictedByZone:!0},e)}async getTypedDataFromOrderComponents(e){const{chainId:t}=await this.provider.getNetwork();return{domain:{name:"ImmutableSeaport",version:F,chainId:t,verifyingContract:this.seaportContractAddress},types:P,value:e}}getSeaportLib(e){const t=e?.protocol_data?.seaport_address??this.seaportContractAddress,r=F;return this.seaportLibFactory.create(r,t)}static getExpirationISOTimeFromExtraData(e){const t=e.slice(44,60),r=parseInt(t,16);return new Date(1e3*r).toISOString()}}class M{orderbookService;chainName;seaportAddress;constructor(e,t,r){this.orderbookService=e,this.chainName=t,this.seaportAddress=r}async fulfillmentData(e){return this.orderbookService.fulfillmentData({chainName:this.chainName,requestBody:e})}async getListing(e){return this.orderbookService.getListing({chainName:this.chainName,listingId:e})}async getTrade(e){return this.orderbookService.getTrade({chainName:this.chainName,tradeId:e})}async listListings(e){return this.orderbookService.listListings({chainName:this.chainName,...e})}async listTrades(e){return this.orderbookService.listTrades({chainName:this.chainName,...e})}async cancelOrders(e,t,r){return this.orderbookService.cancelOrders({chainName:this.chainName,requestBody:{account_address:t,orders:e,signature:r}})}async createListing({orderHash:e,orderComponents:t,orderSignature:r,makerFees:a}){if(1!==t.offer.length)throw new Error("Only one item can be listed at a time");if(Number(t.offer[0].itemType)!==B.ERC721)throw new Error("Only ERC721 tokens can be listed");const s=[...t.consideration.map((e=>e.itemType))];if(!(1===new Set(s).size))throw new Error("All consideration items must be of the same type");return this.orderbookService.createListing({chainName:this.chainName,requestBody:{order_hash:e,account_address:t.offerer,buy:[{item_type:Number(t.consideration[0].itemType)===B.NATIVE?"NATIVE":"ERC20",amount:t.consideration[0].startAmount,contract_address:t.consideration[0].token}],fees:a.map((e=>({amount:e.amount,fee_type:S.MAKER_ECOSYSTEM,recipient:e.recipient}))),end_at:new Date(parseInt(`${t.endTime.toString()}000`,10)).toISOString(),protocol_data:{order_type:b.order_type.FULL_RESTRICTED,zone_address:t.zone,seaport_address:this.seaportAddress,seaport_version:F,counter:t.counter.toString()},salt:t.salt,sell:[{contract_address:t.offer[0].token,token_id:t.offer[0].identifierOrCriteria,item_type:"ERC721"}],signature:r,start_at:new Date(parseInt(`${t.startTime.toString()}000`,10)).toISOString()}})}}class z{chainName;seaportAddress;orderbookClient;constructor(e,t,r){this.chainName=t,this.seaportAddress=r,this.orderbookClient=new A({BASE:e})}create(){return new M(this.orderbookClient.orders,this.chainName,this.seaportAddress)}}class U{defaultSeaportContractAddress;provider;constructor(e,t){this.defaultSeaportContractAddress=e,this.provider=t}create(e,t){const r=e??F,a=t??this.defaultSeaportContractAddress;return new n(this.provider,{seaportVersion:r,balanceAndApprovalChecksOnOrderCreation:!0,overrides:{contractAddress:a}})}}class ${apiClient;seaport;orderbookConfig;constructor(e){const t={...function(e){switch(e){case o.SANDBOX:return{seaportContractAddress:"0x2CFA8f64e1B49A2DF28532D1D30Cda45117cF778",zoneContractAddress:"0x1Bb4Fb11Ba021Bd0104F0Ee8E5F5c728Bc83d7F1",apiEndpoint:"https://api.sandbox.immutable.com",chainName:"imtbl-zkevm-testnet",provider:new r.JsonRpcProvider("https://rpc.testnet.immutable.com")};case o.PRODUCTION:return{seaportContractAddress:"",zoneContractAddress:"",apiEndpoint:"https://api.immutable.com",chainName:"imtbl-zkevm-mainnet",provider:new r.JsonRpcProvider("https://rpc.immutable.com")};default:return null}}(e.baseConfig.environment),...e.overrides};if(!t)throw new Error("Orderbook configuration not passed, please specify the environment under config.baseConfig.environment");this.orderbookConfig=t;const{apiEndpoint:a,chainName:s}=this.orderbookConfig;if(!a)throw new Error("API endpoint must be provided");this.apiClient=new z(a,s,this.orderbookConfig.seaportContractAddress).create();const n=new U(this.orderbookConfig.seaportContractAddress,this.orderbookConfig.provider);this.seaport=new j(n,this.orderbookConfig.provider,this.orderbookConfig.seaportContractAddress,this.orderbookConfig.zoneContractAddress)}config(){return this.orderbookConfig}async getListing(e){return{result:v((await this.apiClient.getListing(e)).result)}}async getTrade(e){return{result:k((await this.apiClient.getTrade(e)).result)}}async listListings(e){const t=await this.apiClient.listListings(e);return{page:D(t.page),result:t.result.map(v)}}async listTrades(e){const t=await this.apiClient.listTrades(e);return{page:D(t.page),result:t.result.map(k)}}async prepareListing({makerAddress:e,sell:t,buy:r,orderExpiry:a}){return this.seaport.prepareSeaportOrder(e,t,r,new Date,a||new Date(Date.now()+63072e6))}async createListing(e){return{result:v((await this.apiClient.createListing({...e})).result)}}async fulfillOrder(e,t,r){const a=await this.apiClient.fulfillmentData([{order_id:e,fees:r.map((e=>({amount:e.amount,fee_type:S.TAKER_ECOSYSTEM,recipient:e.recipient})))}]);if(a.result.unfulfillable_orders?.length>0)throw new Error(`Unable to prepare fulfillment date: ${a.result.unfulfillable_orders[0].reason}`);if(1!==a.result.fulfillable_orders?.length)throw new Error("unexpected fulfillable order result length");const s=a.result.fulfillable_orders[0].extra_data,n=a.result.fulfillable_orders[0].order;if(n.status.name!==g.ACTIVE)throw new Error(`Cannot fulfil order that is not active. Current status: ${n.status}`);return this.seaport.fulfillOrder(n,t,s)}async fulfillBulkOrders(e,t){const r=await this.apiClient.fulfillmentData(e.map((e=>({order_id:e.listingId,fees:e.takerFees.map((e=>({amount:e.amount,fee_type:S.TAKER_ECOSYSTEM,recipient:e.recipient})))}))));try{return{...await this.seaport.fulfillBulkOrders(r.result.fulfillable_orders,t),fulfillableOrders:r.result.fulfillable_orders.map((e=>v(e.order))),unfulfillableOrders:r.result.unfulfillable_orders.map((e=>({orderId:e.order_id,reason:e.reason}))),sufficientBalance:!0}}catch(e){if(String(e).includes("The fulfiller does not have the balances needed to fulfill."))return{fulfillableOrders:r.result.fulfillable_orders.map((e=>v(e.order))),unfulfillableOrders:r.result.unfulfillable_orders.map((e=>({orderId:e.order_id,reason:e.reason}))),sufficientBalance:!1};throw e}}async prepareOrderCancellations(e){const t={name:"imtbl-order-book",chainId:(await this.orderbookConfig.provider.getNetwork()).chainId,verifyingContract:this.orderbookConfig.seaportContractAddress},r={orders:e.map((e=>({id:e})))};return{signableAction:{purpose:w.OFF_CHAIN_CANCELLATION,type:L.SIGNABLE,message:{domain:t,types:{CancelPayload:[{name:"orders",type:"Order[]"}],Order:[{name:"id",type:"string"}]},value:r}}}}async cancelOrders(e,t,r){return this.apiClient.cancelOrders(e,t,r)}async cancelOrdersOnChain(e,t){const r=await Promise.all(e.map((e=>this.apiClient.getListing(e))));for(const e of r){if(e.result.status.name!==g.ACTIVE&&e.result.status.name!==g.INACTIVE&&e.result.status.name!==g.PENDING)throw new Error(`Cannot cancel order with status ${e.result.status}`);if(e.result.account_address!==t.toLowerCase())throw new Error(`Only account ${e.result.account_address} can cancel order ${e.result.id}`)}const a=r.map((e=>e.result)),s=a.map((e=>e.protocol_data.seaport_address));if(1!==new Set(...[s]).size)throw new Error("Cannot cancel multiple orders from different seaport contracts. Please group your orderIds accordingly");return{cancellationAction:await this.seaport.cancelOrders(a,t)}}}const G={estimatedFulfillmentGasGwei:4e5};export{L as ActionType,S as FeeType,g as OrderStatusName,$ as Orderbook,w as SignablePurpose,N as TransactionPurpose,G as constants};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@imtbl/sdk",
3
3
  "description": "Immutable Unified SDK",
4
- "version": "0.31.0",
4
+ "version": "0.31.2-alpha",
5
5
  "author": "Immutable",
6
6
  "browser": "./dist/index.browser.js",
7
7
  "bugs": "https://github.com/immutable/ts-immutable-sdk/issues",
@@ -75,40 +75,46 @@
75
75
  "exports": {
76
76
  "./package.json": "./package.json",
77
77
  ".": {
78
- "types": "./dist/index.d.ts",
79
- "import": "./dist/index.js",
80
- "require": "./dist/index.cjs"
78
+ "imports": {
79
+ "types": "./index.d.ts",
80
+ "default": "./index.js"
81
+ },
82
+ "require": {
83
+ "types": "./index.d.cts",
84
+ "default": "./index.cjs"
85
+ }
81
86
  },
82
87
  "./config": {
83
- "types": "./dist/config.d.ts",
84
- "import": "./dist/config.js"
88
+ "types": "./config.d.ts",
89
+ "import": "./config.js"
85
90
  },
86
91
  "./blockchain_data": {
87
- "types": "./dist/blockchain_data.d.ts",
88
- "import": "./dist/blockchain_data.js"
92
+ "types": "./blockchain_data.d.ts",
93
+ "import": "./blockchain_data.js"
89
94
  },
90
95
  "./immutablex_client": {
91
- "types": "./dist/immutablex_client.d.ts",
92
- "import": "./dist/immutablex_client.js"
96
+ "types": "./immutablex_client.d.ts",
97
+ "import": "./immutablex_client.js"
93
98
  },
94
99
  "./passport": {
95
- "types": "./dist/passport.d.ts",
96
- "import": "./dist/passport.js"
100
+ "types": "./passport.d.ts",
101
+ "import": "./passport.js"
97
102
  },
98
103
  "./orderbook": {
99
- "types": "./dist/orderbook.d.ts",
100
- "import": "./dist/orderbook.js"
104
+ "types": "./orderbook.d.ts",
105
+ "import": "./orderbook.js"
101
106
  },
102
107
  "./provider": {
103
- "types": "./dist/provider.d.ts",
104
- "import": "./dist/provider.js"
108
+ "types": "./provider.d.ts",
109
+ "import": "./provider.js"
105
110
  },
106
111
  "./checkout_sdk": {
107
- "types": "./dist/checkout_sdk.d.ts",
108
- "import": "./dist/checkout_sdk.js"
112
+ "types": "./checkout_sdk.d.ts",
113
+ "import": "./checkout_sdk.js"
109
114
  }
110
115
  },
111
116
  "files": [
117
+ "./",
112
118
  "dist"
113
119
  ],
114
120
  "homepage": "https://github.com/immutable/ts-immutable-sdk#readme",
package/passport.js ADDED
@@ -0,0 +1 @@
1
+ import e,{isAxiosError as t}from"axios";import{ImmutableX as n,Config as r,generateLegacyStarkPrivateKey as s,createStarkSigner as a}from"@imtbl/core-sdk";import{UserManager as i,InMemoryWebStorage as o,WebStorageStateStore as c}from"oidc-client-ts";import d from"jwt-decode";import*as u from"crypto";import{Magic as l}from"magic-sdk";import{OpenIdExtension as h}from"@magic-ext/oidc";import{JsonRpcProvider as m,Web3Provider as p}from"@ethersproject/providers";import{BigNumber as g,ethers as f}from"ethers";import w from"bn.js";import*as R from"enc-utils";import{EventEmitter as y}from"events";import{walletContracts as E}from"@0xsequence/abi";import{v1 as _}from"@0xsequence/core";const A="https://api.sandbox.immutable.com".replace(/\/+$/,"");let T=class{basePath;axios;configuration;constructor(t,n=A,r=e){this.basePath=n,this.axios=r,t&&(this.configuration=t,this.basePath=t.basePath||this.basePath)}},b=class extends Error{field;constructor(e,t){super(t),this.field=e,this.name="RequiredError"}};const v="https://example.com",C=function(e,t,n){if(null==n)throw new b(t,`Required parameter ${t} was null or undefined when calling ${e}.`)},O=async function(e,t){if(t&&t.accessToken){const n="function"==typeof t.accessToken?await t.accessToken():await t.accessToken;e.Authorization="Bearer "+n}};function S(e,t,n=""){null!=t&&("object"==typeof t?Array.isArray(t)?t.forEach((t=>S(e,t,n))):Object.keys(t).forEach((r=>S(e,t[r],`${n}${""!==n?".":""}${r}`))):e.has(n)?e.append(n,t):e.set(n,t))}const I=function(e,...t){const n=new URLSearchParams(e.search);S(n,t),e.search=n.toString()},N=function(e,t,n){const r="string"!=typeof e;return(r&&n&&n.isJsonMime?n.isJsonMime(t.headers["Content-Type"]):r)?JSON.stringify(void 0!==e?e:{}):e||""},P=function(e){return e.pathname+e.search+e.hash},k=function(e,t,n,r){return(s=t,a=n)=>{const i={...e.options,url:(r?.basePath||s.defaults.baseURL||a)+e.url};return s.request(i)}},D=function(t){const n=function(e){return{getActivity:async(t,n,r={})=>{C("getActivity","chainName",t),C("getActivity","activityId",n);const s="/v1/chains/{chain_name}/activities/{activity_id}".replace("{chain_name}",encodeURIComponent(String(t))).replace("{activity_id}",encodeURIComponent(String(n))),a=new URL(s,v);let i;e&&(i=e.baseOptions);const o={method:"GET",...i,...r};I(a,{});let c=i&&i.headers?i.headers:{};return o.headers={...c,...r.headers},{url:P(a),options:o}},listActivities:async(t,n,r,s,a,i,o,c,d,u,l={})=>{C("listActivities","chainName",t);const h="/v1/chains/{chain_name}/activities".replace("{chain_name}",encodeURIComponent(String(t))),m=new URL(h,v);let p;e&&(p=e.baseOptions);const g={method:"GET",...p,...l},f={};void 0!==n&&(f.contract_address=n),void 0!==r&&(f.token_id=r),void 0!==s&&(f.account_address=s),void 0!==a&&(f.activity_type=a),void 0!==i&&(f.from_indexed_at=i instanceof Date?i.toISOString():i),void 0!==o&&(f.to_indexed_at=o instanceof Date?o.toISOString():o),void 0!==c&&(f.transaction_hash=c),void 0!==d&&(f.page_cursor=d),void 0!==u&&(f.page_size=u),I(m,f);let w=p&&p.headers?p.headers:{};return g.headers={...w,...l.headers},{url:P(m),options:g}}}}(t);return{async getActivity(r,s,a){const i=await n.getActivity(r,s,a);return k(i,e,A,t)},async listActivities(r,s,a,i,o,c,d,u,l,h,m){const p=await n.listActivities(r,s,a,i,o,c,d,u,l,h,m);return k(p,e,A,t)}}};class U extends T{getActivity(e,t){return D(this.configuration).getActivity(e.chainName,e.activityId,t).then((e=>e(this.axios,this.basePath)))}listActivities(e,t){return D(this.configuration).listActivities(e.chainName,e.contractAddress,e.tokenId,e.accountAddress,e.activityType,e.fromIndexedAt,e.toIndexedAt,e.transactionHash,e.pageCursor,e.pageSize,t).then((e=>e(this.axios,this.basePath)))}}const x=function(t){const n=function(e){return{listChains:async(t,n,r={})=>{const s=new URL("/v1/chains",v);let a;e&&(a=e.baseOptions);const i={method:"GET",...a,...r},o={};void 0!==t&&(o.page_cursor=t),void 0!==n&&(o.page_size=n),I(s,o);let c=a&&a.headers?a.headers:{};return i.headers={...c,...r.headers},{url:P(s),options:i}}}}(t);return{async listChains(r,s,a){const i=await n.listChains(r,s,a);return k(i,e,A,t)}}};class M extends T{listChains(e={},t){return x(this.configuration).listChains(e.pageCursor,e.pageSize,t).then((e=>e(this.axios,this.basePath)))}}const L=function(t){const n=function(e){return{getCollection:async(t,n,r={})=>{C("getCollection","contractAddress",t),C("getCollection","chainName",n);const s="/v1/chains/{chain_name}/collections/{contract_address}".replace("{contract_address}",encodeURIComponent(String(t))).replace("{chain_name}",encodeURIComponent(String(n))),a=new URL(s,v);let i;e&&(i=e.baseOptions);const o={method:"GET",...i,...r};I(a,{});let c=i&&i.headers?i.headers:{};return o.headers={...c,...r.headers},{url:P(a),options:o}},listCollections:async(t,n,r,s,a,i={})=>{C("listCollections","chainName",t);const o="/v1/chains/{chain_name}/collections".replace("{chain_name}",encodeURIComponent(String(t))),c=new URL(o,v);let d;e&&(d=e.baseOptions);const u={method:"GET",...d,...i},l={};n&&(l.contract_address=n),void 0!==r&&(l.from_updated_at=r instanceof Date?r.toISOString():r),void 0!==s&&(l.page_cursor=s),void 0!==a&&(l.page_size=a),I(c,l);let h=d&&d.headers?d.headers:{};return u.headers={...h,...i.headers},{url:P(c),options:u}},listCollectionsByNFTOwner:async(t,n,r,s,a={})=>{C("listCollectionsByNFTOwner","accountAddress",t),C("listCollectionsByNFTOwner","chainName",n);const i="/v1/chains/{chain_name}/accounts/{account_address}/collections".replace("{account_address}",encodeURIComponent(String(t))).replace("{chain_name}",encodeURIComponent(String(n))),o=new URL(i,v);let c;e&&(c=e.baseOptions);const d={method:"GET",...c,...a},u={};void 0!==r&&(u.page_cursor=r),void 0!==s&&(u.page_size=s),I(o,u);let l=c&&c.headers?c.headers:{};return d.headers={...l,...a.headers},{url:P(o),options:d}},refreshCollectionMetadata:async(t,n,r,s={})=>{C("refreshCollectionMetadata","contractAddress",t),C("refreshCollectionMetadata","chainName",n),C("refreshCollectionMetadata","refreshCollectionMetadataRequest",r);const a="/v1/chains/{chain_name}/collections/{contract_address}/refresh-metadata".replace("{contract_address}",encodeURIComponent(String(t))).replace("{chain_name}",encodeURIComponent(String(n))),i=new URL(a,v);let o;e&&(o=e.baseOptions);const c={method:"POST",...o,...s},d={};await async function(e,t,n){if(n&&n.apiKey){const r="function"==typeof n.apiKey?await n.apiKey(t):await n.apiKey;e[t]=r}}(d,"x-immutable-api-key",e),d["Content-Type"]="application/json",I(i,{});let u=o&&o.headers?o.headers:{};return c.headers={...d,...u,...s.headers},c.data=N(r,c,e),{url:P(i),options:c}}}}(t);return{async getCollection(r,s,a){const i=await n.getCollection(r,s,a);return k(i,e,A,t)},async listCollections(r,s,a,i,o,c){const d=await n.listCollections(r,s,a,i,o,c);return k(d,e,A,t)},async listCollectionsByNFTOwner(r,s,a,i,o){const c=await n.listCollectionsByNFTOwner(r,s,a,i,o);return k(c,e,A,t)},async refreshCollectionMetadata(r,s,a,i){const o=await n.refreshCollectionMetadata(r,s,a,i);return k(o,e,A,t)}}};class F extends T{getCollection(e,t){return L(this.configuration).getCollection(e.contractAddress,e.chainName,t).then((e=>e(this.axios,this.basePath)))}listCollections(e,t){return L(this.configuration).listCollections(e.chainName,e.contractAddress,e.fromUpdatedAt,e.pageCursor,e.pageSize,t).then((e=>e(this.axios,this.basePath)))}listCollectionsByNFTOwner(e,t){return L(this.configuration).listCollectionsByNFTOwner(e.accountAddress,e.chainName,e.pageCursor,e.pageSize,t).then((e=>e(this.axios,this.basePath)))}refreshCollectionMetadata(e,t){return L(this.configuration).refreshCollectionMetadata(e.contractAddress,e.chainName,e.refreshCollectionMetadataRequest,t).then((e=>e(this.axios,this.basePath)))}}const B=function(t){const n=function(e){return{listNFTOwners:async(t,n,r,s,a,i={})=>{C("listNFTOwners","contractAddress",t),C("listNFTOwners","tokenId",n),C("listNFTOwners","chainName",r);const o="/v1/chains/{chain_name}/collections/{contract_address}/nfts/{token_id}/owners".replace("{contract_address}",encodeURIComponent(String(t))).replace("{token_id}",encodeURIComponent(String(n))).replace("{chain_name}",encodeURIComponent(String(r))),c=new URL(o,v);let d;e&&(d=e.baseOptions);const u={method:"GET",...d,...i},l={};void 0!==s&&(l.page_cursor=s),void 0!==a&&(l.page_size=a),I(c,l);let h=d&&d.headers?d.headers:{};return u.headers={...h,...i.headers},{url:P(c),options:u}},listOwnersByContractAddress:async(t,n,r,s,a,i={})=>{C("listOwnersByContractAddress","contractAddress",t),C("listOwnersByContractAddress","chainName",n);const o="/v1/chains/{chain_name}/collections/{contract_address}/owners".replace("{contract_address}",encodeURIComponent(String(t))).replace("{chain_name}",encodeURIComponent(String(n))),c=new URL(o,v);let d;e&&(d=e.baseOptions);const u={method:"GET",...d,...i},l={};void 0!==r&&(l.from_updated_at=r instanceof Date?r.toISOString():r),void 0!==s&&(l.page_cursor=s),void 0!==a&&(l.page_size=a),I(c,l);let h=d&&d.headers?d.headers:{};return u.headers={...h,...i.headers},{url:P(c),options:u}}}}(t);return{async listNFTOwners(r,s,a,i,o,c){const d=await n.listNFTOwners(r,s,a,i,o,c);return k(d,e,A,t)},async listOwnersByContractAddress(r,s,a,i,o,c){const d=await n.listOwnersByContractAddress(r,s,a,i,o,c);return k(d,e,A,t)}}};class j extends T{listNFTOwners(e,t){return B(this.configuration).listNFTOwners(e.contractAddress,e.tokenId,e.chainName,e.pageCursor,e.pageSize,t).then((e=>e(this.axios,this.basePath)))}listOwnersByContractAddress(e,t){return B(this.configuration).listOwnersByContractAddress(e.contractAddress,e.chainName,e.fromUpdatedAt,e.pageCursor,e.pageSize,t).then((e=>e(this.axios,this.basePath)))}}const q=function(t){const n=function(e){return{getNFT:async(t,n,r,s={})=>{C("getNFT","contractAddress",t),C("getNFT","tokenId",n),C("getNFT","chainName",r);const a="/v1/chains/{chain_name}/collections/{contract_address}/nfts/{token_id}".replace("{contract_address}",encodeURIComponent(String(t))).replace("{token_id}",encodeURIComponent(String(n))).replace("{chain_name}",encodeURIComponent(String(r))),i=new URL(a,v);let o;e&&(o=e.baseOptions);const c={method:"GET",...o,...s};I(i,{});let d=o&&o.headers?o.headers:{};return c.headers={...d,...s.headers},{url:P(i),options:c}},listAllNFTOwners:async(t,n,r,s,a={})=>{C("listAllNFTOwners","chainName",t),C("listAllNFTOwners","fromUpdatedAt",n);const i="/v1/chains/{chain_name}/nft-owners".replace("{chain_name}",encodeURIComponent(String(t))),o=new URL(i,v);let c;e&&(c=e.baseOptions);const d={method:"GET",...c,...a},u={};void 0!==n&&(u.from_updated_at=n instanceof Date?n.toISOString():n),void 0!==r&&(u.page_cursor=r),void 0!==s&&(u.page_size=s),I(o,u);let l=c&&c.headers?c.headers:{};return d.headers={...l,...a.headers},{url:P(o),options:d}},listAllNFTs:async(t,n,r,s,a={})=>{C("listAllNFTs","chainName",t);const i="/v1/chains/{chain_name}/nfts".replace("{chain_name}",encodeURIComponent(String(t))),o=new URL(i,v);let c;e&&(c=e.baseOptions);const d={method:"GET",...c,...a},u={};void 0!==n&&(u.from_updated_at=n instanceof Date?n.toISOString():n),void 0!==r&&(u.page_cursor=r),void 0!==s&&(u.page_size=s),I(o,u);let l=c&&c.headers?c.headers:{};return d.headers={...l,...a.headers},{url:P(o),options:d}},listNFTs:async(t,n,r,s,a,i={})=>{C("listNFTs","contractAddress",t),C("listNFTs","chainName",n);const o="/v1/chains/{chain_name}/collections/{contract_address}/nfts".replace("{contract_address}",encodeURIComponent(String(t))).replace("{chain_name}",encodeURIComponent(String(n))),c=new URL(o,v);let d;e&&(d=e.baseOptions);const u={method:"GET",...d,...i},l={};void 0!==r&&(l.from_updated_at=r instanceof Date?r.toISOString():r),void 0!==s&&(l.page_cursor=s),void 0!==a&&(l.page_size=a),I(c,l);let h=d&&d.headers?d.headers:{};return u.headers={...h,...i.headers},{url:P(c),options:u}},listNFTsByAccountAddress:async(t,n,r,s,a,i={})=>{C("listNFTsByAccountAddress","accountAddress",t),C("listNFTsByAccountAddress","chainName",n);const o="/v1/chains/{chain_name}/accounts/{account_address}/nfts".replace("{account_address}",encodeURIComponent(String(t))).replace("{chain_name}",encodeURIComponent(String(n))),c=new URL(o,v);let d;e&&(d=e.baseOptions);const u={method:"GET",...d,...i},l={};void 0!==r&&(l.contract_address=r),void 0!==s&&(l.page_cursor=s),void 0!==a&&(l.page_size=a),I(c,l);let h=d&&d.headers?d.headers:{};return u.headers={...h,...i.headers},{url:P(c),options:u}}}}(t);return{async getNFT(r,s,a,i){const o=await n.getNFT(r,s,a,i);return k(o,e,A,t)},async listAllNFTOwners(r,s,a,i,o){const c=await n.listAllNFTOwners(r,s,a,i,o);return k(c,e,A,t)},async listAllNFTs(r,s,a,i,o){const c=await n.listAllNFTs(r,s,a,i,o);return k(c,e,A,t)},async listNFTs(r,s,a,i,o,c){const d=await n.listNFTs(r,s,a,i,o,c);return k(d,e,A,t)},async listNFTsByAccountAddress(r,s,a,i,o,c){const d=await n.listNFTsByAccountAddress(r,s,a,i,o,c);return k(d,e,A,t)}}};class z extends T{getNFT(e,t){return q(this.configuration).getNFT(e.contractAddress,e.tokenId,e.chainName,t).then((e=>e(this.axios,this.basePath)))}listAllNFTOwners(e,t){return q(this.configuration).listAllNFTOwners(e.chainName,e.fromUpdatedAt,e.pageCursor,e.pageSize,t).then((e=>e(this.axios,this.basePath)))}listAllNFTs(e,t){return q(this.configuration).listAllNFTs(e.chainName,e.fromUpdatedAt,e.pageCursor,e.pageSize,t).then((e=>e(this.axios,this.basePath)))}listNFTs(e,t){return q(this.configuration).listNFTs(e.contractAddress,e.chainName,e.fromUpdatedAt,e.pageCursor,e.pageSize,t).then((e=>e(this.axios,this.basePath)))}listNFTsByAccountAddress(e,t){return q(this.configuration).listNFTsByAccountAddress(e.accountAddress,e.chainName,e.contractAddress,e.pageCursor,e.pageSize,t).then((e=>e(this.axios,this.basePath)))}}const X=function(t){const n=function(e){return{cancelOrders:async(t,n,r={})=>{C("cancelOrders","chainName",t),C("cancelOrders","cancelOrdersRequestBody",n);const s="/v1/chains/{chain_name}/orders/cancel".replace("{chain_name}",encodeURIComponent(String(t))),a=new URL(s,v);let i;e&&(i=e.baseOptions);const o={method:"POST",...i,...r},c={"Content-Type":"application/json"};I(a,{});let d=i&&i.headers?i.headers:{};return o.headers={...c,...d,...r.headers},o.data=N(n,o,e),{url:P(a),options:o}},createListing:async(t,n,r={})=>{C("createListing","chainName",t),C("createListing","createListingRequestBody",n);const s="/v1/chains/{chain_name}/orders/listings".replace("{chain_name}",encodeURIComponent(String(t))),a=new URL(s,v);let i;e&&(i=e.baseOptions);const o={method:"POST",...i,...r},c={"Content-Type":"application/json"};I(a,{});let d=i&&i.headers?i.headers:{};return o.headers={...c,...d,...r.headers},o.data=N(n,o,e),{url:P(a),options:o}},fulfillmentData:async(t,n,r={})=>{C("fulfillmentData","chainName",t),C("fulfillmentData","fulfillmentDataRequest",n);const s="/v1/chains/{chain_name}/orders/fulfillment-data".replace("{chain_name}",encodeURIComponent(String(t))),a=new URL(s,v);let i;e&&(i=e.baseOptions);const o={method:"POST",...i,...r},c={"Content-Type":"application/json"};I(a,{});let d=i&&i.headers?i.headers:{};return o.headers={...c,...d,...r.headers},o.data=N(n,o,e),{url:P(a),options:o}},getListing:async(t,n,r={})=>{C("getListing","chainName",t),C("getListing","listingId",n);const s="/v1/chains/{chain_name}/orders/listings/{listing_id}".replace("{chain_name}",encodeURIComponent(String(t))).replace("{listing_id}",encodeURIComponent(String(n))),a=new URL(s,v);let i;e&&(i=e.baseOptions);const o={method:"GET",...i,...r};I(a,{});let c=i&&i.headers?i.headers:{};return o.headers={...c,...r.headers},{url:P(a),options:o}},getTrade:async(t,n,r={})=>{C("getTrade","chainName",t),C("getTrade","tradeId",n);const s="/v1/chains/{chain_name}/trades/{trade_id}".replace("{chain_name}",encodeURIComponent(String(t))).replace("{trade_id}",encodeURIComponent(String(n))),a=new URL(s,v);let i;e&&(i=e.baseOptions);const o={method:"GET",...i,...r};I(a,{});let c=i&&i.headers?i.headers:{};return o.headers={...c,...r.headers},{url:P(a),options:o}},listListings:async(t,n,r,s,a,i,o,c,d,u={})=>{C("listListings","chainName",t);const l="/v1/chains/{chain_name}/orders/listings".replace("{chain_name}",encodeURIComponent(String(t))),h=new URL(l,v);let m;e&&(m=e.baseOptions);const p={method:"GET",...m,...u},g={};void 0!==n&&(g.status=n),void 0!==r&&(g.sell_item_contract_address=r),void 0!==s&&(g.buy_item_contract_address=s),void 0!==a&&(g.sell_item_token_id=a),void 0!==i&&(g.page_size=i),void 0!==o&&(g.sort_by=o),void 0!==c&&(g.sort_direction=c),void 0!==d&&(g.page_cursor=d),I(h,g);let f=m&&m.headers?m.headers:{};return p.headers={...f,...u.headers},{url:P(h),options:p}},listTrades:async(t,n,r,s,a,i,o={})=>{C("listTrades","chainName",t);const c="/v1/chains/{chain_name}/trades".replace("{chain_name}",encodeURIComponent(String(t))),d=new URL(c,v);let u;e&&(u=e.baseOptions);const l={method:"GET",...u,...o},h={};void 0!==n&&(h.account_address=n),void 0!==r&&(h.page_size=r),void 0!==s&&(h.sort_by=s),void 0!==a&&(h.sort_direction=a),void 0!==i&&(h.page_cursor=i),I(d,h);let m=u&&u.headers?u.headers:{};return l.headers={...m,...o.headers},{url:P(d),options:l}}}}(t);return{async cancelOrders(r,s,a){const i=await n.cancelOrders(r,s,a);return k(i,e,A,t)},async createListing(r,s,a){const i=await n.createListing(r,s,a);return k(i,e,A,t)},async fulfillmentData(r,s,a){const i=await n.fulfillmentData(r,s,a);return k(i,e,A,t)},async getListing(r,s,a){const i=await n.getListing(r,s,a);return k(i,e,A,t)},async getTrade(r,s,a){const i=await n.getTrade(r,s,a);return k(i,e,A,t)},async listListings(r,s,a,i,o,c,d,u,l,h){const m=await n.listListings(r,s,a,i,o,c,d,u,l,h);return k(m,e,A,t)},async listTrades(r,s,a,i,o,c,d){const u=await n.listTrades(r,s,a,i,o,c,d);return k(u,e,A,t)}}};class G extends T{cancelOrders(e,t){return X(this.configuration).cancelOrders(e.chainName,e.cancelOrdersRequestBody,t).then((e=>e(this.axios,this.basePath)))}createListing(e,t){return X(this.configuration).createListing(e.chainName,e.createListingRequestBody,t).then((e=>e(this.axios,this.basePath)))}fulfillmentData(e,t){return X(this.configuration).fulfillmentData(e.chainName,e.fulfillmentDataRequest,t).then((e=>e(this.axios,this.basePath)))}getListing(e,t){return X(this.configuration).getListing(e.chainName,e.listingId,t).then((e=>e(this.axios,this.basePath)))}getTrade(e,t){return X(this.configuration).getTrade(e.chainName,e.tradeId,t).then((e=>e(this.axios,this.basePath)))}listListings(e,t){return X(this.configuration).listListings(e.chainName,e.status,e.sellItemContractAddress,e.buyItemContractAddress,e.sellItemTokenId,e.pageSize,e.sortBy,e.sortDirection,e.pageCursor,t).then((e=>e(this.axios,this.basePath)))}listTrades(e,t){return X(this.configuration).listTrades(e.chainName,e.accountAddress,e.pageSize,e.sortBy,e.sortDirection,e.pageCursor,t).then((e=>e(this.axios,this.basePath)))}}const H=function(t){const n=function(e){return{createCounterfactualAddress:async(t,n,r={})=>{C("createCounterfactualAddress","chainName",t),C("createCounterfactualAddress","createCounterfactualAddressRequest",n);const s="/v1/chains/{chain_name}/passport/counterfactual-address".replace("{chain_name}",encodeURIComponent(String(t))),a=new URL(s,v);let i;e&&(i=e.baseOptions);const o={method:"POST",...i,...r},c={};await O(c,e),c["Content-Type"]="application/json",I(a,{});let d=i&&i.headers?i.headers:{};return o.headers={...c,...d,...r.headers},o.data=N(n,o,e),{url:P(a),options:o}},createCounterfactualAddressDeprecated:async(t,n={})=>{C("createCounterfactualAddressDeprecated","createCounterfactualAddressRequestDeprecated",t);const r=new URL("/passport-mr/v1/counterfactual-address",v);let s;e&&(s=e.baseOptions);const a={method:"POST",...s,...n},i={};await O(i,e),i["Content-Type"]="application/json",I(r,{});let o=s&&s.headers?s.headers:{};return a.headers={...i,...o,...n.headers},a.data=N(t,a,e),{url:P(r),options:a}},getLinkedAddresses:async(t,n,r={})=>{C("getLinkedAddresses","userId",t),C("getLinkedAddresses","chainName",n);const s="/v1/chains/{chain_name}/passport/users/{user_id}/linked-addresses".replace("{user_id}",encodeURIComponent(String(t))).replace("{chain_name}",encodeURIComponent(String(n))),a=new URL(s,v);let i;e&&(i=e.baseOptions);const o={method:"GET",...i,...r},c={};await O(c,e),I(a,{});let d=i&&i.headers?i.headers:{};return o.headers={...c,...d,...r.headers},{url:P(a),options:o}},getLinkedAddressesDeprecated:async(t,n={})=>{C("getLinkedAddressesDeprecated","userId",t);const r="/passport-mr/v1/users/{userId}/linked-addresses".replace("{userId}",encodeURIComponent(String(t))),s=new URL(r,v);let a;e&&(a=e.baseOptions);const i={method:"GET",...a,...n},o={};await O(o,e),I(s,{});let c=a&&a.headers?a.headers:{};return i.headers={...o,...c,...n.headers},{url:P(s),options:i}}}}(t);return{async createCounterfactualAddress(r,s,a){const i=await n.createCounterfactualAddress(r,s,a);return k(i,e,A,t)},async createCounterfactualAddressDeprecated(r,s){const a=await n.createCounterfactualAddressDeprecated(r,s);return k(a,e,A,t)},async getLinkedAddresses(r,s,a){const i=await n.getLinkedAddresses(r,s,a);return k(i,e,A,t)},async getLinkedAddressesDeprecated(r,s){const a=await n.getLinkedAddressesDeprecated(r,s);return k(a,e,A,t)}}};class $ extends T{createCounterfactualAddress(e,t){return H(this.configuration).createCounterfactualAddress(e.chainName,e.createCounterfactualAddressRequest,t).then((e=>e(this.axios,this.basePath)))}createCounterfactualAddressDeprecated(e,t){return H(this.configuration).createCounterfactualAddressDeprecated(e.createCounterfactualAddressRequestDeprecated,t).then((e=>e(this.axios,this.basePath)))}getLinkedAddresses(e,t){return H(this.configuration).getLinkedAddresses(e.userId,e.chainName,t).then((e=>e(this.axios,this.basePath)))}getLinkedAddressesDeprecated(e,t){return H(this.configuration).getLinkedAddressesDeprecated(e.userId,t).then((e=>e(this.axios,this.basePath)))}}class V{config;activitiesApi;chainsApi;collectionApi;nftOwnersApi;nftsApi;ordersApi;passportApi;constructor(e){this.config=e,this.activitiesApi=new U(e.indexer),this.chainsApi=new M(e.indexer),this.collectionApi=new F(e.indexer),this.nftOwnersApi=new j(e.indexer),this.nftsApi=new z(e.indexer),this.ordersApi=new G(e.orderBook),this.passportApi=new $(e.passport)}}const K={"x-sdk-version":"ts-immutable-sdk-0.31.2-alpha"},W=({basePath:e,headers:t})=>{if(!e.trim())throw Error("basePath can not be empty");const n={basePath:e,baseOptions:{headers:{...K,...t||{}}}};return new class{apiKey;username;password;accessToken;basePath;baseOptions;formDataCtor;constructor(e={}){this.apiKey=e.apiKey,this.username=e.username,this.password=e.password,this.accessToken=e.accessToken,this.basePath=e.basePath,this.baseOptions=e.baseOptions,this.formDataCtor=e.formDataCtor}isJsonMime(e){const t=new RegExp("^(application/json|[^;/ \t]+/[^;/ \t]+[+]json)[ \t]*(;.*)?$","i");return null!==e&&(t.test(e)||"application/json-patch+json"===e.toLowerCase())}}(n)},J=()=>({indexer:W({basePath:"https://indexer-mr.imtbl.com"}),orderBook:W({basePath:"https://order-book-mr.imtbl.com"}),passport:W({basePath:"https://api.immutable.com"})}),Z=()=>({indexer:W({basePath:"https://api.sandbox.immutable.com"}),orderBook:W({basePath:"https://api.sandbox.immutable.com"}),passport:W({basePath:"https://api.sandbox.immutable.com"})});var Q;!function(e){e.PRODUCTION="production",e.SANDBOX="sandbox"}(Q||(Q={}));const Y=({basePath:e,chainID:t,coreContractAddress:n,registrationContractAddress:s})=>r.createConfig({basePath:e,chainID:t,coreContractAddress:n,registrationContractAddress:s,sdkVersion:"ts-immutable-sdk-0.31.2-alpha"}),ee=()=>Y({basePath:"https://api.sandbox.x.immutable.com",chainID:11155111,coreContractAddress:"0x2d5C349fD8464DA06a3f90b4B0E9195F3d1b7F98",registrationContractAddress:"0xDbA6129C02E69405622fAdc3d5A7f8d23eac3b97"});class te{immutableXConfig;baseConfig;constructor({baseConfig:e,overrides:t}){if(this.baseConfig=e,t)this.immutableXConfig=t.immutableXConfig;else switch(e.environment){case Q.SANDBOX:this.immutableXConfig=ee();break;case Q.PRODUCTION:this.immutableXConfig=Y({basePath:"https://api.x.immutable.com",chainID:1,coreContractAddress:"0x5FDCCA53617f4d2b9134B29090C87D01058e27e9",registrationContractAddress:"0x72a06bf2a1CE5e39cBA06c0CAb824960B587d64c"});break;default:this.immutableXConfig=ee()}}}class ne{immutableX;depositsApi;mintsApi;ordersApi;tokensApi;tradesApi;transfersApi;exchangeApi;nftCheckoutPrimaryApi;usersApi;withdrawalsApi;balanceApi;assetApi;collectionApi;metadataApi;metadataRefreshesApi;projectsApi;constructor(e){const t=new te(e);this.immutableX=new n(t.immutableXConfig),this.depositsApi=this.immutableX.depositsApi,this.mintsApi=this.immutableX.mintsApi,this.ordersApi=this.immutableX.ordersApi,this.tokensApi=this.immutableX.tokensApi,this.tradesApi=this.immutableX.tradesApi,this.transfersApi=this.immutableX.transfersApi,this.exchangeApi=this.immutableX.exchangeApi,this.usersApi=this.immutableX.usersApi,this.withdrawalsApi=this.immutableX.withdrawalsApi,this.balanceApi=this.immutableX.balanceApi,this.assetApi=this.immutableX.assetApi,this.collectionApi=this.immutableX.collectionApi,this.metadataApi=this.immutableX.metadataApi,this.metadataRefreshesApi=this.immutableX.metadataRefreshesApi,this.nftCheckoutPrimaryApi=this.immutableX.nftCheckoutPrimaryApi,this.projectsApi=this.immutableX.projectsApi}getDeposit(e){return this.immutableX.getDeposit(e)}listDeposits(e){return this.immutableX.listDeposits(e)}getUser(e){return this.immutableX.getUser(e)}getAsset(e){return this.immutableX.getAsset(e)}listAssets(e){return this.immutableX.listAssets(e)}createCollection(e,t){return this.immutableX.createCollection(e,t)}getCollection(e){return this.immutableX.getCollection(e)}listCollectionFilters(e){return this.immutableX.listCollectionFilters(e)}listCollections(e){return this.collectionApi.listCollections(e).then((e=>e.data))}updateCollection(e,t,n){return this.immutableX.updateCollection(e,t,n)}addMetadataSchemaToCollection(e,t,n){return this.immutableX.addMetadataSchemaToCollection(e,t,n)}getMetadataSchema(e){return this.immutableX.getMetadataSchema(e)}updateMetadataSchemaByName(e,t,n,r){return this.immutableX.updateMetadataSchemaByName(e,t,n,r)}listMetadataRefreshes(e,t,n,r){return this.immutableX.listMetadataRefreshes(e,t,n,r)}getMetadataRefreshErrors(e,t,n,r){return this.immutableX.getMetadataRefreshErrors(e,t,n,r)}getMetadataRefreshResults(e,t){return this.immutableX.getMetadataRefreshResults(e,t)}createMetadataRefresh(e,t){return this.immutableX.createMetadataRefresh(e,t)}async createProject(e,t){return this.immutableX.createProject(e,t)}async getProject(e,t){return this.immutableX.getProject(e,t)}async getProjects(e,t,n,r,s){return this.immutableX.getProjects(e,t,n,r,s)}getBalance(e){return this.immutableX.getBalance(e)}listBalances(e){return this.immutableX.listBalances(e)}getMint(e){return this.immutableX.getMint(e)}listMints(e){return this.immutableX.listMints(e)}mint(e,t){return this.immutableX.mint(e,t)}listWithdrawals(e){return this.immutableX.listWithdrawals(e)}getWithdrawal(e){return this.immutableX.getWithdrawal(e)}getOrder(e){return this.immutableX.getOrder(e)}listOrders(e){return this.immutableX.listOrders(e)}getTrade(e){return this.immutableX.getTrade(e)}listTrades(e){return this.immutableX.listTrades(e)}getToken(e){return this.immutableX.getToken(e)}listTokens(e){return this.immutableX.listTokens(e)}getTransfer(e){return this.immutableX.getTransfer(e)}listTransfers(e){return this.immutableX.listTransfers(e)}createExchange(e){return this.immutableX.createExchange(e).then((e=>e.data))}getExchange(e){return this.immutableX.getExchange(e).then((e=>e.data))}getExchanges(e){return this.immutableX.getExchanges(e).then((e=>e.data))}exchangeTransfer(e,t){return this.immutableX.exchangeTransfer(e,t)}createNftPrimary(e){return this.immutableX.createNftPrimary(e).then((e=>e.data))}getCurrenciesNFTCheckoutPrimary(e){return this.immutableX.getCurrenciesNFTCheckoutPrimary(e).then((e=>e.data))}getNftPrimaryTransaction(e){return this.immutableX.getNftPrimaryTransaction(e).then((e=>e.data))}getNftPrimaryTransactions(e){return this.immutableX.getNftPrimaryTransactions(e).then((e=>e.data))}}function re(e,t){return function(){return e.apply(t,arguments)}}const{toString:se}=Object.prototype,{getPrototypeOf:ae}=Object,ie=(oe=Object.create(null),e=>{const t=se.call(e);return oe[t]||(oe[t]=t.slice(8,-1).toLowerCase())});var oe;const ce=e=>(e=e.toLowerCase(),t=>ie(t)===e),de=e=>t=>typeof t===e,{isArray:ue}=Array,le=de("undefined");const he=ce("ArrayBuffer");const me=de("string"),pe=de("function"),ge=de("number"),fe=e=>null!==e&&"object"==typeof e,we=e=>{if("object"!==ie(e))return!1;const t=ae(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e)},Re=ce("Date"),ye=ce("File"),Ee=ce("Blob"),_e=ce("FileList"),Ae=ce("URLSearchParams");function Te(e,t,{allOwnKeys:n=!1}={}){if(null==e)return;let r,s;if("object"!=typeof e&&(e=[e]),ue(e))for(r=0,s=e.length;r<s;r++)t.call(null,e[r],r,e);else{const s=n?Object.getOwnPropertyNames(e):Object.keys(e),a=s.length;let i;for(r=0;r<a;r++)i=s[r],t.call(null,e[i],i,e)}}function be(e,t){t=t.toLowerCase();const n=Object.keys(e);let r,s=n.length;for(;s-- >0;)if(r=n[s],t===r.toLowerCase())return r;return null}const ve="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,Ce=e=>!le(e)&&e!==ve;const Oe=(Se="undefined"!=typeof Uint8Array&&ae(Uint8Array),e=>Se&&e instanceof Se);var Se;const Ie=ce("HTMLFormElement"),Ne=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),Pe=ce("RegExp"),ke=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};Te(n,((n,s)=>{!1!==t(n,s,e)&&(r[s]=n)})),Object.defineProperties(e,r)},De="abcdefghijklmnopqrstuvwxyz",Ue="0123456789",xe={DIGIT:Ue,ALPHA:De,ALPHA_DIGIT:De+De.toUpperCase()+Ue};const Me=ce("AsyncFunction");var Le={isArray:ue,isArrayBuffer:he,isBuffer:function(e){return null!==e&&!le(e)&&null!==e.constructor&&!le(e.constructor)&&pe(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:e=>{let t;return e&&("function"==typeof FormData&&e instanceof FormData||pe(e.append)&&("formdata"===(t=ie(e))||"object"===t&&pe(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&he(e.buffer),t},isString:me,isNumber:ge,isBoolean:e=>!0===e||!1===e,isObject:fe,isPlainObject:we,isUndefined:le,isDate:Re,isFile:ye,isBlob:Ee,isRegExp:Pe,isFunction:pe,isStream:e=>fe(e)&&pe(e.pipe),isURLSearchParams:Ae,isTypedArray:Oe,isFileList:_e,forEach:Te,merge:function e(){const{caseless:t}=Ce(this)&&this||{},n={},r=(r,s)=>{const a=t&&be(n,s)||s;we(n[a])&&we(r)?n[a]=e(n[a],r):we(r)?n[a]=e({},r):ue(r)?n[a]=r.slice():n[a]=r};for(let e=0,t=arguments.length;e<t;e++)arguments[e]&&Te(arguments[e],r);return n},extend:(e,t,n,{allOwnKeys:r}={})=>(Te(t,((t,r)=>{n&&pe(t)?e[r]=re(t,n):e[r]=t}),{allOwnKeys:r}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,n,r)=>{let s,a,i;const o={};if(t=t||{},null==e)return t;do{for(s=Object.getOwnPropertyNames(e),a=s.length;a-- >0;)i=s[a],r&&!r(i,e,t)||o[i]||(t[i]=e[i],o[i]=!0);e=!1!==n&&ae(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:ie,kindOfTest:ce,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return-1!==r&&r===n},toArray:e=>{if(!e)return null;if(ue(e))return e;let t=e.length;if(!ge(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[Symbol.iterator]).call(e);let r;for(;(r=n.next())&&!r.done;){const n=r.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const r=[];for(;null!==(n=e.exec(t));)r.push(n);return r},isHTMLForm:Ie,hasOwnProperty:Ne,hasOwnProp:Ne,reduceDescriptors:ke,freezeMethods:e=>{ke(e,((t,n)=>{if(pe(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const r=e[n];pe(r)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))}))},toObjectSet:(e,t)=>{const n={},r=e=>{e.forEach((e=>{n[e]=!0}))};return ue(e)?r(e):r(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,n){return t.toUpperCase()+n})),noop:()=>{},toFiniteNumber:(e,t)=>(e=+e,Number.isFinite(e)?e:t),findKey:be,global:ve,isContextDefined:Ce,ALPHABET:xe,generateString:(e=16,t=xe.ALPHA_DIGIT)=>{let n="";const{length:r}=t;for(;e--;)n+=t[Math.random()*r|0];return n},isSpecCompliantForm:function(e){return!!(e&&pe(e.append)&&"FormData"===e[Symbol.toStringTag]&&e[Symbol.iterator])},toJSONObject:e=>{const t=new Array(10),n=(e,r)=>{if(fe(e)){if(t.indexOf(e)>=0)return;if(!("toJSON"in e)){t[r]=e;const s=ue(e)?[]:{};return Te(e,((e,t)=>{const a=n(e,r+1);!le(a)&&(s[t]=a)})),t[r]=void 0,s}}return e};return n(e,0)},isAsyncFn:Me,isThenable:e=>e&&(fe(e)||pe(e))&&pe(e.then)&&pe(e.catch)};function Fe(e,t,n,r,s){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),s&&(this.response=s)}Le.inherits(Fe,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:Le.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const Be=Fe.prototype,je={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((e=>{je[e]={value:e}})),Object.defineProperties(Fe,je),Object.defineProperty(Be,"isAxiosError",{value:!0}),Fe.from=(e,t,n,r,s,a)=>{const i=Object.create(Be);return Le.toFlatObject(e,i,(function(e){return e!==Error.prototype}),(e=>"isAxiosError"!==e)),Fe.call(i,e.message,t,n,r,s),i.cause=e,i.name=e.name,a&&Object.assign(i,a),i};function qe(e){return Le.isPlainObject(e)||Le.isArray(e)}function ze(e){return Le.endsWith(e,"[]")?e.slice(0,-2):e}function Xe(e,t,n){return e?e.concat(t).map((function(e,t){return e=ze(e),!n&&t?"["+e+"]":e})).join(n?".":""):t}const Ge=Le.toFlatObject(Le,{},null,(function(e){return/^is[A-Z]/.test(e)}));function He(e,t,n){if(!Le.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const r=(n=Le.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!Le.isUndefined(t[e])}))).metaTokens,s=n.visitor||d,a=n.dots,i=n.indexes,o=(n.Blob||"undefined"!=typeof Blob&&Blob)&&Le.isSpecCompliantForm(t);if(!Le.isFunction(s))throw new TypeError("visitor must be a function");function c(e){if(null===e)return"";if(Le.isDate(e))return e.toISOString();if(!o&&Le.isBlob(e))throw new Fe("Blob is not supported. Use a Buffer instead.");return Le.isArrayBuffer(e)||Le.isTypedArray(e)?o&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function d(e,n,s){let o=e;if(e&&!s&&"object"==typeof e)if(Le.endsWith(n,"{}"))n=r?n:n.slice(0,-2),e=JSON.stringify(e);else if(Le.isArray(e)&&function(e){return Le.isArray(e)&&!e.some(qe)}(e)||(Le.isFileList(e)||Le.endsWith(n,"[]"))&&(o=Le.toArray(e)))return n=ze(n),o.forEach((function(e,r){!Le.isUndefined(e)&&null!==e&&t.append(!0===i?Xe([n],r,a):null===i?n:n+"[]",c(e))})),!1;return!!qe(e)||(t.append(Xe(s,n,a),c(e)),!1)}const u=[],l=Object.assign(Ge,{defaultVisitor:d,convertValue:c,isVisitable:qe});if(!Le.isObject(e))throw new TypeError("data must be an object");return function e(n,r){if(!Le.isUndefined(n)){if(-1!==u.indexOf(n))throw Error("Circular reference detected in "+r.join("."));u.push(n),Le.forEach(n,(function(n,a){!0===(!(Le.isUndefined(n)||null===n)&&s.call(t,n,Le.isString(a)?a.trim():a,r,l))&&e(n,r?r.concat(a):[a])})),u.pop()}}(e),t}function $e(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function Ve(e,t){this._pairs=[],e&&He(e,this,t)}const Ke=Ve.prototype;function We(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function Je(e,t,n){if(!t)return e;const r=n&&n.encode||We,s=n&&n.serialize;let a;if(a=s?s(t,n):Le.isURLSearchParams(t)?t.toString():new Ve(t,n).toString(r),a){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+a}return e}Ke.append=function(e,t){this._pairs.push([e,t])},Ke.toString=function(e){const t=e?function(t){return e.call(this,t,$e)}:$e;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};var Ze=class{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){Le.forEach(this.handlers,(function(t){null!==t&&e(t)}))}},Qe={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1};var Ye={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:Ve,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},isStandardBrowserEnv:(()=>{let e;return("undefined"==typeof navigator||"ReactNative"!==(e=navigator.product)&&"NativeScript"!==e&&"NS"!==e)&&("undefined"!=typeof window&&"undefined"!=typeof document)})(),isStandardBrowserWebWorkerEnv:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,protocols:["http","https","file","blob","url","data"]};function et(e){function t(e,n,r,s){let a=e[s++];const i=Number.isFinite(+a),o=s>=e.length;if(a=!a&&Le.isArray(r)?r.length:a,o)return Le.hasOwnProp(r,a)?r[a]=[r[a],n]:r[a]=n,!i;r[a]&&Le.isObject(r[a])||(r[a]=[]);return t(e,n,r[a],s)&&Le.isArray(r[a])&&(r[a]=function(e){const t={},n=Object.keys(e);let r;const s=n.length;let a;for(r=0;r<s;r++)a=n[r],t[a]=e[a];return t}(r[a])),!i}if(Le.isFormData(e)&&Le.isFunction(e.entries)){const n={};return Le.forEachEntry(e,((e,r)=>{t(function(e){return Le.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),r,n,0)})),n}return null}const tt={"Content-Type":void 0};const nt={transitional:Qe,adapter:["xhr","http"],transformRequest:[function(e,t){const n=t.getContentType()||"",r=n.indexOf("application/json")>-1,s=Le.isObject(e);s&&Le.isHTMLForm(e)&&(e=new FormData(e));if(Le.isFormData(e))return r&&r?JSON.stringify(et(e)):e;if(Le.isArrayBuffer(e)||Le.isBuffer(e)||Le.isStream(e)||Le.isFile(e)||Le.isBlob(e))return e;if(Le.isArrayBufferView(e))return e.buffer;if(Le.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let a;if(s){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return He(e,new Ye.classes.URLSearchParams,Object.assign({visitor:function(e,t,n,r){return Ye.isNode&&Le.isBuffer(e)?(this.append(t,e.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((a=Le.isFileList(e))||n.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return He(a?{"files[]":e}:e,t&&new t,this.formSerializer)}}return s||r?(t.setContentType("application/json",!1),function(e,t,n){if(Le.isString(e))try{return(t||JSON.parse)(e),Le.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||nt.transitional,n=t&&t.forcedJSONParsing,r="json"===this.responseType;if(e&&Le.isString(e)&&(n&&!this.responseType||r)){const n=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e)}catch(e){if(n){if("SyntaxError"===e.name)throw Fe.from(e,Fe.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Ye.classes.FormData,Blob:Ye.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};Le.forEach(["delete","get","head"],(function(e){nt.headers[e]={}})),Le.forEach(["post","put","patch"],(function(e){nt.headers[e]=Le.merge(tt)}));var rt=nt;const st=Le.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]);const at=Symbol("internals");function it(e){return e&&String(e).trim().toLowerCase()}function ot(e){return!1===e||null==e?e:Le.isArray(e)?e.map(ot):String(e)}function ct(e,t,n,r,s){return Le.isFunction(r)?r.call(this,t,n):(s&&(t=n),Le.isString(t)?Le.isString(r)?-1!==t.indexOf(r):Le.isRegExp(r)?r.test(t):void 0:void 0)}class dt{constructor(e){e&&this.set(e)}set(e,t,n){const r=this;function s(e,t,n){const s=it(t);if(!s)throw new Error("header name must be a non-empty string");const a=Le.findKey(r,s);(!a||void 0===r[a]||!0===n||void 0===n&&!1!==r[a])&&(r[a||t]=ot(e))}const a=(e,t)=>Le.forEach(e,((e,n)=>s(e,n,t)));return Le.isPlainObject(e)||e instanceof this.constructor?a(e,t):Le.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim())?a((e=>{const t={};let n,r,s;return e&&e.split("\n").forEach((function(e){s=e.indexOf(":"),n=e.substring(0,s).trim().toLowerCase(),r=e.substring(s+1).trim(),!n||t[n]&&st[n]||("set-cookie"===n?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)})),t})(e),t):null!=e&&s(t,e,n),this}get(e,t){if(e=it(e)){const n=Le.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}(e);if(Le.isFunction(t))return t.call(this,e,n);if(Le.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=it(e)){const n=Le.findKey(this,e);return!(!n||void 0===this[n]||t&&!ct(0,this[n],n,t))}return!1}delete(e,t){const n=this;let r=!1;function s(e){if(e=it(e)){const s=Le.findKey(n,e);!s||t&&!ct(0,n[s],s,t)||(delete n[s],r=!0)}}return Le.isArray(e)?e.forEach(s):s(e),r}clear(e){const t=Object.keys(this);let n=t.length,r=!1;for(;n--;){const s=t[n];e&&!ct(0,this[s],s,e,!0)||(delete this[s],r=!0)}return r}normalize(e){const t=this,n={};return Le.forEach(this,((r,s)=>{const a=Le.findKey(n,s);if(a)return t[a]=ot(r),void delete t[s];const i=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,t,n)=>t.toUpperCase()+n))}(s):String(s).trim();i!==s&&delete t[s],t[i]=ot(r),n[i]=!0})),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return Le.forEach(this,((n,r)=>{null!=n&&!1!==n&&(t[r]=e&&Le.isArray(n)?n.join(", "):n)})),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([e,t])=>e+": "+t)).join("\n")}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const n=new this(e);return t.forEach((e=>n.set(e))),n}static accessor(e){const t=(this[at]=this[at]={accessors:{}}).accessors,n=this.prototype;function r(e){const r=it(e);t[r]||(!function(e,t){const n=Le.toCamelCase(" "+t);["get","set","has"].forEach((r=>{Object.defineProperty(e,r+n,{value:function(e,n,s){return this[r].call(this,t,e,n,s)},configurable:!0})}))}(n,e),t[r]=!0)}return Le.isArray(e)?e.forEach(r):r(e),this}}dt.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),Le.freezeMethods(dt.prototype),Le.freezeMethods(dt);var ut=dt;function lt(e,t){const n=this||rt,r=t||n,s=ut.from(r.headers);let a=r.data;return Le.forEach(e,(function(e){a=e.call(n,a,s.normalize(),t?t.status:void 0)})),s.normalize(),a}function ht(e){return!(!e||!e.__CANCEL__)}function mt(e,t,n){Fe.call(this,null==e?"canceled":e,Fe.ERR_CANCELED,t,n),this.name="CanceledError"}Le.inherits(mt,Fe,{__CANCEL__:!0});var pt=Ye.isStandardBrowserEnv?{write:function(e,t,n,r,s,a){const i=[];i.push(e+"="+encodeURIComponent(t)),Le.isNumber(n)&&i.push("expires="+new Date(n).toGMTString()),Le.isString(r)&&i.push("path="+r),Le.isString(s)&&i.push("domain="+s),!0===a&&i.push("secure"),document.cookie=i.join("; ")},read:function(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}};function gt(e,t){return e&&!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)?function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}var ft=Ye.isStandardBrowserEnv?function(){const e=/(msie|trident)/i.test(navigator.userAgent),t=document.createElement("a");let n;function r(n){let r=n;return e&&(t.setAttribute("href",r),r=t.href),t.setAttribute("href",r),{href:t.href,protocol:t.protocol?t.protocol.replace(/:$/,""):"",host:t.host,search:t.search?t.search.replace(/^\?/,""):"",hash:t.hash?t.hash.replace(/^#/,""):"",hostname:t.hostname,port:t.port,pathname:"/"===t.pathname.charAt(0)?t.pathname:"/"+t.pathname}}return n=r(window.location.href),function(e){const t=Le.isString(e)?r(e):e;return t.protocol===n.protocol&&t.host===n.host}}():function(){return!0};function wt(e,t){let n=0;const r=function(e,t){e=e||10;const n=new Array(e),r=new Array(e);let s,a=0,i=0;return t=void 0!==t?t:1e3,function(o){const c=Date.now(),d=r[i];s||(s=c),n[a]=o,r[a]=c;let u=i,l=0;for(;u!==a;)l+=n[u++],u%=e;if(a=(a+1)%e,a===i&&(i=(i+1)%e),c-s<t)return;const h=d&&c-d;return h?Math.round(1e3*l/h):void 0}}(50,250);return s=>{const a=s.loaded,i=s.lengthComputable?s.total:void 0,o=a-n,c=r(o);n=a;const d={loaded:a,total:i,progress:i?a/i:void 0,bytes:o,rate:c||void 0,estimated:c&&i&&a<=i?(i-a)/c:void 0,event:s};d[t?"download":"upload"]=!0,e(d)}}const Rt={http:null,xhr:"undefined"!=typeof XMLHttpRequest&&function(e){return new Promise((function(t,n){let r=e.data;const s=ut.from(e.headers).normalize(),a=e.responseType;let i;function o(){e.cancelToken&&e.cancelToken.unsubscribe(i),e.signal&&e.signal.removeEventListener("abort",i)}Le.isFormData(r)&&(Ye.isStandardBrowserEnv||Ye.isStandardBrowserWebWorkerEnv?s.setContentType(!1):s.setContentType("multipart/form-data;",!1));let c=new XMLHttpRequest;if(e.auth){const t=e.auth.username||"",n=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";s.set("Authorization","Basic "+btoa(t+":"+n))}const d=gt(e.baseURL,e.url);function u(){if(!c)return;const r=ut.from("getAllResponseHeaders"in c&&c.getAllResponseHeaders());!function(e,t,n){const r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(new Fe("Request failed with status code "+n.status,[Fe.ERR_BAD_REQUEST,Fe.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}((function(e){t(e),o()}),(function(e){n(e),o()}),{data:a&&"text"!==a&&"json"!==a?c.response:c.responseText,status:c.status,statusText:c.statusText,headers:r,config:e,request:c}),c=null}if(c.open(e.method.toUpperCase(),Je(d,e.params,e.paramsSerializer),!0),c.timeout=e.timeout,"onloadend"in c?c.onloadend=u:c.onreadystatechange=function(){c&&4===c.readyState&&(0!==c.status||c.responseURL&&0===c.responseURL.indexOf("file:"))&&setTimeout(u)},c.onabort=function(){c&&(n(new Fe("Request aborted",Fe.ECONNABORTED,e,c)),c=null)},c.onerror=function(){n(new Fe("Network Error",Fe.ERR_NETWORK,e,c)),c=null},c.ontimeout=function(){let t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded";const r=e.transitional||Qe;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(new Fe(t,r.clarifyTimeoutError?Fe.ETIMEDOUT:Fe.ECONNABORTED,e,c)),c=null},Ye.isStandardBrowserEnv){const t=(e.withCredentials||ft(d))&&e.xsrfCookieName&&pt.read(e.xsrfCookieName);t&&s.set(e.xsrfHeaderName,t)}void 0===r&&s.setContentType(null),"setRequestHeader"in c&&Le.forEach(s.toJSON(),(function(e,t){c.setRequestHeader(t,e)})),Le.isUndefined(e.withCredentials)||(c.withCredentials=!!e.withCredentials),a&&"json"!==a&&(c.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&c.addEventListener("progress",wt(e.onDownloadProgress,!0)),"function"==typeof e.onUploadProgress&&c.upload&&c.upload.addEventListener("progress",wt(e.onUploadProgress)),(e.cancelToken||e.signal)&&(i=t=>{c&&(n(!t||t.type?new mt(null,e,c):t),c.abort(),c=null)},e.cancelToken&&e.cancelToken.subscribe(i),e.signal&&(e.signal.aborted?i():e.signal.addEventListener("abort",i)));const l=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(d);l&&-1===Ye.protocols.indexOf(l)?n(new Fe("Unsupported protocol "+l+":",Fe.ERR_BAD_REQUEST,e)):c.send(r||null)}))}};Le.forEach(Rt,((e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}}));var yt=e=>{e=Le.isArray(e)?e:[e];const{length:t}=e;let n,r;for(let s=0;s<t&&(n=e[s],!(r=Le.isString(n)?Rt[n.toLowerCase()]:n));s++);if(!r){if(!1===r)throw new Fe(`Adapter ${n} is not supported by the environment`,"ERR_NOT_SUPPORT");throw new Error(Le.hasOwnProp(Rt,n)?`Adapter '${n}' is not available in the build`:`Unknown adapter '${n}'`)}if(!Le.isFunction(r))throw new TypeError("adapter is not a function");return r};function Et(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new mt(null,e)}function _t(e){Et(e),e.headers=ut.from(e.headers),e.data=lt.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return yt(e.adapter||rt.adapter)(e).then((function(t){return Et(e),t.data=lt.call(e,e.transformResponse,t),t.headers=ut.from(t.headers),t}),(function(t){return ht(t)||(Et(e),t&&t.response&&(t.response.data=lt.call(e,e.transformResponse,t.response),t.response.headers=ut.from(t.response.headers))),Promise.reject(t)}))}const At=e=>e instanceof ut?e.toJSON():e;function Tt(e,t){t=t||{};const n={};function r(e,t,n){return Le.isPlainObject(e)&&Le.isPlainObject(t)?Le.merge.call({caseless:n},e,t):Le.isPlainObject(t)?Le.merge({},t):Le.isArray(t)?t.slice():t}function s(e,t,n){return Le.isUndefined(t)?Le.isUndefined(e)?void 0:r(void 0,e,n):r(e,t,n)}function a(e,t){if(!Le.isUndefined(t))return r(void 0,t)}function i(e,t){return Le.isUndefined(t)?Le.isUndefined(e)?void 0:r(void 0,e):r(void 0,t)}function o(n,s,a){return a in t?r(n,s):a in e?r(void 0,n):void 0}const c={url:a,method:a,data:a,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,responseEncoding:i,validateStatus:o,headers:(e,t)=>s(At(e),At(t),!0)};return Le.forEach(Object.keys(Object.assign({},e,t)),(function(r){const a=c[r]||s,i=a(e[r],t[r],r);Le.isUndefined(i)&&a!==o||(n[r]=i)})),n}const bt="1.4.0",vt={};["object","boolean","number","function","string","symbol"].forEach(((e,t)=>{vt[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));const Ct={};vt.transitional=function(e,t,n){function r(e,t){return"[Axios v1.4.0] Transitional option '"+e+"'"+t+(n?". "+n:"")}return(n,s,a)=>{if(!1===e)throw new Fe(r(s," has been removed"+(t?" in "+t:"")),Fe.ERR_DEPRECATED);return t&&!Ct[s]&&(Ct[s]=!0,console.warn(r(s," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,s,a)}};var Ot={assertOptions:function(e,t,n){if("object"!=typeof e)throw new Fe("options must be an object",Fe.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let s=r.length;for(;s-- >0;){const a=r[s],i=t[a];if(i){const t=e[a],n=void 0===t||i(t,a,e);if(!0!==n)throw new Fe("option "+a+" must be "+n,Fe.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new Fe("Unknown option "+a,Fe.ERR_BAD_OPTION)}},validators:vt};const St=Ot.validators;class It{constructor(e){this.defaults=e,this.interceptors={request:new Ze,response:new Ze}}request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=Tt(this.defaults,t);const{transitional:n,paramsSerializer:r,headers:s}=t;let a;void 0!==n&&Ot.assertOptions(n,{silentJSONParsing:St.transitional(St.boolean),forcedJSONParsing:St.transitional(St.boolean),clarifyTimeoutError:St.transitional(St.boolean)},!1),null!=r&&(Le.isFunction(r)?t.paramsSerializer={serialize:r}:Ot.assertOptions(r,{encode:St.function,serialize:St.function},!0)),t.method=(t.method||this.defaults.method||"get").toLowerCase(),a=s&&Le.merge(s.common,s[t.method]),a&&Le.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete s[e]})),t.headers=ut.concat(a,s);const i=[];let o=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(o=o&&e.synchronous,i.unshift(e.fulfilled,e.rejected))}));const c=[];let d;this.interceptors.response.forEach((function(e){c.push(e.fulfilled,e.rejected)}));let u,l=0;if(!o){const e=[_t.bind(this),void 0];for(e.unshift.apply(e,i),e.push.apply(e,c),u=e.length,d=Promise.resolve(t);l<u;)d=d.then(e[l++],e[l++]);return d}u=i.length;let h=t;for(l=0;l<u;){const e=i[l++],t=i[l++];try{h=e(h)}catch(e){t.call(this,e);break}}try{d=_t.call(this,h)}catch(e){return Promise.reject(e)}for(l=0,u=c.length;l<u;)d=d.then(c[l++],c[l++]);return d}getUri(e){return Je(gt((e=Tt(this.defaults,e)).baseURL,e.url),e.params,e.paramsSerializer)}}Le.forEach(["delete","get","head","options"],(function(e){It.prototype[e]=function(t,n){return this.request(Tt(n||{},{method:e,url:t,data:(n||{}).data}))}})),Le.forEach(["post","put","patch"],(function(e){function t(t){return function(n,r,s){return this.request(Tt(s||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:n,data:r}))}}It.prototype[e]=t(),It.prototype[e+"Form"]=t(!0)}));var Nt=It;class Pt{constructor(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");let t;this.promise=new Promise((function(e){t=e}));const n=this;this.promise.then((e=>{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null})),this.promise.then=e=>{let t;const r=new Promise((e=>{n.subscribe(e),t=e})).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e((function(e,r,s){n.reason||(n.reason=new mt(e,r,s),t(n.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}static source(){let e;return{token:new Pt((function(t){e=t})),cancel:e}}}var kt=Pt;const Dt={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(Dt).forEach((([e,t])=>{Dt[t]=e}));var Ut=Dt;const xt=function e(t){const n=new Nt(t),r=re(Nt.prototype.request,n);return Le.extend(r,Nt.prototype,n,{allOwnKeys:!0}),Le.extend(r,n,null,{allOwnKeys:!0}),r.create=function(n){return e(Tt(t,n))},r}(rt);xt.Axios=Nt,xt.CanceledError=mt,xt.CancelToken=kt,xt.isCancel=ht,xt.VERSION=bt,xt.toFormData=He,xt.AxiosError=Fe,xt.Cancel=xt.CanceledError,xt.all=function(e){return Promise.all(e)},xt.spread=function(e){return function(t){return e.apply(null,t)}},xt.isAxiosError=function(e){return Le.isObject(e)&&!0===e.isAxiosError},xt.mergeConfig=Tt,xt.AxiosHeaders=ut,xt.formToJSON=e=>et(Le.isHTMLForm(e)?new FormData(e):e),xt.HttpStatusCode=Ut,xt.default=xt;var Mt=xt;const Lt="https://guardian.sandbox.imtbl.com".replace(/\/+$/,"");class Ft{basePath;axios;configuration;constructor(e,t=Lt,n=Mt){this.basePath=t,this.axios=n,e&&(this.configuration=e,this.basePath=e.basePath||this.basePath)}}class Bt extends Error{field;name="RequiredError";constructor(e,t){super(t),this.field=e}}const jt="https://example.com",qt=function(e,t,n){if(null==n)throw new Bt(t,`Required parameter ${t} was null or undefined when calling ${e}.`)},zt=async function(e,t){if(t&&t.accessToken){const n="function"==typeof t.accessToken?await t.accessToken():await t.accessToken;e.Authorization="Bearer "+n}};function Xt(e,t,n=""){"object"==typeof t?Array.isArray(t)?t.forEach((t=>Xt(e,t,n))):Object.keys(t).forEach((r=>Xt(e,t[r],`${n}${""!==n?".":""}${r}`))):e.has(n)?e.append(n,t):e.set(n,t)}const Gt=function(e,...t){const n=new URLSearchParams(e.search);Xt(n,t),e.search=n.toString()},Ht=function(e,t,n){const r="string"!=typeof e;return(r&&n&&n.isJsonMime?n.isJsonMime(t.headers["Content-Type"]):r)?JSON.stringify(void 0!==e?e:{}):e||""},$t=function(e){return e.pathname+e.search+e.hash},Vt=function(e,t,n,r){return(s=t,a=n)=>{const i={...e.options,url:(r?.basePath||a)+e.url};return s.request(i)}},Kt=function(e){const t=function(e){return{approvePendingMessage:async(t,n={})=>{qt("approvePendingMessage","messageID",t);const r="/guardian/v1/messages/{messageID}/approve".replace("{messageID}",encodeURIComponent(String(t))),s=new URL(r,jt);let a;e&&(a=e.baseOptions);const i={method:"POST",...a,...n},o={};await zt(o,e),Gt(s,{});let c=a&&a.headers?a.headers:{};return i.headers={...o,...c,...n.headers},{url:$t(s),options:i}},evaluateMessage:async(t,n={})=>{qt("evaluateMessage","messageEvaluationRequest",t);const r=new URL("/guardian/v1/messages/evaluate",jt);let s;e&&(s=e.baseOptions);const a={method:"POST",...s,...n},i={};await zt(i,e),i["Content-Type"]="application/json",Gt(r,{});let o=s&&s.headers?s.headers:{};return a.headers={...i,...o,...n.headers},a.data=Ht(t,a,e),{url:$t(r),options:a}},getMessageByID:async(t,n={})=>{qt("getMessageByID","messageID",t);const r="/guardian/v1/messages/{messageID}".replace("{messageID}",encodeURIComponent(String(t))),s=new URL(r,jt);let a;e&&(a=e.baseOptions);const i={method:"GET",...a,...n},o={};await zt(o,e),Gt(s,{});let c=a&&a.headers?a.headers:{};return i.headers={...o,...c,...n.headers},{url:$t(s),options:i}}}}(e);return{async approvePendingMessage(n,r){const s=await t.approvePendingMessage(n,r);return Vt(s,Mt,Lt,e)},async evaluateMessage(n,r){const s=await t.evaluateMessage(n,r);return Vt(s,Mt,Lt,e)},async getMessageByID(n,r){const s=await t.getMessageByID(n,r);return Vt(s,Mt,Lt,e)}}};class Wt extends Ft{approvePendingMessage(e,t){return Kt(this.configuration).approvePendingMessage(e.messageID,t).then((e=>e(this.axios,this.basePath)))}evaluateMessage(e,t){return Kt(this.configuration).evaluateMessage(e.messageEvaluationRequest,t).then((e=>e(this.axios,this.basePath)))}getMessageByID(e,t){return Kt(this.configuration).getMessageByID(e.messageID,t).then((e=>e(this.axios,this.basePath)))}}const Jt=function(e){const t=function(e){return{approvePendingTransaction:async(t,n,r={})=>{qt("approvePendingTransaction","payloadHash",t),qt("approvePendingTransaction","transactionApprovalRequest",n);const s="/guardian/v1/transactions/{payloadHash}/approve".replace("{payloadHash}",encodeURIComponent(String(t))),a=new URL(s,jt);let i;e&&(i=e.baseOptions);const o={method:"POST",...i,...r},c={};await zt(c,e),c["Content-Type"]="application/json",Gt(a,{});let d=i&&i.headers?i.headers:{};return o.headers={...c,...d,...r.headers},o.data=Ht(n,o,e),{url:$t(a),options:o}},evaluateTransaction:async(t,n,r={})=>{qt("evaluateTransaction","id",t),qt("evaluateTransaction","transactionEvaluationRequest",n);const s="/guardian/v1/transactions/{id}/evaluate".replace("{id}",encodeURIComponent(String(t))),a=new URL(s,jt);let i;e&&(i=e.baseOptions);const o={method:"POST",...i,...r},c={};await zt(c,e),c["Content-Type"]="application/json",Gt(a,{});let d=i&&i.headers?i.headers:{};return o.headers={...c,...d,...r.headers},o.data=Ht(n,o,e),{url:$t(a),options:o}},getTransactionByID:async(t,n,r,s={})=>{qt("getTransactionByID","transactionID",t),qt("getTransactionByID","chainType",n);const a="/guardian/v1/transactions/{transactionID}".replace("{transactionID}",encodeURIComponent(String(t))),i=new URL(a,jt);let o;e&&(o=e.baseOptions);const c={method:"GET",...o,...s},d={},u={};await zt(d,e),void 0!==n&&(u.chainType=n),void 0!==r&&(u.chainID=r),Gt(i,u);let l=o&&o.headers?o.headers:{};return c.headers={...d,...l,...s.headers},{url:$t(i),options:c}}}}(e);return{async approvePendingTransaction(n,r,s){const a=await t.approvePendingTransaction(n,r,s);return Vt(a,Mt,Lt,e)},async evaluateTransaction(n,r,s){const a=await t.evaluateTransaction(n,r,s);return Vt(a,Mt,Lt,e)},async getTransactionByID(n,r,s,a){const i=await t.getTransactionByID(n,r,s,a);return Vt(i,Mt,Lt,e)}}};class Zt extends Ft{approvePendingTransaction(e,t){return Jt(this.configuration).approvePendingTransaction(e.payloadHash,e.transactionApprovalRequest,t).then((e=>e(this.axios,this.basePath)))}evaluateTransaction(e,t){return Jt(this.configuration).evaluateTransaction(e.id,e.transactionEvaluationRequest,t).then((e=>e(this.axios,this.basePath)))}getTransactionByID(e,t){return Jt(this.configuration).getTransactionByID(e.transactionID,e.chainType,e.chainID,t).then((e=>e(this.axios,this.basePath)))}}class Qt{apiKey;username;password;accessToken;basePath;baseOptions;formDataCtor;constructor(e={}){this.apiKey=e.apiKey,this.username=e.username,this.password=e.password,this.accessToken=e.accessToken,this.basePath=e.basePath,this.baseOptions=e.baseOptions,this.formDataCtor=e.formDataCtor}isJsonMime(e){const t=new RegExp("^(application/json|[^;/ \t]+/[^;/ \t]+[+]json)[ \t]*(;.*)?$","i");return null!==e&&(t.test(e)||"application/json-patch+json"===e.toLowerCase())}}const Yt="starkex",en="evm";function tn(e){const t=-1!==new w(e,16).cmp(new w(27))?new w(e,16).sub(new w(27)).toNumber():new w(e,16).toNumber();return e.trim()?t:void 0}async function nn(e,t){const n=function(e,t=64){const n=R.removeHexPrefix(e);return{r:new w(n.substring(0,t),"hex"),s:new w(n.substring(t,2*t),"hex"),recoveryParam:tn(n.substring(2*t,2*t+2))}}(await t.signMessage(e));return r=n,R.addHexPrefix(R.padLeft(r.r.toString(16),64)+R.padLeft(r.s.toString(16),64)+R.padLeft(r.recoveryParam?.toString(16)||"",2));var r}function rn(e){switch(e.type){case"ERC721":return{type:"ERC721",data:{token_id:e.tokenId,token_address:e.tokenAddress}};case"ERC20":return{type:"ERC20",data:{token_address:e.tokenAddress}};default:return{type:"ETH",data:{decimals:18}}}}var sn;!function(e){e.AUTHENTICATION_ERROR="AUTHENTICATION_ERROR",e.INVALID_CONFIGURATION="INVALID_CONFIGURATION",e.WALLET_CONNECTION_ERROR="WALLET_CONNECTION_ERROR",e.NOT_LOGGED_IN_ERROR="NOT_LOGGED_IN_ERROR",e.SILENT_LOGIN_ERROR="SILENT_LOGIN_ERROR",e.REFRESH_TOKEN_ERROR="REFRESH_TOKEN_ERROR",e.USER_REGISTRATION_ERROR="USER_REGISTRATION_ERROR",e.USER_NOT_REGISTERED_ERROR="USER_NOT_REGISTERED_ERROR",e.LOGOUT_ERROR="LOGOUT_ERROR",e.TRANSFER_ERROR="TRANSFER_ERROR",e.CREATE_ORDER_ERROR="CREATE_ORDER_ERROR",e.CANCEL_ORDER_ERROR="CANCEL_ORDER_ERROR",e.EXCHANGE_TRANSFER_ERROR="EXCHANGE_TRANSFER_ERROR",e.CREATE_TRADE_ERROR="CREATE_TRADE_ERROR",e.OPERATION_NOT_SUPPORTED_ERROR="OPERATION_NOT_SUPPORTED_ERROR"}(sn||(sn={}));class an extends Error{type;constructor(e,t){super(e),this.type=t}}const on=async(e,n)=>{try{return await e()}catch(e){let r;throw r=t(e)&&e.response?.data&&function(e){return"code"in e&&"message"in e}(e.response.data)?e.response.data.message:e.message,new an(r,n)}};var cn,dn;!function(e){e[e.IMTBL_ZKEVM_MAINNET=13371]="IMTBL_ZKEVM_MAINNET",e[e.IMTBL_ZKEVM_TESTNET=13473]="IMTBL_ZKEVM_TESTNET",e[e.IMTBL_ZKEVM_DEVNET=13433]="IMTBL_ZKEVM_DEVNET",e[e.ETHEREUM=1]="ETHEREUM",e[e.SEPOLIA=11155111]="SEPOLIA"}(cn||(cn={})),function(e){e.ETHEREUM="Ethereum",e.SEPOLIA="Sepolia",e.IMTBL_ZKEVM_TESTNET="Immutable zkEVM Test",e.IMTBL_ZKEVM_DEVNET="Immutable zkEVM Dev",e.IMTBL_ZKEVM_MAINNET="Immutable zkEVM"}(dn||(dn={}));const un="passport_credentials",ln="pkce_state",hn="pkce_verifier";class mn{saveCredentials(e){if(!this.areValid(e))throw Error("Invalid credentials.");localStorage.setItem(un,JSON.stringify(e))}getCredentials(){const e=localStorage.getItem(un);return e?JSON.parse(e):null}areValid(e){if(e){const t=this.isTokenValid(e.access_token),n=this.isTokenValid(e.id_token);return t&&n}return!1}isTokenValid(e){try{const t=d(e).exp??0;return t>Date.now()/1e3+3600}catch(e){return!1}}clearCredentials(){localStorage.removeItem(un)}savePKCEData(e){localStorage.setItem(ln,e.state),localStorage.setItem(hn,e.verifier)}getPKCEData(){const e=localStorage.getItem(ln),t=localStorage.getItem(hn);return e&&t?{state:e,verifier:t}:null}}function pn(e){const{id_token:t,expired:n}=e;return!!n||function(e){if(!e)return!1;const t=d(e),n=Math.floor(Date.now()/1e3);return t.exp<n}(t)}const gn={headers:{"Content-Type":"application/x-www-form-urlencoded"}};function fn(e){return new Promise((t=>{setTimeout(t,e)}))}class wn{userManager;config;deviceCredentialsManager;logoutMode;refreshingPromise=null;constructor(e){this.config=e,this.userManager=new i((({oidcConfiguration:e,authenticationDomain:t})=>{const n="undefined"!=typeof window?window.localStorage:new o,r=new c({store:n}),s={authority:t,redirect_uri:e.redirectUri,popup_redirect_uri:e.redirectUri,client_id:e.clientId,metadata:{authorization_endpoint:`${t}/authorize`,token_endpoint:`${t}/oauth/token`,userinfo_endpoint:`${t}/userinfo`,end_session_endpoint:`${t}/v2/logout?returnTo=${encodeURIComponent(e.logoutRedirectUri)}&client_id=${e.clientId}`},mergeClaims:!0,loadUserInfo:!0,scope:e.scope,userStore:r};return e.audience&&(s.extraQueryParams={audience:e.audience}),s})(e)),this.deviceCredentialsManager=new mn,this.logoutMode=e.oidcConfiguration.logoutMode||"redirect"}static mapOidcUserToDomainModel=e=>{const t=e.profile?.passport,n={expired:e.expired,idToken:e.id_token,accessToken:e.access_token,refreshToken:e.refresh_token,profile:{sub:e.profile.sub,email:e.profile.email,nickname:e.profile.nickname}};return t?.imx_eth_address&&(n.imx={ethAddress:t.imx_eth_address,starkAddress:t.imx_stark_address,userAdminAddress:t.imx_user_admin_address}),t?.zkevm_eth_address&&(n.zkEvm={ethAddress:t?.zkevm_eth_address,userAdminAddress:t?.zkevm_user_admin_address}),n};static mapDeviceTokenResponseToDomainUserModel=e=>{const t=d(e.id_token),n={idToken:e.id_token,accessToken:e.access_token,refreshToken:e.refresh_token,profile:{sub:t.sub,email:t.email,nickname:t.nickname}};return t?.passport?.imx_eth_address&&(n.imx={ethAddress:t.passport.imx_eth_address,starkAddress:t.passport.imx_stark_address,userAdminAddress:t.passport.imx_user_admin_address}),t?.passport?.zkevm_eth_address&&(n.zkEvm={ethAddress:t?.passport?.zkevm_eth_address,userAdminAddress:t?.passport?.zkevm_user_admin_address}),n};async login(){return on((async()=>{const e=await this.userManager.signinPopup({popupWindowFeatures:{width:410,height:450}});return wn.mapOidcUserToDomainModel(e)}),sn.AUTHENTICATION_ERROR)}async loginCallback(){return on((async()=>this.userManager.signinPopupCallback()),sn.AUTHENTICATION_ERROR)}async loginWithDeviceFlow(){return on((async()=>{const t=await e.post(`${this.config.authenticationDomain}/oauth/device/code`,{client_id:this.config.oidcConfiguration.clientId,scope:this.config.oidcConfiguration.scope,audience:this.config.oidcConfiguration.audience},gn);return{code:t.data.user_code,deviceCode:t.data.device_code,url:t.data.verification_uri_complete,interval:t.data.interval}}),sn.AUTHENTICATION_ERROR)}async connectImxDeviceFlow(t,n,r){return on((async()=>{const s=Date.now();for(;;){if(null!=r&&Date.now()-s>r)throw new Error("Timed out");await fn(1e3*n);try{const e=await this.getDeviceFlowToken(t),n=wn.mapDeviceTokenResponseToDomainUserModel(e);return this.deviceCredentialsManager.saveCredentials(e),n}catch(t){if(!e.isAxiosError(t))throw t;{const e=t.response?.data;switch(e.error){case"authorization_pending":case"slow_down":break;case"expired_token":throw new Error("Token expired, please log in again");case"access_denied":throw new Error("User denied access");default:throw new Error("Error getting token")}}}}throw new Error("Failed to get credentials")}),sn.AUTHENTICATION_ERROR)}async getDeviceFlowToken(t){return(await e.post(`${this.config.authenticationDomain}/oauth/token`,{client_id:this.config.oidcConfiguration.clientId,grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:t},gn)).data}static base64URLEncode(e){return e.toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}static sha256(e){return u.createHash("sha256").update(e).digest()}getPKCEAuthorizationUrl(){const e=wn.base64URLEncode(u.randomBytes(32)),t=wn.base64URLEncode(wn.sha256(e)),n=wn.base64URLEncode(u.randomBytes(32));return this.deviceCredentialsManager.savePKCEData({state:n,verifier:e}),`${this.config.authenticationDomain}/authorize?response_type=code&code_challenge=${t}&code_challenge_method=S256&client_id=${this.config.oidcConfiguration.clientId}&redirect_uri=${this.config.oidcConfiguration.redirectUri}&scope=${this.config.oidcConfiguration.scope}&state=${n}&audience=${this.config.oidcConfiguration.audience}`}async connectImxPKCEFlow(e,t){return on((async()=>{const n=this.deviceCredentialsManager.getPKCEData();if(!n)throw new Error("No code verifier or state for PKCE");if(t!==n.state)throw new Error("Provided state does not match stored state");const r=await this.getPKCEToken(e,n.verifier),s=wn.mapDeviceTokenResponseToDomainUserModel(r);return this.deviceCredentialsManager.saveCredentials(r),s}),sn.AUTHENTICATION_ERROR)}async getPKCEToken(t,n){return(await e.post(`${this.config.authenticationDomain}/oauth/token`,{client_id:this.config.oidcConfiguration.clientId,grant_type:"authorization_code",code_verifier:n,code:t,redirect_uri:this.config.oidcConfiguration.redirectUri},gn)).data}async connectImxWithCredentials(e){return on((async()=>{if(this.deviceCredentialsManager.areValid(e))return wn.mapDeviceTokenResponseToDomainUserModel(e);const t=e?.refresh_token??null;if(t){return await this.refreshToken(t)}return null}),sn.AUTHENTICATION_ERROR)}async refreshToken(t){const n=(await e.post(`${this.config.authenticationDomain}/oauth/token`,{client_id:this.config.oidcConfiguration.clientId,grant_type:"refresh_token",refresh_token:t},gn)).data;return wn.mapDeviceTokenResponseToDomainUserModel(n)}async logout(){return on((async()=>"silent"===this.logoutMode?this.userManager.signoutSilent():this.userManager.signoutRedirect()),sn.LOGOUT_ERROR)}async logoutSilentCallback(e){return this.userManager.signoutSilentCallback(e)}async logoutDeviceFlow(){return on((async()=>{this.deviceCredentialsManager.clearCredentials()}),sn.LOGOUT_ERROR)}async getAuthenticatedUser(){const e=await this.userManager.getUser();return e?pn(e)?e.refresh_token?this.refreshTokenAndUpdatePromise():null:wn.mapOidcUserToDomainModel(e):null}async forceUserRefresh(){return this.refreshTokenAndUpdatePromise()}async refreshTokenAndUpdatePromise(){return this.refreshingPromise||(this.refreshingPromise=new Promise((async(e,t)=>{try{const t=await this.userManager.signinSilent();if(t)return void e(wn.mapOidcUserToDomainModel(t));e(null)}catch(e){t(e)}finally{this.refreshingPromise=null}}))),this.refreshingPromise}async getUser(){return on((async()=>{const e=await this.getAuthenticatedUser();if(e)return e;const t=this.deviceCredentialsManager.getCredentials();return t?wn.mapDeviceTokenResponseToDomainUserModel(t):null}),sn.NOT_LOGGED_IN_ERROR)}async getUserDeviceFlow(){return on((async()=>{const e=this.deviceCredentialsManager.getCredentials();return e?wn.mapDeviceTokenResponseToDomainUserModel(e):null}),sn.NOT_LOGGED_IN_ERROR)}checkStoredDeviceFlowCredentials(){return this.deviceCredentialsManager.getCredentials()}}class Rn{config;lazyMagicClient;constructor(e){this.config=e,"undefined"!=typeof window&&(this.lazyMagicClient=((e,t)=>e().then(t))((()=>new Promise((e=>{if("complete"===window.document.readyState)e();else{const t=()=>{"complete"===window.document.readyState&&(e(),window.document.removeEventListener("readystatechange",t))};window.document.addEventListener("readystatechange",t)}}))),(()=>{const e=new l(this.config.magicPublishableApiKey,{extensions:[new h],network:this.config.network});return e.preload(),e})))}get magicClient(){if(!this.lazyMagicClient)throw new Error("Cannot perform this action outside of the browser");return this.lazyMagicClient}async login(e){return on((async()=>{const t=await this.magicClient;return await t.openid.loginWithOIDC({jwt:e,providerId:this.config.magicProviderId}),t.rpcProvider}),sn.WALLET_CONNECTION_ERROR)}async logout(){const e=await this.magicClient;e.user&&await e.user.logout()}}const yn=1e3,En=3,_n=async(e,t)=>{const{retries:n=En,interval:r=yn,finalErr:s=Error("Retry failed"),finallyFn:a=(()=>{})}=t||{};try{return await e()}catch(t){return n<=0?Promise.reject(s):(await(i=r,new Promise((e=>{setTimeout((()=>e()),i)}))),_n(e,{retries:n-1,finalErr:s,finallyFn:a}))}finally{n<=0&&a()}var i};var An,Tn;!function(e){e[e.USER_REJECTED_REQUEST=4001]="USER_REJECTED_REQUEST",e[e.UNAUTHORIZED=4100]="UNAUTHORIZED",e[e.UNSUPPORTED_METHOD=4200]="UNSUPPORTED_METHOD",e[e.DISCONNECTED=4900]="DISCONNECTED"}(An||(An={})),function(e){e[e.RPC_SERVER_ERROR=-32e3]="RPC_SERVER_ERROR",e[e.INVALID_REQUEST=-32600]="INVALID_REQUEST",e[e.METHOD_NOT_FOUND=-32601]="METHOD_NOT_FOUND",e[e.INVALID_PARAMS=-32602]="INVALID_PARAMS",e[e.INTERNAL_ERROR=-32603]="INTERNAL_ERROR",e[e.PARSE_ERROR=-32700]="PARSE_ERROR",e[e.TRANSACTION_REJECTED=-32003]="TRANSACTION_REJECTED"}(Tn||(Tn={}));class bn extends Error{message;code;constructor(e,t){super(t),this.message=t,this.code=e}}const vn="Transaction requires confirmation but this functionality is not supported in this environment. Please contact Immutable support if you need to enable this feature.",Cn=e=>g.from(e).toString();class On{transactionAPI;messageAPI;confirmationScreen;crossSdkBridgeEnabled;constructor({confirmationScreen:e,config:t}){const n=new Qt({basePath:t.imxPublicApiDomain});this.confirmationScreen=e,this.crossSdkBridgeEnabled=t.crossSdkBridgeEnabled,this.messageAPI=new Wt(n),this.transactionAPI=new Zt(n)}withConfirmationScreen(e){return t=>this.withConfirmationScreenTask(e)(t)()}withConfirmationScreenTask(e){return t=>async()=>{this.confirmationScreen.loading(e);try{return await t()}catch(e){throw this.confirmationScreen.closeWindow(),e}}}withDefaultConfirmationScreenTask(e){return this.withConfirmationScreenTask()(e)}async evaluateImxTransaction({payloadHash:e,user:t}){const n={Authorization:`Bearer ${t.accessToken}`};if(!(await _n((async()=>this.transactionAPI.getTransactionByID({transactionID:e,chainType:"starkex"},{headers:n})),{finallyFn:()=>{this.confirmationScreen.closeWindow()}})).data.id)throw new Error("Transaction doesn't exists");const r=await this.transactionAPI.evaluateTransaction({id:e,transactionEvaluationRequest:{chainType:"starkex"}},{headers:n}),{confirmationRequired:s}=r.data;if(s){if(this.crossSdkBridgeEnabled)throw new Error(vn);if(!(await this.confirmationScreen.requestConfirmation(e,t.imx.ethAddress,Yt)).confirmed)throw new Error("Transaction rejected by user")}else this.confirmationScreen.closeWindow()}async evaluateEVMTransaction({chainId:e,nonce:t,user:n,metaTransactions:r}){const s={Authorization:`Bearer ${n.accessToken}`},a=(e=>{try{return e.map((e=>({delegateCall:!0===e.delegateCall,revertOnError:!0===e.revertOnError,gasLimit:e.gasLimit?Cn(e.gasLimit):"0",target:e.to??f.constants.AddressZero,value:e.value?Cn(e.value):"0",data:e.data?e.data.toString():"0x"})))}catch(e){const t=e instanceof Error?e.message:String(e);throw new bn(Tn.INVALID_PARAMS,`Transaction failed to parsing: ${t}`)}})(r);try{return(await this.transactionAPI.evaluateTransaction({id:"evm",transactionEvaluationRequest:{chainType:"evm",chainId:e,transactionData:{nonce:t,userAddress:n.zkEvm.ethAddress,metaTransactions:a}}},{headers:s})).data}catch(e){const t=e instanceof Error?e.message:String(e);throw new bn(Tn.INTERNAL_ERROR,`Transaction failed to validate with error: ${t}`)}}async validateEVMTransaction({chainId:e,nonce:t,user:n,metaTransactions:r}){const s=await this.evaluateEVMTransaction({chainId:e,nonce:t,user:n,metaTransactions:r}),{confirmationRequired:a,transactionId:i}=s;if(a&&this.crossSdkBridgeEnabled)throw new bn(Tn.TRANSACTION_REJECTED,vn);if(a&&i){if(!(await this.confirmationScreen.requestConfirmation(i,n.zkEvm.ethAddress,en,e)).confirmed)throw new bn(Tn.TRANSACTION_REJECTED,"Transaction rejected by user")}else this.confirmationScreen.closeWindow()}async evaluateMessage({chainID:e,payload:t,user:n}){try{return(await this.messageAPI.evaluateMessage({messageEvaluationRequest:{chainID:e,payload:t}},{headers:{Authorization:`Bearer ${n.accessToken}`}})).data}catch(e){const t=e instanceof Error?e.message:String(e);throw new bn(Tn.INTERNAL_ERROR,`Message failed to validate with error: ${t}`)}}async validateMessage({chainID:e,payload:t,user:n}){const{messageId:r,confirmationRequired:s}=await this.evaluateMessage({chainID:e,payload:t,user:n});if(s&&this.crossSdkBridgeEnabled)throw new bn(Tn.TRANSACTION_REJECTED,vn);if(s&&r){if(!(await this.confirmationScreen.requestMessageConfirmation(r,n.zkEvm.ethAddress)).confirmed)throw new bn(Tn.TRANSACTION_REJECTED,"Signature rejected by user")}else this.confirmationScreen.closeWindow()}}var Sn,In;!function(e){e.LOGGED_OUT="loggedOut"}(Sn||(Sn={})),function(e){e.PRODUCTION="mainnet",e.SANDBOX="sepolia"}(In||(In={}));const Nn="ERC721";const Pn="ERC721";async function kn(e){await _n((async()=>{const t=await e.forceUserRefresh();return t?.imx?t:Promise.reject(new Error("user wallet addresses not exist"))}))}async function Dn(t,n,r,s,a){return on((async()=>{try{const e=await async function({ethSigner:e,starkSigner:t,usersApi:n},r){const[s,a]=await Promise.all([e.getAddress(),t.getAddress()]),i=await n.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:s,stark_key:a}}),{signable_message:o,payload_hash:c}=i.data,[d,u]=await Promise.all([nn(o,e),t.signMessage(c)]);return(await n.registerPassportUser({authorization:`Bearer ${r}`,registerPassportUserRequest:{eth_signature:d,ether_key:s,stark_signature:u,stark_key:a}})).data}({ethSigner:t,starkSigner:n,usersApi:a},r.accessToken);return await kn(s),e}catch(t){if(e.isAxiosError(t)&&409===t.status)return await kn(s),{tx_hash:""};throw t}}),sn.USER_REGISTRATION_ERROR)}class Un{authManager;immutableXClient;guardianClient;magicAdapter;signers;signerInitialisationError;constructor({authManager:e,immutableXClient:t,confirmationScreen:n,config:r,passportEventEmitter:s,magicAdapter:a}){this.authManager=e,this.immutableXClient=t,this.guardianClient=new On({confirmationScreen:n,config:r}),this.magicAdapter=a,this.initialiseSigners(),s.on(Sn.LOGGED_OUT,this.handleLogout)}handleLogout=()=>{this.signers=void 0};async initialiseSigners(){const e=async()=>{const e=await this.authManager.getUser(),t=await this.magicAdapter.login(e.idToken),n=new p(t).getSigner();return{ethSigner:n,starkSigner:await(async e=>on((async()=>{const t=await s(e);return a(t)}),sn.WALLET_CONNECTION_ERROR))(n)}};this.signers=new Promise((async t=>{try{t(await e())}catch(e){this.signerInitialisationError=e,t(void 0)}}))}async getAuthenticatedUserAndSigners(){const e=await this.authManager.getUser();if(!e||!this.signers)throw new an("User has been logged out",sn.NOT_LOGGED_IN_ERROR);const t=await this.signers;if(void 0===t){if(void 0!==this.signerInitialisationError)throw this.signerInitialisationError;throw new Error("Signers failed to initialise")}return{user:e,...t}}async getRegisteredImxUserAndSigners(){const{user:e,starkSigner:t,ethSigner:n}=await this.getAuthenticatedUserAndSigners();if(r=e,void 0===r?.imx)throw new an("User has not been registered with StarkEx",sn.USER_NOT_REGISTERED_ERROR);var r;return{user:e,starkSigner:t,ethSigner:n}}async transfer(e){const{user:t,starkSigner:n}=await this.getRegisteredImxUserAndSigners();return async function({request:e,transfersApi:t,starkSigner:n,user:r,guardianClient:s}){return on(s.withDefaultConfirmationScreenTask((async()=>{const a=e.type===Pn?"1":e.amount,i={sender:r.imx.ethAddress,token:rn(e),amount:a,receiver:e.receiver},o={Authorization:`Bearer ${r.accessToken}`},c=await t.getSignableTransferV1({getSignableTransferRequest:i},{headers:o});await s.evaluateImxTransaction({user:r,payloadHash:c.data.payload_hash});const d=c.data,{payload_hash:u}=d,l=await n.signMessage(u),h=await n.getAddress(),m={createTransferRequest:{sender_stark_key:d.sender_stark_key||h,sender_vault_id:d.sender_vault_id,receiver_stark_key:d.receiver_stark_key,receiver_vault_id:d.receiver_vault_id,asset_id:d.asset_id,amount:d.amount,nonce:d.nonce,expiration_timestamp:d.expiration_timestamp,stark_signature:l}},{data:p}=await t.createTransferV1(m,{headers:o});return{sent_signature:p.sent_signature,status:p.status?.toString(),time:p.time,transfer_id:p.transfer_id}})),sn.TRANSFER_ERROR)}({request:e,user:t,starkSigner:n,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.guardianClient})}async registerOffchain(){const{user:e,ethSigner:t,starkSigner:n}=await this.getAuthenticatedUserAndSigners();return await Dn(t,n,e,this.authManager,this.immutableXClient.usersApi)}async isRegisteredOffchain(){const{user:e}=await this.getAuthenticatedUserAndSigners();return!!e.imx}isRegisteredOnchain(){throw new an("Operation not supported",sn.OPERATION_NOT_SUPPORTED_ERROR)}async createOrder(e){const{user:t,starkSigner:n}=await this.getRegisteredImxUserAndSigners();return async function({starkSigner:e,user:t,request:n,ordersApi:r,guardianClient:s}){return on(s.withDefaultConfirmationScreenTask((async()=>{const{ethAddress:a}=t.imx,i=n.sell.type===Nn?"1":n.sell.amount,o=n.buy.type===Nn?"1":n.buy.amount,c={Authorization:`Bearer ${t.accessToken}`},d={user:a,amount_buy:o,token_buy:rn(n.buy),amount_sell:i,token_sell:rn(n.sell),fees:n.fees,split_fees:!0,expiration_timestamp:n.expiration_timestamp},u=await r.getSignableOrder({getSignableOrderRequestV3:d},{headers:c});await s.evaluateImxTransaction({user:t,payloadHash:u.data.payload_hash});const{payload_hash:l}=u.data,h=await e.signMessage(l),m=u.data,p={createOrderRequest:{include_fees:!0,fees:n.fees,stark_signature:h,amount_buy:m.amount_buy,amount_sell:m.amount_sell,asset_id_buy:m.asset_id_buy,asset_id_sell:m.asset_id_sell,expiration_timestamp:m.expiration_timestamp,nonce:m.nonce,stark_key:m.stark_key,vault_id_buy:m.vault_id_buy,vault_id_sell:m.vault_id_sell}};return{...(await r.createOrderV3(p,{headers:c})).data}})),sn.CREATE_ORDER_ERROR)}({request:e,user:t,starkSigner:n,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.guardianClient})}async cancelOrder(e){const{user:t,starkSigner:n}=await this.getRegisteredImxUserAndSigners();return async function({user:e,starkSigner:t,request:n,ordersApi:r,guardianClient:s}){return on(s.withDefaultConfirmationScreenTask((async()=>{const a={order_id:n.order_id},i={Authorization:`Bearer ${e.accessToken}`},o=await r.getSignableCancelOrderV3({getSignableCancelOrderRequest:a},{headers:i});await s.evaluateImxTransaction({user:e,payloadHash:o.data.payload_hash});const{payload_hash:c}=o.data,d=await t.signMessage(c),u=await r.cancelOrderV3({id:n.order_id.toString(),cancelOrderRequest:{order_id:n.order_id,stark_signature:d}},{headers:i});return{order_id:u.data.order_id,status:u.data.status}})),sn.CANCEL_ORDER_ERROR)}({request:e,user:t,starkSigner:n,ordersApi:this.immutableXClient.ordersApi,guardianClient:this.guardianClient})}async createTrade(e){const{user:t,starkSigner:n}=await this.getRegisteredImxUserAndSigners();return async function({request:e,tradesApi:t,user:n,starkSigner:r,guardianClient:s}){return on(s.withDefaultConfirmationScreenTask((async()=>{const{ethAddress:a}=n.imx,i={expiration_timestamp:e.expiration_timestamp,fees:e.fees,order_id:e.order_id,user:a},o={Authorization:`Bearer ${n.accessToken}`},c=await t.getSignableTrade({getSignableTradeRequest:i},{headers:o});await s.evaluateImxTransaction({user:n,payloadHash:c.data.payload_hash});const{payload_hash:d}=c.data,u=await r.signMessage(d),{data:l}=c,h={createTradeRequest:{include_fees:!0,fees:e?.fees,stark_signature:u,order_id:e?.order_id,fee_info:l.fee_info,amount_buy:l.amount_buy,amount_sell:l.amount_sell,asset_id_buy:l.asset_id_buy,asset_id_sell:l.asset_id_sell,expiration_timestamp:l.expiration_timestamp,nonce:l.nonce,stark_key:l.stark_key,vault_id_buy:l.vault_id_buy,vault_id_sell:l.vault_id_sell}},{data:m}=await t.createTradeV3(h,{headers:o});return m})),sn.CREATE_TRADE_ERROR)}({request:e,user:t,starkSigner:n,tradesApi:this.immutableXClient.tradesApi,guardianClient:this.guardianClient})}async batchNftTransfer(e){const{user:t,starkSigner:n}=await this.getRegisteredImxUserAndSigners();return async function({user:e,starkSigner:t,request:n,transfersApi:r,guardianClient:s}){return on(s.withConfirmationScreenTask({width:480,height:784})((async()=>{const{ethAddress:a}=e.imx,i=n.map((e=>({amount:"1",token:rn({type:Pn,tokenId:e.tokenId,tokenAddress:e.tokenAddress}),receiver:e.receiver}))),o={Authorization:`Bearer ${e.accessToken}`},c=await r.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:a,signable_requests:i}},{headers:o});await s.evaluateImxTransaction({user:e,payloadHash:c.data.signable_responses[0]?.payload_hash});const d=await Promise.all(c.data.signable_responses.map((async e=>{const n=await t.signMessage(e.payload_hash);return{sender_vault_id:e.sender_vault_id,receiver_stark_key:e.receiver_stark_key,receiver_vault_id:e.receiver_vault_id,asset_id:e.asset_id,amount:e.amount,nonce:e.nonce,expiration_timestamp:e.expiration_timestamp,stark_signature:n}}))),u={sender_stark_key:c.data.sender_stark_key,requests:d},l=await r.createTransfer({createTransferRequestV2:u},{headers:o});return{transfer_ids:l?.data.transfer_ids}})),sn.TRANSFER_ERROR)}({request:e,user:t,starkSigner:n,transfersApi:this.immutableXClient.transfersApi,guardianClient:this.guardianClient})}async exchangeTransfer(e){const{user:t,starkSigner:n}=await this.getRegisteredImxUserAndSigners();return async function({user:e,starkSigner:t,request:n,exchangesApi:r}){return on((async()=>{const{ethAddress:s}=e.imx,a=n.amount,i=await r.getExchangeSignableTransfer({id:n.transactionID,getSignableTransferRequest:{sender:s,token:rn(n),amount:a,receiver:n.receiver}}),o=await t.getAddress(),{payload_hash:c}=i.data,d=await t.signMessage(c),u={sender_stark_key:i.data.sender_stark_key||o,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:d},l={Authorization:`Bearer ${e.accessToken}`},h=await r.createExchangeTransfer({id:n.transactionID,createTransferRequest:u},{headers:l});return{sent_signature:h?.data.sent_signature,status:h?.data.status?.toString(),time:h?.data.time,transfer_id:h?.data.transfer_id}}),sn.EXCHANGE_TRANSFER_ERROR)}({request:e,user:t,starkSigner:n,exchangesApi:this.immutableXClient.exchangeApi})}deposit(e){throw new an("Operation not supported",sn.OPERATION_NOT_SUPPORTED_ERROR)}prepareWithdrawal(e){throw new an("Operation not supported",sn.OPERATION_NOT_SUPPORTED_ERROR)}completeWithdrawal(e,t){throw new an("Operation not supported",sn.OPERATION_NOT_SUPPORTED_ERROR)}async getAddress(){const{user:e}=await this.getRegisteredImxUserAndSigners();return Promise.resolve(e.imx.ethAddress)}}class xn{authManager;config;confirmationScreen;immutableXClient;magicAdapter;passportEventEmitter;constructor({authManager:e,config:t,confirmationScreen:n,immutableXClient:r,magicAdapter:s,passportEventEmitter:a}){this.authManager=e,this.config=t,this.confirmationScreen=n,this.immutableXClient=r,this.magicAdapter=s,this.passportEventEmitter=a}async getProvider(){let e=null;try{e=await this.authManager.getUser()}catch(e){console.warn(e)}return e||(e=await this.authManager.login()),this.createProviderInstance(e)}async getProviderSilent(){const e=await this.authManager.getUser();return e?this.createProviderInstance(e):null}async getProviderWithDeviceFlow(e,t,n){const r=await this.authManager.connectImxDeviceFlow(e,t,n);return this.createProviderInstance(r)}async getProviderWithPKCEFlow(e,t){const n=await this.authManager.connectImxPKCEFlow(e,t);return this.createProviderInstance(n)}async getProviderWithCredentials(e){const t=await this.authManager.connectImxWithCredentials(e);return t?this.createProviderInstance(t):null}async createProviderInstance(e){if(!e.idToken)throw new an("Failed to initialise",sn.WALLET_CONNECTION_ERROR);return new Un({config:this.config,authManager:this.authManager,immutableXClient:this.immutableXClient,confirmationScreen:this.confirmationScreen,passportEventEmitter:this.passportEventEmitter,magicAdapter:this.magicAdapter})}}const Mn=(e,t,n)=>{const r=t.map((t=>!e[t]&&t)).filter((e=>e)).join(", ");if(""!==r){throw new an(n?`${n} - ${r} cannot be null`:`${r} cannot be null`,sn.INVALID_CONFIGURATION)}};class Ln{network;authenticationDomain;passportDomain;imxPublicApiDomain;magicPublishableApiKey;magicProviderId;oidcConfiguration;baseConfig;zkEvmRpcUrl;relayerUrl;multiRollupConfig;crossSdkBridgeEnabled;constructor({baseConfig:e,overrides:t,crossSdkBridgeEnabled:n,...r}){if(Mn(r,["clientId","logoutRedirectUri","redirectUri"]),this.oidcConfiguration=r,this.baseConfig=e,this.crossSdkBridgeEnabled=n||!1,t)Mn(t,["network","authenticationDomain","passportDomain","magicPublishableApiKey","magicProviderId","zkEvmRpcUrl","relayerUrl","imxPublicApiDomain","indexerMrBasePath","orderBookMrBasePath","passportMrBasePath"],"overrides"),this.network=t.network,this.authenticationDomain=t.authenticationDomain,this.passportDomain=t.passportDomain,this.imxPublicApiDomain=t.imxPublicApiDomain,this.magicPublishableApiKey=t.magicPublishableApiKey,this.magicProviderId=t.magicProviderId,this.zkEvmRpcUrl=t.zkEvmRpcUrl,this.relayerUrl=t.relayerUrl,this.multiRollupConfig={indexer:W({basePath:t.indexerMrBasePath}),orderBook:W({basePath:t.orderBookMrBasePath}),passport:W({basePath:t.passportMrBasePath})};else switch(e.environment){case Q.PRODUCTION:this.network=In.PRODUCTION,this.authenticationDomain="https://auth.immutable.com",this.magicPublishableApiKey="pk_live_10F423798A540ED7",this.magicProviderId="fSMzaRQ4O7p4fttl7pCyGVtJS_G70P8SNsLXtPPGHo0=",this.passportDomain="https://passport.immutable.com",this.imxPublicApiDomain="https://api.immutable.com",this.zkEvmRpcUrl="",this.relayerUrl="https://api.immutable.com/relayer-mr",this.multiRollupConfig=J();break;case Q.SANDBOX:default:this.network=In.SANDBOX,this.authenticationDomain="https://auth.immutable.com",this.magicPublishableApiKey="pk_live_10F423798A540ED7",this.magicProviderId="fSMzaRQ4O7p4fttl7pCyGVtJS_G70P8SNsLXtPPGHo0=",this.passportDomain="https://passport.sandbox.immutable.com",this.imxPublicApiDomain="https://api.sandbox.immutable.com",this.zkEvmRpcUrl="https://rpc.testnet.immutable.com",this.relayerUrl="https://api.sandbox.immutable.com/relayer-mr",this.multiRollupConfig=Z()}}}var Fn;!function(e){e.CONFIRMATION_WINDOW_READY="confirmation_window_ready",e.TRANSACTION_CONFIRMED="transaction_confirmed",e.TRANSACTION_ERROR="transaction_error",e.MESSAGE_CONFIRMED="message_confirmed",e.MESSAGE_REJECTED="message_rejected",e.LOGOUT_SUCCESS="logout_success"}(Fn||(Fn={}));const Bn="imx_passport_confirmation";class jn{config;confirmationWindow;constructor(e){this.config=e}getHref(e,t){let n=`${this.config.passportDomain}/transaction-confirmation/${e}`;if(t){n=`${n}?${t?Object.keys(t).map((e=>`${e}=${t[e]}`)).join("&"):""}`}return n}requestConfirmation(e,t,n,r){return new Promise(((s,a)=>{const i=({data:e,origin:t})=>{if(t===this.config.passportDomain&&e.eventType===Bn)switch(e.messageType){case Fn.CONFIRMATION_WINDOW_READY:break;case Fn.TRANSACTION_CONFIRMED:s({confirmed:!0});break;case Fn.TRANSACTION_ERROR:a(new Error("Transaction error"));break;default:a(new Error("Unsupported message type"))}};if(!this.confirmationWindow)return void s({confirmed:!1});window.addEventListener("message",i);let o="";o=n===Yt?this.getHref("transaction",{transactionId:e,etherAddress:t,chainType:n}):this.getHref("zkevm",{transactionId:e,etherAddress:t,chainType:n,chainId:r}),this.showConfirmationScreen(o,i,s)}))}requestMessageConfirmation(e,t){return new Promise(((n,r)=>{const s=({data:e,origin:t})=>{if(t===this.config.passportDomain&&e.eventType===Bn)switch(e.messageType){case Fn.CONFIRMATION_WINDOW_READY:break;case Fn.MESSAGE_CONFIRMED:n({confirmed:!0});break;case Fn.MESSAGE_REJECTED:r(new Error("Message rejected"));break;default:r(new Error("Unsupported message type"))}};if(!this.confirmationWindow)return void n({confirmed:!1});window.addEventListener("message",s);const a=this.getHref("zkevm/message",{messageID:e,etherAddress:t});this.showConfirmationScreen(a,s,n)}))}loading(e){this.config.crossSdkBridgeEnabled||(this.confirmationWindow=(({url:e,title:t,width:n,height:r})=>{const s=Math.max(0,Math.round(window.screenX+(window.outerWidth-n)/2)),a=Math.max(0,Math.round(window.screenY+(window.outerHeight-r)/2)),i=window.open(e,t,`\n scrollbars=yes,\n width=${n}, \n height=${r}, \n top=${a}, \n left=${s}\n `);if(!i)throw new Error("Failed to open confirmation screen");return i.focus(),i})({url:this.getHref("loading"),title:"Confirm this transaction",width:e?.width||480,height:e?.height||380}))}closeWindow(){this.confirmationWindow?.close()}logout(){return new Promise(((e,t)=>{const n=document.createElement("iframe");n.setAttribute("id","passport-confirm"),n.setAttribute("src",this.getHref("logout")),n.setAttribute("style","display: none; position: absolute;width:0px;height:0px;border:0;");const r=({data:s,origin:a})=>{a===this.config.passportDomain&&s.eventType===Bn&&(window.removeEventListener("message",r),n.remove(),s.messageType===Fn.LOGOUT_SUCCESS&&e({logout:!0}),t(new Error("Unsupported logout type")))};window.addEventListener("message",r),document.body.appendChild(n)}))}showConfirmationScreen(e,t,n){this.confirmationWindow.location.href=e;const r=setInterval((()=>{this.confirmationWindow?.closed&&(clearInterval(r),window.removeEventListener("message",t),n({confirmed:!1}))}),1e3)}}var qn,zn;!function(e){e.PENDING="PENDING",e.SUBMITTED="SUBMITTED",e.SUCCESSFUL="SUCCESSFUL",e.REVERTED="REVERTED",e.FAILED="FAILED"}(qn||(qn={})),function(e){e.ACCOUNTS_CHANGED="accountsChanged"}(zn||(zn={}));class Xn{emitter=new y;emit(e,...t){this.emitter.emit(e,...t)}on(e,t){this.emitter.on(e,t)}removeListener(e,t){this.emitter.removeListener(e,t)}}const Gn=(e,t,n)=>f.utils.solidityPack(["string","uint256","address","bytes32"],["",e,t,n]),Hn=async(e,t,n,r,s)=>{const a=e.map((e=>({delegateCall:!0===e.delegateCall,revertOnError:!0===e.revertOnError,gasLimit:e.gasLimit??f.constants.Zero,target:e.to??f.constants.AddressZero,value:e.value??f.constants.Zero,data:e.data??[]})));const i=function(e,t){const n=f.utils.defaultAbiCoder.encode(["uint256","tuple(\n bool delegateCall,\n bool revertOnError,\n uint256 gasLimit,\n address target,\n uint256 value,\n bytes data\n)[]"],[e,t]);return f.utils.keccak256(n)}(t,a),o=Gn(n,r,i),c=f.utils.keccak256(o),d=f.utils.arrayify(c),u=`${await s.signMessage(d)}02`,l=_.signature.encodeSignature({version:1,threshold:1,signers:[{isDynamic:!1,unrecovered:!0,weight:1,signature:u}]}),h=new f.utils.Interface(E.mainModule.abi);return h.encodeFunctionData(h.getFunction("execute"),[a,t,l])},$n=async(e,t,n,r,s)=>{const a={...e.types};delete a.EIP712Domain;const i=f.utils._TypedDataEncoder.hash(e.domain,a,e.message),o=Gn(n,r,i),c=f.utils.keccak256(o),d=f.utils.arrayify(c),u=`${await s.signMessage(d)}02`,{signers:l}=(e=>{const t=`0x0000${e}`;return _.signature.decodeSignature(t)})(t);return _.signature.encodeSignature({version:1,threshold:2,signers:[...l,{isDynamic:!1,unrecovered:!0,weight:1,signature:u}]})},Vn=e=>`eip155:${e}`;class Kn{config;jsonRpcProvider;user;constructor({config:e,jsonRpcProvider:t,user:n}){this.config=e,this.jsonRpcProvider=t,this.user=n}async postToRelayer(e){const t={id:1,jsonrpc:"2.0",...e},n=await fetch(`${this.config.relayerUrl}/v1/transactions`,{method:"POST",headers:{Authorization:`Bearer ${this.user.accessToken}`,"Content-Type":"application/json"},body:JSON.stringify(t)}),r=await n.json();if(r.error)throw r.error;return r}async ethSendTransaction(e,t){const{chainId:n}=await this.jsonRpcProvider.ready,r={method:"eth_sendTransaction",params:[{to:e,data:t,chainId:Vn(n)}]},{result:s}=await this.postToRelayer(r);return s}async imGetTransactionByHash(e){const t={method:"im_getTransactionByHash",params:[e]},{result:n}=await this.postToRelayer(t);return n}async imGetFeeOptions(e,t){const{chainId:n}=await this.jsonRpcProvider.ready,r={method:"im_getFeeOptions",params:[{userAddress:e,data:t,chainId:Vn(n)}]},{result:s}=await this.postToRelayer(r);return s}async imSignTypedData(e,t){const{chainId:n}=await this.jsonRpcProvider.ready,r={method:"im_signTypedData",params:[{address:e,eip712Payload:t,chainId:Vn(n)}]},{result:s}=await this.postToRelayer(r);return s}}const Wn=new Map([[cn.ETHEREUM,dn.ETHEREUM],[cn.SEPOLIA,dn.SEPOLIA],[cn.IMTBL_ZKEVM_MAINNET,dn.IMTBL_ZKEVM_MAINNET],[cn.IMTBL_ZKEVM_TESTNET,dn.IMTBL_ZKEVM_TESTNET],[cn.IMTBL_ZKEVM_DEVNET,dn.IMTBL_ZKEVM_DEVNET]]);const Jn=async({authManager:e,config:t,magicAdapter:n,multiRollupApiClients:r,jsonRpcProvider:s})=>{let a=null;try{a=await e.getUser()}catch(e){console.warn("eth_requestAccounts` failed to retrieve a cached user session:",e)}if(a||(a=await e.getUserDeviceFlow()||await e.login()),!a.idToken)throw new Error("User is missing idToken");const i=await n.login(a.idToken);if(!a.zkEvm){const n=await async function({authManager:e,config:t,magicProvider:n,multiRollupApiClients:r,accessToken:s,jsonRpcProvider:a}){const i=new p(n).getSigner(),o=await i.getAddress(),c=await nn("Only sign this message from Immutable Passport",i),d={Authorization:`Bearer ${s}`},{chainId:u}=await a.ready;try{const e=Wn.get(u);if(!e)throw new bn(Tn.INTERNAL_ERROR,`Chain name does not exist on for chain id ${u}`);await r.passportApi.createCounterfactualAddress({chainName:e,createCounterfactualAddressRequest:{ethereum_address:o,ethereum_signature:c}},{headers:d})}catch(e){throw new bn(Tn.INTERNAL_ERROR,`Failed to create counterfactual address: ${e}`)}let l;if(t.crossSdkBridgeEnabled){const t=e.checkStoredDeviceFlowCredentials();if(!t||!t.refresh_token)throw new bn(Tn.INTERNAL_ERROR,"Cross SDK bridge: Failed to refresh user details");l=await e.refreshToken(t.refresh_token)}else l=await e.forceUserRefresh();if(!l?.zkEvm)throw new bn(Tn.INTERNAL_ERROR,"Failed to refresh user details");return l}({authManager:e,config:t,magicProvider:i,multiRollupApiClients:r,accessToken:a.accessToken,jsonRpcProvider:s});return{user:n,magicProvider:i}}return{user:a,magicProvider:i}},Zn=({params:e,magicProvider:t,jsonRpcProvider:n,relayerClient:r,guardianClient:s,user:a})=>s.withConfirmationScreen({width:480,height:520})((async()=>{const i=e[0];if(!i.to)throw new bn(Tn.INVALID_PARAMS,'eth_sendTransaction requires a "to" field');const{chainId:o}=await n.ready,c=g.from(o),d=new p(t).getSigner(),u=await(async(e,t)=>{const n=await e.send("eth_getCode",[t,"latest"]);if(n&&"0x"!==n)return new f.Contract(t,E.mainModule.abi,e).nonce();return 0})(n,a.zkEvm.ethAddress),l={to:i.to,data:i.data,nonce:u,value:i.value,revertOnError:!0},h=await(async(e,t,n,r,s,a)=>{const i=await Hn([e],t,n,r,s),o=(await a.imGetFeeOptions(r,i)).find((e=>"IMX"===e.tokenSymbol));if(!o)throw new Error("Failed to retrieve fees for IMX token");const c={nonce:t,to:o.recipientAddress,value:o.tokenPrice,revertOnError:!0};return g.from(c.value).isZero()?[e]:[e,c]})(l,u,c,a.zkEvm.ethAddress,d,r);await s.validateEVMTransaction({chainId:Vn(o),nonce:Cn(u),user:a,metaTransactions:h});const m=await Hn(h,u,c,a.zkEvm.ethAddress,d),w=await r.ethSendTransaction(a.zkEvm.ethAddress,m),R=await _n((async()=>{const e=await r.imGetTransactionByHash(w);if(e.status===qn.PENDING)throw new Error;return e}),{retries:30,interval:1e3,finalErr:new bn(Tn.RPC_SERVER_ERROR,"transaction hash not generated in time")});if(![qn.SUBMITTED,qn.SUCCESSFUL].includes(R.status)){let e=`Transaction failed to submit with status ${R.status}.`;throw R.statusMessage&&(e+=` Error message: ${R.statusMessage}`),new bn(Tn.RPC_SERVER_ERROR,e)}return R.hash})),Qn=["types","domain","primaryType","message"],Yn=(e,t)=>{let n;if("string"==typeof e)try{n=JSON.parse(e)}catch(e){throw new bn(Tn.INVALID_PARAMS,`Failed to parse typed data JSON: ${e}`)}else{if("object"!=typeof e)throw new bn(Tn.INVALID_PARAMS,`Invalid typed data argument: ${e}`);n=e}if(!(e=>Qn.every((t=>t in e)))(n))throw new bn(Tn.INVALID_PARAMS,`Invalid typed data argument. The following properties are required: ${Qn.join(", ")}`);const r=n.domain?.chainId;if(r&&("string"==typeof r&&(r.startsWith("0x")?n.domain.chainId=parseInt(r,16):n.domain.chainId=parseInt(r,10)),n.domain.chainId!==t))throw new bn(Tn.INVALID_PARAMS,`Invalid chainId, expected ${t}`);return n};class er{authManager;config;confirmationScreen;magicAdapter;multiRollupApiClients;jsonRpcProvider;eventEmitter;guardianClient;relayerClient;magicProvider;user;isPassport=!0;constructor({authManager:e,magicAdapter:t,config:n,confirmationScreen:r,multiRollupApiClients:s,passportEventEmitter:a}){this.authManager=e,this.magicAdapter=t,this.config=n,this.confirmationScreen=r,n.crossSdkBridgeEnabled?this.jsonRpcProvider=new m({url:this.config.zkEvmRpcUrl,fetchOptions:{referrer:"http://imtblgamesdk.local"}}):this.jsonRpcProvider=new m(this.config.zkEvmRpcUrl),this.multiRollupApiClients=s,this.eventEmitter=new Xn,a.on(Sn.LOGGED_OUT,this.handleLogout)}handleLogout=()=>{const e=this.isLoggedIn();this.magicProvider=void 0,this.user=void 0,this.relayerClient=void 0,this.guardianClient=void 0,e&&this.eventEmitter.emit(zn.ACCOUNTS_CHANGED,[])};isLoggedIn(){return void 0!==this.magicProvider&&void 0!==this.user&&void 0!==this.relayerClient&&void 0!==this.guardianClient}async performRequest(e){switch(e.method){case"eth_requestAccounts":{if(this.isLoggedIn())return[this.user.zkEvm.ethAddress];const{magicProvider:e,user:t}=await Jn({authManager:this.authManager,config:this.config,magicAdapter:this.magicAdapter,multiRollupApiClients:this.multiRollupApiClients,jsonRpcProvider:this.jsonRpcProvider});return this.user=t,this.magicProvider=e,this.relayerClient=new Kn({config:this.config,jsonRpcProvider:this.jsonRpcProvider,user:this.user}),this.guardianClient=new On({confirmationScreen:this.confirmationScreen,config:this.config}),this.eventEmitter.emit(zn.ACCOUNTS_CHANGED,[this.user.zkEvm.ethAddress]),[this.user.zkEvm.ethAddress]}case"eth_sendTransaction":if(!this.isLoggedIn())throw new bn(An.UNAUTHORIZED,"Unauthorised - call eth_requestAccounts first");return Zn({params:e.params||[],magicProvider:this.magicProvider,guardianClient:this.guardianClient,jsonRpcProvider:this.jsonRpcProvider,relayerClient:this.relayerClient,user:this.user});case"eth_accounts":return this.isLoggedIn()?[this.user.zkEvm.ethAddress]:[];case"eth_signTypedData":case"eth_signTypedData_v4":if(!this.isLoggedIn())throw new bn(An.UNAUTHORIZED,"Unauthorised - call eth_requestAccounts first");return(async({params:e,method:t,magicProvider:n,jsonRpcProvider:r,relayerClient:s,guardianClient:a,user:i})=>a.withConfirmationScreen({width:480,height:730})((async()=>{const o=e[0],c=e[1];if(!o||!c)throw new bn(Tn.INVALID_PARAMS,`${t} requires an address and a typed data JSON`);const{chainId:d}=await r.ready,u=Yn(c,d);await a.validateMessage({chainID:String(d),payload:u,user:i});const l=await s.imSignTypedData(o,u),h=new p(n).getSigner();return $n(u,l,g.from(d),o,h)})))({method:e.method,params:e.params||[],magicProvider:this.magicProvider,jsonRpcProvider:this.jsonRpcProvider,relayerClient:this.relayerClient,user:this.user,guardianClient:this.guardianClient});case"eth_gasPrice":case"eth_getBalance":case"eth_getCode":case"eth_getStorageAt":case"eth_estimateGas":case"eth_call":case"eth_blockNumber":case"eth_chainId":case"eth_getBlockByHash":case"eth_getBlockByNumber":case"eth_getTransactionByHash":case"eth_getTransactionReceipt":case"eth_getTransactionCount":return this.jsonRpcProvider.send(e.method,e.params||[]);default:throw new bn(An.UNSUPPORTED_METHOD,"Method not supported")}}async performJsonRpcRequest(e){const{id:t,jsonrpc:n}=e;try{return{id:t,jsonrpc:n,result:await this.performRequest(e)}}catch(e){let r;return r=e instanceof bn?e:e instanceof Error?new bn(Tn.INTERNAL_ERROR,e.message):new bn(Tn.INTERNAL_ERROR,"Internal error"),{id:t,jsonrpc:n,error:r}}}async request(e){try{return this.performRequest(e)}catch(e){if(e instanceof bn)throw e;if(e instanceof Error)throw new bn(Tn.INTERNAL_ERROR,e.message);throw new bn(Tn.INTERNAL_ERROR,"Internal error")}}sendAsync(e,t){if(!t)throw new Error("No callback provided");Array.isArray(e)?Promise.all(e.map(this.performJsonRpcRequest)).then((e=>{t(null,e)})).catch((e=>{t(e,[])})):this.performJsonRpcRequest(e).then((e=>{t(null,e)})).catch((e=>{t(e,null)}))}async send(e,t,n){if("string"==typeof e)return"function"==typeof t?this.sendAsync({method:e,params:[]},t):n?this.sendAsync({method:e,params:Array.isArray(t)?t:[]},n):this.request({method:e,params:Array.isArray(t)?t:[]});if("function"==typeof t)return this.sendAsync(e,t);if(!Array.isArray(e)&&"object"==typeof e)return this.performJsonRpcRequest(e);throw new bn(Tn.INVALID_REQUEST,"Invalid request")}on(e,t){this.eventEmitter.on(e,t)}removeListener(e,t){this.eventEmitter.removeListener(e,t)}}class tr{authManager;config;confirmationScreen;immutableXClient;magicAdapter;multiRollupApiClients;passportImxProviderFactory;passportEventEmitter;constructor(e){this.config=new Ln(e),this.authManager=new wn(this.config),this.magicAdapter=new Rn(this.config),this.confirmationScreen=new jn(this.config),this.immutableXClient=e.overrides?.immutableXClient||new ne({baseConfig:e.baseConfig}),this.multiRollupApiClients=new V(this.config.multiRollupConfig),this.passportEventEmitter=new Xn,this.passportImxProviderFactory=new xn({authManager:this.authManager,config:this.config,confirmationScreen:this.confirmationScreen,immutableXClient:this.immutableXClient,magicAdapter:this.magicAdapter,passportEventEmitter:this.passportEventEmitter})}async connectImxSilent(){return this.passportImxProviderFactory.getProviderSilent()}async connectImx(){return this.passportImxProviderFactory.getProvider()}async connectImxDeviceFlow(e,t,n){return this.passportImxProviderFactory.getProviderWithDeviceFlow(e,t,n)}getPKCEAuthorizationUrl(){return this.authManager.getPKCEAuthorizationUrl()}async connectImxPKCEFlow(e,t){return this.passportImxProviderFactory.getProviderWithPKCEFlow(e,t)}checkStoredDeviceFlowCredentials(){return this.authManager.checkStoredDeviceFlowCredentials()}async connectImxWithCredentials(e){return this.passportImxProviderFactory.getProviderWithCredentials(e)}connectEvm(){if(this.config.network===In.PRODUCTION)throw new Error("EVM is not supported on production network");return new er({passportEventEmitter:this.passportEventEmitter,authManager:this.authManager,magicAdapter:this.magicAdapter,config:this.config,confirmationScreen:this.confirmationScreen,multiRollupApiClients:this.multiRollupApiClients})}async login(e){const{useCachedSession:t=!1}=e||{};let n=null;try{n=await this.authManager.getUser()}catch(e){if(t)throw e;console.warn("login failed to retrieve a cached user session",e)}return n||t||(n=await this.authManager.login()),n?n.profile:null}async loginWithDeviceFlow(){return this.authManager.loginWithDeviceFlow()}async loginCallback(){return this.authManager.loginCallback()}async logout(){await this.authManager.logout(),await this.confirmationScreen.logout(),await this.magicAdapter.logout(),this.passportEventEmitter.emit(Sn.LOGGED_OUT)}async logoutSilentCallback(e){return this.authManager.logoutSilentCallback(e)}async logoutDeviceFlow(){return this.authManager.logoutDeviceFlow()}async getUserInfo(){const e=await this.authManager.getUser();return e?.profile}async getUserInfoDeviceFlow(){const e=await this.authManager.getUserDeviceFlow();return e?.profile}async getIdToken(){const e=await this.authManager.getUser();return e?.idToken}async getAccessToken(){const e=await this.authManager.getUser();return e?.accessToken}async getLinkedAddresses(){const e=await this.authManager.getUser();if(!e?.profile.sub)return[];const t={Authorization:`Bearer ${e.accessToken}`};return(await this.multiRollupApiClients.passportApi.getLinkedAddresses({chainName:dn.ETHEREUM,userId:e?.profile.sub},{headers:t})).data.linked_addresses}}export{bn as JsonRpcError,In as Networks,tr as Passport,an as PassportError,An as ProviderErrorCode,zn as ProviderEvent,Tn as RpcErrorCode};
package/provider.js ADDED
@@ -0,0 +1 @@
1
+ import{Config as e,TransfersApi as t,OrdersApi as a,UsersApi as n,Contracts as i,TradesApi as s,ExchangesApi as r,WithdrawalsApi as o,MintsApi as d,DepositsApi as c,EncodingApi as u,TokensApi as g}from"@imtbl/core-sdk";import _ from"bn.js";import*as f from"enc-utils";import{AxiosError as l}from"axios";import{parseUnits as m}from"@ethersproject/units";import{BigNumber as w}from"@ethersproject/bignumber";import{ethers as p}from"ethers";import h from"@metamask/detect-provider";function C(e){const t=-1!==new _(e,16).cmp(new _(27))?new _(e,16).sub(new _(27)).toNumber():new _(e,16).toNumber();return e.trim()?t:void 0}async function y(e,t){const a=function(e,t=64){const a=f.removeHexPrefix(e);return{r:new _(a.substring(0,t),"hex"),s:new _(a.substring(t,2*t),"hex"),recoveryParam:C(a.substring(2*t,2*t+2))}}(await t.signMessage(e));return n=a,f.addHexPrefix(f.padLeft(n.r.toString(16),64)+f.padLeft(n.s.toString(16),64)+f.padLeft(n.recoveryParam?.toString(16)||"",2));var n}function E(e){switch(e.type){case"ERC721":return{type:"ERC721",data:{token_id:e.tokenId,token_address:e.tokenAddress}};case"ERC20":return{type:"ERC20",data:{token_address:e.tokenAddress}};default:return{type:"ETH",data:{decimals:18}}}}var S;async function k(e,t){if(!function(e,t){return e===t.ethConfiguration.chainID}(await e.getChainId(),t))throw new Error("The wallet used for this operation is not connected to the correct network.")}async function b(e,t,a){await k(t,a.immutableXConfig);const n=i.Registration.connect(a.immutableXConfig.ethConfiguration.registrationContractAddress,t);try{return await n.isRegistered(e)}catch(e){if("USER_UNREGISTERED"===e.reason)return!1;throw e}}async function T(e,t,a){const n=await a.getSignableRegistration({getSignableRegistrationRequest:{ether_key:e,stark_key:t}});return{operator_signature:n.data.operator_signature,payload_hash:n.data.payload_hash,readable_transaction:n.data.readable_transaction,verification_signature:n.data.verification_signature}}!function(e){e.PRODUCTION="production",e.SANDBOX="sandbox"}(S||(S={}));const A=e=>{if(void 0!==e)return e;throw new Error("undefined field exception")};async function R(e){const{signers:{ethSigner:t,starkSigner:a},type:n,config:i}=e;await k(t,e.config);const s=new o(i.apiConfiguration),r="ERC721"===n?"1":e.amount,d=await s.getSignableWithdrawal({getSignableWithdrawalRequest:{user:await t.getAddress(),token:E(e),amount:r}}),{signable_message:c,payload_hash:u}=d.data,g=await a.signMessage(u),{ethAddress:_,ethSignature:f}=await async function(e,t){return{message:e,ethAddress:await t.getAddress(),ethSignature:await y(e,t)}}(c,t);return(await s.createWithdrawal({createWithdrawalRequest:{stark_key:A(d.data.stark_key),amount:r,asset_id:A(d.data.asset_id),vault_id:A(d.data.vault_id),nonce:A(d.data.nonce),stark_signature:g},xImxEthAddress:_,xImxEthSignature:f})).data}async function N(e,t,a,n){const i=new u(a.apiConfiguration);return(await i.encodeAsset({assetType:e,encodeAssetRequest:{token:{type:t,...n&&{data:n}}}})).data}async function O({ethSigner:e,starkPublicKey:t,token:a,config:s}){await k(e,s.immutableXConfig);const r=s.immutableXConfig,o=await N("asset","ERC20",r,{token_address:a.tokenAddress});return await b(t,e,s)?async function(e,t,a,n){const s=i.Core.connect(n.ethConfiguration.coreContractAddress,e),r=await s.populateTransaction.withdraw(a,t);return e.sendTransaction(r)}(e,o.asset_type,t,r):async function({ethSigner:e,assetType:t,starkPublicKey:a,config:s}){const r=await e.getAddress(),o=s.immutableXConfig,d=new n(o.apiConfiguration),c=await T(r,a,d),u=i.Registration.connect(s.immutableXConfig.ethConfiguration.registrationContractAddress,e),g=await u.populateTransaction.registerAndWithdraw(r,a,c.operator_signature,t);return e.sendTransaction(g)}({ethSigner:e,assetType:o.asset_type,starkPublicKey:t,config:s})}async function I(e,t,a,s){const r=s.immutableXConfig,o=await N("mintable-asset","ERC721",r,{id:a.data.id,token_address:a.data.tokenAddress,...a.data.blueprint&&{blueprint:a.data.blueprint}}),d=function(e){const{id:t}=e.data,a=e.data.blueprint||"";return f.sanitizeHex(f.utf8ToHex(`{${t}}:{${a}}`))}(a);return await b(t,e,s)?async function(e,t,a,n,s){const r=i.Core.connect(s.ethConfiguration.coreContractAddress,e),o=await r.populateTransaction.withdrawAndMint(a,t,n);return e.sendTransaction(o)}(e,o.asset_type,t,d,r):async function(e,t,a,s,r){const o=await e.getAddress(),d=new n(r.apiConfiguration),c=await T(o,a,d),u=i.Registration.connect(r.ethConfiguration.registrationContractAddress,e),g=await u.populateTransaction.regsiterAndWithdrawAndMint(o,a,c.operator_signature,t,s);return e.sendTransaction(g)}(e,o.asset_type,t,d,r)}async function v(e,t,a,s){const r=s.immutableXConfig,o=await N("asset","ERC721",r,{token_id:a.tokenId,token_address:a.tokenAddress});return await b(t,e,s)?async function(e,t,a,n,s){const r=i.Core.connect(s.ethConfiguration.coreContractAddress,e),o=await r.populateTransaction.withdrawNft(a,t,n);return e.sendTransaction(o)}(e,o.asset_type,t,a.tokenId,r):async function(e,t,a,s,r){const o=await e.getAddress(),d=new n(r.apiConfiguration),c=await T(o,a,d),u=i.Registration.connect(r.ethConfiguration.registrationContractAddress,e),g=await u.populateTransaction.registerAndWithdrawNft(o,a,c.operator_signature,t,s);return e.sendTransaction(g)}(e,o.asset_type,t,a.tokenId,r)}async function x({ethSigner:e,starkPublicKey:t,config:a}){await k(e,a.immutableXConfig);const s=a.immutableXConfig,r=await N("asset","ETH",s);return await b(t,e,a)?async function(e,t,a,n){const s=i.Core.connect(n.ethConfiguration.coreContractAddress,e),r=await s.populateTransaction.withdraw(a,t);return e.sendTransaction(r)}(e,r.asset_type,t,s):async function(e,t,a,s){const r=await e.getAddress(),o=new n(s.apiConfiguration),d=await T(r,a,o),c=i.Registration.connect(s.ethConfiguration.registrationContractAddress,e),u=await c.populateTransaction.registerAndWithdraw(r,a,d.operator_signature,t);return e.sendTransaction(u)}(e,r.asset_type,t,s)}async function X({signers:{ethSigner:e},starkPublicKey:t,token:a,config:n}){switch(a.type){case"ETH":return x({ethSigner:e,starkPublicKey:t,config:n});case"ERC20":return O({ethSigner:e,starkPublicKey:t,token:a,config:n});case"ERC721":return async function({ethSigner:e,starkPublicKey:t,token:a,config:n}){await k(e,n.immutableXConfig);const{tokenAddress:i}=a,{tokenId:s}=a,r=n.immutableXConfig,o=new d(r.apiConfiguration);return await o.getMintableTokenDetailsByClientTokenId({tokenAddress:i,tokenId:s}).then((a=>I(e,t,{type:"ERC721",data:{id:s,tokenAddress:i,blueprint:a.data.blueprint}},n))).catch((i=>{if(404===i.response?.status)return v(e,t,a,n);throw i}))}({ethSigner:e,starkPublicKey:t,token:a,config:n})}}async function q({signers:{ethSigner:e},deposit:t,config:a}){await k(e,a.immutableXConfig);const s=await e.getAddress(),r=m(t.amount,"wei"),o=a.immutableXConfig,d=new c(o.apiConfiguration),g=new u(o.apiConfiguration),_=new n(o.apiConfiguration),f={user:s,token:{type:t.type,data:{decimals:18}},amount:r.toString()},l=await d.getSignableDeposit({getSignableDepositRequest:f}),w=(await g.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:t.type}}})).data.asset_type,p=l.data.stark_key,h=l.data.vault_id;return await b(p,e,a)?async function(e,t,a,n,s,r){const o=i.Core.connect(r.ethConfiguration.coreContractAddress,e),d=await o.populateTransaction["deposit(uint256,uint256,uint256)"](n,a,s);return e.sendTransaction({...d,value:t})}(e,r,w,p,h,o):async function(e,t,a,n,s,r,o){const d=await e.getAddress(),c=i.Core.connect(r.ethConfiguration.coreContractAddress,e),u=await T(d,n,o),g=await c.populateTransaction.registerAndDepositEth(d,n,u.operator_signature,a,s);return e.sendTransaction({...g,value:t})}(e,r,w,p,h,o,_)}async function P({signers:{ethSigner:e},deposit:t,config:a}){await k(e,a.immutableXConfig);const{apiConfiguration:s,ethConfiguration:r}=a.immutableXConfig,o=await e.getAddress(),d=new g(s),_=new c(s),f=new u(s),l=new n(s),p=await d.getToken({address:t.tokenAddress}),h={decimals:parseInt(p.data.decimals),token_address:t.tokenAddress},C=m(t.amount,0),y=i.IERC20.connect(t.tokenAddress,e),E=await y.populateTransaction.approve(r.coreContractAddress,C);await e.sendTransaction(E);const S={user:o,token:{type:t.type,data:h},amount:C.toString()},A=await _.getSignableDeposit({getSignableDepositRequest:S}),R=(await f.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:t.type,data:{token_address:t.tokenAddress}}}})).data.asset_type,N=A.data.stark_key,O=A.data.vault_id,I=w.from(A.data.amount);return await b(N,e,a)?async function(e,t,a,n,s,r){const o=i.Core.connect(r.coreContractAddress,e),d=await o.populateTransaction.depositERC20(n,a,s,t);return e.sendTransaction(d)}(e,I,R,N,O,r):async function(e,t,a,n,s,r,o){const d=await e.getAddress(),c=i.Core.connect(r.coreContractAddress,e),u=await T(d,n,o),g=await c.populateTransaction.registerAndDepositERC20(d,n,u.operator_signature,a,s,t);return e.sendTransaction(g)}(e,I,R,N,O,r,l)}async function L({signers:{ethSigner:e},deposit:t,config:a}){await k(e,a.immutableXConfig);const s=await e.getAddress(),{immutableXConfig:r}=a,o=new c(r.apiConfiguration),d=new u(r.apiConfiguration),g=new n(r.apiConfiguration),_={token_address:t.tokenAddress,token_id:t.tokenId},f={user:s,token:{type:t.type,data:_},amount:"1".toString()},l=await o.getSignableDeposit({getSignableDepositRequest:f}),m=(await d.encodeAsset({assetType:"asset",encodeAssetRequest:{token:{type:t.type,data:{token_address:t.tokenAddress,token_id:t.tokenId}}}})).data.asset_type,w=l.data.stark_key,p=l.data.vault_id,h=await b(w,e,a),C=i.IERC721.connect(t.tokenAddress,e),y=r.ethConfiguration.coreContractAddress;if(await C.isApprovedForAll(s,y)||await C.setApprovalForAll(y,!0),!h){const t=await T(s,w,g),a=i.Core.connect(r.ethConfiguration.coreContractAddress,e);await a.registerUser(s,w,t.operator_signature)}return async function(e,t,a,n,s,r){const o=i.Core.connect(r.ethConfiguration.coreContractAddress,e),d=await o.populateTransaction.depositNft(n,a,s,t);return e.sendTransaction(d)}(e,t.tokenId,m,w,p,r)}class D{config;signers;constructor(e,t,a){this.config=e,this.signers={ethSigner:t,starkSigner:a}}async getAddress(){return this.signers.ethSigner.getAddress()}async isRegisteredOffchain(){return async function(e,t){try{const a=new n(t.immutableXConfig.apiConfiguration),i=await a.getUsers({user:e}),{accounts:s}=i.data;return s?.length>0}catch(e){if(e instanceof l&&404===e.response?.status)return!1;throw e}}(await this.getAddress(),this.config)}registerOffchain(){return async function(e,t){await k(e.ethSigner,t.immutableXConfig);const a=new n(t.immutableXConfig.apiConfiguration),i=await e.ethSigner.getAddress(),s=await e.starkSigner.getAddress(),r=await a.getSignableRegistrationOffchain({getSignableRegistrationRequest:{ether_key:i,stark_key:s}}),{signable_message:o,payload_hash:d}=r.data,c=await y(o,e.ethSigner),u=await e.starkSigner.signMessage(d);return(await a.registerUser({registerUserRequest:{eth_signature:c,ether_key:i,stark_signature:u,stark_key:s}})).data}(this.signers,this.config)}batchNftTransfer(e){return async function({signers:{ethSigner:e,starkSigner:a},request:n,config:i}){await k(e,i.immutableXConfig);const s=await e.getAddress(),r=new t(i.immutableXConfig.apiConfiguration),o=n.map((e=>({amount:"1",token:E({type:"ERC721",tokenId:e.tokenId,tokenAddress:e.tokenAddress}),receiver:e.receiver}))),d=await r.getSignableTransfer({getSignableTransferRequestV2:{sender_ether_key:s,signable_requests:o}}),c=d.data.signable_message;if(void 0===c)throw new Error("Invalid response from Signable registration offchain");const u=await y(c,e),g=[];for(const e of d.data.signable_responses){const t=await a.signMessage(e.payload_hash),n={sender_vault_id:e.sender_vault_id,receiver_stark_key:e.receiver_stark_key,receiver_vault_id:e.receiver_vault_id,asset_id:e.asset_id,amount:e.amount,nonce:e.nonce,expiration_timestamp:e.expiration_timestamp,stark_signature:t};g.push(n)}const _={sender_stark_key:d.data.sender_stark_key,requests:g},f=await r.createTransfer({createTransferRequestV2:_,xImxEthAddress:s,xImxEthSignature:u});return{transfer_ids:f?.data.transfer_ids}}({signers:this.signers,request:e,config:this.config})}cancelOrder(e){return async function({signers:e,request:t,config:n}){const i=new a(n.immutableXConfig.apiConfiguration),s=await i.getSignableCancelOrderV3({getSignableCancelOrderRequest:{order_id:t.order_id}}),{signable_message:r,payload_hash:o}=s.data,d=await y(r,e.ethSigner),c=await e.starkSigner.signMessage(o),u=await e.ethSigner.getAddress(),g=await i.cancelOrderV3({id:t.order_id.toString(),cancelOrderRequest:{order_id:t.order_id,stark_signature:c},xImxEthAddress:u,xImxEthSignature:d});return{order_id:g.data.order_id,status:g.data.status}}({signers:this.signers,request:e,config:this.config})}completeWithdrawal(e,t){return X({config:this.config,signers:this.signers,token:t,starkPublicKey:e})}createOrder(e){return async function({signers:e,request:t,config:n}){await k(e.ethSigner,n.immutableXConfig);const i=await e.ethSigner.getAddress(),s=new a(n.immutableXConfig.apiConfiguration),r="ERC721"===t.sell.type?"1":t.sell.amount,o={user:i,amount_buy:"ERC721"===t.buy.type?"1":t.buy.amount,token_buy:E(t.buy),amount_sell:r,token_sell:E(t.sell),fees:t.fees,expiration_timestamp:t.expiration_timestamp},d=await s.getSignableOrder({getSignableOrderRequestV3:o}),{signable_message:c,payload_hash:u}=d.data,g=await y(c,e.ethSigner),_=await e.starkSigner.signMessage(u),f=d.data,l={createOrderRequest:{amount_buy:f.amount_buy,amount_sell:f.amount_sell,asset_id_buy:f.asset_id_buy,asset_id_sell:f.asset_id_sell,expiration_timestamp:f.expiration_timestamp,fees:t.fees,nonce:f.nonce,stark_key:f.stark_key,stark_signature:_,vault_id_buy:f.vault_id_buy,vault_id_sell:f.vault_id_sell},xImxEthAddress:i,xImxEthSignature:g};return{...(await s.createOrderV3(l)).data}}({signers:this.signers,request:e,config:this.config})}createTrade(e){return async function({signers:{ethSigner:e,starkSigner:t},request:a,config:n}){await k(e,n.immutableXConfig);const i=await e.getAddress(),r=new s(n.immutableXConfig.apiConfiguration),o=await r.getSignableTrade({getSignableTradeRequest:{user:i,order_id:a.order_id,fees:a.fees}}),{signable_message:d,payload_hash:c}=o.data,u=await y(d,e),g=await t.signMessage(c);return(await r.createTradeV3({createTradeRequest:{amount_buy:o.data.amount_buy,amount_sell:o.data.amount_sell,asset_id_buy:o.data.asset_id_buy,asset_id_sell:o.data.asset_id_sell,expiration_timestamp:o.data.expiration_timestamp,fee_info:o.data.fee_info,fees:a.fees,include_fees:!0,nonce:o.data.nonce,order_id:a.order_id,stark_key:o.data.stark_key,vault_id_buy:o.data.vault_id_buy,vault_id_sell:o.data.vault_id_sell,stark_signature:g},xImxEthAddress:i,xImxEthSignature:u})).data}({signers:this.signers,request:e,config:this.config})}deposit(e){return async function({signers:e,deposit:t,config:a}){switch(t.type){case"ETH":return q({signers:e,deposit:t,config:a});case"ERC20":return P({signers:e,deposit:t,config:a});case"ERC721":return L({signers:e,deposit:t,config:a})}}({signers:this.signers,deposit:e,config:this.config})}exchangeTransfer(e){return async function({signers:e,request:t,config:a}){await k(e.ethSigner,a.immutableXConfig);const n=new r(a.immutableXConfig.apiConfiguration),i=await e.ethSigner.getAddress(),s=t.amount,o=await n.getExchangeSignableTransfer({id:t.transactionID,getSignableTransferRequest:{sender:i,token:E(t),amount:s,receiver:t.receiver}}),{signable_message:d,payload_hash:c}=o.data,u=await y(d,e.ethSigner),g=await e.starkSigner.signMessage(c),_={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:g},f=await n.createExchangeTransfer({id:t.transactionID,createTransferRequest:_,xImxEthAddress:i,xImxEthSignature:u});return{sent_signature:f?.data.sent_signature,status:f?.data.status?.toString(),time:f?.data.time,transfer_id:f?.data.transfer_id}}({signers:this.signers,request:e,config:this.config})}async isRegisteredOnchain(){return b(await this.signers.starkSigner.getAddress(),this.signers.ethSigner,this.config)}prepareWithdrawal(e){return async function({signers:e,withdrawal:t,config:a}){return R({signers:e,config:a.immutableXConfig,...t})}({signers:this.signers,withdrawal:e,config:this.config})}transfer(e){return async function({signers:{ethSigner:e,starkSigner:a},request:n,config:i}){await k(e,i.immutableXConfig);const s=await e.getAddress(),r=new t(i.immutableXConfig.apiConfiguration),o="ERC721"===n.type?"1":n.amount,d=await r.getSignableTransferV1({getSignableTransferRequest:{sender:s,token:E(n),amount:o,receiver:n.receiver}}),{signable_message:c,payload_hash:u}=d.data,g=await y(c,e),_=await a.signMessage(u),f={sender_stark_key:d.data.sender_stark_key,sender_vault_id:d.data.sender_vault_id,receiver_stark_key:d.data.receiver_stark_key,receiver_vault_id:d.data.receiver_vault_id,asset_id:d.data.asset_id,amount:d.data.amount,nonce:d.data.nonce,expiration_timestamp:d.data.expiration_timestamp,stark_signature:_},l=await r.createTransferV1({createTransferRequest:f,xImxEthAddress:s,xImxEthSignature:g});return{sent_signature:l?.data.sent_signature,status:l?.data.status?.toString(),time:l?.data.time,transfer_id:l?.data.transfer_id}}({signers:this.signers,request:e,config:this.config})}}const M={SWITCH_CHAIN:"wallet_switchEthereumChain",CONNECT:"eth_requestAccounts"};const W="The Metamask provider was not found";async function U({chainID:e}){const t=await h();if(!function(e){return!!e?.request}(t))throw new Error(W);return await async function(e,t){await e.request({method:M.CONNECT}),t&&await e.request({method:M.SWITCH_CHAIN,params:[{chainId:`0x${t.toString(16)}`}]})}(t,e),new p.providers.Web3Provider(t)}const G="message";var V,K;function H(e,t){e&&e.contentWindow&&e.contentWindow.postMessage(t,new URL(e.src).origin)}function Q(e,t,a,n){if(e&&t.source!==e.contentWindow)return;const i=t.data;i.type===a&&n(i.details)}!function(e){e.GET_CONNECTION_REQUEST="GET_CONNECTION_REQUEST",e.CONNECT_WALLET_REQUEST="CONNECT_WALLET_REQUEST",e.SIGN_MESSAGE_REQUEST="SIGN_MESSAGE_REQUEST",e.DISCONNECT_WALLET_REQUEST="DISCONNECT_WALLET_REQUEST"}(V||(V={})),function(e){e.CONNECT_WALLET_RESPONSE="CONNECT_WALLET_RESPONSE",e.SIGN_MESSAGE_RESPONSE="SIGN_MESSAGE_RESPONSE",e.GET_CONNECTION_RESPONSE="GET_CONNECTION_RESPONSE",e.DISCONNECT_WALLET_RESPONSE="DISCONNECT_WALLET_RESPONSE"}(K||(K={}));class B{publicAddress;iframe;constructor(e,t){this.publicAddress=e,this.iframe=t}getAddress(){return this.publicAddress}signMessage(e){return new Promise(((t,a)=>{const n=e=>{Q(this.iframe,e,K.SIGN_MESSAGE_RESPONSE,(e=>{window.removeEventListener(G,n),e.success||a(new Error(e.error?.message)),t(e.data.signedMessage)}))};window.addEventListener(G,n),H(this.iframe,{type:V.SIGN_MESSAGE_REQUEST,details:{starkPublicKey:this.publicAddress,message:e}})}))}getIFrame(){return this.iframe}}const $="imx-wallet-app",F={[S.SANDBOX]:"https://wallets.sandbox.immutable.com",[S.PRODUCTION]:"https://wallets.immutable.com"},j="display: none;";async function z(e){const t=document.querySelector(`iframe#${$}`);return t||await async function(e){return new Promise((t=>{const a=document.createElement("iframe");a.setAttribute("id",$),a.setAttribute("src",F[e]),a.setAttribute("style",j),document.body.appendChild(a),a.onload=()=>t(a)}))}(e)}var J;!function(e){e.PROVIDER_CONNECTION_ERROR="PROVIDER_CONNECTION_ERROR",e.WALLET_CONNECTION_ERROR="WALLET_CONNECTION_ERROR"}(J||(J={}));class Y extends Error{type;constructor(e,t){super(e),this.type=t}}const Z=async(e,t)=>{try{return await e()}catch(e){const a=t.message||`${e.message}`||"UnknownError";throw new Y(a,t.type)}};class ee extends D{static imxSigner;static async connect(e){return await Z((async()=>{const t=await U({chainID:e.immutableXConfig.ethConfiguration.chainID});return this.imxSigner=await async function(e,t){const a=e.getSigner(),n=await a.getAddress(),i=await a.signMessage("Only sign this request if you’ve initiated an action with Immutable X."),s=await z(t);return new Promise(((e,t)=>{const a=n=>{Q(s,n,K.CONNECT_WALLET_RESPONSE,(n=>{window.removeEventListener(G,a),n.success||t(new Error("The L2 IMX Wallet connection has failed")),e(new B(n.data.starkPublicKey,s))}))};window.addEventListener(G,a),H(s,{type:V.CONNECT_WALLET_REQUEST,details:{ethAddress:n,signature:i}})}))}(t,e.baseConfig.environment),new ee(e,t.getSigner(),this.imxSigner)}),{type:J.WALLET_CONNECTION_ERROR})}static async disconnect(){if(!this.imxSigner)throw new Y("Attempted to disconnect from the MetaMask IMX provider without an established connection",J.PROVIDER_CONNECTION_ERROR);return Z((async()=>{await async function(e){const t=e.getIFrame();return new Promise(((a,n)=>{const i=e=>{Q(t,e,K.DISCONNECT_WALLET_RESPONSE,(e=>{window.removeEventListener(G,i),!e.success&&e.error&&n(e.error),t.remove(),a()}))};window.addEventListener(G,i),H(t,{type:V.DISCONNECT_WALLET_REQUEST,details:{starkPublicKey:e.getAddress()}})}))}(this.imxSigner)}),{type:J.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",J.PROVIDER_CONNECTION_ERROR);return Z((async()=>await this.imxSigner.signMessage(e)),{type:J.PROVIDER_CONNECTION_ERROR})}}class te{immutableXConfig;baseConfig;constructor({baseConfig:t,overrides:a}){if(this.baseConfig=t,a)this.immutableXConfig=a.immutableXConfig;else switch(t.environment){case S.SANDBOX:this.immutableXConfig=e.SANDBOX;break;case S.PRODUCTION:this.immutableXConfig=e.PRODUCTION}}}export{D as GenericIMXProvider,ee as MetaMaskIMXProvider,te as ProviderConfiguration};