decred.org/dcrdex@v1.0.5/client/webserver/site/src/js/registry.ts (about) 1 declare global { 2 interface Window { 3 log: (...args: any) => void 4 enableLogger: (loggerID: string, enable: boolean) => void 5 recordLogger: (loggerID: string, enable: boolean) => void 6 dumpLogger: (loggerID: string) => void 7 mmstatus: () => Promise<MarketMakingStatus> 8 testFormatFourSigFigs: () => void 9 testFormatRateFullPrecision: () => void 10 user: () => User 11 cexBook: () => Promise<void> 12 mmStatus: () => MarketMakingStatus 13 isWebview?: () => boolean 14 webkit: any | undefined 15 openUrl: (url: string) => void 16 open: (url?: string | URL, target?: string, features?: string) => WindowProxy | null 17 sendOSNotification (title: string, body?: string): void 18 clearLocale (): void 19 } 20 } 21 22 export enum ConnectionStatus { 23 Disconnected = 0, 24 Connected = 1, 25 InvalidCert = 2, 26 } 27 28 export interface BondOptions { 29 bondAssetID: number 30 targetTier: number 31 maxBondedAmt: number 32 } 33 34 export interface Reputation { 35 bondedTier: number 36 penalties: number 37 legacyTier: boolean 38 score: number 39 } 40 41 export interface ExchangeAuth { 42 rep: Reputation 43 bondAssetID: number 44 pendingStrength: number 45 weakStrength: number 46 liveStrength: number 47 targetTier: number 48 effectiveTier: number 49 maxBondedAmt: number 50 penaltyComps: number 51 pendingBonds: PendingBondState[] 52 expiredBonds: any[] 53 compensation: number 54 } 55 56 export interface Exchange { 57 host: string 58 acctID: string 59 auth: ExchangeAuth 60 markets: Record<string, Market> 61 assets: Record<number, Asset> 62 connectionStatus: ConnectionStatus 63 viewOnly: boolean 64 bondAssets: Record<string, BondAsset> 65 candleDurs: string[] 66 maxScore: number 67 penaltyThreshold: number 68 disabled: boolean 69 } 70 71 export interface Candle { 72 startStamp: number 73 endStamp: number 74 matchVolume: number 75 quoteVolume: number 76 highRate: number 77 lowRate: number 78 startRate: number 79 endRate: number 80 } 81 82 export interface CandlesPayload { 83 dur: string 84 ms: number 85 candles: Candle[] 86 } 87 88 export interface Market { 89 name: string 90 baseid: number 91 basesymbol: string 92 quoteid: number 93 quotesymbol: string 94 lotsize: number 95 parcelsize: number 96 ratestep: number 97 epochlen: number 98 startepoch: number 99 buybuffer: number 100 orders: Order[] 101 spot: Spot | undefined 102 atomToConv: number 103 inflight: InFlightOrder[] 104 minimumRate: number 105 } 106 107 export interface InFlightOrder extends Order { 108 tempID: number 109 } 110 111 export interface Order { 112 host: string 113 baseID: number 114 baseSymbol: string 115 quoteID: number 116 quoteSymbol: string 117 market: string 118 type: number 119 id: string 120 stamp: number 121 submitTime: number 122 sig: string 123 status: number 124 epoch: number 125 qty: number 126 sell: boolean 127 filled: number 128 matches: Match[] 129 cancelling: boolean 130 canceled: boolean 131 feesPaid: FeeBreakdown 132 fundingCoins: Coin[] 133 accelerationCoins: Coin[] 134 lockedamt: number 135 rate: number // limit only 136 tif: number // limit only 137 targetOrderID: string // cancel only 138 readyToTick: boolean 139 } 140 141 export interface Match { 142 matchID: string 143 status: number 144 active: boolean 145 revoked: boolean 146 rate: number 147 qty: number 148 side: number 149 feeRate: number 150 swap: Coin 151 counterSwap: Coin 152 redeem: Coin 153 counterRedeem: Coin 154 refund: Coin 155 stamp: number 156 isCancel: boolean 157 } 158 159 export interface Spot { 160 stamp: number 161 baseID: number 162 quoteID: number 163 rate: number 164 bookVolume: number // Unused? 165 change24: number 166 vol24: number 167 low24: number 168 high24: number 169 } 170 171 export interface Asset { 172 id: number 173 symbol: string 174 version: number 175 maxFeeRate: number 176 swapSize: number 177 swapSizeBase: number 178 redeemSize: number 179 swapConf: number 180 unitInfo: UnitInfo 181 } 182 183 export interface BondAsset { 184 ver: number 185 id: number 186 confs: number 187 amount: number 188 } 189 190 export interface PendingBondState { 191 symbol: string 192 assetID: number 193 coinID: string 194 confs: number 195 } 196 197 export interface FeeBreakdown { 198 swap: number 199 redemption: number 200 } 201 202 export interface SupportedAsset { 203 id: number 204 symbol: string 205 name: string 206 wallet: WalletState 207 info?: WalletInfo 208 token?: Token 209 unitInfo: UnitInfo 210 walletCreationPending: boolean 211 } 212 213 export interface Token { 214 parentID: number 215 name: string 216 unitInfo: UnitInfo 217 contractAddress: string 218 definition: WalletDefinition 219 } 220 221 export enum ApprovalStatus { 222 Approved = 0, 223 Pending = 1, 224 NotApproved = 2 225 } 226 227 export interface FeeState { 228 rate: number 229 send: number 230 swap: number 231 redeem: number 232 refund: number 233 stampMS: number 234 } 235 236 export interface SyncStatus { 237 synced: boolean 238 targetHeight: number 239 startingBlocks: number 240 blocks: number 241 txs: number | undefined 242 } 243 244 export interface WalletState { 245 symbol: string 246 assetID: number 247 version: number 248 type: string 249 traits: number 250 open: boolean 251 running: boolean 252 disabled: boolean 253 balance: WalletBalance 254 address: string 255 units: string 256 encrypted: boolean 257 peerCount: number 258 synced: boolean 259 syncProgress: number 260 syncStatus: SyncStatus 261 approved: Record<number, ApprovalStatus> 262 feeState?: FeeState 263 } 264 265 export interface WalletInfo { 266 name: string 267 version: number 268 availablewallets: WalletDefinition[] 269 versions: number[] 270 emptyidx: number 271 unitinfo: UnitInfo 272 } 273 274 export interface WalletBalance { 275 available: number 276 immature: number 277 locked: number 278 stamp: string // time.Time 279 orderlocked: number 280 contractlocked: number 281 bondlocked: number 282 bondReserves: number 283 reservesDeficit: number 284 other: Record<string, CustomBalance> 285 } 286 287 export interface CustomBalance { 288 amt: number 289 locked: boolean 290 } 291 292 export interface WalletDefinition { 293 seeded: boolean 294 type: string 295 tab: string 296 description: string 297 configpath: string 298 configopts: ConfigOption[] 299 multifundingopts: OrderOption[] 300 noauth: boolean 301 guidelink: string 302 } 303 304 export interface ConfigOption { 305 key: string 306 displayname: string 307 description: string 308 default: any 309 max: any 310 min: any 311 noecho: boolean 312 isboolean: boolean 313 isdate: boolean 314 disablewhenactive: boolean 315 isBirthdayConfig: boolean 316 repeatable?: string 317 repeatN?: number 318 regAsset?: number 319 required?: boolean 320 dependsOn?: string 321 } 322 323 export interface Coin { 324 id: string 325 stringID: string 326 assetID: number 327 symbol: string 328 confs: Confirmations 329 } 330 331 export interface Confirmations { 332 required: number 333 count: number 334 } 335 336 export interface UnitInfo { 337 atomicUnit: string 338 conventional: Denomination 339 denominations: Denomination[] 340 feeRateDenom: string 341 } 342 343 export interface Denomination { 344 unit: string 345 conversionFactor: number 346 } 347 348 export interface ExtensionConfiguredWallet { 349 hiddenFields: string[] 350 disableWalletType: boolean 351 disablePassword: boolean 352 disableStaking: boolean 353 disablePrivacy: boolean 354 } 355 356 export interface ExtensionModeConfig { 357 name: string 358 restrictedWallets: Record<string, ExtensionConfiguredWallet> 359 } 360 361 export interface User { 362 exchanges: Record<string, Exchange> 363 inited: boolean 364 seedgentime: number 365 assets: Record<number, SupportedAsset> 366 fiatRates: Record<number, number> 367 bots: BotReport[] 368 net: number 369 extensionModeConfig: ExtensionModeConfig 370 actions: ActionRequiredNote[] 371 } 372 373 export interface CoreNote { 374 type: string 375 topic: string 376 subject: string 377 details: string 378 severity: number 379 stamp: number 380 acked: boolean 381 id: string 382 } 383 384 export interface BondNote extends CoreNote { 385 asset: number 386 confirmations: number 387 dex: string 388 coinID: string | null 389 tier: number | null 390 auth: ExchangeAuth | null 391 } 392 393 export interface ReputationNote extends CoreNote { 394 host: string 395 rep: Reputation 396 } 397 398 export interface BalanceNote extends CoreNote { 399 assetID: number 400 balance: WalletBalance 401 } 402 403 export interface RateNote extends CoreNote { 404 fiatRates: Record<number, number> 405 } 406 407 export interface WalletConfigNote extends CoreNote { 408 wallet: WalletState 409 } 410 411 export interface WalletSyncNote extends CoreNote { 412 assetID: number 413 syncStatus: SyncStatus 414 syncProgress: number 415 } 416 417 export type WalletStateNote = WalletConfigNote 418 419 export interface WalletCreationNote extends CoreNote { 420 assetID: number 421 } 422 423 export interface BaseWalletNote { 424 route: string 425 assetID: number 426 } 427 428 export interface TipChangeNote extends BaseWalletNote { 429 tip: number 430 data: any 431 } 432 433 export interface CustomWalletNote extends BaseWalletNote { 434 payload: any 435 } 436 437 export interface TransactionNote extends BaseWalletNote { 438 transaction: WalletTransaction 439 new: boolean 440 } 441 442 export interface ActionRequiredNote extends BaseWalletNote { 443 uniqueID: string 444 actionID: string 445 payload: any 446 } 447 448 export interface ActionResolvedNote extends BaseWalletNote { 449 uniqueID: string 450 } 451 452 export interface TransactionActionNote { 453 tx: WalletTransaction 454 nonce: number 455 newFees: number 456 } 457 458 export interface WalletNote extends CoreNote { 459 payload: BaseWalletNote 460 } 461 462 export interface CoreActionRequiredNote extends CoreNote { 463 payload: ActionRequiredNote 464 } 465 466 export interface RejectedRedemptionData { 467 assetID: number 468 orderID: string 469 coinID: string 470 coinFmt: string 471 } 472 473 export interface SpotPriceNote extends CoreNote { 474 host: string 475 spots: Record<string, Spot> 476 } 477 478 export interface RunStatsNote extends CoreNote { 479 host: string 480 baseID: number 481 quoteID: number 482 stats?: RunStats 483 } 484 485 export interface RunEventNote extends CoreNote { 486 host: string 487 baseID: number 488 quoteID: number 489 startTime: number 490 event: MarketMakingEvent 491 } 492 493 export interface MakerProgram { 494 host: string 495 baseID: number 496 quoteID: number 497 lots: number 498 oracleWeighting: number 499 oracleBias: number 500 driftTolerance: number 501 gapFactor: number 502 gapStrategy: string 503 } 504 505 export interface BotOrder { 506 host: string 507 marketID: string 508 orderID: string 509 } 510 511 export interface BotReport { 512 programID: number 513 program: MakerProgram 514 running: boolean 515 orders: BotOrder 516 } 517 518 export interface LotFees { 519 swap: number 520 redeem: number 521 refund: number 522 } 523 524 export interface LotFeeRange { 525 max: LotFees 526 estimated: LotFees 527 } 528 529 export interface AssetBookingFees extends LotFeeRange { 530 bookingFeesPerLot: number 531 bookingFeesPerCounterLot: number 532 bookingFees: number 533 swapReservesFactor: number // (1 + orderReservesFactor) 534 redeemReservesFactor: number 535 tokenFeesPerSwap: number 536 } 537 538 export interface BookingFees { 539 base: AssetBookingFees 540 quote: AssetBookingFees 541 } 542 543 export interface MarketReport { 544 price: number 545 oracles: OracleReport[] 546 baseFiatRate: number 547 quoteFiatRate: number 548 baseFees: LotFeeRange 549 quoteFees: LotFeeRange 550 } 551 552 export interface MatchNote extends CoreNote { 553 orderID: string 554 match: Match 555 host: string 556 marketID: string 557 } 558 559 export interface ConnEventNote extends CoreNote { 560 host: string 561 connectionStatus: ConnectionStatus 562 } 563 564 export interface OrderNote extends CoreNote { 565 order: Order 566 tempID: number 567 } 568 569 export interface RecentMatch { 570 rate: number 571 qty: number 572 stamp: number 573 sell: boolean 574 } 575 576 export interface EpochNote extends CoreNote { 577 host: string 578 marketID: string 579 epoch: number 580 } 581 582 export interface APIResponse { 583 requestSuccessful: boolean 584 ok: boolean 585 msg: string 586 err?: string 587 } 588 589 export interface LogMessage { 590 time: string 591 msg: string 592 } 593 594 export interface NoteElement extends HTMLElement { 595 note: CoreNote 596 } 597 598 export interface BalanceResponse extends APIResponse { 599 balance: WalletBalance 600 } 601 602 export interface LayoutMetrics { 603 bodyTop: number 604 bodyLeft: number 605 width: number 606 height: number 607 centerX: number 608 centerY: number 609 } 610 611 export interface PageElement extends HTMLElement { 612 value?: string 613 src?: string 614 files?: FileList 615 checked?: boolean 616 href?: string 617 htmlFor?: string 618 name?: string 619 options?: HTMLOptionElement[] 620 selectedIndex?: number 621 disabled?: boolean 622 } 623 624 export interface BooleanConfig { 625 reason: string 626 } 627 628 export interface XYRangePoint { 629 label: string 630 x: number 631 y: number 632 } 633 634 export interface XYRange { 635 start: XYRangePoint 636 end: XYRangePoint 637 xUnit: string 638 yUnit: string 639 roundX?: boolean 640 roundY?: boolean 641 } 642 643 export interface OrderOption extends ConfigOption { 644 boolean?: BooleanConfig 645 xyRange?: XYRange 646 showByDefault?: boolean 647 quoteAssetOnly?: boolean 648 } 649 650 export interface SwapEstimate { 651 lots: number 652 value: number 653 maxFees: number 654 realisticWorstCase: number 655 realisticBestCase: number 656 feeReservesPerLot: number 657 } 658 659 export interface RedeemEstimate { 660 realisticBestCase: number 661 realisticWorstCase: number 662 } 663 664 export interface PreSwap { 665 estimate: SwapEstimate 666 options: OrderOption[] 667 } 668 669 export interface PreRedeem { 670 estimate: RedeemEstimate 671 options: OrderOption[] 672 } 673 674 export interface OrderEstimate { 675 swap: PreSwap 676 redeem: PreRedeem 677 } 678 679 export interface MaxOrderEstimate { 680 swap: SwapEstimate 681 redeem: RedeemEstimate 682 } 683 684 export interface MaxSell { 685 maxSell: MaxOrderEstimate 686 } 687 688 export interface MaxBuy { 689 maxBuy: MaxOrderEstimate 690 } 691 692 export interface TradeForm { 693 host: string 694 isLimit: boolean 695 sell: boolean 696 base: number 697 quote: number 698 qty: number 699 rate: number 700 tifnow: boolean 701 options: Record<string, any> 702 } 703 704 export interface BookUpdate { 705 action: string 706 host: string 707 marketID: string 708 matchesSummary: RecentMatch[] 709 payload: any 710 } 711 712 export interface MiniOrder { 713 qty: number 714 qtyAtomic: number 715 rate: number 716 msgRate: number 717 epoch: number 718 sell: boolean 719 token: string 720 } 721 722 export interface CoreOrderBook { 723 sells: MiniOrder[] 724 buys: MiniOrder[] 725 epoch: MiniOrder[] 726 recentMatches: RecentMatch[] 727 } 728 729 export interface MarketOrderBook { 730 base: number 731 quote: number 732 book: CoreOrderBook 733 } 734 735 export interface RemainderUpdate { 736 token: string 737 qty: number 738 qtyAtomic: number 739 } 740 741 export interface OrderFilterMarket { 742 baseID: number 743 quoteID: number 744 } 745 746 export interface OrderFilter { 747 n?: number 748 offset?: string 749 hosts?: string[] 750 assets?: number[] 751 market?: OrderFilterMarket 752 statuses?: number[] 753 } 754 755 export interface OrderPlacement { 756 lots: number 757 gapFactor: number 758 } 759 760 export interface AutoRebalanceConfig { 761 minBaseTransfer: number 762 minQuoteTransfer: number 763 } 764 765 export interface BasicMarketMakingConfig { 766 gapStrategy: string 767 sellPlacements: OrderPlacement[] 768 buyPlacements: OrderPlacement[] 769 driftTolerance: number 770 } 771 772 export interface ArbMarketMakingPlacement { 773 lots: number 774 multiplier: number 775 } 776 777 export interface ArbMarketMakingConfig { 778 buyPlacements: ArbMarketMakingPlacement[] 779 sellPlacements: ArbMarketMakingPlacement[] 780 profit: number 781 driftTolerance: number 782 orderPersistence: number 783 } 784 785 export interface SimpleArbConfig { 786 profitTrigger: number 787 maxActiveArbs: number 788 numEpochsLeaveOpen: number 789 } 790 791 export interface BotCEXCfg { 792 name: string 793 autoRebalance?: AutoRebalanceConfig 794 } 795 796 export interface BotBalanceAllocation { 797 dex: Record<number, number> 798 cex: Record<number, number> 799 } 800 801 export interface BotAssetConfig { 802 swapFeeN: number 803 orderReservesFactor: number 804 slippageBufferFactor: number 805 transferFactor: number 806 } 807 808 export interface UIConfig { 809 baseConfig: BotAssetConfig 810 quoteConfig: BotAssetConfig 811 simpleArbLots?: number 812 cexRebalance: boolean 813 } 814 815 export interface StartConfig extends MarketWithHost { 816 autoRebalance?: AutoRebalanceConfig 817 alloc: BotBalanceAllocation 818 } 819 820 export interface BotConfig { 821 host: string 822 baseID: number 823 quoteID: number 824 baseWalletOptions?: Record<string, string> 825 quoteWalletOptions?: Record<string, string> 826 cexName: string 827 uiConfig: UIConfig 828 basicMarketMakingConfig?: BasicMarketMakingConfig 829 arbMarketMakingConfig?: ArbMarketMakingConfig 830 simpleArbConfig?: SimpleArbConfig 831 } 832 833 export interface CEXConfig { 834 name: string 835 apiKey: string 836 apiSecret: string 837 } 838 839 export interface MarketWithHost { 840 host: string 841 baseID: number 842 quoteID: number 843 } 844 845 export interface MMCEXStatus { 846 config: CEXConfig 847 connected: boolean 848 connectErr: string 849 markets: Record<string, CEXMarket> 850 balances: Record<number, ExchangeBalance> 851 } 852 853 export interface BotBalance { 854 available: number 855 locked: number 856 pending: number 857 reserved: number 858 } 859 860 export interface BotBalances { 861 dex: BotBalance 862 cex: BotBalance 863 } 864 865 export interface BotInventory { 866 avail: number 867 locked: number // includes BotBalance.reserved 868 total: number // avail + locked 869 } 870 871 export interface RunningBotInventory { 872 avail: number 873 locked: number 874 dex: BotInventory 875 cex: BotInventory 876 } 877 878 export interface CEXNotification extends CoreNote { 879 cexName: string 880 note: any 881 } 882 883 export interface CEXBalanceUpdate { 884 assetID: number 885 balance: ExchangeBalance 886 } 887 888 export interface EpochReportNote extends CoreNote { 889 host: string 890 baseID: number 891 quoteID: number 892 report?: EpochReport 893 } 894 895 export interface CEXProblemsNote extends CoreNote { 896 host: string 897 baseID: number 898 quoteID: number 899 problems?: CEXProblems 900 } 901 902 export interface FeeEstimates extends LotFeeRange { 903 bookingFeesPerLot: number 904 bookingFees: number 905 tokenFeesPerSwap: number 906 } 907 908 export interface ProjectedAlloc { 909 // book is inventory dedicated either to active orders for basicmm and arbmm, 910 // or on reserve for orders in the case of basicarb. book + bookingFees is the 911 // starvation threshold for DEX, meaning it's impossible to start a bot 912 // unstarved if there no way to get book + bookingFees to Bison Wallet. A user 913 // could potentially adjust order reserves or swap fee reserves to free up 914 // more funds, but with possible degradation of bot performance. 915 book: number 916 // booking fees is funding dedicated to covering the fees for funded orders. 917 // bookingFees are in the units of the parent chain for token assets. 918 bookingFees: number 919 // swapFeeReserves is only required for token assets. These are fees 920 // reserved for funding swaps. These fees are only debited, so will definitely 921 // run out eventually, but we'll get a UI that enabled manual and/or auto 922 // refill soon. swapFeeReserves are in the units of the parent chain. 923 swapFeeReserves: number 924 // cex is the inventory dedicated to funding counter-orders on cex for an 925 // arbmm or simplearb bot. cex is the starvation threshold for CEX. 926 cex: number 927 // orderReserves is inventory reserved for facilitating withdraws and 928 // deposits or for replacing matched orders. It's a good idea to have a 929 // little extra around, otherwise a trade sequence gone wrong could put 930 // the bot in a starved or unbalanced state. 931 orderReserves: number 932 // slippageBuffer is only required for the quote asset. This accounts for 933 // variations in rate, because the quote asset's "lot size" varies with 934 // rate. If the rate goes down, the quote-converted lot size goes up, so 935 // we'll let the user choose to reserve a little extra for this case. 936 slippageBuffer: number 937 } 938 939 export interface FeeGapStats { 940 basisPrice: number 941 feeGap: number 942 remoteGap: number 943 roundTripFees: number 944 } 945 946 export interface RunStats { 947 initialBalances: Record<number, number> 948 dexBalances: Record<number, BotBalance> 949 cexBalances: Record<number, BotBalance> 950 profitLoss: ProfitLoss 951 startTime: number 952 pendingDeposits: number 953 pendingWithdrawals: number 954 completedMatches: number 955 tradedUSD: number 956 feeGap: FeeGapStats 957 } 958 959 export interface StampedError { 960 stamp: number 961 error: string 962 } 963 964 export interface BotProblems { 965 walletNotSynced: Record<number, boolean> 966 noWalletPeers: Record<number, boolean> 967 accountSuspended: boolean 968 userLimitTooLow: boolean 969 noPriceSource: boolean 970 oracleFiatMismatch: boolean 971 cexOrderbookUnsynced: boolean 972 causesSelfMatch: boolean 973 unknownError: string 974 } 975 976 export interface TradePlacement { 977 rate: number 978 lots: number 979 standingLots: number 980 orderedLots: number 981 counterTradeRate: number 982 requiredDex: Record<number, number> 983 requiredCex: number 984 usedDex: Record<number, number> 985 usedCex: number 986 error?: BotProblems 987 } 988 989 export interface OrderReport { 990 placements: TradePlacement[] 991 fees: LotFeeRange 992 availableDexBals: Record<number, BotBalance> 993 requiredDexBals: Record<number, number> 994 remainingDexBals: Record<number, number> 995 usedDexBals: Record<number, number> 996 availableCexBal: BotBalance 997 requiredCexBal: number 998 remainingCexBal: number 999 usedCexBal: number 1000 error?: BotProblems 1001 } 1002 1003 export interface EpochReport { 1004 epochNum: number 1005 preOrderProblems?: BotProblems 1006 buysReport?: OrderReport 1007 sellsReport?: OrderReport 1008 } 1009 1010 export interface CEXProblems { 1011 depositErr: Record<number, StampedError> 1012 withdrawErr: Record<number, StampedError> 1013 tradeErr: StampedError 1014 } 1015 1016 export interface MMBotStatus { 1017 config: BotConfig 1018 running: boolean 1019 runStats?: RunStats 1020 latestEpoch?: EpochReport 1021 cexProblems?: CEXProblems 1022 } 1023 1024 export interface MarketMakingStatus { 1025 cexes: Record<string, MMCEXStatus> 1026 bots: MMBotStatus[] 1027 } 1028 1029 export interface DEXOrderEvent { 1030 id: string 1031 rate: number 1032 qty: number 1033 sell: boolean 1034 transactions: WalletTransaction[] 1035 } 1036 1037 export interface CEXOrderEvent { 1038 id: string 1039 rate: number 1040 qty: number 1041 sell: boolean 1042 baseFilled: number 1043 quoteFilled: number 1044 } 1045 1046 export interface DepositEvent { 1047 assetID: number 1048 transaction: WalletTransaction 1049 cexCredit: number 1050 } 1051 1052 export interface WithdrawalEvent { 1053 id: string 1054 assetID: number 1055 transaction: WalletTransaction 1056 cexDebit: number 1057 } 1058 1059 export interface BalanceEffects { 1060 settled: Record<number, number> 1061 pending: Record<number, number> 1062 locked: Record<number, number> 1063 reserved: Record<number, number> 1064 } 1065 1066 export interface MarketMakingEvent { 1067 id: number 1068 timestamp: number 1069 balanceEffects: BalanceEffects 1070 pending: boolean 1071 dexOrderEvent?: DEXOrderEvent 1072 cexOrderEvent?: CEXOrderEvent 1073 depositEvent?: DepositEvent 1074 withdrawalEvent?: WithdrawalEvent 1075 } 1076 1077 interface MarketDay { 1078 vol: number 1079 quoteVol: number 1080 priceChange: number 1081 priceChangePct: number 1082 avgPrice: number 1083 lastPrice: number 1084 openPrice: number 1085 highPrice: number 1086 lowPrice: number 1087 } 1088 1089 export interface CEXMarket { 1090 baseID: number 1091 quoteID: number 1092 baseMinWithdraw: number 1093 quoteMinWithdraw: number 1094 day: MarketDay 1095 } 1096 1097 export interface OracleReport { 1098 host: string 1099 usdVol: number 1100 bestBuy: number 1101 bestSell: number 1102 } 1103 1104 export interface ExchangeBalance { 1105 available: number 1106 locked: number 1107 } 1108 1109 // changing the order of the elements in this enum will affect 1110 // the sorting of the peers table in wallets.ts. 1111 export enum PeerSource { 1112 WalletDefault, 1113 UserAdded, 1114 Discovered, 1115 } 1116 1117 export interface BalanceState { 1118 fiatRates: Record<number, number> 1119 balances: Record<number, BotBalance> 1120 invMods: Record<number, number> 1121 } 1122 1123 export interface Amount { 1124 atoms: number 1125 conventional: number 1126 fmt: string 1127 usd: number 1128 fmtUSD: string 1129 } 1130 1131 export interface ProfitLoss { 1132 initial: Record<number, Amount> 1133 initialUSD: number 1134 mods: Record<number, Amount> 1135 modsUSD: number 1136 final: Record<number, Amount> 1137 finalUSD: number 1138 diffs: Record<number, Amount> 1139 profit: number 1140 profitRatio: number 1141 } 1142 1143 export interface StampedBotConfig { 1144 timestamp: number 1145 cfg: BotConfig 1146 } 1147 1148 export interface MarketMakingRunOverview { 1149 endTime: number 1150 cfgs: StampedBotConfig[] 1151 initialBalances: Record<number, number> 1152 profitLoss: ProfitLoss 1153 finalState: BalanceState 1154 } 1155 1156 export interface WalletPeer { 1157 addr: string 1158 source: PeerSource 1159 connected: boolean 1160 } 1161 1162 export interface TicketTransaction { 1163 hash: string 1164 ticketPrice: number 1165 fees: number 1166 stamp: number 1167 blockHeight: number 1168 } 1169 1170 export interface Ticket { 1171 tx: TicketTransaction 1172 status: number 1173 spender: string 1174 } 1175 1176 export interface TBChoice { 1177 id: string 1178 description: string 1179 } 1180 1181 export interface TBAgenda { 1182 id: string 1183 description: string 1184 currentChoice: string 1185 choices: TBChoice[] 1186 } 1187 1188 export interface TKeyPolicyResult { 1189 key: string 1190 policy: string 1191 ticket?: string 1192 } 1193 1194 export interface TBTreasurySpend { 1195 hash: string 1196 value: number 1197 currentPolicy: string 1198 } 1199 1200 export interface Stances { 1201 agendas: TBAgenda[] 1202 tspends: TBTreasurySpend[] 1203 treasuryKeys: TKeyPolicyResult[] 1204 } 1205 1206 export interface TicketStats { 1207 totalRewards: number 1208 ticketCount: number 1209 votes: number 1210 revokes: number 1211 mempool: number 1212 queued: number 1213 } 1214 1215 export interface TicketStakingStatus { 1216 ticketPrice: number 1217 votingSubsidy: number 1218 vsp: string 1219 isRPC: boolean 1220 tickets: Ticket[] 1221 stances: Stances 1222 stats: TicketStats 1223 } 1224 1225 // VotingServiceProvider is information about a voting service provider. 1226 export interface VotingServiceProvider { 1227 url: string 1228 network: number 1229 launched: number 1230 lastUpdated: number 1231 apiVersions: number[] 1232 feePercentage: number 1233 closed: boolean 1234 voting: number 1235 voted: number 1236 revoked: number 1237 vspdVersion: string 1238 blockHeight: number 1239 netShare: number 1240 } 1241 1242 export interface BondTxInfo { 1243 bondID: string 1244 lockTime: number 1245 accountID: string 1246 } 1247 1248 export interface WalletTransaction { 1249 type: number 1250 id: string 1251 amount: number 1252 fees: number 1253 timestamp: number 1254 blockNumber: number 1255 tokenID?: number 1256 recipient?: string 1257 bondInfo?: BondTxInfo 1258 additionalData: Record<string, string> 1259 } 1260 1261 export interface TxHistoryResult { 1262 txs: WalletTransaction[] 1263 lastTx: boolean 1264 } 1265 1266 export const PrepaidBondID = 2147483647 1267 1268 export interface Application { 1269 assets: Record<number, SupportedAsset> 1270 seedGenTime: number 1271 user: User 1272 mmStatus: MarketMakingStatus 1273 header: HTMLElement 1274 headerSpace: HTMLElement 1275 walletMap: Record<number, WalletState> 1276 exchanges: Record<string, Exchange> 1277 fiatRatesMap: Record<number, number> 1278 showPopups: boolean 1279 commitHash: string 1280 authed: boolean 1281 start (): Promise<void> 1282 reconnected (): void 1283 fetchUser (): Promise<User | void> 1284 fetchMMStatus (): Promise<User | void> 1285 loadPage (page: string, data?: any, skipPush?: boolean): Promise<boolean> 1286 attach (data: any): void 1287 bindTooltips (ancestor: HTMLElement): void 1288 bindUrlHandlers (ancestor: HTMLElement): void 1289 attachHeader (): void 1290 updateMarketElements (ancestor: PageElement, baseID: number, quoteID: number, xc?: Exchange): void 1291 showDropdown (icon: HTMLElement, dialog: HTMLElement): void 1292 ackNotes (): void 1293 setNoteTimes (noteList: HTMLElement): void 1294 bindInternalNavigation (ancestor: HTMLElement): void 1295 updateMenuItemsDisplay (): void 1296 attachCommon (node: HTMLElement): void 1297 updateBondConfs (dexAddr: string, coinID: string, confs: number, assetID: number): void 1298 handleBondNote (note: BondNote): void 1299 loggedIn (notes: CoreNote[], pokes: CoreNote[]): void 1300 setPokes(pokes: CoreNote[]): void 1301 botStatus (host: string, baseID: number, quoteID: number): MMBotStatus | undefined 1302 notify (note: CoreNote): void 1303 log (loggerID: string, ...msg: any): void 1304 prependPokeElement (note: CoreNote): void 1305 prependNoteElement (note: CoreNote, skipSave?: boolean): void 1306 prependListElement (noteList: HTMLElement, note: CoreNote, el: NoteElement): void 1307 loading (el: HTMLElement): () => void 1308 orders (host: string, mktID: string): Order[] 1309 haveActiveOrders (assetID: number): boolean 1310 order (oid: string): Order | null 1311 canAccelerateOrder(order: Order): boolean 1312 unitInfo (assetID: number, xc?: Exchange): UnitInfo 1313 baseChainSymbol (assetID: number): string 1314 extensionWallet (assetID: number): ExtensionConfiguredWallet | undefined 1315 conventionalRate (baseID: number, quoteID: number, encRate: number, xc?: Exchange): number 1316 walletDefinition (assetID: number, walletType: string): WalletDefinition 1317 currentWalletDefinition (assetID: number): WalletDefinition 1318 fetchBalance (assetID: number): Promise<WalletBalance> 1319 checkResponse (resp: APIResponse): boolean 1320 signOut (): Promise<void> 1321 registerNoteFeeder (receivers: Record<string, (n: CoreNote) => void>): void 1322 txHistory(assetID: number, n: number, after?: string): Promise<TxHistoryResult> 1323 getWalletTx(assetID: number, txid: string): WalletTransaction | undefined 1324 clearTxHistory(assetID: number): void 1325 parentAsset(assetID: number): SupportedAsset 1326 needsCustomProvider (assetID: number): Promise<boolean> 1327 } 1328 1329 // TODO: Define an interface for Application? 1330 let application: Application 1331 1332 export function registerApplication (a: Application) { 1333 application = a 1334 } 1335 1336 export function app (): Application { 1337 return application 1338 }