Skip to content

Commit faa4c69

Browse files
committed
feat: add types and convert lit actions to typescripts
1 parent 141f0a0 commit faa4c69

37 files changed

+780
-323
lines changed

packages/wrapped-keys-lit-actions/esbuild.config.js

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -48,24 +48,30 @@ module.exports = {
4848
};
4949

5050
(async () => {
51-
await esbuild.build({
52-
entryPoints: [
53-
'./src/lib/self-executing-actions/solana/signTransactionWithEncryptedSolanaKey.js',
54-
'./src/lib/self-executing-actions/solana/signMessageWithEncryptedSolanaKey.js',
55-
'./src/lib/self-executing-actions/solana/generateEncryptedSolanaPrivateKey.js',
56-
'./src/lib/self-executing-actions/ethereum/signTransactionWithEncryptedEthereumKey.js',
57-
'./src/lib/self-executing-actions/ethereum/signMessageWithEncryptedEthereumKey.js',
58-
'./src/lib/self-executing-actions/ethereum/generateEncryptedEthereumPrivateKey.js',
59-
'./src/lib/self-executing-actions/common/exportPrivateKey.js',
60-
'./src/lib/self-executing-actions/common/batchGenerateEncryptedKeys.js',
61-
],
62-
bundle: true,
63-
minify: true,
64-
sourcemap: false,
65-
treeShaking: true,
66-
outdir: './src/generated/',
67-
inject: ['./buffer.shim.js'],
68-
plugins: [wrapIIFEInStringPlugin],
69-
platform: 'browser',
70-
});
51+
try {
52+
await esbuild.build({
53+
entryPoints: [
54+
'./src/lib/self-executing-actions/solana/signTransactionWithEncryptedSolanaKey.ts',
55+
'./src/lib/self-executing-actions/solana/signMessageWithEncryptedSolanaKey.ts',
56+
'./src/lib/self-executing-actions/solana/generateEncryptedSolanaPrivateKey.ts',
57+
'./src/lib/self-executing-actions/ethereum/signTransactionWithEncryptedEthereumKey.ts',
58+
'./src/lib/self-executing-actions/ethereum/signMessageWithEncryptedEthereumKey.ts',
59+
'./src/lib/self-executing-actions/ethereum/generateEncryptedEthereumPrivateKey.ts',
60+
'./src/lib/self-executing-actions/common/exportPrivateKey.ts',
61+
'./src/lib/self-executing-actions/common/batchGenerateEncryptedKeys.ts',
62+
],
63+
bundle: true,
64+
minify: true,
65+
sourcemap: false,
66+
treeShaking: true,
67+
outdir: './src/generated/',
68+
inject: ['./buffer.shim.js'],
69+
plugins: [wrapIIFEInStringPlugin],
70+
platform: 'browser',
71+
});
72+
console.log('✅ Lit actions built successfully');
73+
} catch (e) {
74+
console.error('❌ Error building lit actions: ', e);
75+
process.exit(1);
76+
}
7177
})();

packages/wrapped-keys-lit-actions/global.d.ts

Lines changed: 389 additions & 0 deletions
Large diffs are not rendered by default.

