@dappworks/kit 0.5.37 → 0.5.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/dist/aiem.mjs +5 -5
  2. package/dist/{chunk-SPFKGNUY.mjs → chunk-2HNXZE3X.mjs} +396 -373
  3. package/dist/chunk-2HNXZE3X.mjs.map +1 -0
  4. package/dist/{chunk-2BZKMJZX.mjs → chunk-2N4HH4ZF.mjs} +1 -1
  5. package/dist/chunk-2N4HH4ZF.mjs.map +1 -0
  6. package/dist/{chunk-72E76L6J.mjs → chunk-B7RV4C5E.mjs} +3 -3
  7. package/dist/chunk-B7RV4C5E.mjs.map +1 -0
  8. package/dist/{chunk-WMV5O3PI.mjs → chunk-DTCEVRDM.mjs} +33 -6
  9. package/dist/chunk-DTCEVRDM.mjs.map +1 -0
  10. package/dist/{chunk-R66SHRQE.mjs → chunk-GKAU4P5I.mjs} +2 -2
  11. package/dist/chunk-GKAU4P5I.mjs.map +1 -0
  12. package/dist/{chunk-7EL2RQI7.mjs → chunk-IMOLRP7I.mjs} +1 -1
  13. package/dist/chunk-IMOLRP7I.mjs.map +1 -0
  14. package/dist/{chunk-2PD23V7H.mjs → chunk-K7LFG5BA.mjs} +1 -1
  15. package/dist/{chunk-2PD23V7H.mjs.map → chunk-K7LFG5BA.mjs.map} +1 -1
  16. package/dist/{chunk-AVG4JG4V.mjs → chunk-MPNSYZJU.mjs} +6 -6
  17. package/dist/chunk-MPNSYZJU.mjs.map +1 -0
  18. package/dist/{chunk-Z3LJE5QF.mjs → chunk-ONVPCAMQ.mjs} +1 -1
  19. package/dist/chunk-ONVPCAMQ.mjs.map +1 -0
  20. package/dist/{chunk-NKGQRF5D.mjs → chunk-PZ3VSAOC.mjs} +4 -4
  21. package/dist/chunk-PZ3VSAOC.mjs.map +1 -0
  22. package/dist/{chunk-5BTB7HRK.mjs → chunk-QA3E2PJT.mjs} +2 -2
  23. package/dist/chunk-QA3E2PJT.mjs.map +1 -0
  24. package/dist/{chunk-7WJMHFRA.mjs → chunk-R4N52NI2.mjs} +2 -2
  25. package/dist/chunk-R4N52NI2.mjs.map +1 -0
  26. package/dist/{chunk-6F7H4PAA.mjs → chunk-R4SQKVDQ.mjs} +1 -1
  27. package/dist/{chunk-7LPSHBBI.mjs → chunk-WKE3FSON.mjs} +13 -9
  28. package/dist/chunk-WKE3FSON.mjs.map +1 -0
  29. package/dist/{chunk-KIS52LFU.mjs → chunk-XSGTWROT.mjs} +7 -7
  30. package/dist/chunk-XSGTWROT.mjs.map +1 -0
  31. package/dist/dev.mjs +4 -4
  32. package/dist/dev.mjs.map +1 -1
  33. package/dist/experimental.mjs +5 -5
  34. package/dist/experimental.mjs.map +1 -1
  35. package/dist/form.mjs +6 -6
  36. package/dist/form.mjs.map +1 -1
  37. package/dist/index.mjs +12 -12
  38. package/dist/inspector.mjs +1 -1
  39. package/dist/inspector.mjs.map +1 -1
  40. package/dist/jsoncomponent.mjs +1 -1
  41. package/dist/jsoncomponent.mjs.map +1 -1
  42. package/dist/jsontable.mjs +6 -6
  43. package/dist/metrics.mjs +6 -6
  44. package/dist/metrics.mjs.map +1 -1
  45. package/dist/plugins.mjs +9 -9
  46. package/dist/plugins.mjs.map +1 -1
  47. package/dist/ui.mjs +3 -3
  48. package/dist/ui.mjs.map +1 -1
  49. package/dist/utils.mjs +4 -4
  50. package/dist/wallet.mjs +13 -13
  51. package/dist/wallet.mjs.map +1 -1
  52. package/package.json +3 -3
  53. package/dist/PaginationState-c19e621a.d.ts +0 -17
  54. package/dist/PromiseState-e64b3707.d.ts +0 -57
  55. package/dist/StorageState-cfd942cb.d.ts +0 -48
  56. package/dist/aiem.d.mts +0 -124
  57. package/dist/chunk-2BZKMJZX.mjs.map +0 -1
  58. package/dist/chunk-5BTB7HRK.mjs.map +0 -1
  59. package/dist/chunk-72E76L6J.mjs.map +0 -1
  60. package/dist/chunk-7EL2RQI7.mjs.map +0 -1
  61. package/dist/chunk-7LPSHBBI.mjs.map +0 -1
  62. package/dist/chunk-7WJMHFRA.mjs.map +0 -1
  63. package/dist/chunk-AVG4JG4V.mjs.map +0 -1
  64. package/dist/chunk-KIS52LFU.mjs.map +0 -1
  65. package/dist/chunk-NKGQRF5D.mjs.map +0 -1
  66. package/dist/chunk-R66SHRQE.mjs.map +0 -1
  67. package/dist/chunk-SPFKGNUY.mjs.map +0 -1
  68. package/dist/chunk-WMV5O3PI.mjs.map +0 -1
  69. package/dist/chunk-Z3LJE5QF.mjs.map +0 -1
  70. package/dist/dev.d.mts +0 -26
  71. package/dist/experimental.d.mts +0 -190
  72. package/dist/form.d.mts +0 -384
  73. package/dist/index-38be834f.d.ts +0 -3
  74. package/dist/index.d.mts +0 -90
  75. package/dist/inspector.d.mts +0 -15
  76. package/dist/jsoncomponent.d.mts +0 -22
  77. package/dist/jsontable.d.mts +0 -126
  78. package/dist/metrics.d.mts +0 -121
  79. package/dist/plugins.d.mts +0 -118
  80. package/dist/root-218afa4f.d.ts +0 -111
  81. package/dist/ui.d.mts +0 -29
  82. package/dist/utils.d.mts +0 -148
  83. package/dist/wallet.d.mts +0 -193
  84. /package/dist/{chunk-6F7H4PAA.mjs.map → chunk-R4SQKVDQ.mjs.map} +0 -0
