@otim/sdk
Version:
Otim's TypeScript SDK for blockchain automation and smart contract interactions
3 lines • 31.7 kB
JavaScript
;var viem=require('viem'),St=require('axios'),a=require('zod'),siwe=require('viem/siwe');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var St__default=/*#__PURE__*/_interopDefault(St);var a__default=/*#__PURE__*/_interopDefault(a);var xt=Object.defineProperty;var At=(t,e,n)=>e in t?xt(t,e,{enumerable:true,configurable:true,writable:true,value:n}):t[e]=n;var b=(t,e,n)=>At(t,typeof e!="symbol"?e+"":e,n);var ue="https://api.otim.com";var Rt=3e4;function pe(t){let e=St__default.default.create({timeout:Rt,withCredentials:false,headers:{"Content-Type":"application/json",Accept:"application/json"},...t});return e.interceptors.request.use(n=>(n.data&&typeof n.data=="object"&&!(n.data instanceof FormData)&&(n.headers["Content-Type"]="application/json"),n),n=>Promise.reject(n)),e}var G=(t,e)=>a.z.string().regex(t,e),me=(t,e)=>{let n=e.safeParse(t);if(!n.success)throw new Error(`parseSchema: invalid input values ${JSON.stringify(n.error)}`);return n.data};var bt=a.z.object({code:a.z.string().nullish(),message:a.z.string().nullish(),status:a.z.number().nullish()}),Ct=a.z.object({message:a.z.string().nullish(),errors:a.z.array(bt).nullish()}),Tt=a.z.object({errorCode:a.z.union([a.z.number(),a.z.string()]).nullish(),errorMessage:a.z.string().nullish()}),Pt=Tt,vt=a.z.object({data:a.z.object({errorCode:a.z.union([a.z.number(),a.z.string()]).nullish(),errorMessage:a.z.string().nullish()}).passthrough()}).passthrough();function Dt(t){let e=vt.safeParse(t.body);if(e.success){let{errorCode:s,errorMessage:i}=e.data.data;return {code:s,message:i}}let n=Pt.safeParse(t.body);if(n.success){let{errorCode:s,errorMessage:i}=n.data;return {code:s,message:i}}return null}var q="UNKNOWN",Z="An unexpected error occurred";function de(t,e){let n=e,s=Ct.safeParse(t.body);if(!s.success||!s.data.errors?.[0]){let r=Dt(t);if(r){let u=r.code,l=r.message;return {code:typeof u=="number"?String(u):u??q,message:l??n}}return {code:q,message:n}}let{message:i,code:o}=s.data.errors[0];return {code:o??q,message:i??n}}var B=class extends Error{constructor(n,s="UNKNOWN",i){super(n);this.code=s;this.status=i;this.name="ServiceError";}},C={GET:"GET",POST:"POST",PUT:"PUT",DELETE:"DELETE"},g=class{constructor(e){this.instance=e;}async get(e,n={}){return "responseSchema"in n?this.requestWithSchema({url:e,method:C.GET,...n}):this.requestWithoutSchema({url:e,method:C.GET,...n})}async post(e,n={}){return "responseSchema"in n?this.requestWithSchema({url:e,method:C.POST,...n}):this.requestWithoutSchema({url:e,method:C.POST,...n})}async put(e,n={}){return "responseSchema"in n?this.requestWithSchema({url:e,method:C.PUT,...n}):this.requestWithoutSchema({url:e,method:C.PUT,...n})}async delete(e,n={}){return "responseSchema"in n?this.requestWithSchema({url:e,method:C.DELETE,...n}):this.requestWithoutSchema({url:e,method:C.DELETE,...n})}async requestWithSchema(e){try{let{url:n,method:s,data:i,params:o,responseSchema:r,...u}=e,l=await this.instance.request({url:n,method:s,data:i,params:o,...u});return {data:me(l.data,r)}}catch(n){throw this.handleError(n)}}async requestWithoutSchema(e){try{let{url:n,method:s,data:i,params:o,...r}=e;return {data:(await this.instance.request({url:n,method:s,data:i,params:o,...r})).data}}catch(n){throw this.handleError(n)}}handleError(e){if(e instanceof B)return e;if(this.isAxiosError(e)){let i=e.response?.status,{message:o,code:r}=de({body:e.response?.data},"This request failed.");return new B(o,r,i)}let s=e instanceof Error?e.message:Z;return new B(s,q)}isAxiosError(e){return e!==null&&typeof e=="object"&&"response"in e}};var wt={Undelegated:"Undelegated",Pending:"Pending",Delegated:"Delegated",Expired:"Expired",Errored:"Errored"},Et=Object.values(wt),Ot=a.z.enum(Et);a.z.object({address:a.z.string(),chainId:a.z.number()});var le=a.z.object({delegationStatus:Ot});a.z.object({signedAuthorization:a.z.string(),signerAddress:a.z.string()});var ye=a.z.preprocess(t=>typeof t=="string"?{success:true,transactionHash:t}:t,a.z.object({success:a.z.boolean(),transactionHash:a.z.string().optional(),message:a.z.string().optional()}));var L=class extends g{async getStatus(e){return this.get("/delegation/status",{data:e,responseSchema:le})}async create(e){return this.post("/delegation/new",{data:e,responseSchema:ye})}};var fe=a.z.object({v:a.z.number(),r:a.z.string(),s:a.z.string()}),K=a.z.object({yParity:a.z.number(),r:a.z.string(),s:a.z.string()});a.z.object({siwe:a.z.string(),signature:fe});var he=a.z.object({authorization:a.z.string()}),ge=a.z.any();var W=class extends g{async login(e){return this.post("/auth/login",{data:e,responseSchema:he})}async logout(){return this.post("/auth/logout",{responseSchema:ge})}};var kt=/^(19|20)\d{2}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/,Gt=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})?$/,qt=/^(0[1-9]|1[0-2])\/(0[1-9]|[12][0-9]|3[01])\/(19|20)\d{2}$/,Bt=/^(0[1-9]|1[0-2]):[0-5][0-9]:[0-5][0-9] (AM|PM)$/,X=a.z.union([a.z.number().finite(),a.z.string().regex(/^-?\d*\.?\d+(?:[eE][-+]?\d+)?$/).transform(Number)]);a.z.string().regex(/^-?\d*\.?\d+$/).refine(t=>!isNaN(parseFloat(t)),{message:"Must be a valid decimal number"});a.z.union([a.z.bigint(),a.z.string().regex(/^-?\d+$/).transform(BigInt)]);var d=a.z.string().startsWith("0x").transform(t=>t),v=d,F=d,xe=d;G(kt);G(Gt);var Ae=G(qt);G(Bt);var zt={Asc:"asc",Desc:"desc"},j=Object.values(zt);a.z.object({chainId:a.z.number()});var Se=a.z.object({otimDelegateAddress:a.z.string()});a.z.object({chainId:a.z.number()});var Re=a.z.object({tokens:a.z.array(a.z.object({symbol:a.z.string(),address:v}))}),Ie=a.z.object({chains:a.z.array(a.z.object({chainId:a.z.number(),chainName:a.z.string()}))});a.z.object({chainId:a.z.number()});var be=a.z.object({address:v}),Ce=a.z.object({"otim.db.liveness":a.z.boolean()});var V=class extends g{async getDelegateAddress(e){return this.get(`/config/delegate/address/${e.chainId}`,{responseSchema:Se})}async getTokens(e){return this.get(`/config/tokens/${e.chainId}`,{responseSchema:Re})}async getChains(){return this.get("/config/chains",{responseSchema:Ie})}async getInstructionStorageAddress(e){return this.get(`/config/instruction/storage/address/${e.chainId}`,{responseSchema:be})}async getHealth(){return this.get("/health",{responseSchema:Ce})}};var p={DeactivateInstruction:"deactivateInstruction",RefuelERC20:"refuelERC20",Refuel:"refuel",SweepDepositAccountERC20:"sweepDepositAccountERC20",SweepDepositAccount:"sweepDepositAccount",SweepSkipCCTPDepositAccount:"sweepSkipCCTPDepositAccount",TransferERC20:"transferERC20",Transfer:"transfer",UniswapV3ExactInput:"uniswapV3ExactInput"};var Ft={PendingActivation:"PendingActivation",Active:"Active",PendingDeactivation:"PendingDeactivation",Deactivated:"Deactivated",Errored:"Errored",Completed:"Completed",UserNotDelegated:"UserNotDelegated"},Mt=Object.values(Ft),Lt=a__default.default.enum(Mt),Y=Object.values(p);a__default.default.enum(Y);var J={Now:"now",DateTime:"datetime"},Wt=Object.values(J),Te=a__default.default.object({type:a__default.default.enum(Wt)}),jt=Te.extend({type:a__default.default.literal(J.Now)}),Vt=Te.extend({type:a__default.default.literal(J.DateTime),startDate:Ae,startTime:a__default.default.string()});a__default.default.discriminatedUnion("type",[jt,Vt]);var Q={UntilDeactivated:"until-deactivated",MaxExecutions:"max-executions"},Pe=a__default.default.object({}),Nt=Pe.extend({type:a__default.default.literal(Q.UntilDeactivated)}),Ht=Pe.extend({type:a__default.default.literal(Q.MaxExecutions),maxExecutions:X});a__default.default.discriminatedUnion("type",[Nt,Ht]);var ee={UntilDeactivated:"until-deactivated",TimeLimited:"time-limited"},ve=a__default.default.object({}),Ut=ve.extend({type:a__default.default.literal(ee.UntilDeactivated)}),$t=ve.extend({type:a__default.default.literal(ee.TimeLimited),retryCount:X});a__default.default.discriminatedUnion("type",[Ut,$t]);var _t={Days:"days",Hours:"hours",Minutes:"minutes",Seconds:"seconds"},De=Object.values(_t),Zt=a__default.default.object({executionStatus:Lt,executionCounter:a__default.default.number().int(),lastExecuted:a__default.default.number().int()}),te=a__default.default.object({instructionId:F,startAt:a__default.default.string().nullish(),interval:a__default.default.number().nullish(),timeout:a__default.default.number().nullish(),maxExecutions:a__default.default.number().nullish(),executionState:Zt,actionName:a__default.default.string().optional(),arguments:a__default.default.any(),nickname:a__default.default.string().nullish(),lastInstructedValue:a__default.default.string(),totalInstructedValue:a__default.default.string(),instructedTokenAddress:v.nullish()}),we=a__default.default.array(te),Kt=a__default.default.object({instructionId:F,chainId:a__default.default.number().int(),executionCount:a__default.default.number().int(),onTimeCount:a__default.default.number().int(),lateCount:a__default.default.number().int(),wasActivatedDuring:a__default.default.boolean(),amount:a__default.default.number().default(0),instructedValue:a__default.default.string().nullish().default("0"),instructedTokenAddress:a__default.default.string().nullish().default(null)}),Xt=a__default.default.array(Kt),Ee=a__default.default.record(Xt);var Yt=a.z.object({action:d,arguments:d,maxExecutions:d,salt:d,nickname:a.z.string().nullish()});a.z.object({address:d,chainId:a.z.number()});a.z.array(te);a.z.object({address:d,chainId:a.z.number(),instructionIds:a.z.array(d),from:a.z.string(),to:a.z.string(),skip:a.z.number().optional(),take:a.z.number().optional(),sort:a.z.enum(j),timeScale:a.z.enum(De).optional()});a.z.object({address:d,chainId:a.z.number(),salt:a.z.number(),maxExecutions:a.z.number(),actionArguments:a.z.record(a.z.enum(Y),a.z.unknown())});var Oe=Yt;a.z.object({nickname:a.z.string().optional(),address:d,chainId:a.z.number(),salt:d,maxExecutions:d,action:d,arguments:d,activationSignature:K});var ke=a.z.object({instructionId:d});a.z.object({address:d,chainId:a.z.number(),deactivation:a.z.object({instructionId:d}),deactivationSignature:K});var Ge=a.z.unknown();a.z.object({address:d,instructionId:d,chainId:a.z.number()});var qe=a.z.object({action:d,actionArguments:a.z.unknown(),actionName:a.z.string().nullish(),salt:d,maxExecutions:d,nickname:a.z.string().nullish()});a.z.object({chainId:a.z.number()});var Be=a.z.object({slowMaxPriorityFeeEstimate:a.z.number(),normalMaxPriorityFeeEstimate:a.z.number(),fastMaxPriorityFeeEstimate:a.z.number()});var N=class extends g{async getAll(e){return this.get("/instructions/all",{data:e,responseSchema:we})}async getSummary(e){return {data:(await this.get("/instructions/summary",{data:e,responseSchema:a.z.array(Ee)})).data.reduce((i,o)=>Object.assign(i,o),{})}}async build(e){return this.post("/instruction/build",{data:e,responseSchema:Oe})}async activate(e){return this.post("/instruction/new",{data:e,responseSchema:ke})}async deactivate(e){return this.post("/instruction/deactivate",{data:e,responseSchema:Ge})}async getDetails(e){return this.get("/instruction/details",{data:e,responseSchema:qe})}async getMaxPriorityFeePerGasEstimate(e){return this.get(`/instruction/estimate/max_priority_fee_per_gas/${e.chainId}`,{responseSchema:Be})}};var ze=a.z.object({instructionId:F,transactionHash:xe.optional(),blockHash:a.z.string().nullable(),transactionStatus:a.z.string(),error:a.z.string().nullish(),startedAt:a.z.string(),startedAtBlock:a.z.number(),finishedAt:a.z.string().nullable(),finishedAtBlock:a.z.number().nullable(),amount:a.z.object({value:a.z.number(),token:a.z.string()}).nullish(),instructedValue:a.z.string(),instructedTokenAddress:a.z.string().nullable(),executionNum:a.z.number()});ze.extend({amount:a.z.object({value:a.z.number(),token:a.z.string()})});a.z.object({address:v,chainId:a.z.number(),instructionIds:a.z.array(a.z.string()),from:a.z.string(),to:a.z.string(),skip:a.z.number(),take:a.z.number(),sort:a.z.enum(j)});var Fe=a.z.array(ze);var H=class extends g{async getAll(e){return this.get("/transactions",{data:e,responseSchema:Fe})}};var ne=class{constructor(e={}){b(this,"clientConfig");b(this,"instance");b(this,"authService");b(this,"configService");b(this,"delegationService");b(this,"instructionService");b(this,"transactionService");this.clientConfig=e,this.instance=pe({baseURL:this.clientConfig.baseURL??ue,...this.clientConfig.withCredentials!==void 0&&{withCredentials:this.clientConfig.withCredentials},...this.clientConfig.headers&&{headers:this.clientConfig.headers},...this.clientConfig.axiosConfig}),this.clientConfig.authorizationToken&&this.setAuthToken(this.clientConfig.authorizationToken);}get auth(){return this.authService||(this.authService=new W(this.instance)),this.authService}get config(){return this.configService||(this.configService=new V(this.instance)),this.configService}get delegation(){return this.delegationService||(this.delegationService=new L(this.instance)),this.delegationService}get instruction(){return this.instructionService||(this.instructionService=new N(this.instance)),this.instructionService}get transaction(){return this.transactionService||(this.transactionService=new H(this.instance)),this.transactionService}setAuthToken(e){this.instance.defaults.headers.common.Authorization=`Bearer ${e}`;}clearAuth(){delete this.instance.defaults.headers.common.Authorization;}};function se(t={}){return new ne(t)}se();var Le=t=>t.startsWith("0x")?t:`0x${t}`,We=t=>{if(t==null)return 0;let e;if(typeof t=="number")e=t;else if(typeof t=="bigint")e=Number(t);else if(typeof t=="string"){let n=t.trim(),s=n.startsWith("0x")?parseInt(n,16):parseInt(n,10);if(Number.isNaN(s))throw new Error("invalid yParity value");e=s;}else throw new Error("invalid yParity type");return Math.abs(e)%2===0?0:1},U=t=>{if(typeof t!="string")throw new Error("Signature must be a string");if(!t.startsWith("0x"))throw new Error('Signature must start with "0x"');if(t.length!==132)throw new Error('Signature must be 65 bytes (130 hex chars) plus "0x" = 132 total length');let e=t.slice(2,66),n=t.slice(66,130),s=t.slice(130,132);return {v:parseInt(s,16),r:`0x${e}`,s:`0x${n}`}};function Qt(t,e,n,s,i,o){if(typeof t=="object"){let r=t,u=We(r.yParity),l=[viem.toHex(r.chainId),Le(r.address),r.nonce===0?"0x":viem.toHex(r.nonce),u===0?"0x":viem.toHex(u),r.r,r.s];return viem.toRlp(l)}else {let r=t,u=We(s),l=[viem.toHex(r),Le(e),n===0?"0x":viem.toHex(n),u===0?"0x":viem.toHex(u),i,o];return viem.toRlp(l)}}var je=t=>{let e=t.v,n=t.r,s=t.s;return {yParity:tn(e),r:n,s}},en=t=>t===0||t===1||t===27||t===28||t>=35,tn=t=>{if(!en(t))return 0;let e=t<=1?1:0,n=t%2===e;return Number(n)%2};async function sn(t,e,{domain:n,uri:s,address:i,chainId:o}){if(!e.account)throw new Error("No account connected to wallet client");let r=siwe.createSiweMessage({domain:n,uri:s,address:i,statement:"Welcome to Otim! By signing in, you accept the Otim Terms and Conditions (https://otim.com/tac). This request will not trigger a blockchain transaction or cost any gas fees.",version:"1",chainId:o,nonce:Date.now().toString(),issuedAt:new Date}),u=await e.signMessage({account:e.account,message:r}),l=U(u);return (await t.auth.login({siwe:r,signature:l})).data}async function rn(t){let e=await t.auth.logout();return t.clearAuth(),e.data}async function on(t,e){if(!e||typeof e!="string")throw new Error("Authorization token must be a non-empty string");t.clearAuth(),t.setAuthToken(e);}function Ve(t,e){return {login:n=>sn(t,e,n),logout:()=>rn(t),setAuthorizationHeader:n=>on(t,n)}}async function an(t,{chainId:e}){return (await t.config.getTokens({chainId:e})).data}async function cn(t){return (await t.config.getChains()).data}async function un(t,{chainId:e}){let n={chainId:e};return (await t.instruction.getMaxPriorityFeePerGasEstimate(n)).data}async function pn(t){return (await t.config.getHealth()).data}async function mn(t,{chainId:e}){let n={chainId:e};return (await t.config.getInstructionStorageAddress(n)).data}async function ie(t,{chainId:e}){return (await t.config.getDelegateAddress({chainId:e})).data}function Ne(t){return {chains:()=>cn(t),health:()=>pn(t),getMaxPriorityFeeEstimate:e=>un(t,e),getDelegateAddress:e=>ie(t,e),getInstructionStorageAddress:e=>mn(t,e),getTokens:e=>an(t,e)}}async function dn(t,e,n){let s={signedAuthorization:e,signerAddress:n};return t.delegation.create(s)}async function ln(t,e,{address:n,chainId:s}={}){if(!e.account)throw new Error("No account connected to wallet client");if(!e.chain)throw new Error("No chain available on wallet client");let i=n||e.account.address,o=s||e.chain.id;return (await t.delegation.getStatus({address:i,chainId:o})).data}async function yn(t,e,{address:n,signedAuthorization:s}){if(!e.account)throw new Error("No account connected to wallet client");if(!e.chain)throw new Error("No chain available on wallet client");let i=n||e.account.address;return await dn(t,s,i)}function He(t,e){return {getDelegationStatus:(n={})=>ln(t,e,n),delegate:n=>yn(t,e,n)}}var Ue={types:{Instruction:[{name:"salt",type:"uint256"},{name:"maxExecutions",type:"uint256"},{name:"action",type:"address"},{name:"deactivateInstruction",type:"DeactivateInstruction"}],DeactivateInstruction:[{name:"instructionId",type:"bytes32"},{name:"fee",type:"Fee"}],Fee:[{name:"token",type:"address"},{name:"maxBaseFeePerGas",type:"uint256"},{name:"maxPriorityFeePerGas",type:"uint256"},{name:"executionFee",type:"uint256"}]}};var $e={types:{Instruction:[{name:"salt",type:"uint256"},{name:"maxExecutions",type:"uint256"},{name:"action",type:"address"},{name:"refuelERC20",type:"RefuelERC20"}],RefuelERC20:[{name:"token",type:"address"},{name:"target",type:"address"},{name:"threshold",type:"uint256"},{name:"endBalance",type:"uint256"},{name:"fee",type:"Fee"}],Fee:[{name:"token",type:"address"},{name:"maxBaseFeePerGas",type:"uint256"},{name:"maxPriorityFeePerGas",type:"uint256"},{name:"executionFee",type:"uint256"}]}};var _e={types:{Instruction:[{name:"salt",type:"uint256"},{name:"maxExecutions",type:"uint256"},{name:"action",type:"address"},{name:"refuel",type:"Refuel"}],Refuel:[{name:"target",type:"address"},{name:"threshold",type:"uint256"},{name:"endBalance",type:"uint256"},{name:"gasLimit",type:"uint256"},{name:"fee",type:"Fee"}],Fee:[{name:"token",type:"address"},{name:"maxBaseFeePerGas",type:"uint256"},{name:"maxPriorityFeePerGas",type:"uint256"},{name:"executionFee",type:"uint256"}]}};var Ze={types:{Instruction:[{name:"salt",type:"uint256"},{name:"maxExecutions",type:"uint256"},{name:"action",type:"address"},{name:"sweepDepositAccountERC20",type:"SweepDepositAccountERC20"}],SweepDepositAccountERC20:[{name:"token",type:"address"},{name:"depositor",type:"address"},{name:"recipient",type:"address"},{name:"threshold",type:"uint256"},{name:"fee",type:"Fee"}],Fee:[{name:"token",type:"address"},{name:"maxBaseFeePerGas",type:"uint256"},{name:"maxPriorityFeePerGas",type:"uint256"},{name:"executionFee",type:"uint256"}]}};var Ke={types:{Instruction:[{name:"salt",type:"uint256"},{name:"maxExecutions",type:"uint256"},{name:"action",type:"address"},{name:"sweepDepositAccount",type:"SweepDepositAccount"}],SweepDepositAccount:[{name:"depositor",type:"address"},{name:"recipient",type:"address"},{name:"threshold",type:"uint256"},{name:"fee",type:"Fee"}],Fee:[{name:"token",type:"address"},{name:"maxBaseFeePerGas",type:"uint256"},{name:"maxPriorityFeePerGas",type:"uint256"},{name:"executionFee",type:"uint256"}]}};var Xe={types:{Instruction:[{name:"salt",type:"uint256"},{name:"maxExecutions",type:"uint256"},{name:"action",type:"address"},{name:"sweepSkipCCTPDepositAccount",type:"SweepSkipCCTPDepositAccount"}],SweepSkipCCTPDepositAccount:[{name:"depositor",type:"address"},{name:"destinationDomain",type:"uint32"},{name:"destinationMintRecipient",type:"bytes32"},{name:"threshold",type:"uint256"},{name:"fee",type:"Fee"}],Fee:[{name:"token",type:"address"},{name:"maxBaseFeePerGas",type:"uint256"},{name:"maxPriorityFeePerGas",type:"uint256"},{name:"executionFee",type:"uint256"}]}};var Ye={types:{Instruction:[{name:"salt",type:"uint256"},{name:"maxExecutions",type:"uint256"},{name:"action",type:"address"},{name:"transferERC20",type:"TransferERC20"}],TransferERC20:[{name:"token",type:"address"},{name:"target",type:"address"},{name:"value",type:"uint256"},{name:"schedule",type:"Schedule"},{name:"fee",type:"Fee"}],Schedule:[{name:"startAt",type:"uint256"},{name:"startBy",type:"uint256"},{name:"interval",type:"uint256"},{name:"timeout",type:"uint256"}],Fee:[{name:"token",type:"address"},{name:"maxBaseFeePerGas",type:"uint256"},{name:"maxPriorityFeePerGas",type:"uint256"},{name:"executionFee",type:"uint256"}]}};var Je={types:{Instruction:[{name:"salt",type:"uint256"},{name:"maxExecutions",type:"uint256"},{name:"action",type:"address"},{name:"transfer",type:"Transfer"}],Transfer:[{name:"target",type:"address"},{name:"value",type:"uint256"},{name:"gasLimit",type:"uint256"},{name:"schedule",type:"Schedule"},{name:"fee",type:"Fee"}],Schedule:[{name:"startAt",type:"uint256"},{name:"startBy",type:"uint256"},{name:"interval",type:"uint256"},{name:"timeout",type:"uint256"}],Fee:[{name:"token",type:"address"},{name:"maxBaseFeePerGas",type:"uint256"},{name:"maxPriorityFeePerGas",type:"uint256"},{name:"executionFee",type:"uint256"}]}};var Qe={types:{Instruction:[{name:"salt",type:"uint256"},{name:"maxExecutions",type:"uint256"},{name:"action",type:"address"},{name:"uniswapV3ExactInput",type:"UniswapV3ExactInput"}],UniswapV3ExactInput:[{name:"recipient",type:"address"},{name:"tokenIn",type:"address"},{name:"tokenOut",type:"address"},{name:"feeTier",type:"uint24"},{name:"amountIn",type:"uint256"},{name:"floorAmountOut",type:"uint256"},{name:"meanPriceLookBack",type:"uint32"},{name:"maxPriceDeviationBPS",type:"uint32"},{name:"schedule",type:"Schedule"},{name:"fee",type:"Fee"}],Schedule:[{name:"startAt",type:"uint256"},{name:"startBy",type:"uint256"},{name:"interval",type:"uint256"},{name:"timeout",type:"uint256"}],Fee:[{name:"token",type:"address"},{name:"maxBaseFeePerGas",type:"uint256"},{name:"maxPriorityFeePerGas",type:"uint256"},{name:"executionFee",type:"uint256"}]}};var Cn=Ue,Tn=$e,Pn=_e,vn=Ze,Dn=Ke,wn=Xe,En=Ye,On=Je,kn=Qe,et={[p.DeactivateInstruction]:Cn,[p.RefuelERC20]:Tn,[p.Refuel]:Pn,[p.SweepDepositAccountERC20]:vn,[p.SweepDepositAccount]:Dn,[p.SweepSkipCCTPDepositAccount]:wn,[p.TransferERC20]:En,[p.Transfer]:On,[p.UniswapV3ExactInput]:kn};function tt(t,e){return {chainId:e,name:"OtimDelegate",salt:viem.keccak256(viem.toHex("ON_TIME_INSTRUCTED_MONEY")),verifyingContract:t,version:"1"}}function nt(t){return et[t].types}var $={name:"target",type:"address"},re={name:"schedule",type:"tuple",components:[{name:"startAt",type:"uint256"},{name:"startBy",type:"uint256"},{name:"interval",type:"uint256"},{name:"timeout",type:"uint256"}]},oe={name:"token",type:"address"},I={name:"fee",type:"tuple",components:[{name:"token",type:"address"},{name:"maxBaseFeePerGas",type:"uint256"},{name:"maxPriorityFeePerGas",type:"uint256"},{name:"executionFee",type:"uint256"}]},Bn=[$,{name:"threshold",type:"uint256"},{name:"endBalance",type:"uint256"},{name:"gasLimit",type:"uint256"},I],zn=[oe,$,{name:"threshold",type:"uint256"},{name:"endBalance",type:"uint256"},I],Fn=[$,{name:"value",type:"uint256"},{name:"gasLimit",type:"uint256"},re,I],Mn=[oe,$,{name:"value",type:"uint256"},re,I],Ln=[{name:"recipient",type:"address"},{name:"tokenIn",type:"address"},{name:"tokenOut",type:"address"},{name:"feeTier",type:"uint24"},{name:"amountIn",type:"uint256"},{name:"floorAmountOut",type:"uint256"},{name:"meanPriceLookBack",type:"uint32"},{name:"maxPriceDeviationBPS",type:"uint32"},re,I],Wn=[{name:"depositor",type:"address"},{name:"recipient",type:"address"},{name:"threshold",type:"uint256"},I],jn=[oe,{name:"depositor",type:"address"},{name:"recipient",type:"address"},{name:"threshold",type:"uint256"},I],Vn=[{name:"depositor",type:"address"},{name:"destinationDomain",type:"uint32"},{name:"destinationMintRecipient",type:"bytes32"},{name:"threshold",type:"uint256"},I],Nn=[{name:"instructionId",type:"bytes32"},I],st={[p.Refuel]:Bn,[p.RefuelERC20]:zn,[p.Transfer]:Fn,[p.TransferERC20]:Mn,[p.UniswapV3ExactInput]:Ln,[p.SweepDepositAccount]:Wn,[p.SweepDepositAccountERC20]:jn,[p.SweepSkipCCTPDepositAccount]:Vn,[p.DeactivateInstruction]:Nn};function it(t,e){if(!viem.isHex(t))throw new Error(`Invalid hex data format in ${String(e)}: ${String(t)}`);if(viem.size(t)===0)throw new Error(`Empty hex data provided for ${String(e)}`)}function Zn(t){return t.map((e,n)=>e.name||`param_${String(n)}`)}function Kn(t,e){let n=Zn(t);return Object.fromEntries(n.map((s,i)=>[s,e[i]]))}function Xn(t,e,n,s){if(!(e in t)){let r=Object.keys(t).join(", ");throw new Error(`Unsupported ABI type: "${e}". Available types: ${r}`)}let i=t[e];if(!i||i.length===0)throw new Error(`No ABI parameters defined for type: ${e}`);it(n,`type "${e}"`);let o=n;try{let r=viem.decodeAbiParameters(i,o),u=Kn(i,r);return {values:r,named:u}}catch(r){let u=r instanceof Error?r.message:String(r);throw new Error(`Failed to decode ABI data for type "${e}": ${u}`)}}function rt(t,e){return Xn(st,t,e).named}function ot(){return Math.floor(Math.random()*Number.MAX_SAFE_INTEGER)}var w=(t={})=>({token:t.token||"0x0000000000000000000000000000000000000000",maxBaseFeePerGas:viem.toHex(t.maxBaseFeePerGas||0n),maxPriorityFeePerGas:viem.toHex(t.maxPriorityFeePerGas||0n),executionFee:t.executionFee||0}),ut=(t,e={})=>t===p.SweepDepositAccount||t===p.SweepDepositAccountERC20||t===p.SweepSkipCCTPDepositAccount?{}:{schedule:{startAt:e.startAt||0,startBy:e.startBy||0,interval:e.interval||60,timeout:e.timeout||0}};function ae(t,e){if(!e.address&&!t.account)throw new Error("No account connected to wallet client");if(!e.chainId&&!t.chain)throw new Error("No chain available on wallet client");return {address:e.address||t.account.address,chainId:e.chainId||t.chain.id}}function Jn(t){return t||ot()}async function E(t,e,n,s,i){let o=ae(e,i),r=Jn(i.salt),u={address:o.address,chainId:o.chainId,salt:r,maxExecutions:i.maxExecutions??0,actionArguments:{[n]:s}},l=await t.instruction.build(u),x=async S=>{let R={instruction:l.data,actionType:n};return S?.nickname!==void 0&&(R.nickname=S.nickname),ls(t,e,R)};return {instruction:l.data,actionType:n,activate:x}}function pt(t){return t?p.TransferERC20:p.Transfer}function Qn(t){let{target:e,value:n,token:s,gasLimit:i=0n}=t,o=pt(s),r={target:e,value:viem.toHex(n),...s&&{token:s},...ut(o,t.schedule),fee:w(t.fee)};return o===p.Transfer?{...r,gasLimit:viem.toHex(i)}:r}async function es(t,e,n){let s=pt(n.token),i=Qn(n);return E(t,e,s,i,n)}function ts(t){return t?p.SweepDepositAccountERC20:p.SweepDepositAccount}function ns(t){let{depositor:e,recipient:n,threshold:s,token:i}=t,o={depositor:e,recipient:n,threshold:viem.toHex(s||0n),fee:w(t.fee)};return i?{...o,token:i}:o}async function ss(t,e,n){let s=ts(n.token),i=ns(n);return E(t,e,s,i,n)}async function is(t,e,n){let s=p.SweepSkipCCTPDepositAccount,i={depositor:n.depositor,destinationDomain:n.destinationDomain,destinationMintRecipient:n.destinationMintRecipient,threshold:viem.toHex(n.threshold||0n),fee:w(n.fee)};return E(t,e,s,i,n)}function rs(t,e){let{tokenIn:n,tokenOut:s,amountIn:i,floorAmountOut:o,feeTier:r=500,meanPriceLookBack:u,maxPriceDeviationBps:l,schedule:x,fee:S}=t,R=p.UniswapV3ExactInput;return {recipient:e,tokenIn:n,tokenOut:s,amountIn:viem.toHex(i),floorAmountOut:viem.toHex(o),feeTier:r,meanPriceLookBack:u??1800,maxPriceDeviationBps:l??5e3,...ut(R,x),fee:w(S)}}async function os(t,e,n){let s=ae(e,n),i=n.recipient||s.address,o=rs(n,i);return E(t,e,p.UniswapV3ExactInput,o,n)}function mt(t){return t?p.RefuelERC20:p.Refuel}function as(t,e){let{threshold:n,endBalance:s,token:i,gasLimit:o,fee:r}=t,u=mt(i),l={target:e,threshold:viem.toHex(n),endBalance:viem.toHex(s),...i&&{token:i},fee:w(r)};return u===p.Refuel?{...l,gasLimit:viem.toHex(o||0n)}:l}async function cs(t,e,n){let s=ae(e,n),i=n.target||s.address,o=mt(n.token),r=as(n,i);return E(t,e,o,r,n)}function us(t){return {instructionId:t.instructionId,fee:w(t.fee)}}async function ps(t,e,n){let s=p.DeactivateInstruction,i=us(n);return E(t,e,s,i,n)}async function ms(t,e,{address:n,chainId:s}={}){if(!n&&!e.account)throw new Error("No account connected to wallet client");if(!s&&!e.chain)throw new Error("No chain available on wallet client");let i=n||e.account.address,o=s||e.chain.id,r={address:i,chainId:o};return (await t.instruction.getAll(r)).data}async function ds(t,e,{instructionId:n}){if(!e.account)throw new Error("No account connected to wallet client");if(!e.chain)throw new Error("No chain available on wallet client");let s=e.account.address,i=e.chain.id,o={address:s,chainId:i,instructionId:n};return (await t.instruction.getDetails(o)).data}async function ls(t,e,{instruction:n,actionType:s,nickname:i}){if(!e.account)throw new Error("No account connected to wallet client");if(!e.chain)throw new Error("No chain available on wallet client");let o=e.account.address,r=e.chain.id,u=await ie(t,{chainId:r}),l=tt(u.otimDelegateAddress,r),x=nt(s),S=rt(s,n.arguments),[R]=viem.decodeAbiParameters([{type:"uint256"}],viem.pad(n.salt)),[O]=viem.decodeAbiParameters([{type:"uint256"}],viem.pad(n.maxExecutions)),M={salt:R,maxExecutions:O,action:n.action,[s]:S},k={domain:l,types:x,primaryType:"Instruction",message:M},ce=await e.signTypedData({account:e.account,...k});if(!(await viem.recoverTypedDataAddress({domain:k.domain,types:k.types,primaryType:k.primaryType,message:k.message,signature:ce})===o))throw new Error("Signature verification failed. Recovered address doesn't match user address");let ft=U(ce),ht=je(ft),gt={nickname:i,address:o,chainId:r,salt:n.salt,maxExecutions:n.maxExecutions,action:n.action,arguments:n.arguments,activationSignature:ht};return (await t.instruction.activate(gt)).data}function dt(t,e){return {getAll:(n={})=>ms(t,e,n),details:n=>ds(t,e,n),build:{transfer:n=>es(t,e,n),sweep:n=>ss(t,e,n),sweepSkipCCTPDepositAccount:n=>is(t,e,n),swap:n=>os(t,e,n),refuel:n=>cs(t,e,n),deactivate:n=>ps(t,e,n)}}}async function ys(t,e,{address:n,chainId:s,instructionIds:i,from:o,to:r,skip:u=0,take:l=20,sort:x="desc"}){if(!n&&!e.account)throw new Error("No account connected to wallet client");if(!s&&!e.chain)throw new Error("No chain available on wallet client");let S=n||e.account.address,R=s||e.chain.id,O={address:S,chainId:R,instructionIds:i,from:o,to:r,skip:u,take:l,sort:x};return (await t.transaction.getAll(O)).data}function lt(t,e){return {getList:n=>ys(t,e,n)}}function gs(t){let{authorizationToken:e,baseURL:n,withCredentials:s,headers:i,axiosConfig:o}=t,r=se({...e&&{authorizationToken:e},...n&&{baseURL:n},...s!==void 0&&{withCredentials:s},...i&&{headers:i},...o&&{axiosConfig:o}}),u,l;"walletClient"in t?u=t.walletClient:(u=viem.createWalletClient({chain:t.chain,transport:t.transport,account:t.account}),l=viem.createPublicClient({chain:t.chain,transport:t.transport}));let x=Ve(r,u),S=He(r,u),R=Ne(r),O=dt(r,u),M=lt(r,u);return {auth:x,delegation:S,config:R,instruction:O,transaction:M,publicClient:l}}var _={development:{baseURL:"/api",withCredentials:false},production:{withCredentials:false,headers:{"Content-Type":"application/json",Accept:"application/json"}},withCredentials:{withCredentials:true,headers:{"Content-Type":"application/json",Accept:"application/json"}}},xs=typeof window<"u"&&typeof window.document<"u",yt=typeof process<"u"&&process.versions!=null&&process.versions.node!=null;function As(t){return yt?{}:t&&t in _?_[t]:_.production}function Ss(t,e="/api"){return `${e}${t.startsWith("/")?t:`/${t}`}`}
exports.corsConfigs=_;exports.createOtimClient=gs;exports.createProxyUrl=Ss;exports.createRlpEncodedAuthorization=Qt;exports.getCorsConfig=As;exports.isBrowser=xs;exports.isNode=yt;//# sourceMappingURL=index.js.map
//# sourceMappingURL=index.js.map