@bestinslot/wallet-kit 0.14.1 → 0.14.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{balances-Hy-8lE7A.js → balances-DYYM7kpl.js} +2106 -2028
- package/dist/browser.js +2 -2
- package/dist/core.js +2 -2
- package/dist/node.js +2 -2
- package/dist/types/api/swap.d.ts +6 -3
- package/dist/types/core/bis_swap.d.ts +27 -3
- package/dist/types/core/brc20-send.d.ts +16 -5
- package/dist/types/lib/swap-route.d.ts +118 -0
- package/package.json +1 -1
package/dist/browser.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import "./register-browser-providers-BdTwEVwB.js";
|
|
2
2
|
import { g as d, c as B, W as Q, a as h, b as E, d as C, e as b, f as p, h as m, i as u, s as f, j as D, k as M, l as I, m as k, n as x, o as y } from "./mint-CSk_3TfL.js";
|
|
3
3
|
import { B as X, q as _, x as $, p as AA, u as eA, r as tA, t as oA, v as iA, y as rA, w as aA } from "./mint-CSk_3TfL.js";
|
|
4
|
-
import { s as v } from "./balances-
|
|
5
|
-
import { c as nA, b as gA, m as lA, a as cA } from "./balances-
|
|
4
|
+
import { s as v } from "./balances-DYYM7kpl.js";
|
|
5
|
+
import { c as nA, b as gA, m as lA, a as cA } from "./balances-DYYM7kpl.js";
|
|
6
6
|
const K = '@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-black:#000;--spacing:.25rem;--container-sm:24rem;--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--font-weight-medium:500;--font-weight-semibold:600;--radius-lg:.5rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-primary:#f90}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:calc(var(--spacing)*0)}.top-2{top:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.z-10{z-index:10}.-m-2{margin:calc(var(--spacing)*-2)}.mx-auto{margin-inline:auto}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.flex{display:flex}.size-10{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.h-6{height:calc(var(--spacing)*6)}.h-9\\.75{height:calc(var(--spacing)*9.75)}.h-10{height:calc(var(--spacing)*10)}.max-h-\\[90vh\\]{max-height:90vh}.w-9{width:calc(var(--spacing)*9)}.w-24{width:calc(var(--spacing)*24)}.w-\\[92\\%\\]{width:92%}.w-auto{width:auto}.w-full{width:100%}.max-w-50{max-width:calc(var(--spacing)*50)}.max-w-sm{max-width:var(--container-sm)}.grow{flex-grow:1}.cursor-pointer{cursor:pointer}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-x-4{column-gap:calc(var(--spacing)*4)}.gap-y-3{row-gap:calc(var(--spacing)*3)}.overflow-y-auto{overflow-y:auto}.rounded-lg{border-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-border{border-color:var(--bis-cw-border)}.bg-black\\/90{background-color:#000000e6}@supports (color:color-mix(in lab,red,red)){.bg-black\\/90{background-color:color-mix(in oklab,var(--color-black)90%,transparent)}}.p-2{padding:calc(var(--spacing)*2)}.p-4{padding:calc(var(--spacing)*4)}.px-4{padding-inline:calc(var(--spacing)*4)}.py-3{padding-block:calc(var(--spacing)*3)}.py-6{padding-block:calc(var(--spacing)*6)}.text-center{text-align:center}.text-left{text-align:left}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.text-foreground{color:var(--bis-cw-fg)}.text-muted-foreground{color:var(--bis-cw-muted-fg)}.underline-offset-4{text-underline-offset:4px}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-300{--tw-duration:.3s;transition-duration:.3s}.bg-background{background:var(--bis-cw-bg)}@media(hover:hover){.group-hover\\:text-foreground:is(:where(.group):hover *){color:var(--bis-cw-fg)}.hover\\:border-primary:hover{border-color:var(--color-primary)}.hover\\:bg-primary:hover{background-color:var(--color-primary)}.hover\\:text-foreground:hover{color:var(--bis-cw-fg)}.hover\\:underline:hover{text-decoration-line:underline}}@media(min-width:40rem){.sm\\:z-50{z-index:50}.sm\\:px-6{padding-inline:calc(var(--spacing)*6)}}}:host,:root{--bis-cw-primary:#f90;--bis-cw-dark-bg:#0a0a0a;--bis-cw-dark-fg:#fafaf9;--bis-cw-dark-muted-fg:#a3a3a3;--bis-cw-dark-border:#ffffff0f;--bis-cw-light-bg:#fff;--bis-cw-light-fg:#0a0a0a;--bis-cw-light-muted-fg:#737373;--bis-cw-light-border:#e5e5e5;--bis-cw-bg:var(--bis-cw-dark-bg);--bis-cw-fg:var(--bis-cw-dark-fg);--bis-cw-muted-fg:var(--bis-cw-dark-muted-fg);--bis-cw-border:var(--bis-cw-dark-border);--tw-border-style:solid;--tw-bg-opacity:1}@media(prefers-color-scheme:light){:host,:root{--bis-cw-bg:var(--bis-cw-light-bg);--bis-cw-fg:var(--bis-cw-light-fg);--bis-cw-muted-fg:var(--bis-cw-light-muted-fg);--bis-cw-border:var(--bis-cw-light-border)}}.bis-cw-theme-light{--bis-cw-bg:var(--bis-cw-light-bg);--bis-cw-fg:var(--bis-cw-light-fg);--bis-cw-muted-fg:var(--bis-cw-light-muted-fg);--bis-cw-border:var(--bis-cw-light-border)}.bis-cw-theme-dark{--bis-cw-bg:var(--bis-cw-dark-bg);--bis-cw-fg:var(--bis-cw-dark-fg);--bis-cw-muted-fg:var(--bis-cw-dark-muted-fg);--bis-cw-border:var(--bis-cw-dark-border)}.best-scrollbar{scrollbar-width:thin;scrollbar-color:#25252d transparent;overflow:auto}.best-scrollbar::-webkit-scrollbar{background:0 0;width:6px;height:6px}.best-scrollbar::-webkit-scrollbar-thumb{background:#fff;border:1px solid #0000;-webkit-border-radius:1ex;-webkit-box-shadow:0 1px 2px #000000bf}.best-scrollbar::-webkit-scrollbar-corner{background:0 0}.best-scrollbar::-webkit-scrollbar-track{background:0 0;border-radius:9999px}.fade-scale-enter-active,.fade-scale-leave-active{transition:opacity .35s,transform .35s}.fade-scale-enter-from,.fade-scale-leave-to{opacity:0;transform:scale(1)}.fade-scale-enter-to,.fade-scale-leave-from{opacity:1;transform:scale(1)}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-duration{syntax:"*";inherits:false}', G = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAnCAYAAABnlOo2AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAALRSURBVHgBzZg/TypBFMXPCK2GykIb7Aha0Ngbv4CVnQXYaYOvstGwRBttHjTa+SfRShu/gHmvtiFKDCWN2hK1RPfNcR5xWXbZOyugJ9mw7Nzd+9uZe+/sjMIX5c7NLeifkj5aSCZ/qVqtiS9IIabcXC6Nt7cSXDff/UR1gkSiHBfMGkiDpNBub2jHRQ2TCn9yPDAxkBikG6qpbU9Vve5AKBGQOzu7gbGxkhgkCEwpR93enkaa9mv8CFiljjVIGoOQAEyFgpjMWcBwVMP7e0Hd39fQD+gjc9rt4yGC+Lz3Br76D8KAdfRpEd8hD5jSw+NYZc5wVSaQix+kMdhqZQXIZGS2a2vA+DhsZAe0uWmOoyNgcbG/7e4usL4OXF4C09MYPBAdsHcovnW1Ciwt9dqxjcCdtqkp818IJQPimwY5JySHxQ8zP99tR6idHUiUcCYnnUirhwczRBMTvW0d509PwPk5MDMTfH9RV5SXF0RJnmVRXU9nQQHcaBiYx0dIJI8hPnB52TgIUhjM6qoYxg6IYi/QQRiUVzc3xlYwTPGBOlDsqevrcBvGTAyYeEAUA9mfSV4xzi4urItiPCCmP4M7yhmruUX9iQfEwsjaI1UMKDkQiyOnjSAdHACHh8FtlpU6KbJiz3grsld7e8DZmTl/fg6GJlSlYpIhQrIeYkYxc/za2vqEoXjOa34x27a3IZEMiIXNW3/ooFAArq56bXnNO03Y1C7YTB1UZ5bf3492wIDmhGoxbdgDjUAcMgc/Qy19OGbVkcmk9Vd/SX/s5/EdUqqiY62sms1W97ps9GB/9PKroBqNZudC8Mo1m83ptTwXjDkMC4RL6ru7v/6G/mv7bDavb2SPpTEIuW5Tv2g+CEQENEAwE7D1ejXK0GrDSpcIs2MmByNIBa+vVQas5Ab7HTRZ4FuDxAaKBHPdE733WPZmzkiAusCSyd/6NBWWOTb6B4ysJPfkVwUnAAAAAElFTkSuQmCC", Y = "data:image/png;base64,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", F = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC0AAAAtCAYAAAA6GuKaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK6wAACusBgosNWgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAGsSURBVFiF7ZgxisJAGIVfFiUoESGNjWBhGxBR8QxCjpDeI3gRBc+ghZ0XSPAIqdJbaOFgiI1mtttqZ+bfdZiN7nxg9TLMF5l5ycQBwPFifPy1wG+w0qaw0qaw0qaw0qaoUS9cLBaIokiYr9drrFYrYd7r9bDb7VCv17/NT6cTwjBEURRKF7L0aDRCEATCfDgcSsd3Oh3lNY1GgyRNXh632+2p/H6/S/M8z8E57TXoJde0lTYFWdpxnKdynZClXdeV5mVZSnPGmDT3PI+8ER0QTy5BEGAwGAhzzjlms5nwH0/TFFmWCXuaMYb9fq+8+a/5dPzm8zmXkaaplnkAcG0bUbWmr9errqnevD2qhJU2hTZpVVW1Wi1dU9F7ejweYzKZCHPGGKbTqbBFsixDURTCnr5cLthsNng8HhQdWjdut1tpDy+XS+n4fr8vHc85577v6+1p1cu56hHcbreleZ7nVJV/vhFNYqVNQZZuNptP5bWa/ODveR75IEH+hJAkCbrdrjA/HA7S8cfjEXEcC3v6fD6TPh8AP3i4VIn3XtNVwkqbwkqbwkqb4iWlPwENJBb5gZq7aAAAAABJRU5ErkJggg==", U = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC0AAAAtCAYAAAA6GuKaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAoISURBVFiF1Zl5kFTVFYe/c+97r5fpGUARBRGEgArighsusTQaJC6ouCZxS6SSqGhQEzVoNNFCqWjiQqGpUlOWxq0sUQkaVyRxiYgLipZLRIJK3AZQoLunu9999+SP1z3OiDjjMFiVW3Wr/+h7zv3q179z7n39RFX5fxtBbya7ebzsVawyZW2FQ0uOPuWYxWXHrSvLzLr/PY17ax/pDaUfPVZ2LlY5u1jl4DVV+hcrSDGGsoNyTLXseLXNce29S/XuXmDeMOjbDxWz7WZMX1thWrEKa2tQrKDFKhSrKXQpRkrpJ21O/taWMPmJ5X7FhkCbngYuP1MG7jWEp0LLtMhCaPGRwUcWjSwaWggMhAYfGjSyEBg93ArP7beFHfmtQ1enyZh8hgWhZZ/QoKHFRxYTBfVpMZFFQoMGBglTeA0NGoiOMEaf3muAHf2tQbtLZRcb8FQUMCS0aBRAHZTQ8GJguSuwPBwGFCOLCevQgaTgkUUDw+ZGdP6u/YMdegL9jTyd/EGG43iemP6uii9WkbVVpFhjYbHCuXv+VZ9trL3+ABlcqnBRKea0UgzlGF9yUHZIKRbKMVJ2sqqScODiVckrGwXaz5ScxrxEzChqeF9D2mpIscId/Zr4SW6Guq+Ku2x3ObEt4bZyWpCaFqe0F2nZyao2x/ffXp0s6i509+1hmSWWURgUi4hBIsvdg2bqiesDBrjkBb3dGiaFFh8aJC1OJUg97gNhEys8MazZju1VaL1ZxmE5FYNiAINgeT3bl5O6Ez/9RZ1jhCNDgw8lLdBQNC1Qqz40bGJh3uCc7NJr0AT8FgNYFJtGSci5XNBZYRHTf8ucmTGqj3lwq7y5TsQMbXx35SKda4QjQosLDaZDZ5F6Z+lnjcwbkOkavGtP3y2ba8z7WiOihhIjWmNZOcuw5jO/iBUx/Xbsy8JxA3XEyL6wbA0895F8ungVezj17zXWTRkjB1QcD5Uc2VKMLzuRUgxlJ1qKMeVY11QSJnwW+wXrQ+paaWnZA2ujjipjWdURGGCLDKeNHaAjztobPftQ/NR98XsP0gFb5rmg47rrX9cnjeHg0FAJDSYQtN7H075uaTHCY01Gdu0xtJq+wzFZxKCS+hkxDPNXSaHjulzAmMEFGDkIwm0jGTEYGdIMOcuoL+e86Q39hxF+EBqKocUEBg2M1g8g0cDQbAyzM2LG9AhabMZimsCIaKq2YuhHwAkd1xVjXli6BhYvg+KrNV5bCv/+DIqOF74q761v6z+NMCEUbRxCjWOfyKCBMNQK1/YIGht9gM2DjRCL0AAXpvsrZfPGstaa3vhKqyy49jlkxt+Rq59BFn4ib/63jSsAmC7hl1PftUT/ZQ0HBUIxtYfSET4w2vqVQnZZiA/tNohacZnWWkPiVUoNtIZSw2jMC9Q40E7TtQAikukfyuTmiDHFmCWtNb1JVdd+PFWuKmQ5PptjLXmuCM7XOzpuMXGo2aua8EjZ0VKKhfRaq89XYp24Ml4XvHsn4pztb9e4eAK1j5Q4Vq0hxEAV0ZgF4hhvLtTiV4W+fZrc2RTyo5Ys5LIgBdA8vwrP0qs7rpuwlR1TcXpVOZZtSo4FsXL2O6uTHioN8ODYQdSKb2ltRTPx515jhBoQg6bgz5uY8eaSVPHGWHiKjGmKeK0QQSGDL2TANmG0BchxUfgzveLLWx0xWOyc5Zp8HU73DpfDFn2IBCdjC2CtqZ+K6QxQMYzzhsf1EmnuGOaVKPbgFJxHEo/gUGLAc3l8u/z+y1t1Bdx9aIBJbz6AhOdimhoF2Wh/1DvKuMTyhLtYWhohK0q84j2PuQQSD86jJCAOjwM8v4vvlXXU7j1oQI5Zeg0mugATfAHegE/B9wAer12Ygh82W733HJcoC+O60j5JwUnQOvi02oMyY6NBA8hxrVcicr6mKksdmA53kz2AeWvPk34Au92qq1UZ75Xn46TdIoIDHKoOUH5Te1wu3mjQAPLj2lUinEdA48bXUBosXiy7GcOTn5wjmwJsf5OuSTwHJsqzLkmBJVVcpeFx5bLq03Jsr0DvPazZDG8OtspvLZ3BT9I/qjC1bg/BInXFRSxqDTsHhnkfnCn9AUb8WUvAQYnyuE86qJ2g0rCK8pfKizJwg6BbAtlvyYel173qkq0/N4t32dTu2Sn4FJ2JcFY7eKo0pBcfDQ07WcvT756eggy8TsskHOo9jxAjJAgJNKxCQjOOy3oMnTVmQqLMSVRHea9RouygMH/PAXZCpwSTdZbUwcW2e1xIH3o1MGxnDfe/fKoEAH2v0ThTYqJ6niHupDg4EM8Pq4vTevjG0AJ3qUqfRFGn+MSjiScL+uB+A83Bndb+XGchnNkBXMUg1kImgMAwriXDd9vXz1SHZxIJn7YDp61Q8RSosVNPoVcBJAqJqiQKTvFOJVCYc9BW9pBOiU7X6zFMkbQNGrXpVTayEAVgDZWO68PLdAXK9LraDXsoDtSxRY+gFZ0ELPMq4j0kqnhFklT1UFXnThxqjuiUbIregDCl7m2DbVd7bqWFdZ5EpMo9eNpwiDSKMwFJaOsRdJvX1xSOVNXPXQqriaYnWx3cqHLfMd+RIzslnKo3IEwSw0tiec8YZvYpcNyoGeveccyHrCBhZXsx1tshniVfB93lhSlnZNfQ8Gg+kE3zgWguhHyA5gIlH2CaAvWZgKPvfEcfWCf4BrGcsf67hF4kW7gm/kOBLAW8FjA0sUwHMDKz+/r/luiyT7d5fUnggER1RaIqXiFRpN0qikG579RRMmmd4K8BBqh5fkpMFoc2rEHMbV8H3C1ogNVOFwMHJkqr86QeT7uJOC/eKeI9s38xWo7qTj6A1nNkm1rChfXiUxJEHKslZmZXsd0+xluruhjY1yvL6x7HN3yeKi7A7Kk7yPFd5Xr3DNms4pjrPIV64aUq1zgnPFZX9ho0wPKyfxvke4myPFExdWBJfGoVp6Bw93lj5Zfry7HwFBndVuNp59mm/mulBRhzWzhZb+kOR4/eBIzuY0dEgc7LWYY0he1FST6AXIjkA8gF3JcPmD5tgS4CmH249G+KOLmQ5dJCRKGQQQsZaM4imQzzA8d4Lu/6AaDH0ABjNw2GRsbPz4UMywdovg6eS+Eln3YZmjK8UchQac4wvBDRt5CBQhbfFCEtGSSfYX4h5pDgWq10vWs6evz6YtFK956K2d8rS+v2qJ+eaKJ451GXFuzoxLOL8/R1ijqPugTjPeI8c1e0fTPgDYIGWPipex9lv0R5uQ7ecZI0IL+Y6bNieiX405BZeviIWd8MeIOhAZ762C/3hn28yi3Of1GYvnF6plM6zKVxwpE73qy/7umevfIesTGOHi77Zy1n5wP2yQX0ywXYphAtZCg1Z3irkOXO0HLjMXO0tCH79Cp0Y0zeTvbNBRyVD9kmH/BZU8TDznPPtOd6563tRoHe2ON/6KEDvLhZFDkAAAAASUVORK5CYII=", S = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC0AAAAtCAYAAAA6GuKaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAT2SURBVFiF7ZlPaBRXHMc/b2Z39t9EN7uG7i5sIAGLECV4qIg5VErSQ/Hg3luhlGJArVUItNBD6UmoHtoYWoQe7KFFEZKQ1bZIwRRMQdoivTWY5pY5tNU1bmadmd15PSS7JtmdZGa13Qr9HnaZ935v5sPv/d7v92aekFKyWdlsdgx4C3gREE0G/7wkMA98YRjGx5s7xXrobDY7DHwAvATE6AxwXRKoAD8BHxmG8X29owGdzWbfAT7pCJ4/nTYM41NYg85msy8DtzrL5EuHDcOYFZlMRgNmgYOdJvKhH4UQh1Vd198FXgfUThP50AtAWWQymd+Bvk7TBNCiwvMFDNCndJqgHT2X0KGgA6SUSCkRQjT+hfBfg2TjZ00ieAULDO04zoZr27aJRCJomkarLcE6NmxXYtVAUzZyR9Rg2L6hpZQ4jsOlS5fYs2dPo31hYYHR0VFM0yQej7cEF4BZlcRCgonhJH07Q1i11etf/3AYu1UirAj8TlhgT+/fv5/+/v7G9cDAAOl0mkKh0BJcAJWqRFMFX76WYqQ/iuWs9kfCAqWN3U3ghVipVJrahoaGmJqaIhKJYJpmI8brHtZUwVdHUoz0RblvupiOxHQkliOpVL1D6plBx+Pxlu2HDh1icnISTdMa4LYriYcFXx9JM9wXpVRxmxZdRBWBF6JvaCEElmUxOTnpabMevLyygkTw+Ug3r/RFKZkuyrpMIVkNj9/uV7FcfMczgMhkMr7nx3VdSqUSFy5c4OTJk552t2/fplAo4Ng2e3M7cF2JWZUMpMN89mqSmgvJmML1exXe/PYBUkIowJyruq5/6NdYCIGmaUxPT5NKpThw4EBLu97eXoaGhrh27RqLf67woKqyVK4REnBsb4KdMYUbC485duM+NRk85QWOaVVVSSaTnDlzhomJCU+7eqjsSESRdoVYWCEWFuyIqXxz7zFvXP8LCcRUQdClGMjTdSmKQiQSYXp6mu7ubk+P5/P5hsdXzAr5ZJSusODt7x5Qle0BQ8CY3qxarcbDhw85d+4cp06dIhRqnfbn5uYoFApYloWixVCERFPaA35qaCEEpVKJXbt2cffuXVKplKft3NwcR48e5bFloScSW5b87dT2Lk8IwaNHj+jp6WFmZmZLYFiN8ampKaKbClA7agu6DpxKpSgWiwwODvoa16oAtaPA0HXgdDpNsVhk3759gcZ7lfwgCgS93sMzMzNbAs/Pz3v2Pa3HA0FblkVPT8+2Hr58+TKDg4OMj4972tTBE4lE0x59O/nO01JKLMviypUrnnm5Dnz8+HHi8TjFYnHLPN7b20s+n+fq1atEo1Hf0IH205qmkcvltgQeHR2lq6uLcDhMKBTi7NmzCCE4ceJEyzG5XA5FCba0AllLKbFtu2Wf67qcP3++ASul9FXyve73zKABdF1vfSNFIZFIoKobP1StB7948WLTuEQbhSbw69bNmzfZvXt304Mcx2F5ebkJGp6Aj42NUS6XOXhw9bOhEII7d+54ln8vBS7j5XK5pWeklOi6jqqqnp6TUrK8vLwhhhVFQdf1QN5+qr1Hp/RcfmH6H/rfkgIsdhoioBYVYAIInuE7IxuYUIQQ48DPnabxqV+AcWVpackG3u80jU+9ZxiGrQAYhjELnO4w0HY6vcb5JHusHSwOAz8AJrT9svysJNc4ZoGR+sEnbDpmruu/fjb+Nx2M9cevd+7+AAAAAElFTkSuQmCC", O = "data:image/gif;base64,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", n = {
|
|
7
7
|
okx: { name: "OKX", img: F },
|
|
8
8
|
unisat: { name: "Unisat", img: U },
|
package/dist/core.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "./register-browser-providers-BdTwEVwB.js";
|
|
2
|
-
import { s } from "./balances-
|
|
3
|
-
import { c as y, b as A, m as E, a as j } from "./balances-
|
|
2
|
+
import { s } from "./balances-DYYM7kpl.js";
|
|
3
|
+
import { c as y, b as A, m as E, a as j } from "./balances-DYYM7kpl.js";
|
|
4
4
|
import { W as e, a, b as t, d as o, e as r, f as n, h as i, i as l, s as c, j as g, k as d, l as p, m, n as f, o as b } from "./mint-CSk_3TfL.js";
|
|
5
5
|
import { B as v, q as C, x as M, p as S, u as T, r as _, t as h, v as N, y as O, U as P, w as D } from "./mint-CSk_3TfL.js";
|
|
6
6
|
const W = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
package/dist/node.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z as fI, A as KA, C as f, D as eI, E as tI, F as RA, G as d, H as SI, I as ZA, J as e, K as UA, L as nI, M as pI, N as rI, O as FI, P as sI, Q as KI, R as BA, e as zA, k as eA, S as RI, c as UI, T as qI, W as VI, a as lI, b as dI, d as xI, f as YI, h as JI, i as PI, s as vI, j as OI, l as uI, m as jI, n as bI, o as LI } from "./mint-CSk_3TfL.js";
|
|
2
2
|
import { B as ZQ, q as zQ, x as mQ, p as XQ, u as WQ, r as _Q, t as $Q, v as AC, y as IC, w as gC } from "./mint-CSk_3TfL.js";
|
|
3
|
-
import { s as TI } from "./balances-
|
|
4
|
-
import { c as CC, b as BC, m as EC, a as iC } from "./balances-
|
|
3
|
+
import { s as TI } from "./balances-DYYM7kpl.js";
|
|
4
|
+
import { c as CC, b as BC, m as EC, a as iC } from "./balances-DYYM7kpl.js";
|
|
5
5
|
var ZI = fI();
|
|
6
6
|
const qA = {
|
|
7
7
|
messagePrefix: `Bitcoin Signed Message:
|
package/dist/types/api/swap.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { GetRecentActivityRequest, WalletActivityKind } from '../core/bis_swap';
|
|
2
2
|
import { SignProgressOptions } from '../core/sign-progress';
|
|
3
|
-
export { generateAndStoreSwapWallet as createSwapWallet, ensureSwapWallet, getAddLiquidityResult, getKlines, requestMinerFee as getMinerFee, getMinerFeesOfDepositOrder, getMinerFeesOfWrapOrder, getPairReserves, getPairVolumeOverDays, getRemoveLiquidityResult, getSwapBalance, getSwapBalances, getSwapResult as getSwapExactInputResult, getSwap2Result as getSwapExactOutputResult, getSwapInfo, getSwapStatus, getSwapWalletSecurityCode, getTokenDecimals, getTvlHistory, getUnwrapResult as getUnwrapBtcResult, importSwapWallet, listPairs, listTokens, tryGetSwapReferrerInfo, } from '../core/bis_swap';
|
|
3
|
+
export { generateAndStoreSwapWallet as createSwapWallet, ensureSwapWallet, getAddLiquidityResult, getKlines, requestMinerFee as getMinerFee, getMinerFeesOfDepositOrder, getMinerFeesOfWrapOrder, getPairReserves, getPairVolumeOverDays, getRemoveLiquidityResult, getSwapBalance, getSwapBalances, getSwapResult as getSwapExactInputResult, getSwap2Result as getSwapExactOutputResult, getSwapInfo, getSwapRoute, getSwapStatus, getSwapWalletSecurityCode, getTokenDecimals, getTvlHistory, getUnwrapResult as getUnwrapBtcResult, importSwapWallet, listPairs, listTokens, tryGetSwapReferrerInfo, } from '../core/bis_swap';
|
|
4
4
|
export type { EnsureSwapWalletResult, GetActivityOfPairResponse, GetKlinesRequest, GetKlinesResponse, GetPairVolumeRequest, GetPairVolumeResponse, GetRecentActivityRequest, GetRecentActivityResponse, GetSwapStatusResponse, GetTvlHistoryRequest, GetTvlHistoryResponse, GetWalletActivitiesResponse, ImportSwapWalletOptions, Kline, ListPairsOrderBy, ListPairsRequest, ListPairsResponse, PairActivityEntry, PairInfo, PairReserves, RecentActivityEntry, RecentActivityKind, RecentActivityToken, SwapBalance, SwapInfo, TokenInfo, TvlPoint, WalletActivityEntry, WalletActivityKind, } from '../core/bis_swap';
|
|
5
5
|
export type { AllBalanceDetails } from '../core/helpers';
|
|
6
6
|
export type { SignProgressOptions, SignRequest } from '../core/sign-progress';
|
|
@@ -8,6 +8,7 @@ export type { BISSwapWalletInfo } from '../core/store';
|
|
|
8
8
|
export type { FeePolicy } from '../lib/fee-policy';
|
|
9
9
|
export type { SwapFees } from '../lib/swap-reporting';
|
|
10
10
|
export { satsToBtc, satsToUsd, swapSide } from '../lib/swap-reporting';
|
|
11
|
+
export type { SwapRoute, SwapRouteHop } from '../lib/swap-route';
|
|
11
12
|
export { calculatePairAddress as getPairAddress } from '../lib/uniswap_ops';
|
|
12
13
|
/**
|
|
13
14
|
* Retrieves the wallet activities for a given public key, on one pair or across every pair.
|
|
@@ -91,9 +92,10 @@ export declare function removeLiquidity(token1Address: string, token2Address: st
|
|
|
91
92
|
* @param amountOutMin - The expected (quoted) output amount. The enforced minimum is derived from this by applying `slippageBPS` — pass the quote, not an already slippage-adjusted value, to avoid double-applying slippage.
|
|
92
93
|
* @param slippageBPS - The slippage tolerance in basis points.
|
|
93
94
|
* @param referrerId - An optional referral ID. When valid, a share of the swap fee is credited to the referrer; an invalid referral is ignored and the swap proceeds normally.
|
|
95
|
+
* @param path - (Optional) The route to execute: `getSwapRoute(...).path`, token addresses from `tokenInAddress` to `tokenOutAddress`. A 3-token path swaps through its middle token and needs `SwapInfo.allow_multi_hop_routes`. When omitted, the swap uses the direct pool.
|
|
94
96
|
* @returns A promise that resolves to a boolean indicating the success of the swap operation.
|
|
95
97
|
*/
|
|
96
|
-
export declare function swapExactInput(tokenInAddress: string, tokenOutAddress: string, amountIn: bigint, amountOutMin: bigint, slippageBPS: bigint, referrerId?: string): Promise<boolean>;
|
|
98
|
+
export declare function swapExactInput(tokenInAddress: string, tokenOutAddress: string, amountIn: bigint, amountOutMin: bigint, slippageBPS: bigint, referrerId?: string, path?: readonly string[]): Promise<boolean>;
|
|
97
99
|
/**
|
|
98
100
|
* Executes an exact-output token swap: receives an exact `amountOut` of the
|
|
99
101
|
* output token and spends at most the input amount (the `amountIn` reference
|
|
@@ -105,9 +107,10 @@ export declare function swapExactInput(tokenInAddress: string, tokenOutAddress:
|
|
|
105
107
|
* @param amountOut - The exact amount of the output token to receive.
|
|
106
108
|
* @param slippageBPS - The slippage tolerance in basis points.
|
|
107
109
|
* @param referrerId - An optional referral ID. When valid, a share of the swap fee is credited to the referrer; an invalid referral is ignored and the swap proceeds normally.
|
|
110
|
+
* @param path - (Optional) The route to execute: `getSwapRoute(..., { exactOut: true }).path`, token addresses from `tokenInAddress` to `tokenOutAddress`. A 3-token path swaps through its middle token and needs `SwapInfo.allow_multi_hop_routes`. When omitted, the swap uses the direct pool.
|
|
108
111
|
* @returns A promise that resolves to a boolean indicating the success of the swap operation.
|
|
109
112
|
*/
|
|
110
|
-
export declare function swapExactOutput(tokenInAddress: string, tokenOutAddress: string, amountIn: bigint, amountOut: bigint, slippageBPS: bigint, referrerId?: string): Promise<boolean>;
|
|
113
|
+
export declare function swapExactOutput(tokenInAddress: string, tokenOutAddress: string, amountIn: bigint, amountOut: bigint, slippageBPS: bigint, referrerId?: string, path?: readonly string[]): Promise<boolean>;
|
|
111
114
|
/**
|
|
112
115
|
* Redeems WBTC from the smart wallet back into BTC on Bitcoin L1, the reverse of
|
|
113
116
|
* `wrapBtc`. The BTC is paid out on L1 to `pkscript`, so that value must be an
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { FeePolicy } from '../lib/fee-policy';
|
|
2
2
|
import { SwapFees } from '../lib/swap-reporting';
|
|
3
|
+
import { SwapRoute } from '../lib/swap-route';
|
|
3
4
|
import { SignProgressOptions } from './sign-progress';
|
|
4
5
|
import { BISSwapWalletInfo } from './store';
|
|
5
6
|
/**
|
|
@@ -106,6 +107,7 @@ export interface SwapInfo {
|
|
|
106
107
|
wbtc_handler_address: string;
|
|
107
108
|
fee_policy: FeePolicy | null;
|
|
108
109
|
allow_token_token_pairs: boolean;
|
|
110
|
+
allow_multi_hop_routes: boolean;
|
|
109
111
|
}
|
|
110
112
|
/**
|
|
111
113
|
* Fetches the swap's deployment info (the factory, WBTC and WBTC handler addresses, and the
|
|
@@ -116,7 +118,7 @@ export interface SwapInfo {
|
|
|
116
118
|
*
|
|
117
119
|
* This does not require a connected wallet or a smart wallet.
|
|
118
120
|
*
|
|
119
|
-
* @returns {Promise<SwapInfo>} A promise that resolves to a SwapInfo object containing the factory address, the WBTC token address, the WBTC handler address, the fee policy (`null` if the backend does not serve one),
|
|
121
|
+
* @returns {Promise<SwapInfo>} A promise that resolves to a SwapInfo object containing the factory address, the WBTC token address, the WBTC handler address, the fee policy (`null` if the backend does not serve one), whether the backend accepts new token/token pools, and whether it routes swaps through a middle token.
|
|
120
122
|
*/
|
|
121
123
|
export declare function getSwapInfo(): Promise<SwapInfo>;
|
|
122
124
|
/**
|
|
@@ -645,6 +647,26 @@ export declare function getSwapResult(tokenInAddr: string, tokenOutAddr: string,
|
|
|
645
647
|
reserve_out: bigint;
|
|
646
648
|
fees: SwapFees;
|
|
647
649
|
}>;
|
|
650
|
+
/**
|
|
651
|
+
* The swap backend's best route for swapping `tokenInAddr` to `tokenOutAddr` at current reserves:
|
|
652
|
+
* the most output for an exact input, or the least input for an exact output. Routes go through a
|
|
653
|
+
* middle token only while the backend allows multi-hop routes (`SwapInfo.allow_multi_hop_routes`);
|
|
654
|
+
* otherwise the route is the direct pool.
|
|
655
|
+
*
|
|
656
|
+
* This does not require a connected wallet or a smart wallet.
|
|
657
|
+
*
|
|
658
|
+
* @param tokenInAddr The address of the token being swapped from.
|
|
659
|
+
* @param tokenOutAddr The address of the token being swapped to.
|
|
660
|
+
* @param amount The exact input amount, or the exact output amount when `exactOut` is true.
|
|
661
|
+
* @param options Route options.
|
|
662
|
+
* @param options.exactOut Treat `amount` as the exact output (defaults to false).
|
|
663
|
+
* @returns The route: its path, the amount at each token, each hop's pool and LP fee, the total
|
|
664
|
+
* LP fee and the protocol fee bps on each endpoint.
|
|
665
|
+
* @throws {BackendError} With code `PAIR_NOT_FOUND` when no route can fill the amount.
|
|
666
|
+
*/
|
|
667
|
+
export declare function getSwapRoute(tokenInAddr: string, tokenOutAddr: string, amount: bigint, options?: {
|
|
668
|
+
exactOut?: boolean;
|
|
669
|
+
}): Promise<SwapRoute>;
|
|
648
670
|
interface SwapOrderResponse {
|
|
649
671
|
success: boolean;
|
|
650
672
|
}
|
|
@@ -657,10 +679,11 @@ interface SwapOrderResponse {
|
|
|
657
679
|
* @param amt2 The amount of the output token expected from the swap, represented as a bigint.
|
|
658
680
|
* @param slippageBPS The slippage in basis points to be applied when calculating the minimum amounts for the liquidity order.
|
|
659
681
|
* @param referrerId An optional referral ID. When provided and valid, a share of the swap fee is credited to the referrer; an invalid referral is ignored and the swap proceeds normally.
|
|
682
|
+
* @param path Optional token addresses from `token1Addr` to `token2Addr`, as `getSwapRoute` returns them. A 3-token path routes the swap through its middle token and needs `SwapInfo.allow_multi_hop_routes`; omitted, the swap uses the direct pool.
|
|
660
683
|
*
|
|
661
684
|
* @returns A promise that resolves to an object indicating the success of the swap order request.
|
|
662
685
|
*/
|
|
663
|
-
export declare function prepareAndSendSwapOrder(token1Addr: string, token2Addr: string, amt1: bigint, amt2: bigint, slippageBPS: bigint, referrerId?: string): Promise<SwapOrderResponse>;
|
|
686
|
+
export declare function prepareAndSendSwapOrder(token1Addr: string, token2Addr: string, amt1: bigint, amt2: bigint, slippageBPS: bigint, referrerId?: string, path?: readonly string[]): Promise<SwapOrderResponse>;
|
|
664
687
|
/**
|
|
665
688
|
* Calculates the expected input amount, quoted price, and price impact for a token swap operation using the swap2 algorithm. The function retrieves the necessary swap information and connected wallet details, then uses a proxy to check the current balances and reserves of the tokens in the liquidity pool. It also requests the miner fee for swapping and gets the fee basis points for the tokens involved in the swap. Finally, it calls the swap2Request function to get the expected results based on the input parameters.
|
|
666
689
|
*
|
|
@@ -690,10 +713,11 @@ interface Swap2OrderResponse {
|
|
|
690
713
|
* @param amt2 The amount of the output token expected from the swap, represented as a bigint.
|
|
691
714
|
* @param slippageBPS The slippage in basis points to be applied when calculating the maximum input amount for the swap order.
|
|
692
715
|
* @param referrerId An optional referral ID. When provided and valid, a share of the swap fee is credited to the referrer; an invalid referral is ignored and the swap proceeds normally.
|
|
716
|
+
* @param path Optional token addresses from `token1Addr` to `token2Addr`, as `getSwapRoute` returns them. A 3-token path routes the swap through its middle token and needs `SwapInfo.allow_multi_hop_routes`; omitted, the swap uses the direct pool.
|
|
693
717
|
*
|
|
694
718
|
* @returns A promise that resolves to an object indicating the success of the swap order request.
|
|
695
719
|
*/
|
|
696
|
-
export declare function prepareAndSendSwap2Order(token1Addr: string, token2Addr: string, amt1: bigint, amt2: bigint, slippageBPS: bigint, referrerId?: string): Promise<Swap2OrderResponse>;
|
|
720
|
+
export declare function prepareAndSendSwap2Order(token1Addr: string, token2Addr: string, amt1: bigint, amt2: bigint, slippageBPS: bigint, referrerId?: string, path?: readonly string[]): Promise<Swap2OrderResponse>;
|
|
697
721
|
/**
|
|
698
722
|
* Prepares and sends a withdraw request to transfer tokens from the smart wallet to an ordinal wallet. The function retrieves the necessary swap information and connected wallet details, converts the target ordinal Bitcoin address to an Ethereum-compatible address, and generates the required signatures for the withdraw request. It then constructs the withdraw request parameters and sends the request to the backend API.
|
|
699
723
|
*
|
|
@@ -64,6 +64,8 @@ export declare function callInscription(contractAddress: string, calldata: strin
|
|
|
64
64
|
* @param label - The argument name used in error messages.
|
|
65
65
|
*/
|
|
66
66
|
export declare function parseBrc20Amount(value: string, label: string): bigint;
|
|
67
|
+
/** Formats an 18-decimal bigint as the shortest BRC-20 decimal string, such as `"7.5"`. */
|
|
68
|
+
export declare function formatBrc20Amount(value: bigint): string;
|
|
67
69
|
export declare function assertRecipient(recipient: string): void;
|
|
68
70
|
export declare function assertFeeRate(feeRate: number): void;
|
|
69
71
|
export declare function runChain(steps: ChainStep[], feeRate: number, dryRun: boolean, options: SignProgressOptions): Promise<Brc20SendQuote | ChainResult>;
|
|
@@ -79,18 +81,27 @@ export interface SendAsBrc20Args extends SignProgressOptions {
|
|
|
79
81
|
dryRun: boolean;
|
|
80
82
|
}
|
|
81
83
|
export interface SendAsBrc20Result {
|
|
82
|
-
/**
|
|
84
|
+
/**
|
|
85
|
+
* The BRC-20 transfer inscription sent to the recipient. It carries both parts when the recipient
|
|
86
|
+
* is another address, and only `fromBrc20Amount` when the recipient is the sender's own ordinals
|
|
87
|
+
* address. Null when it would carry nothing.
|
|
88
|
+
*/
|
|
83
89
|
brc20Transfer: Brc20SendPart | null;
|
|
84
|
-
/**
|
|
90
|
+
/**
|
|
91
|
+
* The BRC2.0 withdraw inscription, sent to the sender's own ordinals address (the recipient's, when
|
|
92
|
+
* that is the sender), or null when `fromProgAmount` is 0.
|
|
93
|
+
*/
|
|
85
94
|
progWithdraw: Brc20SendPart | null;
|
|
86
95
|
/** Every broadcast transaction id, in chain order. */
|
|
87
96
|
txIds: string[];
|
|
88
97
|
}
|
|
89
98
|
/**
|
|
90
99
|
* Sends a ticker so the recipient receives plain BRC-20, drawing on the sender's base BRC-20 balance
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
100
|
+
* and its BRC2.0 balance. To another address, a `brc20-module` withdraw first moves the BRC2.0 part
|
|
101
|
+
* into the sender's own base balance, then one BRC-20 transfer inscription of both parts goes to the
|
|
102
|
+
* recipient: exchanges and other wallets credit only transfer inscriptions. To the sender's own
|
|
103
|
+
* ordinals address, the withdraw alone credits it. All steps are signed as one chain and broadcast
|
|
104
|
+
* together, and the chain order makes the withdraw index before the transfer is inscribed.
|
|
94
105
|
*/
|
|
95
106
|
export declare function sendAsBrc20(args: SendAsBrc20Args): Promise<Brc20SendQuote | SendAsBrc20Result>;
|
|
96
107
|
export interface SendAsBrc20ProgArgs extends SignProgressOptions {
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/** The most tokens a swap path can list (two hops). */
|
|
2
|
+
export declare const MAX_SWAP_PATH_LENGTH = 3;
|
|
3
|
+
/** One pool step of a swap route. Amounts are in base units. */
|
|
4
|
+
export interface SwapRouteHop {
|
|
5
|
+
pair_address: string;
|
|
6
|
+
token_in: string;
|
|
7
|
+
token_out: string;
|
|
8
|
+
amount_in: bigint;
|
|
9
|
+
amount_out: bigint;
|
|
10
|
+
/** The pool's LP fee, in bps. Already reflected in `amount_out`. */
|
|
11
|
+
lp_fee_bps: bigint;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* The best route the swap backend found for a swap at current reserves.
|
|
15
|
+
*
|
|
16
|
+
* `amounts[0]` is the input and `amounts[amounts.length - 1]` the output; with an exact input the
|
|
17
|
+
* first is the amount asked for, with an exact output the last is. Pass `path` to
|
|
18
|
+
* `swapExactInput` / `swapExactOutput` to execute this route.
|
|
19
|
+
*/
|
|
20
|
+
export interface SwapRoute {
|
|
21
|
+
/** Token addresses from input to output, lowercased: 2 for a direct swap, 3 for a routed one. */
|
|
22
|
+
path: string[];
|
|
23
|
+
/** The amount at each token of `path`, net of LP fees. */
|
|
24
|
+
amounts: bigint[];
|
|
25
|
+
hops: SwapRouteHop[];
|
|
26
|
+
/** The LP fee of every hop added up, in bps. */
|
|
27
|
+
lp_fee_bps_total: bigint;
|
|
28
|
+
/** The protocol fee on the input token, in bps (the swap's `token1FeeBps`). */
|
|
29
|
+
token1FeeBps: bigint;
|
|
30
|
+
/** The protocol fee on the output token, in bps (the swap's `token2FeeBps`). */
|
|
31
|
+
token2FeeBps: bigint;
|
|
32
|
+
}
|
|
33
|
+
/** The `result` of the swap backend's `/get_swap_route`, as served. */
|
|
34
|
+
export interface RawSwapRoute {
|
|
35
|
+
path: string[];
|
|
36
|
+
amounts: string[];
|
|
37
|
+
hops: {
|
|
38
|
+
pair_address: string;
|
|
39
|
+
token_in: string;
|
|
40
|
+
token_out: string;
|
|
41
|
+
amount_in: string;
|
|
42
|
+
amount_out: string;
|
|
43
|
+
lp_fee_bps: number | string;
|
|
44
|
+
}[];
|
|
45
|
+
lp_fee_bps_total: number | string;
|
|
46
|
+
token1FeeBps: string;
|
|
47
|
+
token2FeeBps: string;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Converts a `/get_swap_route` result into a `SwapRoute`, checking that its path is one the swap
|
|
51
|
+
* flow can sign.
|
|
52
|
+
*
|
|
53
|
+
* @param raw The backend's route.
|
|
54
|
+
* @param tokenIn The input token asked for.
|
|
55
|
+
* @param tokenOut The output token asked for.
|
|
56
|
+
* @returns The route with bigint amounts and lowercased addresses.
|
|
57
|
+
* @throws {Error} If the path does not run from `tokenIn` to `tokenOut` or is malformed.
|
|
58
|
+
*/
|
|
59
|
+
export declare function parseSwapRoute(raw: RawSwapRoute, tokenIn: string, tokenOut: string): SwapRoute;
|
|
60
|
+
/**
|
|
61
|
+
* Checks a swap path against the swap's input and output tokens, as the swap backend does.
|
|
62
|
+
*
|
|
63
|
+
* @param path Token addresses from `token1` to `token2`, or `undefined` for the direct path.
|
|
64
|
+
* @param token1 The input token.
|
|
65
|
+
* @param token2 The output token.
|
|
66
|
+
* @returns The path lowercased; `[token1, token2]` when `path` is undefined.
|
|
67
|
+
* @throws {Error} If the path lists fewer than 2 or more than 3 tokens, holds an invalid or
|
|
68
|
+
* repeated address, or does not start at `token1` and end at `token2`.
|
|
69
|
+
*/
|
|
70
|
+
export declare function resolveSwapPath(path: readonly string[] | undefined, token1: string, token2: string): string[];
|
|
71
|
+
/** The fields shared by the exact-input and exact-output BIP322 swap texts. */
|
|
72
|
+
interface SwapOrderTextFields {
|
|
73
|
+
/** Token addresses from input to output; the direct path is `[token1, token2]`. */
|
|
74
|
+
path: readonly string[];
|
|
75
|
+
token1FeeBps: string;
|
|
76
|
+
token2FeeBps: string;
|
|
77
|
+
btc_fee: string;
|
|
78
|
+
referrer_pubkey?: string;
|
|
79
|
+
ref_return_bps?: string;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* The BIP322 text signed for an exact-input swap (`/swap`). A routed path adds a
|
|
83
|
+
* `Route: a -> x -> b` line after the token addresses.
|
|
84
|
+
*/
|
|
85
|
+
export declare function swapOrderSignatureText(fields: SwapOrderTextFields & {
|
|
86
|
+
in_amt: string;
|
|
87
|
+
min_out_amt: string;
|
|
88
|
+
}): string;
|
|
89
|
+
/**
|
|
90
|
+
* The BIP322 text signed for an exact-output swap (`/swap2`). A routed path adds a
|
|
91
|
+
* `Route: a -> x -> b` line after the token addresses.
|
|
92
|
+
*/
|
|
93
|
+
export declare function swap2OrderSignatureText(fields: SwapOrderTextFields & {
|
|
94
|
+
max_in_amt: string;
|
|
95
|
+
out_amt: string;
|
|
96
|
+
}): string;
|
|
97
|
+
/** The fields of the BLS swap message; `amount1`/`amount2` are the op's two amount words. */
|
|
98
|
+
export interface SwapBLSMessageFields {
|
|
99
|
+
pubkey: string;
|
|
100
|
+
nonce: bigint;
|
|
101
|
+
/** Token addresses from input to output; the direct path is `[token1, token2]`. */
|
|
102
|
+
path: readonly string[];
|
|
103
|
+
amount1: bigint;
|
|
104
|
+
amount2: bigint;
|
|
105
|
+
token1FeeBps: bigint;
|
|
106
|
+
token2FeeBps: bigint;
|
|
107
|
+
btc_fee: bigint;
|
|
108
|
+
referrer_pubkey?: string;
|
|
109
|
+
ref_return_bps?: bigint;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* The hex message hashed to the BLS curve and signed for a swap op: `03` for exact input (swap1)
|
|
113
|
+
* with amounts (in_amt, min_out_amt), `04` for exact output (swap2) with (max_in_amt, out_amt).
|
|
114
|
+
* Every path address is left-padded to 64 hex chars (the contract's address[] encoding), in path
|
|
115
|
+
* order.
|
|
116
|
+
*/
|
|
117
|
+
export declare function swapBLSMessage(opType: '03' | '04', fields: SwapBLSMessageFields): string;
|
|
118
|
+
export {};
|
package/package.json
CHANGED