@@ -1,48 +0,0 @@
1
- import * as mobx from 'mobx';
2
-
3
- declare abstract class ContractBase {
4
- }
5
- type ContractClass<T extends ContractBase> = new (args: Partial<T>) => T;
6
- type PromiseHookData<T, U> = {
7
- value: Awaited<U>;
8
- get: T;
9
- call: T;
10
- func: T;
11
- loading: boolean;
12
- errorRetry: number;
13
- };
14
- declare class PromiseHook {
15
- static entities: mobx.IObservableArray<any>;
16
- static Get<T extends ContractBase>(cls: ContractClass<T>): (args: {
17
- args: Partial<T>;
18
- id?: string;
19
- select?: {
20
- [key in keyof Partial<T>]: boolean;
21
- };
22
- unselect?: {
23
- [key in keyof Partial<T>]: boolean;
24
- };
25
- }) => Promise<T & {
26
- refresh: () => Promise<void>;
27
- }>;
28
- static isPromiseHook(target: any): boolean;
29
- static wrap<T extends (...args: any[]) => Promise<any>, U = ReturnType<T>>({ func, defaultValue, lazy }: {
30
- func: T;
31
- defaultValue?: Awaited<U>;
32
- lazy?: boolean;
33
- }): PromiseHookData<T, U>;
34
- }
35
-
36
- declare class StorageState<T> {
37
- key: string;
38
- value: T | any;
39
- default: T | any;
40
- constructor(args: Partial<StorageState<T>>);
41
- static safeParse(val: any): any;
42
- load(): any;
43
- save(value?: T): any;
44
- setValue(value?: T): void;
45
- clear(): any;
46
- }
47
-
48
- export { PromiseHook as P, StorageState as S, PromiseHookData as a };
package/dist/aiem.d.mts DELETED
@@ -1,124 +0,0 @@
1
- import { MulticallBatchOptions, Chain, Abi, GetContractReturnType, PublicClient, HttpTransport, WalletClient, Transport, Account } from 'viem';
2
- import TTLCache from '@isaacs/ttlcache';
3
-
4
- type ClassType<T> = {
5
- new (...args: any[]): T;
6
- };
7
-
8
- declare class Fields {
9
- static hide(options?: any): (target: any, propertyKey: any, descriptor?: PropertyDescriptor) => void;
10
- static read(options?: any): (target: any, propertyKey: any, descriptor?: PropertyDescriptor) => void;
11
- static write(options?: any): (target: any, propertyKey: any, descriptor?: PropertyDescriptor) => void;
12
- static custom(func?: any): (target: any, propertyKey: any, descriptor?: PropertyDescriptor) => void;
13
- static relation<T = any, R = any>(entity: () => ClassType<R>, options: ((e: T) => Promise<Partial<R> | Partial<R>[]>) | string): (target: any, propertyKey: any, descriptor?: PropertyDescriptor) => void;
14
- static contract<T = any, R = any>(entity: () => ClassType<R>, options: ((e: T) => Promise<Partial<R> | Partial<R>[]>) | string): (target: any, propertyKey: any, descriptor?: PropertyDescriptor) => void;
15
- private static setMetadata;
16
- }
17
-
18
- declare class Cache {
19
- kv: TTLCache<string, any>;
20
- wrap<T>(key: string, fn: () => T | Promise<T>, config?: TTLCache.Options<any, any>): T | Promise<T>;
21
- }
22
- type GetOptions = {
23
- multicall?: boolean | MulticallBatchOptions;
24
- rpcUrls?: Chain["rpcUrls"];
25
- pollingInterval?: number;
26
- };
27
- declare class AIem<Contracts extends Record<string, Abi>, Chains extends Record<string, Chain>, Addrs extends {
28
- [K in keyof Contracts]?: {
29
- [key: string]: `${string}-0x${string}`;
30
- };
31
- }> {
32
- static cache?: Cache;
33
- cache?: Cache;
34
- contractMap?: Contracts;
35
- chainMap?: Chains;
36
- nameMap?: Addrs;
37
- contracts: {
38
- [K in keyof Addrs & keyof Contracts]: {
39
- [KK in keyof Addrs[K]]: GetContractReturnType<Contracts[K], PublicClient<HttpTransport, Chain, any, any>, any, any>;
40
- };
41
- };
42
- static defaultFuncMap: {
43
- totalSupply: {
44
- ttl: number;
45
- };
46
- symbol: {
47
- ttl: number;
48
- };
49
- name: {
50
- ttl: number;
51
- };
52
- decimals: {
53
- ttl: number;
54
- };
55
- balanceOf: {
56
- ttl: number;
57
- };
58
- };
59
- funcMap?: {
60
- [key: string]: {
61
- ttl?: number;
62
- };
63
- };
64
- get _cache(): Cache;
65
- getWallet?: () => WalletClient;
66
- static Set<Contracts extends Record<string, Abi>, Chains extends Record<string, Chain>, Addrs extends {
67
- [K in keyof Contracts]?: {
68
- [key: string]: `${string}-0x${string}`;
69
- };
70
- }>(args: Pick<AIem<Contracts, Chains, Addrs>, "contractMap" | "chainMap" | "nameMap" | "getWallet" | "cache" | "funcMap">): AIem<Contracts, Chains, Addrs>;
71
- Set<Contracts extends Record<string, Abi>, Chains extends Record<string, Chain>, Addrs extends {
72
- [K in keyof Contracts]?: {
73
- [key: string]: `${string}-0x${string}`;
74
- };
75
- }>(args: Pick<AIem<Contracts, Chains, Addrs>, "contractMap" | "chainMap" | "nameMap" | "getWallet" | "cache" | "funcMap">): AIem<Contracts, Chains, Addrs>;
76
- constructor(args?: Pick<AIem<Contracts, Chains, Addrs>, "contractMap" | "chainMap" | "nameMap" | "getWallet" | "cache" | "funcMap">);
77
- static PubClient(chainId: string, options?: GetOptions): PublicClient<HttpTransport, Chain, any, any>;
78
- PubClient<C extends keyof Chains>(chainId: C, options?: GetOptions): PublicClient<HttpTransport, Chain, any, any>;
79
- static Get<TAbi extends Abi = any, ReturnType extends GetContractReturnType<TAbi, WalletClient<Transport, Chain, Account>>>(abi: TAbi, chainId: any, address: any, wallet?: WalletClient, options?: GetOptions): ReturnType & {
80
- encode: ReturnType["write"];
81
- };
82
- Get<K extends keyof Contracts, C extends keyof Chains, Addr extends `0x${string}`>(contractName: K, chainId: C, address: Addr, options?: GetOptions): GetContractReturnType<Contracts[K], PublicClient<HttpTransport, Chain, any, any>> & {
83
- encode: GetContractReturnType<Contracts[K], WalletClient<HttpTransport, Chain, Account, any>>["write"];
84
- };
85
- getContract({ client, address, abi, }: {
86
- client: {
87
- public: PublicClient<HttpTransport, Chain, any, any>;
88
- wallet?: WalletClient;
89
- };
90
- address: `0x${string}`;
91
- abi: any;
92
- }): any;
93
- static init(): AIem<any, any, any>;
94
- static getPrice({ chainId, address }: {
95
- chainId?: string;
96
- address: string;
97
- }): Promise<any>;
98
- static utils: {
99
- autoFormat: ({ value, decimals, chainId, address }: {
100
- value: string;
101
- decimals?: number;
102
- chainId: string;
103
- address: string;
104
- }) => Promise<{
105
- usd: string;
106
- price: any;
107
- value: string;
108
- format: string;
109
- originFormat: string;
110
- decimals: string;
111
- }>;
112
- };
113
- static QueryMany<E, S extends QuerySelect<E>>(entity: ClassType<E>, select: S): (_entities: Partial<E>[]) => Promise<QueryReturnType<E, S>[]>;
114
- static Query<E, S extends QuerySelect<E>>(entity: ClassType<E>, select: S): (entities: Partial<E>) => Promise<QueryReturnType<E, S>>;
115
- }
116
- type Item<T> = T extends (infer U)[] ? U : T;
117
- type QuerySelect<E> = {
118
- [K in keyof E]?: E[K] extends (...args: any[]) => any ? Parameters<E[K]> | boolean : E[K] extends object ? QuerySelect<Item<E[K]>> | boolean : boolean;
119
- };
120
- type QueryReturnType<E, S extends QuerySelect<E>> = {
121
- [K in keyof E]: K extends keyof S ? E[K] extends (...args: any[]) => any ? Awaited<ReturnType<E[K]>> : E[K] extends object ? S[K] extends object ? QueryReturnType<E[K], S[K]> : E[K] : E[K] : E[K];
122
- };
123
-
124
- export { AIem, Cache, Fields, GetOptions, Item, QueryReturnType };
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../lib/dexie.ts"],"names":[],"mappings":";AAAA,OAAO,gBAAgB;AACvB,SAAS,aAAyB;AAE3B,IAAM,eAAN,cAA2B,MAAM;AAAA,EAGtC,cAAc;AACZ,UAAM,OAAO;AACb,SAAK,QAAQ,CAAC,EAAE,OAAO;AAAA,MACrB,IAAI;AAAA,IACN,CAAC;AAAA,EACH;AACF;AACO,IAAM,QAAQ,IAAI,aAAa;AAE/B,IAAM,aAAN,MAAiB;AAAA,EAAjB;AACL,cAAK,MAAM;AACX,kBAAS,IAAI;AAAA,MACX,OAAO,QAAkB;AACvB,cAAM,MAAM,MAAM,KAAK,GAAG,QAAQ,GAAG;AACrC,eAAO,IAAI,IAAI,CAAC,MAAM,uBAAG,KAAK;AAAA,MAChC;AAAA,MACA,EAAE,OAAO,MAAM;AAAA,IACjB;AACA,kBAAS,IAAI;AAAA,MACX,OAAO,QAAoD;AACzD,cAAM,MAAM,oBAAI,KAAK;AACrB,cAAM,KAAK,GAAG,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,OAAO,EAAE,OAAO,EAAE,OAAO,YAAY,IAAI,QAAQ,IAAI,QAAQ,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;AACjI,eAAO;AAAA,MACT;AAAA,MACA,EAAE,OAAO,MAAM;AAAA,IACjB;AACA,mBAAU;AAAA,MACR,KAAK,KAAK;AAAA,MACV,QAAQ;AAAA,IACV;AAAA;AAAA,EAEA,MAAM,IAAI,MAAM;AACd,UAAM,MAAM,KAAK,QAAQ,SAAS;AAClC,YAAQ,KAAK,SAAS,GAAG;AACzB,UAAM,MAAM,MAAM,KAAK,OAAO,KAAK,GAAG;AACtC,YAAQ,QAAQ,SAAS,GAAG;AAC5B,UAAM,OAAO,2BAAK;AAClB,QAAI,CAAC;AAAM;AACX,WAAO,6BAAM;AAAA,EACf;AAAA,EAEA,MAAM,OAAO,MAAM;AACjB,UAAM,MAAM,KAAK,QAAQ,SAAS;AAClC,YAAQ,KAAK,SAAS,GAAG;AACzB,UAAM,MAAM,MAAM,KAAK,OAAO,KAAK,GAAG;AACtC,YAAQ,QAAQ,SAAS,GAAG;AAC5B,UAAM,OAAO,2BAAK;AAClB,QAAI,CAAC;AAAM;AACX,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,IAAI,MAAM,OAAO,SAA4B;AACjD,UAAM,MAAM,KAAK,QAAQ,SAAS;AAClC,SAAK,OAAO,KAAK,EAAE,KAAK,OAAO,MAAK,mCAAS,QAAO,KAAK,QAAQ,IAAI,CAAC;AAEtE,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,KAAK;AAEhB;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ;AAAA,EAAC;AAAA,EAEf,MAAM,KAAoE,KAAK,IAAO,MAAmE;AACvJ,QAAI,OAAO,MAAM,KAAK,OAAO,KAAK,GAAG;AACrC,SAAI,6BAAM,eAAc,IAAI,KAAK,KAAK,UAAU,KAAK,oBAAI,KAAK,GAAG;AAG/D,UAAI,6BAAM,WAAW;AACnB,WAAG,EACA,KAAK,CAAC,UAAU;AACf,eAAK,OAAO,KAAK,EAAE,KAAK,OAAO,MAAK,6BAAM,QAAO,KAAK,QAAQ,IAAI,CAAC;AAAA,QACrE,CAAC,EACA,MAAM,CAAC,QAAQ;AACd,kBAAQ,MAAM,GAAG;AAAA,QACnB,CAAC;AAAA,MACL,OAAO;AAEL,eAAO;AAAA,MACT;AAAA,IACF;AACA,QAAI,CAAC,MAAM;AAET,YAAM,QAAQ,MAAM,GAAG;AACvB,WAAK,OAAO,KAAK,EAAE,KAAK,OAAO,MAAK,6BAAM,QAAO,KAAK,QAAQ,IAAI,CAAC;AACnE,aAAO;AAAA,IACT;AACA,WAAO,KAAK;AAAA,EACd;AACF;AAEO,IAAM,QAAQ,IAAI,WAAW","sourcesContent":["import DataLoader from \"dataloader\";\r\nimport { Dexie, type Table } from \"dexie\";\r\n\r\nexport class DexieStorage extends Dexie {\r\n kv: Table<{ key: string; value: { value: any; expiration: number } }>;\r\n\r\n constructor() {\r\n super(\"cache\");\r\n this.version(1).stores({\r\n kv: \"key, value\",\r\n });\r\n }\r\n}\r\nexport const dexie = new DexieStorage();\r\n\r\nexport class DexieCache {\r\n kv = dexie.kv;\r\n kv_get = new DataLoader(\r\n async (ids: string[]) => {\r\n const res = await this.kv.bulkGet(ids);\r\n return res.map((i) => i?.value);\r\n },\r\n { cache: false },\r\n );\r\n kv_set = new DataLoader(\r\n async (ids: { key: string; value: any; ttl: number }[]) => {\r\n const now = new Date();\r\n await this.kv.bulkPut(ids.map((i) => ({ key: i.key, value: { value: i.value, expiration: now.setTime(now.getTime() + i.ttl) } })));\r\n return ids;\r\n },\r\n { cache: false },\r\n );\r\n options = {\r\n ttl: 60 * 1000,\r\n prefix: \"\",\r\n };\r\n\r\n async get(_key) {\r\n const key = this.options.prefix + _key;\r\n console.time(\"get \" + key);\r\n const res = await this.kv_get.load(key);\r\n console.timeEnd(\"get \" + key);\r\n const data = res?.value;\r\n if (!data) return;\r\n return data?.value;\r\n }\r\n\r\n async getRaw(_key) {\r\n const key = this.options.prefix + _key;\r\n console.time(\"get \" + key);\r\n const res = await this.kv_get.load(key);\r\n console.timeEnd(\"get \" + key);\r\n const data = res?.value;\r\n if (!data) return;\r\n return data;\r\n }\r\n\r\n async set(_key, value, options?: { ttl?: number }) {\r\n const key = this.options.prefix + _key;\r\n this.kv_set.load({ key, value, ttl: options?.ttl || this.options.ttl });\r\n\r\n return this;\r\n }\r\n\r\n async delete(key) {\r\n // return this.dataloader.load(['del', key]);\r\n return;\r\n }\r\n\r\n async clear() {}\r\n\r\n async wrap<T extends (...args: any[]) => Promise<any>, U = ReturnType<T>>(key, fn: T, args?: { ttl?: number; alowStale?: boolean }): Promise<Awaited<U>> {\r\n let data = await this.kv_get.load(key);\r\n if (data?.expiration && new Date(data.expiration) <= new Date()) {\r\n // console.log(\"cache expired\", key)\r\n\r\n if (args?.alowStale) {\r\n fn()\r\n .then((value) => {\r\n this.kv_set.load({ key, value, ttl: args?.ttl || this.options.ttl });\r\n })\r\n .catch((err) => {\r\n console.error(err);\r\n });\r\n } else {\r\n //@ts-ignore\r\n data = null;\r\n }\r\n }\r\n if (!data) {\r\n // console.log(\"miss cache\", key)\r\n const value = await fn();\r\n this.kv_set.load({ key, value, ttl: args?.ttl || this.options.ttl });\r\n return value;\r\n }\r\n return data.value;\r\n }\r\n}\r\n\r\nexport const cache = new DexieCache();\r\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../components/Common/SkeletonBox/index.tsx"],"names":[],"mappings":";;;;;AAAA,SAAS,gBAAgC;AACzC,OAAO,WAAW;AAGX,IAAM,cAAc,CAAC;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,IACb,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF,MAKM;AACJ,QAAM,WAAW,CAAC,GAAG,IAAI,MAAM,QAAQ,CAAC,EAAE,KAAK,CAAC;AAChD,SACE,oCAAC,SAAI,WAAW,GAAG,2BAA2B,SAAS,KACpD,SAAS,IAAI,CAAC,GAAG,UAAU;AAC1B,WACE;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,WAAW,GAAG,eAAe,WAAW;AAAA,QACxC,YAAY;AAAA;AAAA,IACd;AAAA,EAEJ,CAAC,CACH;AAEJ","sourcesContent":["import { Skeleton, SlotsToClasses } from '@nextui-org/react';\r\nimport React from 'react';\r\nimport { cn } from '../../../lib/utils';\r\n\r\nexport const SkeletonBox = ({\r\n line,\r\n className,\r\n skClassName,\r\n skClassNames = {\r\n base: 'transition-background !duration-900 before:transition-opacity before:!duration-900',\r\n content: 'transition-opacity motion-reduce:transition-none !duration-900',\r\n }\r\n}: {\r\n line?: number;\r\n className?: string;\r\n skClassName?: string;\r\n skClassNames?: SlotsToClasses<\"base\" | \"content\">\r\n}) => {\r\n const lineCamp = [...new Array(line || 1).keys()];\r\n return (\r\n <div className={cn('flex items-center gap-4', className)}>\r\n {lineCamp.map((_, index) => {\r\n return (\r\n <Skeleton\r\n key={index}\r\n className={cn('w-full h-10', skClassName)}\r\n classNames={skClassNames}\r\n />\r\n );\r\n })}\r\n </div>\r\n );\r\n};\r\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../store/standard/base.ts","../store/standard/PromiseState.ts"],"names":["makeAutoObservable"],"mappings":"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","sourcesContent":["import { makeAutoObservable } from \"mobx\";\r\n\r\nimport { type RootStore } from \"../root\";\r\n\r\nexport abstract class Store {\r\n sid?: string;\r\n stype?: string;\r\n disabled?: boolean;\r\n autoObservable?: boolean;\r\n autoAsyncable?: boolean;\r\n _active?: number;\r\n\r\n stores?: Store[];\r\n\r\n private pannel?: {\r\n title: string;\r\n render: any;\r\n };\r\n devtools?: {\r\n enable?: boolean;\r\n started?: boolean;\r\n panels: Store[\"pannel\"][];\r\n };\r\n\r\n private slot?: {\r\n name?: string;\r\n input?: Record<string, any>;\r\n render: React.FC;\r\n };\r\n slots?: Record<string, Store[\"slot\"]>;\r\n\r\n events?: Record<string, { name: string; handler(args: { e: MouseEvent; v?: any }): any }>;\r\n\r\n provider?({ rootStore }: { rootStore: RootStore }): any;\r\n\r\n onNewStore?({ rootStore, store }: { rootStore: RootStore; store: Store }): void;\r\n onAddedStores?({ rootStore }: { rootStore: RootStore }): void;\r\n onAdded?({ rootStore }: { rootStore: RootStore }): void;\r\n\r\n init?(): void;\r\n JSONView?: Record<string, { name: string; render: React.FC }>;\r\n\r\n onKeyBindings?: () => { key: string; fn: () => void }[];\r\n\r\n constructor() {\r\n this._active = this._active ?? 0;\r\n }\r\n}\r\n\r\nexport type StoreClass<T extends Store> = new (...args: any[]) => T;\r\n\r\nexport interface BaseState {\r\n value: number;\r\n setValue(value: any): any;\r\n}\r\n\r\nexport class StringState<T extends string> {\r\n //@ts-ignore\r\n value: T = null;\r\n constructor(args: Partial<StringState<T>> = {}) {\r\n Object.assign(this, args);\r\n makeAutoObservable(this);\r\n }\r\n setValue(value: T) {\r\n this.value = value;\r\n }\r\n}\r\n\r\nexport class BooleanState {\r\n value: boolean = false;\r\n constructor(args: Partial<BooleanState> = {}) {\r\n Object.assign(this, args);\r\n makeAutoObservable(this);\r\n }\r\n setValue(value: boolean) {\r\n this.value = value;\r\n }\r\n}\r\n\r\nexport class NumberState {\r\n value: number = 0;\r\n constructor(args: Partial<NumberState> = {}) {\r\n Object.assign(this, args);\r\n makeAutoObservable(this);\r\n }\r\n setValue(value: number) {\r\n this.value = value;\r\n }\r\n}\r\n\r\nexport class ValueState<T> {\r\n //@ts-ignore\r\n _value: T = null;\r\n constructor(args: Partial<ValueState<T>> = {}) {\r\n Object.assign(this, args);\r\n makeAutoObservable(this);\r\n }\r\n\r\n get value() {\r\n return this.getValue ? this.getValue(this._value) : this._value;\r\n }\r\n\r\n set value(value) {\r\n this._value = value;\r\n }\r\n\r\n getValue: (value: T) => T;\r\n\r\n setValue(value: T) {\r\n this._value = value;\r\n }\r\n}\r\n\r\n// export interface Events {\r\n// data: (data: any) => void;\r\n// error: (error: any) => void;\r\n// update: () => void;\r\n// wait: () => void;\r\n// }\r\n","import { EventEmitter } from \"events\";\r\nimport { makeAutoObservable } from \"mobx\";\r\nimport { ToastPlugin } from \"../../module/Toast/Toast\";\r\nimport { RootStore } from \"../root\";\r\nimport { BaseState, BooleanState, NumberState } from \"./base\";\r\nimport { useEffect } from \"react\";\r\n\r\nexport interface Events {\r\n data: (data: any) => void;\r\n error: (error: any) => void;\r\n select: (index: number) => void;\r\n update: () => void;\r\n finally: () => void;\r\n wait: () => void;\r\n}\r\n\r\nexport class PromiseState<T extends (...args: any[]) => Promise<any>, U = ReturnType<T>> {\r\n sid = \"PromiseState\";\r\n key?: string;\r\n loading = new BooleanState();\r\n // @ts-ignore\r\n value?: Awaited<U> = null;\r\n defaultValue: any = null;\r\n function: T;\r\n transform?: (value: any) => Promise<Awaited<U>> | Awaited<U> = null;\r\n onError?: (error: any) => void | null = null;\r\n\r\n autoAlert = true;\r\n autoUpdate = false;\r\n autoInit = false;\r\n autoClean = false;\r\n context: any = undefined;\r\n\r\n successMsg: string = \"\";\r\n errMsg: string = \"\";\r\n showUnauthorizedAlert = false;\r\n\r\n loadingLock = true;\r\n\r\n // event plugin\r\n event = new EventEmitter();\r\n\r\n on<E extends keyof Events>(event: E, listener: Events[E]) {\r\n this.event.on(event, listener);\r\n return this;\r\n }\r\n\r\n once<E extends keyof Events>(event: E, listener: Events[E]) {\r\n this.event.once(event, listener);\r\n return this;\r\n }\r\n\r\n use<E extends keyof Events>(event: E, listener: Events[E]) {\r\n useEffect(() => {\r\n this.event.on(event, listener);\r\n return () => {\r\n this.event.off(event, listener);\r\n };\r\n }, []);\r\n\r\n return () => this.event.off(event, listener);\r\n }\r\n\r\n emit<E extends keyof Events>(event: E, ...args: Parameters<Events[E]>) {\r\n this.event.emit(event, ...args);\r\n }\r\n\r\n // init plugin\r\n init: () => Promise<void>;\r\n\r\n // list selector plugin\r\n currentIndex: BaseState = new NumberState({ value: 0 });\r\n get current() {\r\n if (Array.isArray(this.value) && this.value.length > 0 && !this.value[this.currentIndex.value]) {\r\n this.currentIndex.setValue(0);\r\n }\r\n //@ts-ignore\r\n return this.value[this.currentIndex.value];\r\n }\r\n\r\n _onSelect(index: number) {\r\n this.currentIndex.setValue(index);\r\n this.event.emit(\"select\", index);\r\n this.event.emit(\"update\");\r\n }\r\n\r\n onSelect(index: number) {\r\n this._onSelect(index);\r\n }\r\n\r\n toJSON() {\r\n return {\r\n value: this.value,\r\n };\r\n }\r\n\r\n // @ts-ignore\r\n async waitItem(): Promise<Awaited<U>[0]> {\r\n await this.wait();\r\n return this.current;\r\n }\r\n\r\n // wait hook plugin\r\n async wait({ call = false } = {}): Promise<Awaited<U>> {\r\n return new Promise<Awaited<U>>((res, rej) => {\r\n if (this.value) {\r\n if (Array.isArray(this.value)) {\r\n if (this.value.length > 0) {\r\n res(this.value);\r\n }\r\n } else {\r\n res(this.value);\r\n }\r\n }\r\n\r\n //@ts-ignore\r\n if (call && !this.loading.value) this.call();\r\n this.event.emit(\"wait\");\r\n this.event.once(\"data\", res);\r\n this.event.on(\"error\", rej);\r\n });\r\n }\r\n\r\n // devtool plugin\r\n debug: { name: string; input: Record<string, any> } = null;\r\n\r\n constructor(args: Partial<PromiseState<T, U>> = {}) {\r\n Object.assign(this, args);\r\n if (this.defaultValue) {\r\n this.value = this.defaultValue;\r\n }\r\n if (this.key) {\r\n RootStore.init().add(this, { sid: this.key });\r\n } else {\r\n makeAutoObservable(this);\r\n }\r\n }\r\n\r\n async setValue(val) {\r\n let _val = val;\r\n if (this.transform) {\r\n _val = await this.transform(val);\r\n }\r\n this.value = _val;\r\n this.event.emit(\"data\", val);\r\n this.event.emit(\"update\");\r\n }\r\n\r\n async getOrCall(...args: Parameters<T>): Promise<Awaited<U>> {\r\n if (this.value) {\r\n if (Array.isArray(this.value)) {\r\n if (this.value.length > 0) {\r\n return this.value;\r\n } else {\r\n return this.call(...args);\r\n }\r\n } else {\r\n return this.value;\r\n }\r\n } else {\r\n return this.call(...args);\r\n }\r\n }\r\n\r\n async call(...args: Parameters<T>): Promise<Awaited<U>> {\r\n const toast = RootStore.Get(ToastPlugin);\r\n try {\r\n if (this.loadingLock && this.loading.value == true) return;\r\n this.loading.setValue(true);\r\n const res = await this.function.apply(this.context, args);\r\n this.setValue(res);\r\n if (this.successMsg && res) {\r\n toast.success(this.successMsg);\r\n }\r\n return res;\r\n } catch (error) {\r\n if (this.autoAlert) {\r\n const message = error.message;\r\n if (message.includes(\"UNAUTHORIZED\")) {\r\n toast.dismiss();\r\n if (this.showUnauthorizedAlert) {\r\n toast.error(message);\r\n }\r\n } else {\r\n this.errMsg = message;\r\n toast.error(message);\r\n }\r\n this.onError?.(error);\r\n } else {\r\n if (this.onError) {\r\n this.onError(error);\r\n } else {\r\n this.event.emit(\"error\", error);\r\n throw error;\r\n }\r\n }\r\n } finally {\r\n this.event.emit(\"finally\");\r\n this.loading.setValue(false);\r\n }\r\n }\r\n}\r\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../module/Toast/Toast.tsx"],"names":[],"mappings":";AAAA,OAAO,WAAW;AAClB,OAAO,SAAS,eAAe;AAGxB,IAAM,cAAN,MAAmC;AAAA,EAAnC;AACL,eAAM;AACN,oBAAW,MACT;AAAA,MAAC;AAAA;AAAA,QACC,cAAc;AAAA,UACZ,WAAW;AAAA,QACb;AAAA;AAAA,IACF;AAGF,mBAAU,MAAM;AAChB,iBAAQ,MAAM;AACd,mBAAU,MAAM;AAChB,kBAAS,MAAM;AACf,mBAAU,MAAM;AAChB,kBAAS,MAAM;AACf,mBAAU,MAAM;AAAA;AAClB","sourcesContent":["import React from \"react\";\r\nimport toast, { Toaster } from \"react-hot-toast\";\r\nimport { type Store } from \"../../store/standard/base\";\r\n\r\nexport class ToastPlugin implements Store {\r\n sid = \"ToastPlugin\";\r\n provider = () => (\r\n <Toaster\r\n toastOptions={{\r\n className: '!bg-[#fff] !text-[#000] dark:!bg-[#131218] dark:!text-[#fff] !rounded-md !shadow-md',\r\n }}\r\n />\r\n );\r\n\r\n success = toast.success;\r\n error = toast.error;\r\n loading = toast.loading;\r\n custom = toast.custom;\r\n dismiss = toast.dismiss;\r\n remove = toast.remove;\r\n promise = toast.promise;\r\n}\r\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../store/standard/PromiseHook.ts","../store/standard/BigNumberState.ts","../store/standard/BigNumberInputState.ts","../store/standard/StorageState.ts","../store/standard/StorageListState.ts","../store/standard/ObjectPool.ts","../module/AutoMain/index.tsx","../module/Wallet/index.tsx","../module/Wallet/walletPluginStore.tsx","../module/Wallet/walletConfigStore.ts","../module/Wallet/SuccessTxDialog/index.tsx","../module/Wallet/ledger.tsx","../module/AppProvider.tsx"],"names":["BigNumber","makeAutoObservable","useEffect","observer","React","useConnectModal","Icon","_a","error","promise","rootStore"],"mappings":"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","sourcesContent":["import { observable } from \"mobx\";\r\n\r\nexport class KV {\r\n //@ts-ignore\r\n static datas = observable();\r\n}\r\n\r\nexport abstract class ContractBase {\r\n // chainId?: number;\r\n // address?: string;\r\n}\r\n\r\nexport type ContractClass<T extends ContractBase> = new (args: Partial<T>) => T;\r\n\r\nexport type PromiseHookData<T, U> = { value: Awaited<U>; get: T; call: T; func: T; loading: boolean; errorRetry: number };\r\n\r\nexport class PromiseHook {\r\n static entities = observable([]);\r\n static Get<T extends ContractBase>(\r\n cls: ContractClass<T>,\r\n ): (args: { args: Partial<T>; id?: string; select?: { [key in keyof Partial<T>]: boolean }; unselect?: { [key in keyof Partial<T>]: boolean } }) => Promise<T & { refresh: () => Promise<void> }> {\r\n try {\r\n return async ({ args, select, id, unselect }) => {\r\n let instance: any;\r\n //@ts-ignore\r\n if (!id || !this.entities[id]) {\r\n instance = new cls(args);\r\n\r\n instance.refresh = async () => {\r\n const hooks = Object.entries(instance)\r\n .filter((i) => {\r\n if (!this.isPromiseHook(instance[i[0]])) return false;\r\n //@ts-ignore\r\n if (i[1].lazy) return false;\r\n if (select && !select[i[0]]) return false;\r\n if (unselect && unselect[i[0]]) return false;\r\n return true;\r\n })\r\n .map((i) => {\r\n const hook = instance[i[0]];\r\n return hook;\r\n });\r\n\r\n await Promise.all(hooks.map((i) => i.call()));\r\n };\r\n if (id) {\r\n //@ts-ignore\r\n this.entities[id] = instance;\r\n }\r\n } else {\r\n instance = this.entities[id!];\r\n }\r\n\r\n await instance.refresh();\r\n return instance;\r\n };\r\n } catch (e) {\r\n throw e;\r\n }\r\n }\r\n\r\n static isPromiseHook(target) {\r\n return target?._type == \"promiseHook\";\r\n }\r\n\r\n //ttl : ms\r\n static wrap<T extends (...args: any[]) => Promise<any>, U = ReturnType<T>>({ func, defaultValue, lazy }: { func: T; defaultValue?: Awaited<U>; lazy?: boolean }): PromiseHookData<T, U> {\r\n let context;\r\n const call = (args) => {\r\n context.loading = true;\r\n if (!context._call) {\r\n context._call = func(args)\r\n .then((i) => {\r\n context.value = i;\r\n context.loading = false;\r\n context._call = null;\r\n return i;\r\n })\r\n .catch((i) => {\r\n console.error(i, func);\r\n context.value = defaultValue;\r\n context._call = null;\r\n context.loading = false;\r\n throw i;\r\n });\r\n }\r\n\r\n return context._call;\r\n };\r\n const get = async (args: any) => {\r\n if (!context.value) {\r\n return call(args);\r\n }\r\n return context.value;\r\n };\r\n\r\n if (!context) {\r\n context = observable({\r\n _type: \"promiseHook\",\r\n _value: defaultValue,\r\n get value() {\r\n return context[\"_value\"];\r\n },\r\n set value(val) {\r\n context[\"_value\"] = val;\r\n },\r\n get,\r\n lazy,\r\n\r\n loading: false,\r\n call,\r\n defaultValue,\r\n toJSON() {\r\n return context.value;\r\n },\r\n toString() {\r\n return context.value;\r\n },\r\n });\r\n }\r\n\r\n return context;\r\n }\r\n}\r\n","import BigNumber from \"bignumber.js\";\r\nimport { makeAutoObservable } from \"mobx\";\r\nimport { helper } from \"../../lib/helper\";\r\n\r\nexport class BigNumberState {\r\n value = new BigNumber(0);\r\n loading = false;\r\n decimals = 18;\r\n fixed = 6;\r\n formatter?: Function;\r\n constructor(args: Partial<BigNumberState>) {\r\n Object.assign(this, args);\r\n makeAutoObservable(this, {\r\n getFormat: false,\r\n });\r\n }\r\n get format() {\r\n if (this.loading) return \"...\";\r\n return this.getFormat();\r\n }\r\n\r\n getFormat({ decimals = this.decimals, fixed = this.fixed }: { decimals?: number; fixed?: number } = {}) {\r\n if (this.loading) return \"...\";\r\n if (this.formatter) return this.formatter(this);\r\n return helper.number.toPrecisionFloor(new BigNumber(this.value).dividedBy(10 ** decimals).toFixed(), {\r\n decimals: fixed,\r\n });\r\n }\r\n\r\n setDecimals(decimals: number) {\r\n this.decimals = decimals;\r\n }\r\n\r\n setValue(value: BigNumber) {\r\n this.value = value;\r\n this.setLoading(false);\r\n }\r\n\r\n setLoading(val) {\r\n this.loading = val;\r\n }\r\n}\r\n","import BigNumber from 'bignumber.js';\r\nimport { makeAutoObservable } from 'mobx';\r\nimport { helper } from '../../lib/helper';\r\nexport class BigNumberInputState {\r\n value = new BigNumber(0);\r\n format = '';\r\n loading = false;\r\n decimals = 18;\r\n formatter?: Function;\r\n constructor(args: Partial<BigNumberInputState>) {\r\n Object.assign(this, args);\r\n makeAutoObservable(this);\r\n }\r\n get noDecimasValue(): BigNumber {\r\n return new BigNumber(this.value).dividedBy(10 ** this.decimals);\r\n }\r\n setValue(value: any) {\r\n this.value = new BigNumber(value);\r\n // this.format = helper.number.toPrecisionFloor(new BigNumber(this.value).dividedBy(10 ** this.decimals).toFixed());\r\n this.format = helper.number.warpBigNumber(this.value.toFixed(), this.decimals, { format: '0.000', fallback: '' }).format;\r\n this.setLoading(false);\r\n }\r\n setFormat(val: any) {\r\n this.format = val;\r\n // this.format = helper.number.toPrecisionFloor(this.format);\r\n // this.format = helper.number.warpBigNumber(this.value.toFixed(), this.decimals, { format: '0.000', fallback: '' }).format;\r\n this.value = new BigNumber(val).multipliedBy(10 ** this.decimals);\r\n }\r\n setLoading(val: boolean) {\r\n this.loading = val;\r\n }\r\n setDecimals(val: number) {\r\n this.decimals = val;\r\n }\r\n get isZero(): boolean {\r\n return this.value.isZero() && this.format == '';\r\n }\r\n}\r\n","import { makeAutoObservable } from \"mobx\";\r\n\r\nexport class StorageState<T> {\r\n key: string;\r\n value: T | any = null;\r\n default: T | any = null;\r\n constructor(args: Partial<StorageState<T>>) {\r\n Object.assign(this, args);\r\n makeAutoObservable(this);\r\n this.load();\r\n }\r\n\r\n static safeParse(val: any) {\r\n try {\r\n return JSON.parse(val);\r\n } catch (error) {\r\n return val;\r\n }\r\n }\r\n\r\n load() {\r\n try {\r\n if (typeof window == 'undefined') return\r\n const value = window?.localStorage?.getItem(this.key);\r\n this.value = StorageState.safeParse(value);\r\n if (this.value == null) {\r\n this.value = this.default;\r\n }\r\n return this.value;\r\n } catch (error) {\r\n console.error(error);\r\n return null;\r\n }\r\n }\r\n\r\n save(value?: T) {\r\n try {\r\n if (typeof window == 'undefined') return\r\n if (value !== null || value !== undefined) {\r\n this.value = value;\r\n }\r\n window?.localStorage.setItem(this.key, JSON.stringify(value));\r\n } catch (error) {\r\n console.error(error);\r\n return null;\r\n }\r\n }\r\n\r\n setValue(value?: T) {\r\n this.save(value);\r\n }\r\n\r\n clear() {\r\n try {\r\n if (typeof window == 'undefined') return\r\n window?.localStorage.removeItem(this.key);\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n}\r\n","import { makeAutoObservable } from \"mobx\";\r\n\r\nimport { helper } from \"../../lib/helper\";\r\nimport { _ } from \"../../lib/lodash\";\r\n\r\nexport class StorageListState<T = any> {\r\n key: string;\r\n list: T[] = [];\r\n\r\n static safeParse(val: any) {\r\n try {\r\n return JSON.parse(val);\r\n } catch (error) {\r\n return val;\r\n }\r\n }\r\n\r\n constructor(args: { key: string; }) {\r\n Object.assign(this, args);\r\n makeAutoObservable(this);\r\n this.load();\r\n }\r\n\r\n\r\n load() {\r\n try {\r\n const value = localStorage.getItem(this.key);\r\n if (value) {\r\n this.list = StorageListState.safeParse(value);\r\n }\r\n return StorageListState.safeParse(value)\r\n } catch (error) {\r\n console.error(error);\r\n return null;\r\n }\r\n }\r\n\r\n\r\n push(value: T) {\r\n this.list.push(value);\r\n this.save();\r\n }\r\n\r\n remove(index: number) {\r\n this.list.splice(index, 1);\r\n this.save();\r\n }\r\n\r\n private save() {\r\n try {\r\n localStorage.setItem(this.key, JSON.stringify(this.list));\r\n } catch (error) {\r\n }\r\n }\r\n\r\n clear() {\r\n try {\r\n localStorage.removeItem(this.key);\r\n this.list = [];\r\n } catch (error) {\r\n }\r\n }\r\n}\r\n","\r\n\r\nexport class ObjectPool {\r\n static pool: { [key: string]: any } = {};\r\n\r\n static get<T extends (...args: any[]) => any, U = ReturnType<T>>(key: string, func: T): U {\r\n if (!ObjectPool.pool[key]) {\r\n ObjectPool.pool[key] = func();\r\n }\r\n return ObjectPool.pool[key];\r\n }\r\n}","import { useEffect } from 'react';\r\nimport { useRouter } from 'next/router.js';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { RootStore, rootStore } from '../../store';\r\nimport { Store } from \"../../store/standard/base\";\r\nimport { WalletStore } from '../Wallet';\r\nimport React from 'react';\r\n\r\nexport class AutoMan implements Store {\r\n sid = 'AutoMan';\r\n stype = 'Plugin';\r\n autoObservable?: boolean | undefined;\r\n\r\n provider = observer(() => {\r\n const wallet = RootStore.Get(WalletStore);\r\n const router = useRouter();\r\n useEffect(() => {\r\n console.log('automan proverider')\r\n // @ts-ignore\r\n const stores = Object.values(rootStore.instance).filter((i) => i._active > 0);\r\n //@ts-ignore\r\n const promise: PromiseState<any>[] = stores.reduce((p, c) => {\r\n //@ts-ignore\r\n const promise = Object.values(c).filter((i: PromiseState<any>) => !!i?.call);\r\n //@ts-ignore\r\n return [...p, ...promise];\r\n }, []);\r\n const autoUpdate = promise.filter((i) => i.autoUpdate);\r\n console.log({ autoUpdate });\r\n\r\n autoUpdate.forEach((i) => !i.loading.value && i.call());\r\n }, [wallet.updateTicker, router.asPath]);\r\n return <></>;\r\n });\r\n\r\n static use<T extends { [Key in keyof T]: Store }, U extends { [Key in keyof T]: T[Key] extends Store ? { [K in keyof T[Key]]?: any } : never }>(stores: T, promises?: U) {\r\n useEffect(() => {\r\n Object.keys(stores).forEach((storeName) => {\r\n const store = stores[storeName];\r\n Object.keys(store).forEach((key) => {\r\n const i = store[key];\r\n //@ts-ignore\r\n if (!!i?.getOrCall && (i.autoInit || !!promises?.[storeName][key])) {\r\n if (!store._active) store._active = 0;\r\n store._active += 1;\r\n i.getOrCall();\r\n }\r\n });\r\n });\r\n\r\n return () => {\r\n Object.values(stores).forEach((store) => {\r\n //@ts-ignore\r\n if (!store._active) store._active = 0;\r\n //@ts-ignore\r\n store._active -= 1;\r\n //@ts-ignore\r\n if (store.autoClean !== false && !store._active > 0) {\r\n //@ts-ignore\r\n Object.entries(store)\r\n //@ts-ignore\r\n .filter(([key, i]) => !!i?.value)\r\n .forEach(([key, i]) => {\r\n console.log('clean', key);\r\n //@ts-ignore\r\n i.value = null;\r\n });\r\n }\r\n });\r\n\r\n if (!!promises) {\r\n //@ts-ignore\r\n Object.entries(promises).forEach(([storaName, promise]) => {\r\n const store = stores[storaName];\r\n //@ts-ignore\r\n Object.keys(promise).forEach((key) => {\r\n const promise = store[key];\r\n console.log('clean', key);\r\n if (!promise) return\r\n if (!promise._active) promise._active = 0;\r\n\r\n promise._active -= 1;\r\n //@ts-ignore\r\n if (!promise._active > 0) {\r\n promise.value = null;\r\n }\r\n });\r\n });\r\n }\r\n };\r\n }, []);\r\n return stores;\r\n }\r\n}\r\n","import React from 'react';\r\nimport { useEffect } from \"react\";\r\nimport { Store } from \"../../store/standard/base\";\r\nimport { PublicClient, type HttpTransport, WalletClient, TransactionReceipt, createWalletClient, custom, publicActions, SwitchChainErrorType, UserRejectedRequestError } from \"viem\";\r\nimport { PromiseHook } from '../../store/standard/PromiseHook';\r\nimport { AddressMode, WalletTransactionHistoryType } from \"./type\";\r\nimport EventEmitter from \"events\";\r\nimport { SwitchChainMutateAsync } from \"wagmi/query\";\r\nimport { Config, useAccount, useConnect, useDisconnect, useReconnect, useSwitchChain, useWalletClient, } from \"wagmi\";\r\nimport { Chain, useConnectModal, WalletDetailsParams } from '@rainbow-me/rainbowkit';\r\nimport { RootStore } from \"../../store\";\r\nimport { ToastPlugin } from \"../Toast/Toast\";\r\nimport { WalletHistoryStore, WalletRpcStore } from './walletPluginStore';\r\nimport SafeAppsSDK, { TransactionStatus } from '@safe-global/safe-apps-sdk';\r\nimport { ShowSuccessTxDialog } from './SuccessTxDialog'\r\nimport { WalletConfigStore } from \"./walletConfigStore\";\r\nimport { AIem } from \"../../aiem\";\r\nimport { helper } from \"../../lib/helper\";\r\nimport { iotex } from \"viem/chains\";\r\nimport { DialogStore } from '../Dialog';\r\nimport { Icon } from '@iconify/react';\r\nimport { Card, Input } from '@nextui-org/react';\r\nimport { GlobalLedgerSigner } from './ledger';\r\n\r\nexport class WalletStore implements Store {\r\n sid = 'wallet';\r\n autoObservable = true;\r\n account: `0x${string}` = null;\r\n isSuccessDialogOpen = false;\r\n // isInSafeApp = false;\r\n get isInSafeApp() {\r\n return RootStore.Get(WalletConfigStore).isInSafeApp\r\n }\r\n isLedger = false;\r\n isConnect = false;\r\n walletClient: WalletClient;\r\n event = new EventEmitter();\r\n switchChain: SwitchChainMutateAsync<Config, unknown> | undefined;\r\n updateTicker = 0;\r\n addressMode: AddressMode = '0x';\r\n isIoTeXChain: boolean = false;\r\n setAddressMode(mode: AddressMode) {\r\n this.addressMode = mode;\r\n localStorage.setItem('addressMode', mode);\r\n }\r\n get accountFormat() {\r\n return this.account ? helper.address.convertAddress(this.addressMode, this.account) : '-';\r\n }\r\n get connectAccountEllipsisFormat() {\r\n return this.account ? helper.string.truncate(helper.address.convertAddress(this.addressMode, this.account), 11, '...') : '-';\r\n }\r\n get accountEllipsisFormat() {\r\n return this.account ? helper.string.truncate(helper.address.convertAddress(this.addressMode, this.account), 16, '...') : '-';\r\n }\r\n get supportedChains() {\r\n return RootStore.Get(WalletConfigStore).supportedChains\r\n }\r\n chain: Chain | undefined;\r\n openConnectModal: any;\r\n disconnect: any;\r\n balance = PromiseHook.wrap({\r\n func: async () => {\r\n if (!this.publicClient || !this.account) return helper.number.warpBigNumber('0');\r\n const balance = await this.publicClient.getBalance({\r\n address: this.account,\r\n });\r\n if (balance) {\r\n return helper.number.warpBigNumber(balance?.toString() ?? '0');\r\n }\r\n },\r\n });\r\n\r\n constructor(args?: Partial<WalletStore>) {\r\n Object.assign(this, args);\r\n }\r\n\r\n use() {\r\n // const { data: walletClient, isSuccess } = useWalletClient();\r\n const { chain, address, isConnected } = useAccount();\r\n const { switchChainAsync } = useSwitchChain();\r\n const { openConnectModal } = useConnectModal();\r\n const { connect } = useConnect();\r\n const { disconnect } = useDisconnect();\r\n const walletConfigStore = RootStore.Get(WalletConfigStore);\r\n this.set({\r\n //@ts-ignore\r\n connect,\r\n // @ts-ignore \r\n // walletClient,\r\n openConnectModal,\r\n switchChain: switchChainAsync,\r\n disconnect\r\n })\r\n\r\n useEffect(() => {\r\n RootStore.Get(WalletHistoryStore).set({ isRender: true })\r\n this.set({\r\n isConnect: isConnected,\r\n account: address,\r\n chain,\r\n })\r\n if (chain?.id == 4689) {\r\n this.isIoTeXChain = true\r\n } else {\r\n this.isIoTeXChain = false\r\n }\r\n walletConfigStore.set({\r\n isConnect: isConnected,\r\n })\r\n if (this.account) {\r\n this.updateTicker++;\r\n walletConfigStore.set({\r\n walletUpdateTick: this.updateTicker,\r\n })\r\n this.event.emit('walletAccount:ready');\r\n }\r\n // this.useWalletClientWithCompatibleMode()\r\n }, [address, isConnected, chain])\r\n\r\n useEffect(() => {\r\n setTimeout(() => {\r\n this.balance.call()\r\n }, 1500)\r\n }, [this.updateTicker])\r\n }\r\n\r\n private useWalletClientWithCompatibleMode() {\r\n if (RootStore.Get(WalletConfigStore).compatibleMode) {\r\n if (this.account) {\r\n this.walletClient = createWalletClient({\r\n account: this.account,\r\n chain: this.chain,\r\n transport: custom(window.ethereum!),\r\n pollingInterval: 2500,\r\n }).extend(publicActions)\r\n }\r\n console.log(this.walletClient, 'this.walletClientxxx')\r\n }\r\n }\r\n\r\n useWalletClientWithoutCompatibleMode() {\r\n const { data: walletClient, isSuccess } = useWalletClient({\r\n query: {\r\n refetchInterval: 2500\r\n }\r\n })\r\n useEffect(() => {\r\n if (isSuccess && walletClient) {\r\n this.set({ walletClient })\r\n }\r\n }, [walletClient, isSuccess]);\r\n }\r\n\r\n //always return or return default chain\r\n get publicClient(): PublicClient<HttpTransport, Chain, any, any> {\r\n if (this.chain && this.supportedChains.some(i => i.id === this.chain.id)) {\r\n if (this.chain.id == 4689) {\r\n return AIem.PubClient('4689', {\r\n rpcUrls: { default: { http: [RootStore.Get(WalletRpcStore).curRpc.value] } },\r\n multicall: true,\r\n pollingInterval: 2500\r\n })\r\n }\r\n return AIem.PubClient(this.chain.id.toString(), { pollingInterval: 2500 })\r\n } else {\r\n return AIem.PubClient('4689', { pollingInterval: 2500 })\r\n }\r\n }\r\n\r\n set(args: Partial<WalletStore>) {\r\n Object.assign(this, args);\r\n }\r\n\r\n toJSON() {\r\n const { account } = this;\r\n return { account };\r\n }\r\n\r\n async prepare(chainId?: number): Promise<WalletStore> {\r\n const walletRpcStore = RootStore.Get(WalletRpcStore)\r\n return new Promise<WalletStore>(async (res, rej) => {\r\n try {\r\n if (this.account) {\r\n if (this.isLedger) {\r\n res(this)\r\n }\r\n if ((!chainId || (Number(this.chain?.id) == Number(chainId))) && this.walletClient) {\r\n res(this);\r\n }\r\n const interval = setInterval(() => {\r\n if (this.chain?.id == chainId) {\r\n try {\r\n this.useWalletClientWithCompatibleMode()\r\n res(this);\r\n } catch (error) {\r\n console.log(error, 'myerror')\r\n rej(error);\r\n }\r\n clearInterval(interval);\r\n }\r\n }, 1000);\r\n\r\n if (chainId != this.chain?.id) {\r\n try {\r\n await this.walletClient?.switchChain({ id: chainId })\r\n } catch (error) {\r\n console.log(error.message)\r\n if (error?.message?.includes(\"wallet_addEthereumChain\")) {\r\n const chain = RootStore.Get(WalletConfigStore).supportedChains.find(i => i.id == chainId)\r\n try {\r\n await RootStore.Get(WalletRpcStore).addToMetamaskById(chainId)\r\n await this.walletClient.switchChain({ id: chainId })\r\n } catch (error) {\r\n RootStore.Get(DialogStore).setData({\r\n isOpen: true,\r\n title: \"Chain Addition Failed\",\r\n size: '2xl',\r\n content: <div>\r\n <Card className='p-2'>\r\n <div className='p-2 flex items-center justify-center gap-4'>\r\n <div className='text-yellow-500 text-sm'>We encountered an issue while adding the chain. This might be caused by a compatibility issue with your current plugin. Please try adding the chain manually or review your plugin settings to ensure compatibility.</div>\r\n </div>\r\n </Card>\r\n <div className='flex flex-col gap-4 my-4'>\r\n <Input\r\n label=\"Network Name\"\r\n value={chain.name}\r\n startContent={\r\n <Icon icon=\"fluent:rename-24-filled\" width=\"20\" height=\"20\" />\r\n }\r\n />\r\n <Input\r\n label=\"Network RPC\"\r\n value={chain.rpcUrls.default?.http?.[0]}\r\n startContent={\r\n <Icon icon=\"material-symbols:link\" width=\"20\" height=\"20\" />\r\n }\r\n />\r\n <Input\r\n label=\"Chain ID\"\r\n value={chain.id.toString()}\r\n startContent={\r\n <Icon icon=\"f7:grid-circle-fill\" width=\"20\" height=\"20\" />\r\n }\r\n />\r\n <Input\r\n label=\"Native Currency Symbol\"\r\n value={chain.nativeCurrency?.symbol}\r\n startContent={\r\n <Icon icon=\"mingcute:coin-fill\" width=\"20\" height=\"20\" />\r\n }\r\n />\r\n <Input\r\n label=\"Block Explorer URL\"\r\n value={chain.blockExplorers?.default?.url}\r\n startContent={\r\n <Icon icon=\"material-symbols:explore\" width=\"20\" height=\"20\" />\r\n }\r\n />\r\n </div>\r\n </div>\r\n })\r\n console.log(error.message)\r\n }\r\n } else {\r\n rej(error)\r\n }\r\n }\r\n }\r\n } else {\r\n this.openConnectModal();\r\n const interval = setInterval(() => {\r\n if (this.account) {\r\n clearInterval(interval);\r\n res(this);\r\n }\r\n }, 1000);\r\n }\r\n } catch (error) {\r\n rej(error);\r\n }\r\n });\r\n }\r\n\r\n\r\n async waitForTransactionReceipt({ hash }) {\r\n // https://github.com/wevm/wagmi/discussions/3463#discussioncomment-8139187\r\n if (this.isInSafeApp) {\r\n // console.log('isInSafeApp', this.isInSafeApp);\r\n const sdk = new SafeAppsSDK();\r\n while (true) {\r\n const queued = await sdk.txs.getBySafeTxHash(hash);\r\n if (queued.txStatus === TransactionStatus.AWAITING_CONFIRMATIONS || queued.txStatus === TransactionStatus.AWAITING_EXECUTION || queued.txStatus === TransactionStatus.CANCELLED) {\r\n await new Promise((resolve) => setTimeout(resolve, 2000));\r\n } else {\r\n return this.publicClient.waitForTransactionReceipt({ hash: queued.txHash! as `0x${string}` });\r\n }\r\n }\r\n } else {\r\n return this.publicClient.waitForTransactionReceipt({ hash });\r\n }\r\n }\r\n\r\n static async SendTx(...args: Parameters<WalletStore['sendTx']>) {\r\n return RootStore.Get(WalletStore).sendTx(...args);\r\n }\r\n static async SendRawTx(...args: Parameters<WalletStore['sendRawTx']>) {\r\n return RootStore.Get(WalletStore).sendRawTx(...args);\r\n }\r\n async sendTx({\r\n chainId,\r\n tx,\r\n autoAlert = true,\r\n loadingText,\r\n successText,\r\n onError,\r\n historyItem,\r\n showSuccessDialog = false,\r\n }: {\r\n chainId: number | string;\r\n tx: any;\r\n autoAlert?: boolean;\r\n loadingText?: string;\r\n successText?: string;\r\n showSuccessDialog?: boolean;\r\n historyItem?: Pick<WalletTransactionHistoryType, 'msg' | 'type'>;\r\n onError?: (error: any) => void;\r\n }) {\r\n const toast = RootStore.Get(ToastPlugin);\r\n let hash;\r\n const historyStore = RootStore.Get(WalletHistoryStore)\r\n try {\r\n if (loadingText) toast.loading(loadingText);\r\n if (!chainId) throw new Error('chainId, address, data is required');\r\n await RootStore.Get(WalletStore).prepare(Number(chainId));\r\n hash = await tx();\r\n if (historyItem) {\r\n historyStore.recordHistory({ ...historyItem, tx: hash, timestamp: Date.now(), status: 'loading', chainId: Number(chainId) });\r\n }\r\n const receipt = await this.waitForTransactionReceipt({ hash });\r\n if (receipt.status == 'success') {\r\n toast.dismiss();\r\n toast.success('The transaction was successful');\r\n if (historyItem) {\r\n if (showSuccessDialog) {\r\n ShowSuccessTxDialog({ msg: historyItem.msg, hash: hash });\r\n }\r\n historyStore.updateHistoryStatusByTx(hash, 'success');\r\n }\r\n } else {\r\n toast.dismiss();\r\n toast.error('The transaction failed');\r\n historyStore.updateHistoryStatusByTx(hash, 'fail');\r\n }\r\n if (successText) toast.success(successText);\r\n this.updateTicker++;\r\n return receipt;\r\n } catch (error) {\r\n console.log(error);\r\n toast.dismiss();\r\n if (autoAlert) {\r\n const msg = /reason=\"[A-Za-z0-9_ :\"]*/g.exec(error?.message);\r\n console.log('sendTx', error?.message);\r\n if (error?.message?.includes('rejected') || String(error).toLowerCase().includes('rejected') || error?.message?.includes('cancel') || String(error).toLowerCase().includes('cancel') || String(error).toLowerCase().includes('denied')) {\r\n toast.error('User rejected transaction');\r\n // onError?.(error);\r\n return;\r\n }\r\n if (error?.message?.includes('The Transaction may not be processed on a block yet') || error?.message?.includes('could not be found')) {\r\n if (historyItem) {\r\n historyStore.updateHistoryStatusByTx(hash, 'success');\r\n }\r\n toast.success('The transaction was successful');\r\n return;\r\n }\r\n\r\n if (msg) {\r\n // toast.error(msg as unknown as string);\r\n onError?.(new Error(msg as unknown as string || 'Transaction failed'));\r\n } else {\r\n if (error?.message.includes('viem')) {\r\n const messageArr = error?.message.split('\\n');\r\n console.log('messageArr---', messageArr);\r\n if (messageArr.length > 0) {\r\n // toast.error(messageArr[0]);\r\n onError?.(new Error(messageArr[0] || 'Transaction failed'));\r\n }\r\n } else {\r\n // toast.error(String(error?.message || error));\r\n onError?.(new Error(error?.message || 'Transaction failed'));\r\n }\r\n }\r\n } else {\r\n onError?.(error);\r\n throw error;\r\n }\r\n }\r\n }\r\n async sendRawTx({\r\n chainId,\r\n address,\r\n data,\r\n value = '0',\r\n autoAlert = true,\r\n onSended,\r\n onSuccess,\r\n onError,\r\n historyItem,\r\n loadingText,\r\n showSuccessDialog = false,\r\n }: {\r\n loadingText?: string;\r\n chainId: number | string;\r\n address: string;\r\n data: string | null;\r\n value?: string;\r\n autoRefresh?: boolean;\r\n autoAlert?: boolean;\r\n historyItem?: Pick<WalletTransactionHistoryType, 'msg' | 'type'>;\r\n showTransactionSubmitDialog?: boolean;\r\n showSuccessDialog?: boolean;\r\n onSended?: ({ res }: { res: TransactionReceipt }) => void;\r\n onSuccess?: ({ res }: { res: TransactionReceipt }) => void;\r\n onError?: (error: any) => void;\r\n }): Promise<TransactionReceipt | undefined> {\r\n chainId = Number(chainId);\r\n const toast = RootStore.Get(ToastPlugin);\r\n try {\r\n if (!chainId || !address) throw new Error('chainId, address, is required');\r\n await RootStore.Get(WalletStore).prepare(chainId);\r\n if (loadingText) toast.loading(loadingText);\r\n const historyStore = RootStore.Get(WalletHistoryStore)\r\n let hash;\r\n if (this.isLedger) {\r\n const ledger = await GlobalLedgerSigner();\r\n console.log(ledger, 'ledger signer')\r\n const tx = await ledger.sendTransaction({\r\n to: address as `0x${string}`,\r\n data: data as `0x${string}`,\r\n value: value ? BigInt(value) : undefined,\r\n from: this.account,\r\n type: 0\r\n });\r\n hash = tx?.hash;\r\n } else {\r\n // @ts-ignore\r\n hash = await this.walletClient.sendTransaction({\r\n account: this.account,\r\n to: address as `0x${string}`,\r\n data: data as `0x${string}`,\r\n value: value ? BigInt(value) : undefined,\r\n });\r\n }\r\n let receipt = await this.waitForTransactionReceipt({ hash });\r\n if (historyItem) {\r\n historyStore.recordHistory({ ...historyItem, tx: receipt.transactionHash, timestamp: Date.now(), status: 'loading', chainId: Number(chainId) });\r\n }\r\n this.updateTicker++;\r\n onSended ? onSended({ res: receipt }) : null;\r\n if (receipt.status == 'success') {\r\n if (historyItem) {\r\n if (showSuccessDialog) {\r\n ShowSuccessTxDialog({ msg: historyItem.msg, hash: hash });\r\n }\r\n historyStore.updateHistoryStatusByTx(receipt.transactionHash, 'success');\r\n }\r\n onSuccess && onSuccess({ res: receipt });\r\n toast.dismiss();\r\n toast.success('The transaction was successful');\r\n } else {\r\n if (historyItem) {\r\n historyStore.updateHistoryStatusByTx(receipt.transactionHash, 'fail');\r\n }\r\n onError && onError?.(new Error('The transaction failed'));\r\n toast.dismiss();\r\n toast.error('The transaction failed');\r\n }\r\n return receipt;\r\n } catch (error) {\r\n toast.dismiss();\r\n onError?.(error)\r\n console.log(error);\r\n const msg = /reason=\"[A-Za-z0-9_ :\"]*/g.exec(error?.message);\r\n // Details: Transaction was rejected\r\n if (error?.message?.includes('rejected') || error?.message?.includes('cancel') || String(error).toLowerCase().includes('cancel') || String(error).toLowerCase().includes('rejected') || String(error).toLowerCase().includes('user denied')) {\r\n autoAlert && toast.error('User rejected transaction');\r\n onError?.(error);\r\n return;\r\n }\r\n if (error?.message?.includes('Price slippage check')) {\r\n autoAlert && toast.error('The latest pool price has changed, please try to increase the slippage tolerance or reload the page.');\r\n onError?.(error);\r\n return;\r\n }\r\n if (error?.message.includes('viem')) {\r\n const messageArr = error?.message.split('\\n');\r\n console.log('messageArr---', messageArr);\r\n if (messageArr.length > 0) {\r\n // toast.error(messageArr[0]);\r\n onError?.(new Error(messageArr[0] ?? 'Transaction failed'));\r\n return;\r\n }\r\n }\r\n\r\n // if (msg) {\r\n // autoAlert && toast.error(msg as unknown as string);\r\n // } else {\r\n // autoAlert && toast.error(String(error.message));\r\n // }\r\n if (!autoAlert) {\r\n onError?.(error);\r\n throw error;\r\n }\r\n }\r\n }\r\n async signMessage(message: string) {\r\n if (this.isLedger) {\r\n const ledger = await GlobalLedgerSigner();\r\n return ledger.signMessage(message);\r\n }\r\n // @ts-ignore\r\n return this.walletClient.signMessage(message);\r\n }\r\n}\r\n","import React from 'react';\r\nimport { Icon } from \"@iconify/react\";\r\nimport { RootStore } from \"../../store\";\r\nimport { Store } from \"../../store/standard/base\";\r\nimport { StorageState } from '../../store/standard/StorageState';\r\nimport { ToastPlugin } from \"../Toast/Toast\";\r\nimport { WalletTransactionHistoryType } from \"./type\";\r\nimport { WalletStore } from \".\";\r\nimport { helper } from \"../../lib/helper\";\r\nimport { Chain, toHex } from 'viem';\r\nimport { WalletConfigStore } from './walletConfigStore';\r\n\r\nconst defaultRPCList = [\r\n { name: 'https://babel-api.fastblocks.io', latency: 0, height: 0, custom: false },\r\n { name: 'https://babel-api.mainnet.iotex.one', latency: 0, height: 0, },\r\n { name: 'https://babel-api.mainnet.iotex.io', latency: 0, height: 0, },\r\n { name: 'https://iotex-network.rpc.thirdweb.com', latency: 0, height: 0, },\r\n // { name: 'https://iotexrpc.com', latency: 0, height: 0, },\r\n { name: 'https://iotex.api.onfinality.io/public', latency: 0, height: 0, },\r\n // { name: 'https://rpc.ankr.com/iotex', latency: 0, height: 0, },\r\n]\r\nexport class WalletRpcStore implements Store {\r\n sid = 'WalletPluginStore';\r\n autoObservable = true\r\n curRpc = new StorageState({ default: 'https://babel-api.mainnet.iotex.one', key: 'curRPC-v2', value: 'https://babel-api.mainnet.iotex.one' });\r\n isAutoSelectRpc = new StorageState({ key: 'isAutoSelectRpc', default: true });\r\n customRpc = '';\r\n rpcList = new StorageState({ key: 'customRpcList-v2', default: defaultRPCList, value: [] })\r\n showCustomRpc = false;\r\n get currentRpc() {\r\n console.log(this.rpcList.value?.find(i => i.name == this.curRpc))\r\n return this.rpcList.value?.find(i => i.name == this.curRpc.value) || null\r\n }\r\n addCustomRpc() {\r\n const item = { name: this.customRpc, latency: 0, height: 0, custom: true }\r\n if (defaultRPCList.find(i => i.name === item.name)) {\r\n return RootStore.Get(ToastPlugin).error('Rpc already exists')\r\n }\r\n if (this.rpcList.value) {\r\n this.rpcList.save([...this.rpcList.value, item])\r\n this.refresh()\r\n return\r\n }\r\n this.rpcList.save([...defaultRPCList, item])\r\n this.refresh()\r\n }\r\n async addToMetamask(url) {\r\n try {\r\n if (typeof window == 'undefined') return;\r\n await window?.ethereum?.request({\r\n method: 'wallet_addEthereumChain',\r\n params: [{\r\n chainId: `0x${(4689).toString(16)}`,\r\n chainName: 'IoTeX Mainnet',\r\n nativeCurrency: {\r\n name: 'IoTeX',\r\n symbol: 'IOTX',\r\n decimals: 18,\r\n },\r\n rpcUrls: [url],\r\n blockExplorerUrls: ['https://iotexscan.io'],\r\n }]\r\n });\r\n RootStore.Get(ToastPlugin).success('Network added');\r\n console.log('Network added');\r\n } catch (error) {\r\n console.error('Failed to add network', error);\r\n }\r\n }\r\n async switchOrAddChain(chainId: number) {\r\n return new Promise(async (resolve, reject) => {\r\n try {\r\n await window.ethereum.request({\r\n method: 'wallet_switchEthereumChain',\r\n params: [{ chainId: toHex(chainId) }],\r\n });\r\n resolve(true)\r\n } catch (switchError) {\r\n if (switchError.code === 4902) {\r\n try {\r\n await this.addToMetamaskById(chainId)\r\n } catch (addError) {\r\n reject(addError)\r\n }\r\n } else {\r\n reject(switchError)\r\n }\r\n }\r\n })\r\n }\r\n async addToMetamaskById(id: number) {\r\n return new Promise(async (resolve, reject) => {\r\n try {\r\n if (typeof window == 'undefined') return;\r\n const chain = RootStore.Get(WalletConfigStore).supportedChains.find(i => i.id == id)\r\n const res = await window.ethereum.request({\r\n method: 'wallet_addEthereumChain',\r\n params: [{\r\n \"chainId\": toHex(chain.id),\r\n \"chainName\": chain.name,\r\n \"nativeCurrency\": {\r\n \"name\": chain.nativeCurrency.name,\r\n \"symbol\": chain.nativeCurrency.symbol,\r\n \"decimals\": chain.nativeCurrency.decimals,\r\n },\r\n \"rpcUrls\": JSON.parse(JSON.stringify(chain.rpcUrls.default.http)),\r\n \"blockExplorerUrls\": [chain.blockExplorers.default.url],\r\n }]\r\n });\r\n console.log(res)\r\n resolve(res)\r\n } catch (switchError) {\r\n reject(false)\r\n }\r\n })\r\n }\r\n refresh() {\r\n this.showCustomRpc = false\r\n this.customRpc = ''\r\n setTimeout(() => {\r\n this.testRpc()\r\n }, 500)\r\n }\r\n latencyColor(latency: number) {\r\n if (latency < 0) {\r\n return 'text-red-500'\r\n }\r\n if (latency < 1) {\r\n return 'text-green-500'\r\n }\r\n if (latency < 2) {\r\n return 'text-yellow-500'\r\n }\r\n return 'text-red-500'\r\n }\r\n async testRpcFunction(url: string): Promise<{ url: string, lentency: number, height: number }> {\r\n const start = performance.now();\r\n try {\r\n const response = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify({\r\n jsonrpc: '2.0',\r\n method: 'eth_getBlockByNumber',\r\n params: [\"latest\", false],\r\n id: 1,\r\n }),\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error(`Error from server: ${response.status}`);\r\n }\r\n const res = await response.json();\r\n console.log(res)\r\n const end = performance.now();\r\n return { url, lentency: Number(helper.number.numberFormat(((end - start) / 1000), '0.000', { fallback: '-1' })), height: parseInt(res.result.number, 16) };\r\n } catch (error) {\r\n console.error('RPC Latency Test Failed:', error);\r\n return { url, lentency: -1, height: -1 };\r\n }\r\n }\r\n testRpc() {\r\n this.rpcList?.value.forEach(i => {\r\n this.testRpcFunction(i.name).then(res => {\r\n i.latency = res.lentency\r\n i.height = res.height\r\n })\r\n })\r\n this.rpcList.save(this.rpcList.value)\r\n }\r\n removeRpc(name: string) {\r\n this.rpcList.save(this.rpcList.value.filter(i => i.name !== name))\r\n }\r\n scoreIcon(score: number) {\r\n if (score < 0) {\r\n return <Icon icon=\"codicon:error\" width=\"18\" height=\"18\" style={{ color: \"#FF0000\" }} />\r\n }\r\n if (score < 1) {\r\n return <Icon icon=\"icon-park-solid:check-one\" width=\"18\" height=\"18\" style={{ color: \"#289726\" }} />\r\n }\r\n if (score < 2) {\r\n return <Icon icon=\"bxs:error\" width=\"18\" height=\"18\" style={{ color: \"#FFA500\" }} />\r\n }\r\n return <Icon icon=\"codicon:error\" width=\"18\" height=\"18\" style={{ color: \"#FF0000\" }} />\r\n }\r\n get wallet() {\r\n return RootStore.Get(WalletStore)\r\n }\r\n // debounceAutoSelectRpc = pDebounce(this.autoSelectRpc, 3000)\r\n async autoSelectRpc() {\r\n console.log('autoSelectRpc')\r\n for (let i = 0; i < this.rpcList.value.length; i++) {\r\n const item = this.rpcList.value[i]\r\n const res = await this.testRpcFunction(item.name)\r\n if (res.lentency != -1 || res.height > 0) {\r\n this.curRpc.save(item.name)\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport class WalletHistoryStore implements Store {\r\n sid = 'WalletHistoryStore';\r\n isRender = false\r\n autoObservable = true\r\n set(params: Partial<WalletHistoryStore>) {\r\n Object.assign(this, params);\r\n }\r\n private history = new StorageState<WalletTransactionHistoryType[] | null>({ value: [], key: 'history' });\r\n get historyList(): WalletTransactionHistoryType[] {\r\n if (this.isRender) {\r\n return this.history.value\r\n }\r\n return []\r\n }\r\n recordHistory(item: WalletTransactionHistoryType) {\r\n let value: WalletTransactionHistoryType[] | null = this.history.load();\r\n if (!value) {\r\n value = [item];\r\n } else {\r\n value = [...value, item];\r\n }\r\n this.history.setValue(value);\r\n }\r\n updateHistoryStatusByTx(tx: string | null, status: 'loading' | 'success' | 'fail') {\r\n let value: WalletTransactionHistoryType[] | null = this.history.load();\r\n if (!value) {\r\n return;\r\n }\r\n value = value.map((i) => {\r\n if (i.tx == tx) {\r\n i.status = status;\r\n return i;\r\n }\r\n if (!tx) {\r\n i.status = status;\r\n }\r\n return i;\r\n });\r\n this.history.setValue(value);\r\n }\r\n clearHistory() {\r\n this.history.setValue(null);\r\n }\r\n}\r\n","import { Chain, Wallet, useConnectModal, getDefaultConfig, WalletDetailsParams } from \"@rainbow-me/rainbowkit\";\r\nimport { walletConnectWallet, metaMaskWallet, iopayWallet, okxWallet, binanceWallet, safeWallet, gateWallet } from \"@rainbow-me/rainbowkit/wallets\";\r\nimport { iotex } from \"viem/chains\";\r\nimport { ObjectPool, Store } from \"../..\";\r\n\r\n\r\nexport class WalletConfigStore implements Store {\r\n sid = \"WalletConfigStore\";\r\n autoObservable = true;\r\n\r\n appName = \"Dappkit\";\r\n projectId = \"b69e844f38265667350efd78e3e1a5fb\";\r\n // @ts-ignore\r\n supportedChains: Chain[];\r\n defaultChainId = 4689;\r\n updateTicker = 1;\r\n walletUpdateTick = 0;\r\n isConnect = false;\r\n isInSafeApp = false;\r\n // This mode to resolve and walletClient and nextui in some extreme cases cause page infinite redraw bugs\r\n compatibleMode = true;\r\n\r\n constructor(args: Partial<WalletConfigStore>) {\r\n Object.assign(this, args);\r\n }\r\n\r\n set(params: Partial<WalletConfigStore>) {\r\n Object.assign(this, params);\r\n this.updateTicker += 1;\r\n }\r\n\r\n get reconnectOnMount() {\r\n if (!this.compatibleMode) return true;\r\n\r\n if (!this.isConnect && this.walletUpdateTick == 0) {\r\n return true;\r\n }\r\n if (!this.isConnect && this.walletUpdateTick != 0) {\r\n return false;\r\n }\r\n if (this.isConnect) {\r\n return true;\r\n }\r\n }\r\n\r\n get rainbowKitConfig() {\r\n return ObjectPool.get(`rainbowKitConfig-${this.supportedChains?.map((i) => i.id).join(\"-\")}`, () => {\r\n return getDefaultConfig({\r\n pollingInterval: 2500,\r\n appName: this.appName,\r\n projectId: this.projectId,\r\n //@ts-ignore\r\n chains: this.supportedChains,\r\n wallets: [\r\n {\r\n groupName: \"Recommended\",\r\n wallets: [iopayWallet, metaMaskWallet],\r\n },\r\n {\r\n groupName: \"Others\",\r\n wallets: [metaMaskWallet, walletConnectWallet, iopayWallet, okxWallet, binanceWallet, safeWallet, gateWallet],\r\n },\r\n ],\r\n });\r\n });\r\n }\r\n}\r\n\r\n","import { Icon } from \"@iconify/react\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport React from \"react\";\r\nimport { RootStore } from \"../../../store\";\r\nimport { DialogStore } from \"../../../module/Dialog\";\r\ninterface IProps {\r\n msg: string,\r\n hash: string,\r\n}\r\n\r\nconst SuccessTxDialog = observer((props: IProps) => {\r\n return <div className='flex-col gap-4 py-10'>\r\n <div className='w-full flex items-center justify-center'>\r\n <Icon icon=\"icon-park-solid:check-one\" width=\"48\" height=\"48\" className='text-green-500' /></div>\r\n <div className='text-2xl font-[900] text-center mt-4'>{props.msg}</div>\r\n <div className='flex items-center justify-center text-green-500 text-sm mt-6 gap-2 cursor-pointer hover:text-green-600 transition'\r\n onClick={e => window.open(`https://iotexscan.io/tx/${props.hash}`, '_blank')}>View on IoTeXScan <Icon icon=\"material-symbols:chip-extraction-rounded\" width=\"18\" height=\"18\" /></div>\r\n </div>\r\n})\r\nexport const ShowSuccessTxDialog = ({ msg, hash }) => {\r\n RootStore.Get(DialogStore).setData({\r\n title: '',\r\n content: <SuccessTxDialog msg={msg} hash={hash} />,\r\n isOpen: true,\r\n })\r\n}","import Transport from \"@ledgerhq/hw-transport\";\r\nimport TransportWebUSB from \"@ledgerhq/hw-transport-webusb\";\r\nimport Eth from \"@ledgerhq/hw-app-eth\";\r\nimport { ethers } from \"ethers\";\r\nimport { ObjectPool } from \"../../store/standard/ObjectPool\";\r\nimport { RootStore } from \"../../store\";\r\nimport { WalletStore } from \".\";\r\nimport { ToastPlugin } from \"../Toast/Toast\";\r\nimport { createWalletClient, custom, publicActions } from \"viem\";\r\nimport { iotex } from \"viem/chains\";\r\n\r\nlet _transport: Transport | null = null;\r\nlet _signer: LedgerSigner | null = null;\r\n\r\nexport async function createTransport(): Promise<Transport> {\r\n if (_transport) {\r\n return _transport;\r\n }\r\n try {\r\n const res = await TransportWebUSB.create();\r\n console.log('createTransport res', res);\r\n _transport = res;\r\n return res;\r\n } catch (error) {\r\n console.error('Error creating transport', error);\r\n throw error;\r\n }\r\n}\r\n\r\nexport async function getAddress(transport: Transport, path: string): Promise<string> {\r\n const eth = new Eth(transport);\r\n const address = await eth.getAddress(path);\r\n return address.address;\r\n}\r\n\r\nexport function waiter(duration: number): Promise<void> {\r\n return new Promise((resolve) => {\r\n setTimeout(resolve, duration);\r\n });\r\n}\r\n\r\nexport const GlobalLedgerProvider = ObjectPool.get('provider', async () => {\r\n return new ethers.providers.JsonRpcProvider(\"https://babel-api.mainnet.iotex.io\");\r\n});\r\n\r\nexport const GlobalLedgerSigner = async () => {\r\n try {\r\n if (_signer) {\r\n return _signer;\r\n }\r\n const transport = await createTransport();\r\n _signer = new LedgerSigner(transport, await GlobalLedgerProvider, \"44'/304'/0'/0/0\");\r\n return _signer;\r\n } catch (error) {\r\n console.error('Error creating ledger signer', error);\r\n RootStore.Get(ToastPlugin).error(error.message ?? 'Failed to connect to Ledger');\r\n RootStore.Get(WalletStore).isLedger = false;\r\n return null;\r\n }\r\n}\r\n\r\nexport const ConnectLedger = async () => {\r\n RootStore.Get(WalletStore).isLedger = true;\r\n console.log('ConnectLedger');\r\n const signer = await GlobalLedgerSigner();\r\n console.log('signer', signer);\r\n const interval = setInterval(async () => {\r\n try {\r\n const address = await signer?.getAddress()\r\n if (address) {\r\n RootStore.Get(WalletStore).set({\r\n account: address as `0x${string}`,\r\n isConnect: true,\r\n });\r\n // const transport = await createTransport();\r\n // RootStore.Get(WalletStore).walletClient = createWalletClient({\r\n // account: address as `0x${string}`,\r\n // chain: iotex,\r\n // //@ts-ignore\r\n // transport: (transport)\r\n // }).extend(publicActions)\r\n clearInterval(interval);\r\n return signer;\r\n }\r\n } catch (error) {\r\n console.error('Error getting address', error);\r\n }\r\n }, 1000);\r\n};\r\n\r\nexport const DisconnectLedger = () => {\r\n RootStore.Get(WalletStore).set({\r\n isConnect: false,\r\n isLedger: false,\r\n });\r\n};\r\n\r\nexport class LedgerSigner extends ethers.Signer {\r\n readonly path: string\r\n readonly _eth: Promise<Eth>;\r\n\r\n constructor(transport: Transport, provider?: ethers.providers.Provider, path?: string) {\r\n super();\r\n\r\n ethers.utils.defineReadOnly(this, \"path\", path || \"44'/304'/0'/0/0\");\r\n //@ts-ignore\r\n ethers.utils.defineReadOnly(this, \"provider\", provider || null);\r\n\r\n const eth = new Eth(transport);\r\n const _eth = eth.getAppConfiguration().then((config) => {\r\n return eth;\r\n }, (error) => {\r\n return Promise.reject(error);\r\n });\r\n ethers.utils.defineReadOnly(this, \"_eth\", _eth);\r\n }\r\n\r\n _retry<T = any>(callback: (eth: Eth) => Promise<T>, timeout?: number): Promise<T> {\r\n return new Promise(async (resolve, reject) => {\r\n if (timeout && timeout > 0) {\r\n setTimeout(() => { reject(new Error(\"timeout\")); }, timeout);\r\n }\r\n\r\n const eth = await this._eth;\r\n\r\n // Wait up to 5 seconds\r\n for (let i = 0; i < 50; i++) {\r\n try {\r\n const result = await callback(eth);\r\n return resolve(result);\r\n } catch (error) {\r\n if (error.id !== \"TransportLocked\") {\r\n return reject(error);\r\n }\r\n }\r\n await waiter(100);\r\n }\r\n\r\n return reject(new Error(\"timeout\"));\r\n });\r\n }\r\n\r\n async getAddress(): Promise<string> {\r\n const account = await this._retry((eth) => eth.getAddress(this.path));\r\n return ethers.utils.getAddress(account.address);\r\n }\r\n\r\n async signMessage(message: ethers.utils.Bytes | string): Promise<string> {\r\n if (typeof (message) === 'string') {\r\n message = ethers.utils.toUtf8Bytes(message);\r\n }\r\n\r\n const messageHex = ethers.utils.hexlify(message).substring(2);\r\n\r\n const sig = await this._retry((eth) => eth.signPersonalMessage(this.path, messageHex));\r\n sig.r = '0x' + sig.r;\r\n sig.s = '0x' + sig.s;\r\n return ethers.utils.joinSignature(sig);\r\n }\r\n\r\n async signTransaction(transaction: ethers.providers.TransactionRequest): Promise<string> {\r\n const tx = await ethers.utils.resolveProperties(transaction);\r\n const baseTx: ethers.utils.UnsignedTransaction = {\r\n chainId: (tx.chainId || undefined),\r\n data: (tx.data || undefined),\r\n gasLimit: (tx.gasLimit || undefined),\r\n gasPrice: (tx.gasPrice || undefined),\r\n nonce: (tx.nonce ? ethers.BigNumber.from(tx.nonce).toNumber() : undefined),\r\n to: (tx.to || undefined),\r\n value: (tx.value || undefined),\r\n };\r\n\r\n const unsignedTx = ethers.utils.serializeTransaction(baseTx).substring(2);\r\n const sig = await this._retry((eth) => eth.signTransaction(this.path, unsignedTx));\r\n\r\n return ethers.utils.serializeTransaction(baseTx, {\r\n v: ethers.BigNumber.from(\"0x\" + sig.v).toNumber(),\r\n r: (\"0x\" + sig.r),\r\n s: (\"0x\" + sig.s),\r\n });\r\n }\r\n\r\n connect(provider: ethers.providers.Provider): ethers.Signer {\r\n //@ts-ignore\r\n return new LedgerSigner(provider, this.path);\r\n }\r\n}","import React from \"react\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport { RootStore } from \"../store/root\";\r\n\r\nexport const AppProvider = observer(({ children }: { children?: React.ReactNode }) => {\r\n const rootStore = RootStore.init()\r\n return (\r\n <>\r\n {rootStore.providers.map((store) => {\r\n const Component: any = store.provider;\r\n return <Component rootStore={rootStore} key={store.sid} />;\r\n })}\r\n {children && children}\r\n </>\r\n )\r\n})"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../lib/helper.ts"],"names":[],"mappings":"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","sourcesContent":["import BN, { BigNumber } from \"bignumber.js\";\r\nimport JSONFormat from \"json-format\";\r\nimport { _ } from \"./lodash\";\r\nimport copy from \"copy-to-clipboard\";\r\nimport numeral from \"numeral\";\r\nimport { from } from \"@iotexproject/iotex-address-ts\";\r\n\r\nconst valMap = {\r\n undefined: \"\",\r\n null: \"\",\r\n false: false,\r\n};\r\n\r\nexport const helper = {\r\n env: {\r\n isIopayMobile: () => navigator.userAgent && (navigator.userAgent.includes(\"IoPayAndroid\") || navigator.userAgent.includes(\"IoPayiOs\")),\r\n isBrowser: () => typeof window === \"object\",\r\n onBrowser(func) {\r\n if (this.isBrowser()) {\r\n func();\r\n }\r\n },\r\n },\r\n promise: {\r\n async sleep(ms) {\r\n return new Promise((resolve) => setTimeout(resolve, ms));\r\n },\r\n async runAsync<T, U = Error>(promise: Promise<T>): Promise<[U | null, T | null]> {\r\n return promise.then<[null, T]>((data: T) => [null, data]).catch<[U, null]>((err) => [err, null]);\r\n },\r\n },\r\n object: {\r\n crawlObject(object, options) {\r\n const newObj = JSON.parse(JSON.stringify(object));\r\n return helper.object.crawl(newObj, options);\r\n },\r\n crawl(object, options) {\r\n Object.keys(object).forEach((i) => {\r\n if (typeof object[i] === \"object\") {\r\n helper.object.crawl(object[i], options);\r\n } else {\r\n const handler = options[typeof object[i]];\r\n if (handler) {\r\n object[i] = handler(object[i]);\r\n }\r\n }\r\n });\r\n return object;\r\n },\r\n },\r\n json: {\r\n isJsonString(str: string) {\r\n if (!str || typeof str !== \"string\") return false;\r\n if (!str?.includes(\"{\")) return false;\r\n try {\r\n JSON.parse(str);\r\n } catch (e) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n safeParse(val: any) {\r\n try {\r\n return JSON.parse(val);\r\n } catch (error) {\r\n return val;\r\n }\r\n },\r\n },\r\n deepAssign(target, ...sources) {\r\n sources.forEach((source) => {\r\n Object.keys(source).forEach((key) => {\r\n let descriptor = Object.getOwnPropertyDescriptor(source, key);\r\n if (descriptor && descriptor?.get) {\r\n return Object.defineProperty(target, key, descriptor);\r\n }\r\n const targetValue = target[key];\r\n let sourceValue = source[key];\r\n if (helper.isObject(targetValue) && helper.isObject(sourceValue)) {\r\n try {\r\n target[key] = helper.deepAssign(targetValue, sourceValue);\r\n } catch (e) {\r\n target[key] = Object.assign(targetValue, sourceValue);\r\n }\r\n } else {\r\n target[key] = sourceValue;\r\n }\r\n });\r\n });\r\n return target;\r\n },\r\n isObject(value) {\r\n return value != null && typeof value === \"object\";\r\n },\r\n deepMerge(obj, newObj) {\r\n const newVal = _.mergeWith(obj, newObj, (...args) => {\r\n const [objValue, srcValue] = args;\r\n if (typeof srcValue === \"object\") {\r\n return helper.deepMerge(objValue, srcValue);\r\n }\r\n return srcValue || valMap[srcValue];\r\n });\r\n return newVal;\r\n },\r\n img: {\r\n parse(src: string | undefined) {\r\n if (!src) return \"/img-404.svg\";\r\n if (src?.startsWith(\"ipfs\")) {\r\n return \"https://ipfs.io/ipfs/\" + src.split(\"://\")[1];\r\n }\r\n return src;\r\n },\r\n },\r\n string: {\r\n copy(str: string) {\r\n copy(str);\r\n },\r\n fristUpper(str: string) {\r\n return str.charAt(0).toUpperCase() + str.slice(1);\r\n },\r\n firstUpperCase(str: string) {\r\n return str.replace(/^\\S/, (s) => s.toUpperCase());\r\n },\r\n toFixString(str, length) {\r\n if (str && str.length > length) {\r\n return str.substr(0, length) + \"...\";\r\n } else {\r\n return str;\r\n }\r\n },\r\n truncate(fullStr = \"\", strLen, separator) {\r\n if (fullStr.length <= strLen) return fullStr;\r\n\r\n separator = separator || \"...\";\r\n\r\n var sepLen = separator.length,\r\n charsToShow = strLen - sepLen,\r\n frontChars = Math.ceil(charsToShow / 2),\r\n backChars = Math.floor(charsToShow / 2);\r\n\r\n return fullStr.substr(0, frontChars) + separator + fullStr.substr(fullStr.length - backChars);\r\n },\r\n validAbi(abi: string): { abi: any[]; address: string } {\r\n try {\r\n JSON.parse(abi);\r\n const _abi = helper.json.safeParse(abi);\r\n if (!_abi) {\r\n return { abi: [], address: \"\" };\r\n }\r\n if (Array.isArray(_abi)) {\r\n return { abi: _abi, address: \"\" };\r\n } else if (_abi.abi && _abi.address) {\r\n return { abi: _abi.abi, address: _abi.address };\r\n } else if (_abi.abi && !_abi.addresses) {\r\n return { abi: _abi.abi, address: \"\" };\r\n }\r\n return { abi: [], address: \"\" };\r\n } catch (error) {\r\n return { abi: [], address: \"\" };\r\n }\r\n },\r\n random(count: number) {\r\n const chars = \"abcdefghijklmnopqrstuvwxyz\";\r\n let result = \"\";\r\n for (let i = 0; i < count; i++) {\r\n result += chars.charAt(Math.floor(Math.random() * chars.length));\r\n }\r\n return result;\r\n },\r\n },\r\n download: {\r\n downloadByBlob(name: string, blob: Blob) {\r\n const a = document.createElement(\"a\");\r\n const href = window.URL.createObjectURL(blob);\r\n a.href = href;\r\n a.download = name;\r\n a.click();\r\n },\r\n downloadJSON(name: string, jsonObj: object) {\r\n try {\r\n const jsonStr: string = JSONFormat(jsonObj);\r\n const blob = new Blob([jsonStr], { type: \"application/json\" });\r\n this.downloadByBlob(name + \".json\", blob);\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n },\r\n },\r\n number: {\r\n countNonZeroNumbers: (str: string) => {\r\n let index = 0;\r\n const length = str.length;\r\n for (; index < length && (str[index] === \"0\" || str[index] === \".\"); index += 1);\r\n return length - index - Number(str.includes(\".\"));\r\n },\r\n numberWithCommas(num: number) {\r\n return num.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\r\n },\r\n getBN: (value: number | string | BN) => {\r\n return value instanceof BN ? value : typeof value === \"string\" ? new BN(Number(value)) : new BN(value);\r\n },\r\n toPrecisionFloor: (str: number | string, options?: { decimals?: number; format?: string; toLocalString?: boolean }) => {\r\n const { decimals = 6, format = \"\", toLocalString = false } = options || {};\r\n if (!str || isNaN(Number(str))) return \"\";\r\n\r\n if (helper.number.countNonZeroNumbers(String(str)) <= decimals) return String(str);\r\n const numStr = new BN(str).toFixed();\r\n let result = \"\";\r\n let index = 0;\r\n const numLength = numStr.length;\r\n\r\n for (; numStr[index] === \"0\" && index < numLength; index += 1);\r\n\r\n if (index === numLength) return \"0\";\r\n\r\n if (numStr[index] === \".\") {\r\n // number < 0\r\n result = \"0\";\r\n for (; (numStr[index] === \"0\" || numStr[index] === \".\") && index < numLength; index += 1) {\r\n result = result + numStr[index];\r\n }\r\n }\r\n let resultNumLength = 0;\r\n for (; index < numLength && (resultNumLength < decimals || !result.includes(\".\")); index += 1) {\r\n result = result + numStr[index];\r\n\r\n if (numStr[index] !== \".\") resultNumLength += 1;\r\n }\r\n if (format) {\r\n return numeral(Number(result)).format(format);\r\n }\r\n\r\n if (toLocalString) {\r\n return helper.number.numberWithCommas(Number(new BN(result).toFixed()));\r\n }\r\n\r\n return new BN(result).toFixed();\r\n },\r\n\r\n //format: '0,0'\r\n warpBigNumber(value: string, decimals = 18, options?: { format?: string; fallback?: string; min?: number }) {\r\n const { format = \"0.0\", fallback = \"0.000\", min } = options || {};\r\n if (!value) {\r\n return {\r\n value: \"...\",\r\n format: \"...\",\r\n originFormat: \"...\",\r\n decimals: \"0\",\r\n // isZero: true,\r\n };\r\n }\r\n const BigNumberResponse = { value: new BigNumber(value), decimals };\r\n return {\r\n value: BigNumberResponse.value.toFixed(0),\r\n originFormat: BigNumberResponse.value.div(10 ** decimals).toFixed(),\r\n format: helper.number.numberFormat(BigNumberResponse.value.div(10 ** decimals).toFixed(), format, { fallback, min }),\r\n decimals: String(BigNumberResponse.decimals),\r\n // isZero: BigNumberResponse.value.isZero(),\r\n };\r\n },\r\n //http://numeraljs.com/ format params does not need to deal with decimal places\r\n //format: '$0,0' '0a' '0,0' '0,0$'\r\n numberFormat(str: string | number, format: string = \"0,0\", options: { min?: number; fallback?: string } = {}): string {\r\n const { fallback = \"0.00\" } = options || {};\r\n\r\n if (!str || isNaN(Number(str))) return fallback;\r\n const numStr = new BigNumber(str).toFixed();\r\n const countNonZeroNumbers = (_str: string) => {\r\n const decimalPointIndex = _str.indexOf(\".\");\r\n if (decimalPointIndex === -1) {\r\n return 0;\r\n }\r\n const decimalPart = _str.substring(decimalPointIndex + 1);\r\n let trailingZerosCount = 0;\r\n for (let i = 0; i < decimalPart.length; i++) {\r\n if (decimalPart[i] === \"0\") {\r\n trailingZerosCount++;\r\n } else {\r\n break;\r\n }\r\n }\r\n return trailingZerosCount;\r\n };\r\n\r\n const fractionDigits = countNonZeroNumbers(format);\r\n const numberFractionDigits = countNonZeroNumbers(numStr);\r\n if (options?.min) {\r\n if (new BigNumber(numStr).isLessThan(new BigNumber(options?.min || 0))) {\r\n return `< ${numeral(options?.min).format(format)}`;\r\n }\r\n }\r\n const fullStr = new BigNumber(numStr).toFixed();\r\n let preStr = numeral(fullStr.split(\".\")[0]).format(format.split(\".\")[0]);\r\n const fractionStr = fullStr.split(\".\")?.[1]?.slice(0, fractionDigits + numberFractionDigits);\r\n\r\n if (numberFractionDigits >= fractionDigits) {\r\n return (preStr + \".\" + fractionStr).replace(/\\.?0+$/, \"\");\r\n }\r\n\r\n if (fractionStr?.[fractionDigits - 1] == \"9\") {\r\n return (preStr + \".\" + fractionStr.slice(0, fractionDigits - 1) + \"9\").replace(/\\.?0+$/, \"\");\r\n }\r\n\r\n const resultStr = numeral(new BigNumber(numStr).toString()).format(format);\r\n return resultStr.replace(/\\.?0+$/, \"\");\r\n },\r\n },\r\n address: {\r\n convertAddress: (addressMode: \"io\" | \"0x\", address: string = \"\"): string => {\r\n try {\r\n if (addressMode == \"0x\" && helper.address.validateIoAddress(address)) {\r\n return from(address).stringEth();\r\n }\r\n if (addressMode == \"io\" && helper.address.validateEthAddress(address)) {\r\n return from(address).string();\r\n }\r\n } catch (error) { }\r\n return address;\r\n },\r\n validateEthAddress: (address: string) => /^0x[a-fA-F0-9]{40}$/.test(address),\r\n validateIoAddress: (address: string) => /^io[a-zA-Z0-9]{39}$/.test(address),\r\n validateAddress: (address: string) => helper.address.validateEthAddress(address) || helper.address.validateIoAddress(address),\r\n },\r\n};\r\n"]}