@dappworks/kit 0.4.101 → 0.4.102

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 (43) hide show
  1. package/dist/{PromiseState-0df0d219.d.ts → PromiseState-yojg0WLR.d.ts} +3 -3
  2. package/dist/aiem.d.mts +34 -9
  3. package/dist/aiem.mjs +71 -22
  4. package/dist/aiem.mjs.map +1 -1
  5. package/dist/{chunk-TMFAGW4V.mjs → chunk-AIZ7XDNV.mjs} +14 -14
  6. package/dist/chunk-AIZ7XDNV.mjs.map +1 -0
  7. package/dist/{chunk-ESZELIL2.mjs → chunk-HRYH37UI.mjs} +2 -2
  8. package/dist/{chunk-EDHGL232.mjs → chunk-QWHU3HBK.mjs} +2 -2
  9. package/dist/{chunk-6F7H4PAA.mjs → chunk-R4SQKVDQ.mjs} +1 -1
  10. package/dist/{chunk-LHKOQ765.mjs → chunk-R6ZPHYYN.mjs} +7 -7
  11. package/dist/chunk-R6ZPHYYN.mjs.map +1 -0
  12. package/dist/{chunk-FDCTH5PZ.mjs → chunk-WS43BV7Y.mjs} +2 -2
  13. package/dist/{chunk-UEX27FDZ.mjs → chunk-XJMRAPHI.mjs} +13 -12
  14. package/dist/chunk-XJMRAPHI.mjs.map +1 -0
  15. package/dist/dev.d.mts +1 -1
  16. package/dist/dev.mjs +2 -2
  17. package/dist/experimental.d.mts +7 -5
  18. package/dist/experimental.mjs +3 -3
  19. package/dist/form.d.mts +4 -4
  20. package/dist/form.mjs +4 -4
  21. package/dist/index.d.mts +4 -4
  22. package/dist/index.mjs +5 -5
  23. package/dist/inspector.d.mts +1 -1
  24. package/dist/inspector.mjs +1 -1
  25. package/dist/jsontable.d.mts +3 -3
  26. package/dist/jsontable.mjs +4 -4
  27. package/dist/metrics.d.mts +1 -1
  28. package/dist/metrics.mjs +4 -4
  29. package/dist/plugins.d.mts +6 -6
  30. package/dist/plugins.mjs +4 -4
  31. package/dist/{root-2d8aeada.d.ts → root-C3lZnoCI.d.ts} +5 -1
  32. package/dist/ui.mjs +3 -3
  33. package/dist/utils.d.mts +9 -4
  34. package/dist/utils.mjs +1 -1
  35. package/package.json +3 -3
  36. package/dist/chunk-LHKOQ765.mjs.map +0 -1
  37. package/dist/chunk-TMFAGW4V.mjs.map +0 -1
  38. package/dist/chunk-UEX27FDZ.mjs.map +0 -1
  39. /package/dist/{PaginationState-c19e621a.d.ts → PaginationState-Bmrrw0ky.d.ts} +0 -0
  40. /package/dist/{chunk-ESZELIL2.mjs.map → chunk-HRYH37UI.mjs.map} +0 -0
  41. /package/dist/{chunk-EDHGL232.mjs.map → chunk-QWHU3HBK.mjs.map} +0 -0
  42. /package/dist/{chunk-6F7H4PAA.mjs.map → chunk-R4SQKVDQ.mjs.map} +0 -0
  43. /package/dist/{chunk-FDCTH5PZ.mjs.map → chunk-WS43BV7Y.mjs.map} +0 -0
@@ -1,5 +1,5 @@
1
1
  import { EventEmitter } from 'events';
2
- import { c as BooleanState, B as BaseState } from './root-2d8aeada.js';
2
+ import { c as BooleanState, B as BaseState } from './root-C3lZnoCI.js';
3
3
 
