@dappworks/kit 0.4.92 → 0.4.94
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 +4 -3
- package/dist/aiem.mjs +11 -7
- package/dist/aiem.mjs.map +1 -1
- package/package.json +3 -2
package/dist/aiem.d.mts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Abi, Chain, GetContractReturnType, PublicClient, HttpTransport, WalletClient } from 'viem';
|
|
2
|
+
import QuickLRU from 'quick-lru';
|
|
2
3
|
|
|
3
4
|
declare class Cache {
|
|
4
|
-
kv:
|
|
5
|
+
kv: QuickLRU<string, any>;
|
|
5
6
|
wrap<T>(key: string, fn: () => T | Promise<T>): T | Promise<T>;
|
|
6
7
|
}
|
|
7
8
|
declare class AIem<Contracts extends Record<string, Abi>, Chains extends Record<string, Chain>, Addrs extends {
|
|
@@ -9,7 +10,7 @@ declare class AIem<Contracts extends Record<string, Abi>, Chains extends Record<
|
|
|
9
10
|
[key: string]: `${string}-0x${string}`;
|
|
10
11
|
};
|
|
11
12
|
}> {
|
|
12
|
-
|
|
13
|
+
cache?: Cache;
|
|
13
14
|
contractMap: Contracts;
|
|
14
15
|
chainMap: Chains;
|
|
15
16
|
nameMap: Addrs;
|
|
@@ -19,7 +20,7 @@ declare class AIem<Contracts extends Record<string, Abi>, Chains extends Record<
|
|
|
19
20
|
};
|
|
20
21
|
};
|
|
21
22
|
getWallet?: () => WalletClient;
|
|
22
|
-
constructor(args: Pick<AIem<Contracts, Chains, Addrs>, "contractMap" | "chainMap" | "nameMap" | "getWallet">);
|
|
23
|
+
constructor(args: Pick<AIem<Contracts, Chains, Addrs>, "contractMap" | "chainMap" | "nameMap" | "getWallet" | "cache">);
|
|
23
24
|
PubClient<C extends keyof Chains>(chainId: C): PublicClient<HttpTransport, Chain, any, any>;
|
|
24
25
|
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>>;
|
|
25
26
|
}
|
package/dist/aiem.mjs
CHANGED
|
@@ -1,22 +1,25 @@
|
|
|
1
1
|
import './chunk-R4SQKVDQ.mjs';
|
|
2
2
|
import { createPublicClient, http, getContract } from 'viem';
|
|
3
|
+
import QuickLRU from 'quick-lru';
|
|
3
4
|
|
|
4
5
|
var Cache = class {
|
|
5
6
|
constructor() {
|
|
6
|
-
this.kv = {};
|
|
7
|
+
this.kv = new QuickLRU({ maxSize: 1e4 });
|
|
7
8
|
}
|
|
8
9
|
wrap(key, fn) {
|
|
9
|
-
if (this.kv
|
|
10
|
-
return this.kv
|
|
10
|
+
if (this.kv.has(key)) {
|
|
11
|
+
return this.kv.get(key);
|
|
11
12
|
}
|
|
12
13
|
const result = fn();
|
|
13
14
|
if (result instanceof Promise) {
|
|
14
|
-
|
|
15
|
-
this.kv
|
|
15
|
+
const promiseResult = result.then((res) => {
|
|
16
|
+
this.kv.set(key, res);
|
|
16
17
|
return res;
|
|
17
18
|
});
|
|
19
|
+
this.kv.set(key, promiseResult);
|
|
20
|
+
return promiseResult;
|
|
18
21
|
} else {
|
|
19
|
-
this.kv
|
|
22
|
+
this.kv.set(key, result);
|
|
20
23
|
return result;
|
|
21
24
|
}
|
|
22
25
|
}
|
|
@@ -74,7 +77,8 @@ var AIem = class {
|
|
|
74
77
|
//@ts-ignore
|
|
75
78
|
Get(contractName, chainId, address) {
|
|
76
79
|
const wallet = this.getWallet ? this.getWallet() : null;
|
|
77
|
-
|
|
80
|
+
const cacheKey = `contract: ${contractName}-${chainId}-${address}-${wallet ? wallet.account.address : wallet}`;
|
|
81
|
+
return this.cache.wrap(cacheKey, () => {
|
|
78
82
|
const contract = this.contractMap[contractName];
|
|
79
83
|
const pubClient = this.PubClient(chainId);
|
|
80
84
|
return getContract({
|
package/dist/aiem.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../aiem.ts"],"names":[],"mappings":";;;AAAA,SAAiD,oBAAoB,aAAa,YAAiE;
|
|
1
|
+
{"version":3,"sources":["../aiem.ts"],"names":[],"mappings":";;;AAAA,SAAiD,oBAAoB,aAAa,YAAiE;AACnJ,OAAO,cAAc;AAGd,IAAM,QAAN,MAAY;AAAA,EAAZ;AACL,cAAK,IAAI,SAAsB,EAAE,SAAS,IAAM,CAAC;AAAA;AAAA,EAEjD,KAAQ,KAAa,IAA0C;AAC7D,QAAI,KAAK,GAAG,IAAI,GAAG,GAAG;AACpB,aAAO,KAAK,GAAG,IAAI,GAAG;AAAA,IACxB;AAEA,UAAM,SAAS,GAAG;AAClB,QAAI,kBAAkB,SAAS;AAC7B,YAAM,gBAAgB,OAAO,KAAK,SAAO;AACvC,aAAK,GAAG,IAAI,KAAK,GAAG;AACpB,eAAO;AAAA,MACT,CAAC;AACD,WAAK,GAAG,IAAI,KAAK,aAAa;AAC9B,aAAO;AAAA,IACT,OAAO;AACL,WAAK,GAAG,IAAI,KAAK,MAAM;AACvB,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEO,IAAM,OAAN,MAA+K;AAAA,EAcpL,YAAY,MAA4G;AAbxH,iBAAgB,IAAI,MAAM;AAcxB,WAAO,OAAO,MAAM,IAAI;AAExB,SAAK,YAAY,IAAI,MAAM,CAAC,GAAG;AAAA;AAAA,MAE7B,KAAK,CAAC,QAAa,iBAAgD;AACjE,YAAI,OAAO,YAAY;AAAG,iBAAO,OAAO,YAAY;AAEpD,YAAI,CAAC,KAAK,QAAQ,YAAY,GAAG;AAC/B,gBAAM,IAAI,MAAM,YAAY,OAAO,YAAY,CAAC,YAAY;AAAA,QAC9D;AAEA,eAAO,YAAY,IAAI,IAAI,MAAM,CAAC,GAAG;AAAA;AAAA,UAEnC,KAAK,CAAC,aAAkB,kBAA4C;AAvD9E;AAwDY,kBAAM,cAAa,UAAK,QAAQ,YAAY,MAAzB,mBAA6B;AAChD,gBAAI,CAAC,YAAY;AACf,oBAAM,IAAI,MAAM,SAAS,OAAO,aAAa,CAAC,iBAAiB,OAAO,YAAY,CAAC,YAAY;AAAA,YACjG;AACA,kBAAM,CAAC,SAAS,OAAO,IAAI,WAAW,MAAM,GAAG;AAI/C,mBAAO,KAAK,IAAI,cAAc,OAAO,OAAO,GAAG,OAAwB;AAAA,UACzE;AAAA,QACF,CAAC;AACD,eAAO,OAAO,YAAY;AAAA,MAC5B;AAAA,IACF,CAAC;AAAA,EAEH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,UAAkC,SAA0D;AAE1F,WAAO,KAAK,MAAM,KAAK,gBAAgB,OAAO,OAAO,CAAC,IAAI,MAAM;AAE9D,aAAO,mBAAmB;AAAA;AAAA,QAExB,OAAO,KAAK,SAAS,OAAO;AAAA,QAC5B,WAAW,KAAK;AAAA,MAClB,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA;AAAA,EAIA,IAAmF,cAAiB,SAAY,SAAkG;AAChN,UAAM,SAAS,KAAK,YAAY,KAAK,UAAU,IAAI;AAEnD,UAAM,WAAW,aAAa,YAAY,IAAI,OAAO,IAAI,OAAO,IAAI,SAAS,OAAO,QAAQ,UAAU,MAAM;AAC5G,WAAO,KAAK,MAAM,KAAK,UAAU,MAAM;AAErC,YAAM,WAAW,KAAK,YAAY,YAAY;AAE9C,YAAM,YAAY,KAAK,UAAU,OAAO;AAExC,aAAO,YAAY;AAAA,QACjB,QAAQ;AAAA;AAAA,UAEN,QAAQ;AAAA;AAAA,UAER;AAAA,QACF;AAAA,QACA;AAAA,QACA,KAAK;AAAA,MACP,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF","sourcesContent":["import { type Chain, type GetContractReturnType, createPublicClient, getContract, http, type Abi, PublicClient, HttpTransport, WalletClient } from 'viem'\nimport QuickLRU from 'quick-lru';\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 cache?: Cache = new Cache()\n contractMap: Contracts\n chainMap: Chains\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 getWallet?: () => WalletClient\n\n constructor(args: Pick<AIem<Contracts, Chains, Addrs>, \"contractMap\" | \"chainMap\" | \"nameMap\" | \"getWallet\" | \"cache\">) {\n Object.assign(this, 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 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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dappworks/kit",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.94",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "./dist/index.mjs",
|
|
6
6
|
"types": "./dist/index.d.mts",
|
|
@@ -136,6 +136,7 @@
|
|
|
136
136
|
"registry": "https://registry.npmjs.org/"
|
|
137
137
|
},
|
|
138
138
|
"dependencies": {
|
|
139
|
-
"@internationalized/date": "^3.5.4"
|
|
139
|
+
"@internationalized/date": "^3.5.4",
|
|
140
|
+
"quick-lru": "^7.0.0"
|
|
140
141
|
}
|
|
141
142
|
}
|