packages/wrapped-keys-lit-actions/src/lib/internal/common/encryptKey.js renamed to packages/wrapped-keys-lit-actions/src/lib/internal/common/encryptKey.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,11 @@ export async function encryptPrivateKey({
1010
accessControlConditions,
1111
privateKey,
1212
publicKey,
13-
}) {
13+
}: {
14+
accessControlConditions: string;
15+
privateKey: string;
16+
publicKey: string;
17+
}): Promise<{ ciphertext: string; dataToEncryptHash: string; publicKey: string; }> {
1418
const { ciphertext, dataToEncryptHash } = await Lit.Actions.encrypt({
1519
accessControlConditions,
1620
to_encrypt: new TextEncoder().encode(LIT_PREFIX + privateKey),
Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,17 @@
33
import { AbortError } from '../../abortError';
44
import { removeSaltFromDecryptedKey } from '../../utils';
55

6+
interface TryDecryptToSingleNodeParams {
7+
accessControlConditions: any;
8+
ciphertext: string;
9+
dataToEncryptHash: string;
10+
}
11+
612
async function tryDecryptToSingleNode({
713
accessControlConditions,
814
ciphertext,
915
dataToEncryptHash,
10-
}) {
16+
}: TryDecryptToSingleNodeParams): Promise<string | undefined> {
1117
try {
1218
// May be undefined, since we're using `decryptToSingleNode`
1319
return await Lit.Actions.decryptToSingleNode({
@@ -17,16 +23,22 @@ async function tryDecryptToSingleNode({
1723
chain: 'ethereum',
1824
authSig: null,
1925
});
20-
} catch (err) {
26+
} catch (err: any) {
2127
throw new Error(`When decrypting key to a single node - ${err.message}`);
2228
}
2329
}
2430

31+
interface GetDecryptedKeyToSingleNodeParams {
32+
accessControlConditions: string; // Define a more specific type if possible
33+
ciphertext: string; // Define a more specific type if possible
34+
dataToEncryptHash: string; // Define a more specific type if possible
35+
}
36+
2537
export async function getDecryptedKeyToSingleNode({
2638
accessControlConditions,
2739
ciphertext,
2840
dataToEncryptHash,
29-
}) {
41+
}: GetDecryptedKeyToSingleNodeParams): Promise<string> {
3042
const decryptedPrivateKey = await tryDecryptToSingleNode({
3143
accessControlConditions,
3244
ciphertext,

packages/wrapped-keys-lit-actions/src/lib/internal/ethereum/generatePrivateKey.js renamed to packages/wrapped-keys-lit-actions/src/lib/internal/ethereum/generatePrivateKey.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/* global ethers */
22

33
export function generateEthereumPrivateKey() {
4+
45
const wallet = ethers.Wallet.createRandom();
56

67
return {

packages/wrapped-keys-lit-actions/src/lib/internal/ethereum/signMessage.js renamed to packages/wrapped-keys-lit-actions/src/lib/internal/ethereum/signMessage.ts

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,37 @@
11
/* global ethers */
22

3-
async function signMessage({ privateKey, messageToSign }) {
3+
interface SignMessageParams {
4+
privateKey: string;
5+
messageToSign: string;
6+
}
7+
8+
interface VerifyMessageSignatureParams {
9+
messageToSign: string;
10+
signature: string;
11+
}
12+
13+
async function signMessage({ privateKey, messageToSign }: SignMessageParams): Promise<{ signature: string; walletAddress: string }> {
414
try {
515
const wallet = new ethers.Wallet(privateKey);
616
const signature = await wallet.signMessage(messageToSign);
717

818
return { signature, walletAddress: wallet.address };
9-
} catch (err) {
10-
throw new Error(`When signing message - ${err.message}`);
19+
} catch (err: unknown) {
20+
throw new Error(`When signing message - ${(err as Error).message}`);
1121
}
1222
}
1323

14-
function verifyMessageSignature({ messageToSign, signature }) {
24+
function verifyMessageSignature({ messageToSign, signature }: VerifyMessageSignatureParams): string {
1525
try {
1626
return ethers.utils.verifyMessage(messageToSign, signature);
17-
} catch (err) {
27+
} catch (err: unknown) {
1828
throw new Error(
19-
`When validating signed Ethereum message is valid: ${err.message}`
29+
`When validating signed Ethereum message is valid: ${(err as Error).message}`
2030
);
2131
}
2232
}
2333

24-
export async function signMessageEthereumKey({ privateKey, messageToSign }) {
34+
export async function signMessageEthereumKey({ privateKey, messageToSign }: SignMessageParams): Promise<string> {
2535
const { signature, walletAddress } = await signMessage({
2636
privateKey,
2737
messageToSign,

packages/wrapped-keys-lit-actions/src/lib/internal/ethereum/signTransaction.js renamed to packages/wrapped-keys-lit-actions/src/lib/internal/ethereum/signTransaction.ts

Lines changed: 36 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,16 @@
11
/* global ethers, Lit */
22

3-
export function getValidatedUnsignedTx(unsignedTransaction) {
3+
interface UnsignedTransaction {
4+
toAddress: string;
5+
chain: string;
6+
value: string;
7+
chainId: number;
8+
dataHex?: string;
9+
gasPrice?: string;
10+
gasLimit?: number;
11+
}
12+
13+
export function getValidatedUnsignedTx(unsignedTransaction: UnsignedTransaction) {
414
try {
515
if (!unsignedTransaction.toAddress) {
616
throw new Error('Missing required field: toAddress');
@@ -26,73 +36,73 @@ export function getValidatedUnsignedTx(unsignedTransaction) {
2636
chainId: unsignedTransaction.chainId,
2737
data: unsignedTransaction.dataHex,
2838
};
29-
} catch (err) {
30-
throw new Error(`Invalid unsignedTransaction - ${err.message}`);
39+
} catch (err: unknown) {
40+
throw new Error(`Invalid unsignedTransaction - ${(err as Error).message}`);
3141
}
3242
}
3343

34-
async function getLatestNonce({ walletAddress, chain }) {
44+
async function getLatestNonce({ walletAddress, chain }: { walletAddress: string; chain: string }) {
3545
try {
3646
const nonce = await Lit.Actions.getLatestNonce({
3747
address: walletAddress,
3848
chain: chain,
3949
});
4050

4151
return nonce;
42-
} catch (err) {
43-
throw new Error(`Unable to get latest nonce - ${err.message}`);
52+
} catch (err: unknown) {
53+
throw new Error(`Unable to get latest nonce - ${(err as Error).message}`);
4454
}
4555
}
4656

47-
async function getEthersRPCProvider({ chain }) {
57+
async function getEthersRPCProvider({ chain }: { chain: string }) {
4858
try {
4959
const rpcUrl = await Lit.Actions.getRpcUrl({
5060
chain,
5161
});
5262

5363
return new ethers.providers.JsonRpcProvider(rpcUrl);
54-
} catch (err) {
55-
throw new Error(`Getting the rpc for the chain: ${chain} - ${err.message}`);
64+
} catch (err: unknown) {
65+
throw new Error(`Getting the rpc for the chain: ${chain} - ${(err as Error).message}`);
5666
}
5767
}
5868

59-
async function getGasPrice({ userProvidedGasPrice, provider }) {
69+
async function getGasPrice({ userProvidedGasPrice, provider }: { userProvidedGasPrice?: string; provider: any }) {
6070
try {
6171
if (userProvidedGasPrice) {
6272
return ethers.utils.parseUnits(userProvidedGasPrice, 'gwei');
6373
} else {
6474
return await provider.getGasPrice();
6575
}
66-
} catch (err) {
67-
throw new Error(`When getting gas price - ${err.message}`);
76+
} catch (err: unknown) {
77+
throw new Error(`When getting gas price - ${(err as Error).message}`);
6878
}
6979
}
7080

71-
async function getGasLimit({ provider, userProvidedGasLimit, validatedTx }) {
81+
async function getGasLimit({ provider, userProvidedGasLimit, validatedTx }: { provider: any; userProvidedGasLimit?: number; validatedTx: any }) {
7282
if (userProvidedGasLimit) {
7383
return userProvidedGasLimit;
7484
} else {
7585
try {
7686
return await provider.estimateGas(validatedTx);
77-
} catch (err) {
78-
throw new Error(`When estimating gas - ${err.message}`);
87+
} catch (err: unknown) {
88+
throw new Error(`When estimating gas - ${(err as Error).message}`);
7989
}
8090
}
8191
}
8292

83-
async function signTransaction({ validatedTx, wallet }) {
93+
async function signTransaction({ validatedTx, wallet }: { validatedTx: any; wallet: any }) {
8494
try {
8595
return await wallet.signTransaction(validatedTx);
86-
} catch (err) {
87-
throw new Error(`When signing transaction - ${err.message}`);
96+
} catch (err: unknown) {
97+
throw new Error(`When signing transaction - ${(err as Error).message}`);
8898
}
8999
}
90100

91-
async function broadcastTransaction({ provider, signedTx }) {
101+
async function broadcastTransaction({ provider, signedTx }: { provider: any; signedTx: string }) {
92102
try {
93103
return await provider.sendTransaction(signedTx);
94-
} catch (err) {
95-
throw new Error(`When sending transaction - ${err.message}`);
104+
} catch (err: unknown) {
105+
throw new Error(`When sending transaction - ${(err as Error).message}`);
96106
}
97107
}
98108

@@ -101,6 +111,11 @@ export async function signTransactionEthereumKey({
101111
privateKey,
102112
validatedTx,
103113
unsignedTransaction,
114+
}: {
115+
broadcast: boolean;
116+
privateKey: string;
117+
validatedTx: any;
118+
unsignedTransaction: UnsignedTransaction;
104119
}) {
105120
const wallet = new ethers.Wallet(privateKey);
106121

0 commit comments

Comments
 (0)