@dappworks/kit 0.4.103 → 0.4.104

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/aiem.d.mts CHANGED
@@ -20,6 +20,23 @@ declare class AIem<Contracts extends Record<string, Abi>, Chains extends Record<
20
20
  [KK in keyof Addrs[K]]: GetContractReturnType<Contracts[K], PublicClient<HttpTransport, Chain, any, any>, any, any>;
21
21
  };
22
22
  };
23
+ static _defaultFuncMap: {
24
+ totalSupply: {
25
+ ttl: number;
26
+ };
27
+ symbol: {
28
+ ttl: number;
29
+ };
30
+ name: {
31
+ ttl: number;
32
+ };
33
+ decimals: {
34
+ ttl: number;
35
+ };
36
+ balanceOf: {
37
+ ttl: number;
38
+ };
39
+ };
23
40
  funcMap?: {
24
41
  [key: string]: {
25
42
  ttl?: number;
package/dist/aiem.mjs CHANGED
@@ -40,13 +40,7 @@ var _AIem = class _AIem {
40
40
  [polygon.id]: polygon,
41
41
  [iotexTestnet.id]: iotexTestnet
42
42
  };
43
- this.funcMap = {
44
- "totalSupply": { ttl: 15 * 1e3 },
45
- "symbol": { ttl: 60 * 1e3 },
46
- "name": { ttl: 60 * 1e3 },
47
- "decimals": { ttl: 60 * 1e3 },
48
- "balanceOf": { ttl: 5 * 1e3 }
49
- };
43
+ this.funcMap = {};
50
44
  this.Set(args);
51
45
  this.contracts = new Proxy({}, {
52
46
  //@ts-ignore
@@ -184,6 +178,13 @@ var _AIem = class _AIem {
184
178
  }
185
179
  };
186
180
  _AIem.cache = new Cache();
181
+ _AIem._defaultFuncMap = {
182
+ "totalSupply": { ttl: 15 * 1e3 },
183
+ "symbol": { ttl: 60 * 1e3 },
184
+ "name": { ttl: 60 * 1e3 },
185
+ "decimals": { ttl: 60 * 1e3 },
186
+ "balanceOf": { ttl: 5 * 1e3 }
187
+ };
187
188
  var AIem = _AIem;
188
189
 
189
190
  export { AIem, Cache };
package/dist/aiem.mjs.map CHANGED
@@ -1 +1 @@
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 * 1000 },\n \"symbol\": { ttl: 60 * 1000 },\n \"name\": { ttl: 60 * 1000 },\n \"decimals\": { ttl: 60 * 1000 },\n \"balanceOf\": { ttl: 5 * 1000 }\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
+ {"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 static _defaultFuncMap = {\n \"totalSupply\": { ttl: 15 * 1000 },\n \"symbol\": { ttl: 60 * 1000 },\n \"name\": { ttl: 60 * 1000 },\n \"decimals\": { ttl: 60 * 1000 },\n \"balanceOf\": { ttl: 5 * 1000 }\n }\n funcMap?: { [key: string]: { ttl?: number } } = {}\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dappworks/kit",
3
- "version": "0.4.103",
3
+ "version": "0.4.104",
4
4
  "description": "",
5
5
  "main": "./dist/index.mjs",
6
6
  "types": "./dist/index.d.mts",