4
4
  interface Events {
5
5
  data: (data: any) => void;
@@ -22,10 +22,10 @@ declare class PromiseState<T extends (...args: any[]) => Promise<any>, U = Retur
22
22
  successMsg: string;
23
23
  errMsg: string;
24
24
  loadingLock: boolean;
25
- event: EventEmitter;
25
+ event: EventEmitter<[never]>;
26
26
  on<E extends keyof Events>(event: E, listener: Events[E]): this;
27
27
  once<E extends keyof Events>(event: E, listener: Events[E]): this;
28
- use<E extends keyof Events>(event: E, listener: Events[E]): () => EventEmitter;
28
+ use<E extends keyof Events>(event: E, listener: Events[E]): () => EventEmitter<[never]>;
29
29
  emit<E extends keyof Events>(event: E, ...args: Parameters<Events[E]>): void;
30
30
  init: () => Promise<void>;
31
31
  currentIndex: BaseState;
package/dist/aiem.d.mts CHANGED
@@ -1,9 +1,9 @@
1
- import { Abi, Chain, GetContractReturnType, PublicClient, HttpTransport, WalletClient } from 'viem';
2
- import QuickLRU from 'quick-lru';
1
+ import { Abi, Chain, GetContractReturnType, PublicClient, HttpTransport, WalletClient, AbiFunction } from 'viem';
2
+ import TTLCache from '@isaacs/ttlcache';
3
3
 
4
4
  declare class Cache {
5
- kv: QuickLRU<string, any>;
6
- wrap<T>(key: string, fn: () => T | Promise<T>): T | Promise<T>;
5
+ kv: TTLCache<string, any>;
6
+ wrap<T>(key: string, fn: () => T | Promise<T>, config?: TTLCache.Options<any, any>): T | Promise<T>;
7
7
  }
8
8
  declare class AIem<Contracts extends Record<string, Abi>, Chains extends Record<string, Chain>, Addrs extends {
9
9
  [K in keyof Contracts]?: {
@@ -11,21 +11,46 @@ declare class AIem<Contracts extends Record<string, Abi>, Chains extends Record<
11
11
  };
12
12
  }> {
13
13
  static cache?: Cache;
14
- contractMap: Contracts;
14
+ cache?: Cache;
15
+ contractMap?: Contracts;
15
16
  chainMap?: Chains;
16
- nameMap: Addrs;
17
+ nameMap?: Addrs;
17
18
  contracts: {
18
19
  [K in keyof Addrs & keyof Contracts]: {
19
20
  [KK in keyof Addrs[K]]: GetContractReturnType<Contracts[K], PublicClient<HttpTransport, Chain, any, any>, any, any>;
20
21
  };
21
22
  };
22
- get cache(): Cache;
23
+ funcMap?: {
24
+ [key: string]: {
25
+ ttl?: number;
26
+ };
27
+ };
28
+ get _cache(): Cache;
23
29
  getWallet?: () => WalletClient;
24
- constructor(args: Pick<AIem<Contracts, Chains, Addrs>, "contractMap" | "chainMap" | "nameMap" | "getWallet">);
30
+ static Set<Contracts extends Record<string, Abi>, Chains extends Record<string, Chain>, Addrs extends {
31
+ [K in keyof Contracts]?: {
32
+ [key: string]: `${string}-0x${string}`;
33
+ };
34
+ }>(args: Pick<AIem<Contracts, Chains, Addrs>, "contractMap" | "chainMap" | "nameMap" | "getWallet" | "cache" | "funcMap">): AIem<Contracts, Chains, Addrs>;
35
+ Set<Contracts extends Record<string, Abi>, Chains extends Record<string, Chain>, Addrs extends {
36
+ [K in keyof Contracts]?: {
37
+ [key: string]: `${string}-0x${string}`;
38
+ };
39
+ }>(args: Pick<AIem<Contracts, Chains, Addrs>, "contractMap" | "chainMap" | "nameMap" | "getWallet" | "cache" | "funcMap">): AIem<Contracts, Chains, Addrs>;
40
+ constructor(args?: Pick<AIem<Contracts, Chains, Addrs>, "contractMap" | "chainMap" | "nameMap" | "getWallet" | "cache" | "funcMap">);
25
41
  PubClient<C extends keyof Chains>(chainId: C): PublicClient<HttpTransport, Chain, any, any>;
26
42
  Get<K extends keyof Contracts, C extends keyof Chains, Addr extends `0x${string}`>(contractName: K, chainId: C, address: Addr): GetContractReturnType<Contracts[K], PublicClient<HttpTransport, Chain, any, any>>;
43
+ getContract({ client, address, abi }: {
44
+ client: {
45
+ public: PublicClient<HttpTransport, Chain, any, any>;
46
+ wallet?: WalletClient;
47
+ };
48
+ address: `0x${string}`;
49
+ abi: any;
50
+ }): any;
27
51
  static init(): AIem<any, any, any>;
28
52
  static Get<TAbi extends Abi = any>(abi: TAbi, chainId: any, address: any, wallet?: WalletClient): GetContractReturnType<TAbi, PublicClient<HttpTransport, Chain, any, any>>;
29
53
  }
54
+ type ReadFunctionKeys<T extends Abi> = T[number] extends infer U ? U extends AbiFunction ? U['stateMutability'] extends 'view' | 'pure' ? U['name'] : never : never : never;
30
55
 
31
- export { AIem, Cache };
56
+ export { AIem, Cache, type ReadFunctionKeys };
package/dist/aiem.mjs CHANGED
@@ -1,46 +1,53 @@
1
- import { __objRest } from './chunk-6F7H4PAA.mjs';
1
+ import { __objRest } from './chunk-R4SQKVDQ.mjs';
2
2
  import { createPublicClient, http, getContract } from 'viem';
3
- import QuickLRU from 'quick-lru';
4
3
  import md5 from 'md5';
5
- import { mainnet, iotex, bsc, polygon } from 'viem/chains';
4
+ import { mainnet, iotex, bsc, polygon, iotexTestnet } from 'viem/chains';
5
+ import TTLCache from '@isaacs/ttlcache';
6
6
 
7
7
  mainnet.rpcUrls.default.http = ["https://rpc.ankr.com/eth"];
8
8
  mainnet.rpcUrls.default.webSocket = ["wss://ethereum-rpc.publicnode.com"];
9
9
  var Cache = class {
10
10
  constructor() {
11
- this.kv = new QuickLRU({ maxSize: 1e4 });
11
+ this.kv = new TTLCache({ max: 1e4, ttl: 1e3 * 60 });
12
12
  }
13
- wrap(key, fn) {
13
+ wrap(key, fn, config = {}) {
14
14
  if (this.kv.has(key)) {
15
+ console.log(`load ${key} from cache`);
15
16
  return this.kv.get(key);
16
17
  }
17
18
  const result = fn();
18
19
  if (result instanceof Promise) {
19
20
  const promiseResult = result.then((res) => {
20
- this.kv.set(key, res);
21
+ this.kv.set(key, res, config);
21
22
  return res;
22
23
  });
23
- this.kv.set(key, promiseResult);
24
+ this.kv.set(key, promiseResult, config);
24
25
  return promiseResult;
25
26
  } else {
26
- this.kv.set(key, result);
27
+ this.kv.set(key, result, config);
27
28
  return result;
28
29
  }
29
30
  }
30
31
  };
31
32
  var _AIem = class _AIem {
32
- constructor(args) {
33
+ constructor(args = {}) {
34
+ this.cache = new Cache();
33
35
  //@ts-ignore
34
36
  this.chainMap = {
35
37
  [iotex.id]: iotex,
36
38
  [mainnet.id]: mainnet,
37
39
  [bsc.id]: bsc,
38
- [polygon.id]: polygon
40
+ [polygon.id]: polygon,
41
+ [iotexTestnet.id]: iotexTestnet
39
42
  };
40
- const _a = args || {}, { chainMap = {}, contractMap = {} } = _a, rest = __objRest(_a, ["chainMap", "contractMap"]);
41
- this.chainMap = Object.assign({}, this.chainMap || {}, chainMap);
42
- this.contractMap = Object.assign({}, this.contractMap || {}, contractMap);
43
- Object.assign(this, rest);
43
+ this.funcMap = {
44
+ "totalSupply": { ttl: 15 },
45
+ "symbol": { ttl: 60 },
46
+ "name": { ttl: 60 },
47
+ "decimals": { ttl: 60 },
48
+ "balanceOf": { ttl: 5 }
49
+ };
50
+ this.Set(args);
44
51
  this.contracts = new Proxy({}, {
45
52
  //@ts-ignore
46
53
  get: (target, contractName) => {
@@ -52,8 +59,8 @@ var _AIem = class _AIem {
52
59
  target[contractName] = new Proxy({}, {
53
60
  //@ts-ignore
54
61
  get: (innerTarget, contractAlias) => {
55
- var _a2;
56
- const addressStr = (_a2 = this.nameMap[contractName]) == null ? void 0 : _a2[contractAlias];
62
+ var _a;
63
+ const addressStr = (_a = this.nameMap[contractName]) == null ? void 0 : _a[contractAlias];
57
64
  if (!addressStr) {
58
65
  throw new Error(`Alias ${String(contractAlias)} for contract ${String(contractName)} not found`);
59
66
  }
@@ -65,9 +72,20 @@ var _AIem = class _AIem {
65
72
  }
66
73
  });
67
74
  }
68
- get cache() {
75
+ get _cache() {
69
76
  return _AIem.cache;
70
77
  }
78
+ static Set(args) {
79
+ return this.init().Set(args);
80
+ }
81
+ Set(args) {
82
+ const _a = args || {}, { chainMap = {}, contractMap = {}, funcMap } = _a, rest = __objRest(_a, ["chainMap", "contractMap", "funcMap"]);
83
+ this.chainMap = Object.assign({}, this.chainMap || {}, chainMap);
84
+ this.contractMap = Object.assign({}, this.contractMap || {}, contractMap);
85
+ this.funcMap = Object.assign({}, this.funcMap || {}, funcMap);
86
+ Object.assign(this, rest);
87
+ return this;
88
+ }
71
89
  // WsClient<C extends keyof Chains>(chainId: C): PublicClient<WebSocketTransport, Chain, any, any> {
72
90
  // //@ts-ignore
73
91
  // return this.cache.wrap(`wsClient-${String(chainId)}`, () => {
@@ -82,7 +100,7 @@ var _AIem = class _AIem {
82
100
  // })
83
101
  // }
84
102
  PubClient(chainId) {
85
- return this.cache.wrap(`publicClient-${String(chainId)}`, () => {
103
+ return this._cache.wrap(`publicClient-${String(chainId)}`, () => {
86
104
  return createPublicClient({
87
105
  //@ts-ignore
88
106
  chain: this.chainMap[chainId],
@@ -94,10 +112,10 @@ var _AIem = class _AIem {
94
112
  Get(contractName, chainId, address) {
95
113
  const wallet = this.getWallet ? this.getWallet() : null;
96
114
  const cacheKey = `contract: ${contractName}-${chainId}-${address}-${wallet ? wallet.account.address : wallet}`;
97
- return this.cache.wrap(cacheKey, () => {
115
+ return this._cache.wrap(cacheKey, () => {
98
116
  const contract = this.contractMap[contractName];
99
117
  const pubClient = this.PubClient(chainId);
100
- return getContract({
118
+ return this.getContract({
101
119
  client: {
102
120
  //@ts-ignore
103
121
  public: pubClient,
@@ -109,6 +127,37 @@ var _AIem = class _AIem {
109
127
  });
110
128
  });
111
129
  }
130
+ getContract({
131
+ client,
132
+ address,
133
+ abi
134
+ }) {
135
+ const handler = {
136
+ get: (target, funcName) => {
137
+ if (typeof target[funcName] === "function") {
138
+ return async (...args) => {
139
+ var _a;
140
+ const methodConfig = (_a = this.funcMap) == null ? void 0 : _a[funcName];
141
+ const cacheKey = `method:${client.public.chain.id}-${address}-${String(funcName)}-${JSON.stringify(args)}`;
142
+ if (methodConfig) {
143
+ return this.cache.wrap(cacheKey, () => {
144
+ return target[funcName](...args);
145
+ }, methodConfig);
146
+ }
147
+ return target[funcName](...args);
148
+ };
149
+ }
150
+ return new Proxy(target[funcName], handler);
151
+ }
152
+ };
153
+ const contract = getContract({
154
+ //@ts-ignore
155
+ client,
156
+ address,
157
+ abi
158
+ });
159
+ return new Proxy(contract, handler);
160
+ }
112
161
  static init() {
113
162
  if (!globalThis.aiem) {
114
163
  globalThis.aiem = new _AIem();
@@ -119,9 +168,9 @@ var _AIem = class _AIem {
119
168
  static Get(abi, chainId, address, wallet) {
120
169
  const aiem = this.init();
121
170
  const cacheKey = `contract ${md5(JSON.stringify(abi))}-${chainId}-${address}-${wallet ? wallet.account.address : null}`;
122
- return aiem.cache.wrap(cacheKey, () => {
171
+ return aiem._cache.wrap(cacheKey, () => {
123
172
  const pubClient = aiem.PubClient(chainId);
124
- return getContract({
173
+ return aiem.getContract({
125
174
  client: {
126
175
  //@ts-ignore
127
176
  public: pubClient,
package/dist/aiem.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../aiem.ts"],"names":["_a"],"mappings":"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","sourcesContent":["import { type Chain, type GetContractReturnType, createPublicClient, getContract, http, type Abi, PublicClient, HttpTransport, WalletClient } from 'viem'\nimport QuickLRU from 'quick-lru';\nimport md5 from \"md5\"\nimport { iotex, mainnet, bsc, polygon } from 'viem/chains'\n\n\n//@ts-ignore\nmainnet.rpcUrls.default.http = ['https://rpc.ankr.com/eth']\n//@ts-ignore\nmainnet.rpcUrls.default.webSocket = [\"wss://ethereum-rpc.publicnode.com\"]\n\n\n\n\nexport class Cache {\n kv = new QuickLRU<string, any>({ maxSize: 10000 });\n\n wrap<T>(key: string, fn: () => T | Promise<T>): T | Promise<T> {\n if (this.kv.has(key)) {\n return this.kv.get(key);\n }\n\n const result = fn();\n if (result instanceof Promise) {\n const promiseResult = result.then(res => {\n this.kv.set(key, res);\n return res;\n });\n this.kv.set(key, promiseResult);\n return promiseResult;\n } else {\n this.kv.set(key, result);\n return result;\n }\n }\n}\n\nexport class AIem<Contracts extends Record<string, Abi>, Chains extends Record<string, Chain>, Addrs extends { [K in keyof Contracts]?: { [key: string]: `${string}-0x${string}` } }> {\n static cache?: Cache = new Cache()\n contractMap: Contracts\n //@ts-ignore\n chainMap?: Chains = {\n [iotex.id]: iotex,\n [mainnet.id]: mainnet,\n [bsc.id]: bsc,\n [polygon.id]: polygon\n }\n nameMap: Addrs\n contracts: {\n [K in keyof Addrs & keyof Contracts]: {\n //@ts-ignore\n [KK in keyof Addrs[K]]: GetContractReturnType<Contracts[K], PublicClient<HttpTransport, Chain, any, any>, any, any>\n }\n }\n\n get cache() {\n return AIem.cache\n }\n\n getWallet?: () => WalletClient\n\n constructor(args: Pick<AIem<Contracts, Chains, Addrs>, \"contractMap\" | \"chainMap\" | \"nameMap\" | \"getWallet\">) {\n\n const { chainMap = {}, contractMap = {}, ...rest } = args || {}\n //@ts-ignore\n this.chainMap = Object.assign({}, this.chainMap || {}, chainMap)\n //@ts-ignore\n this.contractMap = Object.assign({}, this.contractMap || {}, contractMap)\n\n Object.assign(this, rest)\n\n\n this.contracts = new Proxy({}, {\n //@ts-ignore\n get: (target: any, contractName: keyof Addrs & keyof Contracts) => {\n if (target[contractName]) return target[contractName]\n\n if (!this.nameMap[contractName]) {\n throw new Error(`Contract ${String(contractName)} not found`);\n }\n\n target[contractName] = new Proxy({}, {\n //@ts-ignore\n get: (innerTarget: any, contractAlias: keyof Addrs[keyof Addrs]) => {\n const addressStr = this.nameMap[contractName]?.[contractAlias];\n if (!addressStr) {\n throw new Error(`Alias ${String(contractAlias)} for contract ${String(contractName)} not found`);\n }\n const [chainId, address] = addressStr.split('-');\n\n\n // Assuming getContractInstance is a function that retrieves a contract instance\n return this.Get(contractName, String(chainId), address as `0x${string}`);\n }\n });\n return target[contractName];\n }\n }) as any;\n\n }\n\n // WsClient<C extends keyof Chains>(chainId: C): PublicClient<WebSocketTransport, Chain, any, any> {\n // //@ts-ignore\n // return this.cache.wrap(`wsClient-${String(chainId)}`, () => {\n // // const wsUrl = this.chainMap[chainId]?.rpcUrls?.default?.webSocket?.[0]\n // // if (!wsUrl) throw new Error(`rpcUrls.default.webSocket[0] is not defined for chainId ${String(chainId)}`)\n // // //@ts-ignore\n // return createPublicClient({\n // //@ts-ignore\n // chain: this.chainMap[chainId],\n // transport: webSocket()\n // }) as PublicClient<WebSocketTransport, Chain, any, any>\n // })\n // }\n\n\n PubClient<C extends keyof Chains>(chainId: C): PublicClient<HttpTransport, Chain, any, any> {\n //@ts-ignore\n return this.cache.wrap(`publicClient-${String(chainId)}`, () => {\n //@ts-ignore\n return createPublicClient({\n //@ts-ignore\n chain: this.chainMap[chainId],\n transport: http()\n }) as PublicClient<HttpTransport, Chain, any, any>\n })\n }\n\n\n //@ts-ignore\n Get<K extends keyof Contracts, C extends keyof Chains, Addr extends `0x${string}`>(contractName: K, chainId: C, address: Addr): GetContractReturnType<Contracts[K], PublicClient<HttpTransport, Chain, any, any>> {\n const wallet = this.getWallet ? this.getWallet() : null\n //@ts-ignore\n const cacheKey = `contract: ${contractName}-${chainId}-${address}-${wallet ? wallet.account.address : wallet}`\n return this.cache.wrap(cacheKey, () => {\n //@ts-ignore\n const contract = this.contractMap[contractName];\n //@ts-ignore\n const pubClient = this.PubClient(chainId)\n\n //@ts-ignore\n return getContract({\n client: {\n //@ts-ignore\n public: pubClient,\n //@ts-ignore\n wallet\n },\n address,\n abi: contract\n })\n }) as any\n }\n\n\n static init(): AIem<any, any, any> {\n if (!globalThis.aiem) {\n //@ts-ignore\n globalThis.aiem = new AIem();\n }\n\n return globalThis.aiem;\n }\n\n //@ts-ignore\n static Get<TAbi extends Abi = any>(abi: TAbi, chainId: any, address: any, wallet?: WalletClient): GetContractReturnType<TAbi, PublicClient<HttpTransport, Chain, any, any>> {\n const aiem = this.init()\n const cacheKey = `contract ${md5(JSON.stringify(abi))}-${chainId}-${address}-${wallet ? wallet.account.address : null}`\n return aiem.cache.wrap(cacheKey, () => {\n //@ts-ignore\n const pubClient = aiem.PubClient(chainId)\n\n //@ts-ignore\n return getContract({\n client: {\n //@ts-ignore\n public: pubClient,\n //@ts-ignore\n wallet\n },\n address,\n abi\n })\n }) as any\n }\n}\n"]}
1
+ {"version":3,"sources":["../aiem.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Chain, type GetContractReturnType, createPublicClient, getContract, http, type Abi, PublicClient, HttpTransport, WalletClient, AbiFunction } from 'viem'\nimport md5 from \"md5\"\nimport { iotex, mainnet, bsc, polygon, iotexTestnet, } from 'viem/chains'\nimport TTLCache from '@isaacs/ttlcache'\n\n//@ts-ignore\nmainnet.rpcUrls.default.http = ['https://rpc.ankr.com/eth']\n//@ts-ignore\nmainnet.rpcUrls.default.webSocket = [\"wss://ethereum-rpc.publicnode.com\"]\n\n\n\n\nexport class Cache {\n kv = new TTLCache<string, any>({ max: 10000, ttl: 1000 * 60, });\n\n wrap<T>(key: string, fn: () => T | Promise<T>, config: TTLCache.Options<any, any> = {}): T | Promise<T> {\n if (this.kv.has(key)) {\n console.log(`load ${key} from cache`)\n return this.kv.get(key);\n }\n\n const result = fn();\n if (result instanceof Promise) {\n const promiseResult = result.then(res => {\n this.kv.set(key, res, config);\n return res;\n });\n this.kv.set(key, promiseResult, config);\n return promiseResult;\n } else {\n this.kv.set(key, result, config);\n return result;\n }\n }\n}\n\n\nexport class AIem<Contracts extends Record<string, Abi>, Chains extends Record<string, Chain>, Addrs extends { [K in keyof Contracts]?: { [key: string]: `${string}-0x${string}` } }> {\n static cache?: Cache = new Cache()\n cache?: Cache = new Cache()\n contractMap?: Contracts\n //@ts-ignore\n chainMap?: Chains = {\n [iotex.id]: iotex,\n [mainnet.id]: mainnet,\n [bsc.id]: bsc,\n [polygon.id]: polygon,\n [iotexTestnet.id]: iotexTestnet,\n }\n nameMap?: Addrs\n contracts: {\n [K in keyof Addrs & keyof Contracts]: {\n //@ts-ignore\n [KK in keyof Addrs[K]]: GetContractReturnType<Contracts[K], PublicClient<HttpTransport, Chain, any, any>, any, any>\n }\n }\n funcMap?: { [key: string]: { ttl?: number } } = {\n \"totalSupply\": { ttl: 15 },\n \"symbol\": { ttl: 60 },\n \"name\": { ttl: 60 },\n \"decimals\": { ttl: 60 },\n \"balanceOf\": { ttl: 5 }\n }\n\n\n get _cache() {\n return AIem.cache\n }\n\n\n //@ts-ignore\n getWallet?: () => WalletClient\n\n static Set<Contracts extends Record<string, Abi>, Chains extends Record<string, Chain>, Addrs extends { [K in keyof Contracts]?: { [key: string]: `${string}-0x${string}` } }>(args: Pick<AIem<Contracts, Chains, Addrs>, \"contractMap\" | \"chainMap\" | \"nameMap\" | \"getWallet\" | \"cache\" | \"funcMap\">) {\n return this.init().Set(args)\n }\n\n Set<Contracts extends Record<string, Abi>, Chains extends Record<string, Chain>, Addrs extends { [K in keyof Contracts]?: { [key: string]: `${string}-0x${string}` } }>(args: Pick<AIem<Contracts, Chains, Addrs>, \"contractMap\" | \"chainMap\" | \"nameMap\" | \"getWallet\" | \"cache\" | \"funcMap\">): AIem<Contracts, Chains, Addrs> {\n const { chainMap = {}, contractMap = {}, funcMap, ...rest } = args || {}\n //@ts-ignore\n this.chainMap = Object.assign({}, this.chainMap || {}, chainMap)\n //@ts-ignore\n this.contractMap = Object.assign({}, this.contractMap || {}, contractMap)\n //@ts-ignore\n this.funcMap = Object.assign({}, this.funcMap || {}, funcMap)\n\n Object.assign(this, rest)\n return this as any\n }\n\n\n constructor(args: Pick<AIem<Contracts, Chains, Addrs>, \"contractMap\" | \"chainMap\" | \"nameMap\" | \"getWallet\" | \"cache\" | \"funcMap\"> = {}) {\n\n\n this.Set(args)\n\n this.contracts = new Proxy({}, {\n //@ts-ignore\n get: (target: any, contractName: keyof Addrs & keyof Contracts) => {\n if (target[contractName]) return target[contractName]\n\n if (!this.nameMap[contractName]) {\n throw new Error(`Contract ${String(contractName)} not found`);\n }\n\n target[contractName] = new Proxy({}, {\n //@ts-ignore\n get: (innerTarget: any, contractAlias: keyof Addrs[keyof Addrs]) => {\n const addressStr = this.nameMap[contractName]?.[contractAlias];\n if (!addressStr) {\n throw new Error(`Alias ${String(contractAlias)} for contract ${String(contractName)} not found`);\n }\n const [chainId, address] = addressStr.split('-');\n\n\n // Assuming getContractInstance is a function that retrieves a contract instance\n return this.Get(contractName, String(chainId), address as `0x${string}`);\n }\n });\n return target[contractName];\n }\n }) as any;\n\n }\n\n // WsClient<C extends keyof Chains>(chainId: C): PublicClient<WebSocketTransport, Chain, any, any> {\n // //@ts-ignore\n // return this.cache.wrap(`wsClient-${String(chainId)}`, () => {\n // // const wsUrl = this.chainMap[chainId]?.rpcUrls?.default?.webSocket?.[0]\n // // if (!wsUrl) throw new Error(`rpcUrls.default.webSocket[0] is not defined for chainId ${String(chainId)}`)\n // // //@ts-ignore\n // return createPublicClient({\n // //@ts-ignore\n // chain: this.chainMap[chainId],\n // transport: webSocket()\n // }) as PublicClient<WebSocketTransport, Chain, any, any>\n // })\n // }\n\n\n PubClient<C extends keyof Chains>(chainId: C): PublicClient<HttpTransport, Chain, any, any> {\n //@ts-ignore\n return this._cache.wrap(`publicClient-${String(chainId)}`, () => {\n //@ts-ignore\n return createPublicClient({\n //@ts-ignore\n chain: this.chainMap[chainId],\n transport: http()\n }) as PublicClient<HttpTransport, Chain, any, any>\n })\n }\n\n\n //@ts-ignore\n Get<K extends keyof Contracts, C extends keyof Chains, Addr extends `0x${string}`>(contractName: K, chainId: C, address: Addr): GetContractReturnType<Contracts[K], PublicClient<HttpTransport, Chain, any, any>> {\n const wallet = this.getWallet ? this.getWallet() : null\n //@ts-ignore\n const cacheKey = `contract: ${contractName}-${chainId}-${address}-${wallet ? wallet.account.address : wallet}`\n return this._cache.wrap(cacheKey, () => {\n //@ts-ignore\n const contract = this.contractMap[contractName];\n //@ts-ignore\n const pubClient = this.PubClient(chainId)\n\n //@ts-ignore\n return this.getContract({\n client: {\n //@ts-ignore\n public: pubClient,\n //@ts-ignore\n wallet\n },\n address,\n abi: contract\n })\n }) as any\n }\n\n getContract({\n client,\n address,\n abi\n }: {\n client: {\n public: PublicClient<HttpTransport, Chain, any, any>\n wallet?: WalletClient\n }\n address: `0x${string}`\n abi: any,\n }) {\n const handler = {\n get: (target: any, funcName: any) => {\n if (typeof target[funcName] === 'function') {\n return async (...args: any[]) => {\n const methodConfig = this.funcMap?.[funcName as string];\n const cacheKey = `method:${client.public.chain.id}-${address}-${String(funcName)}-${JSON.stringify(args)}`;\n\n if (methodConfig) {\n return this.cache.wrap(cacheKey, () => {\n return target[funcName](...args);\n }, methodConfig);\n }\n\n return target[funcName](...args);\n };\n }\n return new Proxy(target[funcName], handler)\n }\n }\n\n //@ts-ignore\n const contract = getContract({\n //@ts-ignore\n client,\n address,\n abi\n })\n return new Proxy(contract, handler) as any\n }\n\n\n static init(): AIem<any, any, any> {\n if (!globalThis.aiem) {\n //@ts-ignore\n globalThis.aiem = new AIem();\n }\n\n return globalThis.aiem;\n }\n\n //@ts-ignore\n static Get<TAbi extends Abi = any>(abi: TAbi, chainId: any, address: any, wallet?: WalletClient): GetContractReturnType<TAbi, PublicClient<HttpTransport, Chain, any, any>> {\n const aiem = this.init()\n\n const cacheKey = `contract ${md5(JSON.stringify(abi))}-${chainId}-${address}-${wallet ? wallet.account.address : null}`\n return aiem._cache.wrap(cacheKey, () => {\n //@ts-ignore\n const pubClient = aiem.PubClient(chainId)\n\n //@ts-ignore\n return aiem.getContract({\n client: {\n //@ts-ignore\n public: pubClient,\n //@ts-ignore\n wallet\n },\n address,\n abi\n })\n }) as any\n }\n}\n\n\nexport type ReadFunctionKeys<T extends Abi> = T[number] extends infer U\n ? U extends AbiFunction\n ? U['stateMutability'] extends 'view' | 'pure'\n ? U['name']\n : never\n : never\n : never;\n"]}
@@ -1,6 +1,6 @@
1
- import { __spreadValues } from './chunk-6F7H4PAA.mjs';
1
+ import { __spreadValues } from './chunk-R4SQKVDQ.mjs';
2
2
 
3
- // ../../node_modules/clsx/dist/clsx.mjs
3
+ // node_modules/clsx/dist/clsx.mjs
4
4
  function r(e) {
5
5
  var t, f, n = "";
6
6
  if ("string" == typeof e || "number" == typeof e)
@@ -20,7 +20,7 @@ function clsx() {
20
20
  return n;
21
21
  }
22
22
 
23
- // ../../node_modules/tailwind-merge/dist/lib/tw-join.mjs
23
+ // node_modules/tailwind-merge/dist/lib/tw-join.mjs
24
24
  function twJoin() {
25
25
  var index = 0;
26
26
  var argument;
@@ -53,7 +53,7 @@ function toValue(mix) {
53
53
  return string;
54
54
  }
55
55
 
56
- // ../../node_modules/tailwind-merge/dist/lib/class-utils.mjs
56
+ // node_modules/tailwind-merge/dist/lib/class-utils.mjs
57
57
  var CLASS_PART_SEPARATOR = "-";
58
58
  function createClassUtils(config) {
59
59
  var classMap = createClassMap(config);
@@ -182,7 +182,7 @@ function getPrefixedClassGroupEntries(classGroupEntries, prefix) {
182
182
  });
183
183
  }
184
184
 
185
- // ../../node_modules/tailwind-merge/dist/lib/lru-cache.mjs
185
+ // node_modules/tailwind-merge/dist/lib/lru-cache.mjs
186
186
  function createLruCache(maxCacheSize) {
187
187
  if (maxCacheSize < 1) {
188
188
  return {
@@ -226,7 +226,7 @@ function createLruCache(maxCacheSize) {
226
226
  };
227
227
  }
228
228
 
229
- // ../../node_modules/tailwind-merge/dist/lib/modifier-utils.mjs
229
+ // node_modules/tailwind-merge/dist/lib/modifier-utils.mjs
230
230
  var IMPORTANT_MODIFIER = "!";
231
231
  function createSplitModifiers(config) {
232
232
  var separator = config.separator || ":";
@@ -288,7 +288,7 @@ function sortModifiers(modifiers) {
288
288
  return sortedModifiers;
289
289
  }
290
290
 
291
- // ../../node_modules/tailwind-merge/dist/lib/config-utils.mjs
291
+ // node_modules/tailwind-merge/dist/lib/config-utils.mjs
292
292
  function createConfigUtils(config) {
293
293
  return __spreadValues({
294
294
  cache: createLruCache(config.cacheSize),
@@ -296,7 +296,7 @@ function createConfigUtils(config) {
296
296
  }, createClassUtils(config));
297
297
  }
298
298
 
299
- // ../../node_modules/tailwind-merge/dist/lib/merge-classlist.mjs
299
+ // node_modules/tailwind-merge/dist/lib/merge-classlist.mjs
300
300
  var SPLIT_CLASSES_REGEX = /\s+/;
301
301
  function mergeClassList(classList, configUtils) {
302
302
  var splitModifiers = configUtils.splitModifiers, getClassGroupId = configUtils.getClassGroupId, getConflictingClassGroupIds = configUtils.getConflictingClassGroupIds;
@@ -349,7 +349,7 @@ function mergeClassList(classList, configUtils) {
349
349
  }).join(" ");
350
350
  }
351
351
 
352
- // ../../node_modules/tailwind-merge/dist/lib/create-tailwind-merge.mjs
352
+ // node_modules/tailwind-merge/dist/lib/create-tailwind-merge.mjs
353
353
  function createTailwindMerge() {
354
354
  for (var _len = arguments.length, createConfig = new Array(_len), _key = 0; _key < _len; _key++) {
355
355
  createConfig[_key] = arguments[_key];
@@ -383,7 +383,7 @@ function createTailwindMerge() {
383
383
  };
384
384
  }
385
385
 
386
- // ../../node_modules/tailwind-merge/dist/lib/from-theme.mjs
386
+ // node_modules/tailwind-merge/dist/lib/from-theme.mjs
387
387
  function fromTheme(key) {
388
388
  var themeGetter = function themeGetter2(theme) {
389
389
  return theme[key] || [];
@@ -392,7 +392,7 @@ function fromTheme(key) {
392
392
  return themeGetter;
393
393
  }
394
394
 
395
- // ../../node_modules/tailwind-merge/dist/lib/validators.mjs
395
+ // node_modules/tailwind-merge/dist/lib/validators.mjs
396
396
  var arbitraryValueRegex = /^\[(?:([a-z-]+):)?(.+)\]$/i;
397
397
  var fractionRegex = /^\d+\/\d+$/;
398
398
  var stringLengths = /* @__PURE__ */ new Set(["px", "full", "screen"]);
@@ -464,7 +464,7 @@ function isShadow(value) {
464
464
  return shadowRegex.test(value);
465
465
  }
466
466
 
467
- // ../../node_modules/tailwind-merge/dist/lib/default-config.mjs
467
+ // node_modules/tailwind-merge/dist/lib/default-config.mjs
468
468
  function getDefaultConfig() {
469
469
  var colors = fromTheme("colors");
470
470
  var spacing = fromTheme("spacing");
@@ -2501,7 +2501,7 @@ function getDefaultConfig() {
2501
2501
  };
2502
2502
  }
2503
2503
 
2504
- // ../../node_modules/tailwind-merge/dist/lib/tw-merge.mjs
2504
+ // node_modules/tailwind-merge/dist/lib/tw-merge.mjs
2505
2505
  var twMerge = /* @__PURE__ */ createTailwindMerge(getDefaultConfig);
2506
2506
 
2507
2507
  // lib/utils.ts
@@ -2511,4 +2511,4 @@ function cn(...inputs) {
2511
2511
 
2512
2512
  export { cn };
2513
2513
  //# sourceMappingURL=out.js.map
2514
- //# sourceMappingURL=chunk-TMFAGW4V.mjs.map
2514
+ //# sourceMappingURL=chunk-AIZ7XDNV.mjs.map