@cityofzion/bs-neox 3.1.17 → 3.1.18

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/BSNeoX.js CHANGED
@@ -36,7 +36,7 @@ class BSNeoX extends bs_ethereum_1.BSEthereum {
36
36
  throw new Error('Invalid chainId');
37
37
  }
38
38
  transactionParams.chainId = chainId;
39
- const nonce = await signer.getTransactionCount('pending');
39
+ const nonce = await signer.getNonce('pending');
40
40
  if (isNaN(nonce)) {
41
41
  throw new Error('Invalid nonce');
42
42
  }
@@ -104,10 +104,12 @@ class BSNeoX extends bs_ethereum_1.BSEthereum {
104
104
  }
105
105
  newParams.maxPriorityFeePerGas = gasPriceBn.toString();
106
106
  newParams.maxFeePerGas = gasPriceBn.toString();
107
- const [secondTransactionResponse, secondTransactionError] = await blockchain_service_1.BSUtilsHelper.tryCatch(() => signer.sendTransaction(newParams));
108
- const transactionHash = secondTransactionResponse?.hash || secondTransactionError?.returnedHash;
109
- if (!transactionHash)
110
- throw secondTransactionError || new Error('Transaction error');
107
+ const provider = new ethers_1.JsonRpcProvider(this.network.url);
108
+ const signedTransaction = await signer.signTransaction(newParams);
109
+ const transactionHash = await provider.send('eth_sendRawTransaction', [signedTransaction]);
110
+ if (!transactionHash) {
111
+ throw new blockchain_service_1.BSError('Transaction error', 'TRANSACTION_ERROR');
112
+ }
111
113
  const fee = gasPriceBn.multipliedBy(newParams.gasLimit).toHuman().toFormatted();
112
114
  return { transactionHash, fee };
113
115
  }
@@ -130,7 +132,7 @@ class BSNeoX extends bs_ethereum_1.BSEthereum {
130
132
  this.fullTransactionsDataService = new BlockscoutFullTransactionsDataService_1.BlockscoutFullTransactionsDataService(this);
131
133
  }
132
134
  async transfer({ senderAccount, intents, }) {
133
- const signer = await this._generateSigner(senderAccount);
135
+ const signer = await this._getSigner(senderAccount);
134
136
  const { address } = senderAccount;
135
137
  const addressUrl = this.explorerService.buildAddressUrl(address);
136
138
  const transactions = [];
@@ -150,7 +150,7 @@ class BlockscoutBDSNeoX extends bs_ethereum_1.RpcBDSEthereum {
150
150
  const rawInput = item.raw_input;
151
151
  if (rawInput) {
152
152
  try {
153
- const ERC20Interface = new ethers_1.ethers.utils.Interface(bs_ethereum_1.ERC20_ABI);
153
+ const ERC20Interface = new ethers_1.Interface(bs_ethereum_1.ERC20_ABI);
154
154
  const result = ERC20Interface.decodeFunctionData('transfer', rawInput);
155
155
  if (!result)
156
156
  throw new Error('Invalid ERC20 transfer');
@@ -43,7 +43,7 @@ class Neo3NeoXBridgeService {
43
43
  }
44
44
  async getBridgeConstants(token) {
45
45
  try {
46
- const provider = new ethers_1.ethers.providers.JsonRpcProvider(__classPrivateFieldGet(this, _Neo3NeoXBridgeService_service, "f").network.url);
46
+ const provider = new ethers_1.JsonRpcProvider(__classPrivateFieldGet(this, _Neo3NeoXBridgeService_service, "f").network.url);
47
47
  const bridgeContract = new ethers_1.ethers.Contract(_a.BRIDGE_SCRIPT_HASH, bridge_1.BRIDGE_ABI, provider);
48
48
  const isNativeToken = __classPrivateFieldGet(this, _Neo3NeoXBridgeService_service, "f").tokenService.predicateByHash(token, BSNeoXConstants_1.BSNeoXConstants.NATIVE_ASSET);
49
49
  const response = isNativeToken
@@ -82,15 +82,15 @@ class Neo3NeoXBridgeService {
82
82
  if (isNaN(chainId)) {
83
83
  throw new Error('Invalid chainId');
84
84
  }
85
- const signer = await __classPrivateFieldGet(this, _Neo3NeoXBridgeService_service, "f")._generateSigner(params.account);
86
- const nonce = await signer.getTransactionCount('pending');
85
+ const signer = await __classPrivateFieldGet(this, _Neo3NeoXBridgeService_service, "f")._getSigner(params.account);
86
+ const nonce = await signer.getNonce('pending');
87
87
  if (isNaN(nonce)) {
88
88
  throw new Error('Invalid nonce');
89
89
  }
90
90
  const approvedEstimated = await signer.estimateGas({ ...populatedApproveTransaction, chainId, nonce, type: 2 });
91
- const provider = new ethers_1.ethers.providers.JsonRpcProvider(__classPrivateFieldGet(this, _Neo3NeoXBridgeService_service, "f").network.url);
92
- const gasPrice = await provider.getGasPrice();
93
- return new blockchain_service_1.BSBigUnitAmount(gasPrice.toString(), bs_ethereum_1.BSEthereumConstants.DEFAULT_DECIMALS)
91
+ const provider = new ethers_1.JsonRpcProvider(__classPrivateFieldGet(this, _Neo3NeoXBridgeService_service, "f").network.url);
92
+ const { gasPrice } = await provider.getFeeData();
93
+ return new blockchain_service_1.BSBigUnitAmount(gasPrice?.toString() || '0', bs_ethereum_1.BSEthereumConstants.DEFAULT_DECIMALS)
94
94
  .multipliedBy(approvedEstimated.toString())
95
95
  .toHuman()
96
96
  .toFormatted();
@@ -106,17 +106,18 @@ class Neo3NeoXBridgeService {
106
106
  if (__classPrivateFieldGet(this, _Neo3NeoXBridgeService_service, "f").network.type !== 'mainnet') {
107
107
  throw new blockchain_service_1.BSError('Bridging to Neo3 is only supported on mainnet', 'UNSUPPORTED_NETWORK');
108
108
  }
109
- const signer = await __classPrivateFieldGet(this, _Neo3NeoXBridgeService_service, "f")._generateSigner(params.account);
109
+ const signer = await __classPrivateFieldGet(this, _Neo3NeoXBridgeService_service, "f")._getSigner(params.account);
110
110
  const bridgeContract = new ethers_1.ethers.Contract(_a.BRIDGE_SCRIPT_HASH, bridge_1.BRIDGE_ABI);
111
111
  const { wallet } = bs_neo3_1.BSNeo3NeonJsSingletonHelper.getInstance();
112
112
  const to = `0x${wallet.getScriptHashFromAddress(params.receiverAddress)}`;
113
113
  const bridgeFee = new blockchain_service_1.BSBigHumanAmount(params.bridgeFee, BSNeoXConstants_1.BSNeoXConstants.NATIVE_ASSET.decimals).toUnit().toFixed();
114
114
  const isNativeToken = __classPrivateFieldGet(this, _Neo3NeoXBridgeService_service, "f").tokenService.predicateByHash(params.token, BSNeoXConstants_1.BSNeoXConstants.NATIVE_ASSET);
115
- const gasPrice = await signer.getGasPrice();
116
- const gasPriceBn = new blockchain_service_1.BSBigUnitAmount(gasPrice.toString(), bs_ethereum_1.BSEthereumConstants.DEFAULT_DECIMALS);
115
+ const provider = new ethers_1.JsonRpcProvider(__classPrivateFieldGet(this, _Neo3NeoXBridgeService_service, "f").network.url);
116
+ const { gasPrice } = await provider.getFeeData();
117
+ const gasPriceBn = new blockchain_service_1.BSBigUnitAmount(gasPrice?.toString() || '0', bs_ethereum_1.BSEthereumConstants.DEFAULT_DECIMALS);
117
118
  const transactionParams = { type: 2 };
118
119
  if (isNativeToken) {
119
- const populatedTransactionParams = await bridgeContract.populateTransaction.withdrawNative(to, bridgeFee);
120
+ const populatedTransactionParams = await bridgeContract.withdrawNative.populateTransaction(to, bridgeFee);
120
121
  const value = new blockchain_service_1.BSBigHumanAmount(params.amount, params.token.decimals).toUnit().plus(bridgeFee).toFixed();
121
122
  Object.assign(transactionParams, populatedTransactionParams, { value });
122
123
  }
@@ -128,12 +129,12 @@ class Neo3NeoXBridgeService {
128
129
  gasPriceBn,
129
130
  transactionParams: approveTransactionParam,
130
131
  });
131
- const provider = new ethers_1.ethers.providers.JsonRpcProvider(__classPrivateFieldGet(this, _Neo3NeoXBridgeService_service, "f").network.url);
132
+ const provider = new ethers_1.JsonRpcProvider(__classPrivateFieldGet(this, _Neo3NeoXBridgeService_service, "f").network.url);
132
133
  await provider.waitForTransaction(transactionHash);
133
134
  }
134
135
  const fixedAmount = new blockchain_service_1.BSBigHumanAmount(params.amount, 0).toFormatted();
135
136
  const amount = new blockchain_service_1.BSBigHumanAmount(fixedAmount, params.token.decimals).toUnit().toFixed();
136
- const populatedTransactionParams = await bridgeContract.populateTransaction.withdrawToken(params.token.hash, to, amount);
137
+ const populatedTransactionParams = await bridgeContract.withdrawToken.populateTransaction(params.token.hash, to, amount);
137
138
  Object.assign(transactionParams, populatedTransactionParams, { value: bridgeFee });
138
139
  }
139
140
  const { transactionHash } = await __classPrivateFieldGet(this, _Neo3NeoXBridgeService_service, "f")._sendTransaction({ signer, gasPriceBn, transactionParams });
@@ -147,11 +148,12 @@ class Neo3NeoXBridgeService {
147
148
  if (!transactionLogsResponse)
148
149
  throw new blockchain_service_1.BSError('Failed to get nonce from transaction log', 'FAILED_TO_GET_NONCE', transactionLogsResponseError);
149
150
  const [nonce, nonceError] = await blockchain_service_1.BSUtilsHelper.tryCatch(async () => {
150
- const BridgeInterface = new ethers_1.ethers.utils.Interface(bridge_1.BRIDGE_ABI);
151
+ const BridgeInterface = new ethers_1.Interface(bridge_1.BRIDGE_ABI);
151
152
  for (const log of transactionLogsResponse.data.items) {
152
153
  const [parsedNonce] = await blockchain_service_1.BSUtilsHelper.tryCatch(() => {
153
154
  const parsedLog = BridgeInterface.parseLog({ data: log.data, topics: log.topics.filter(Boolean) });
154
- return parsedLog.args.nonce ? parsedLog.args.nonce.toString() : undefined;
155
+ const nonce = parsedLog?.args?.nonce;
156
+ return nonce !== undefined && nonce !== null ? nonce.toString() : undefined;
155
157
  });
156
158
  if (parsedNonce)
157
159
  return parsedNonce;
@@ -192,7 +194,7 @@ class Neo3NeoXBridgeService {
192
194
  }
193
195
  exports.Neo3NeoXBridgeService = Neo3NeoXBridgeService;
194
196
  _a = Neo3NeoXBridgeService, _Neo3NeoXBridgeService_service = new WeakMap(), _Neo3NeoXBridgeService_instances = new WeakSet(), _Neo3NeoXBridgeService_buildApproveTransactionParam = async function _Neo3NeoXBridgeService_buildApproveTransactionParam(params) {
195
- const provider = new ethers_1.ethers.providers.JsonRpcProvider(__classPrivateFieldGet(this, _Neo3NeoXBridgeService_service, "f").network.url);
197
+ const provider = new ethers_1.JsonRpcProvider(__classPrivateFieldGet(this, _Neo3NeoXBridgeService_service, "f").network.url);
196
198
  const erc20Contract = new ethers_1.ethers.Contract(params.token.hash, bs_ethereum_1.ERC20_ABI, provider);
197
199
  const allowance = await erc20Contract.allowance(params.account.address, _a.BRIDGE_SCRIPT_HASH);
198
200
  const allowanceNumber = new blockchain_service_1.BSBigUnitAmount(allowance.toString(), this.neoToken.decimals);
@@ -202,7 +204,7 @@ _a = Neo3NeoXBridgeService, _Neo3NeoXBridgeService_service = new WeakMap(), _Neo
202
204
  if (allowanceNumber.isGreaterThanOrEqualTo(amount)) {
203
205
  return null;
204
206
  }
205
- return await erc20Contract.populateTransaction.approve(_a.BRIDGE_SCRIPT_HASH, amount);
207
+ return await erc20Contract.approve.populateTransaction(_a.BRIDGE_SCRIPT_HASH, amount);
206
208
  };
207
209
  Neo3NeoXBridgeService.BRIDGE_SCRIPT_HASH = '0x1212000000000000000000000000000000000004';
208
210
  Neo3NeoXBridgeService.BRIDGE_BASE_CONFIRMATION_URL = 'https://xexplorer.neo.org:8877/api/v1/transactions/deposits';
@@ -12,7 +12,7 @@ class GhostMarketNDSNeoX extends blockchain_service_1.GhostMarketNDS {
12
12
  try {
13
13
  if (!collectionHash)
14
14
  return false;
15
- const provider = new ethers_1.ethers.providers.JsonRpcProvider(this._service.network.url);
15
+ const provider = new ethers_1.JsonRpcProvider(this._service.network.url);
16
16
  const contract = new ethers_1.ethers.Contract(collectionHash, bs_ethereum_1.ERC20_ABI, provider);
17
17
  const response = await contract.balanceOf(address);
18
18
  if (!response)
@@ -2,9 +2,11 @@ import { type TWalletConnectEthereumHandlers, WalletConnectServiceEthereum } fro
2
2
  import type { IBSNeoX, TBSNeoXName, TBSNeoXNetworkId, TWalletConnectServiceNeoxMethod } from '../../types';
3
3
  import z from 'zod';
4
4
  declare const getCachedTransactionParamsSchema: z.ZodTuple<[z.ZodString, z.ZodString], null>;
5
+ declare const getNonceParamsSchema: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
5
6
  type TWalletConnectNeoXHandlers = TWalletConnectEthereumHandlers & {
6
7
  eth_getTransactionCount: unknown;
7
8
  eth_getCachedTransaction: z.infer<typeof getCachedTransactionParamsSchema>;
9
+ eth_getNonce: z.infer<typeof getNonceParamsSchema>;
8
10
  };
9
11
  export declare class WalletConnectServiceNeoX extends WalletConnectServiceEthereum<TBSNeoXName, TBSNeoXNetworkId, TWalletConnectServiceNeoxMethod, TWalletConnectNeoXHandlers> {
10
12
  #private;
@@ -7,7 +7,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
7
7
  var __importDefault = (this && this.__importDefault) || function (mod) {
8
8
  return (mod && mod.__esModule) ? mod : { "default": mod };
9
9
  };
10
- var _WalletConnectServiceNeoX_getTransactionCountHandler, _WalletConnectServiceNeoX_getCachedTransactionHandler, _WalletConnectServiceNeoX_sendTransactionHandler;
10
+ var _WalletConnectServiceNeoX_getTransactionCountHandler, _WalletConnectServiceNeoX_getCachedTransactionHandler, _WalletConnectServiceNeoX_getNonce, _WalletConnectServiceNeoX_sendTransactionHandler;
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.WalletConnectServiceNeoX = void 0;
13
13
  const blockchain_service_1 = require("@cityofzion/blockchain-service");
@@ -17,24 +17,25 @@ const viem_1 = require("viem");
17
17
  const axios_1 = __importDefault(require("axios"));
18
18
  const zod_1 = __importDefault(require("zod"));
19
19
  const getCachedTransactionParamsSchema = zod_1.default.tuple([zod_1.default.string(), zod_1.default.string()]);
20
+ const getNonceParamsSchema = zod_1.default.union([zod_1.default.string(), zod_1.default.number()]).optional();
20
21
  class WalletConnectServiceNeoX extends bs_ethereum_1.WalletConnectServiceEthereum {
21
22
  constructor(service) {
22
23
  super(service);
23
24
  _WalletConnectServiceNeoX_getTransactionCountHandler.set(this, {
24
25
  validate: async () => { },
25
26
  process: async (args) => {
26
- const wallet = await this._service._generateSigner(args.account);
27
- const provider = new ethers_1.ethers.providers.JsonRpcProvider(this._service.network.url);
27
+ const wallet = await this._service._getSigner(args.account);
28
+ const provider = new ethers_1.JsonRpcProvider(this._service.network.url);
28
29
  const connectedWallet = wallet.connect(provider);
29
- return await connectedWallet.getTransactionCount('pending');
30
+ return await connectedWallet.getNonce('pending');
30
31
  },
31
32
  });
32
33
  _WalletConnectServiceNeoX_getCachedTransactionHandler.set(this, {
33
34
  validate: async (params) => await getCachedTransactionParamsSchema.parseAsync(params),
34
35
  process: async (args) => {
35
36
  const url = this._service.network.url;
36
- const wallet = await this._service._generateSigner(args.account);
37
- const provider = new ethers_1.ethers.providers.JsonRpcProvider(url);
37
+ const wallet = await this._service._getSigner(args.account);
38
+ const provider = new ethers_1.JsonRpcProvider(url);
38
39
  const connectedWallet = wallet.connect(provider);
39
40
  const nonce = args.params[0];
40
41
  const signature = await connectedWallet.signMessage(nonce.toString());
@@ -49,27 +50,37 @@ class WalletConnectServiceNeoX extends bs_ethereum_1.WalletConnectServiceEthereu
49
50
  return cachedTransactionResponse.data.result;
50
51
  },
51
52
  });
53
+ _WalletConnectServiceNeoX_getNonce.set(this, {
54
+ validate: async (params) => await getNonceParamsSchema.parseAsync(params),
55
+ process: async (args) => {
56
+ const wallet = await this._service._getSigner(args.account);
57
+ return await wallet.getNonce(args.params || 'pending');
58
+ },
59
+ });
52
60
  _WalletConnectServiceNeoX_sendTransactionHandler.set(this, {
53
61
  validate: async (params) => await this._sendTransactionHandler.validate(params),
54
62
  process: async (args) => {
55
63
  const { transaction, connectedWallet } = await this._resolveTransactionParams(args);
56
- const [response, error] = await blockchain_service_1.BSUtilsHelper.tryCatch(() => connectedWallet.sendTransaction(transaction));
57
- const transactionHash = response?.hash || error?.returnedHash;
64
+ const provider = new ethers_1.JsonRpcProvider(this._service.network.url);
65
+ const populatedTransaction = await connectedWallet.populateTransaction(transaction);
66
+ const signedTransaction = await connectedWallet.signTransaction(populatedTransaction);
67
+ const transactionHash = await provider.send('eth_sendRawTransaction', [signedTransaction]);
58
68
  if (!transactionHash) {
59
- throw error || new blockchain_service_1.BSError('Transaction error', 'TRANSACTION_ERROR');
69
+ throw new blockchain_service_1.BSError('Transaction error', 'TRANSACTION_ERROR');
60
70
  }
61
71
  return transactionHash;
62
72
  },
63
73
  });
64
- this.supportedMethods.push('eth_getTransactionCount', 'eth_getCachedTransaction');
65
- this.autoApproveMethods.push('eth_getTransactionCount', 'eth_getCachedTransaction');
74
+ this.supportedMethods.push('eth_getTransactionCount', 'eth_getCachedTransaction', 'eth_getNonce');
75
+ this.autoApproveMethods.push('eth_getTransactionCount', 'eth_getCachedTransaction', 'eth_getNonce');
66
76
  this.handlers = {
67
77
  ...this.handlers,
68
78
  eth_getTransactionCount: __classPrivateFieldGet(this, _WalletConnectServiceNeoX_getTransactionCountHandler, "f"),
69
79
  eth_getCachedTransaction: __classPrivateFieldGet(this, _WalletConnectServiceNeoX_getCachedTransactionHandler, "f"),
80
+ eth_getNonce: __classPrivateFieldGet(this, _WalletConnectServiceNeoX_getNonce, "f"),
70
81
  eth_sendTransaction: __classPrivateFieldGet(this, _WalletConnectServiceNeoX_sendTransactionHandler, "f"),
71
82
  };
72
83
  }
73
84
  }
74
85
  exports.WalletConnectServiceNeoX = WalletConnectServiceNeoX;
75
- _WalletConnectServiceNeoX_getTransactionCountHandler = new WeakMap(), _WalletConnectServiceNeoX_getCachedTransactionHandler = new WeakMap(), _WalletConnectServiceNeoX_sendTransactionHandler = new WeakMap();
86
+ _WalletConnectServiceNeoX_getTransactionCountHandler = new WeakMap(), _WalletConnectServiceNeoX_getCachedTransactionHandler = new WeakMap(), _WalletConnectServiceNeoX_getNonce = new WeakMap(), _WalletConnectServiceNeoX_sendTransactionHandler = new WeakMap();
package/dist/types.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { BSBigUnitAmount, IBSWithNeo3NeoXBridge, TBSNetworkId } from '@cityofzion/blockchain-service';
2
2
  import { ERC20_ABI, IBSEthereum, type TWalletConnectServiceEthereumMethod } from '@cityofzion/bs-ethereum';
3
- import { ethers, Signer } from 'ethers';
3
+ import { Signer, type TransactionRequest } from 'ethers';
4
4
  import type { Neo3NeoXBridgeService } from './services/neo3-neox-bridge/Neo3NeoXBridgeService';
5
5
  export type TBSNeoXNetworkId = TBSNetworkId<'47763' | '12227332'>;
6
6
  export type TBSNeoXName = 'neox';
@@ -94,10 +94,10 @@ export type TNeo3NeoXBridgeServiceGetTransactionByNonceApiReponse = {
94
94
  export type TSendTransactionParams = {
95
95
  signer: Signer;
96
96
  gasPriceBn: BSBigUnitAmount;
97
- transactionParams: ethers.utils.Deferrable<ethers.providers.TransactionRequest>;
97
+ transactionParams: TransactionRequest;
98
98
  };
99
99
  export type TSendTransactionResponse = {
100
100
  transactionHash: string;
101
101
  fee: string;
102
102
  };
103
- export type TWalletConnectServiceNeoxMethod = TWalletConnectServiceEthereumMethod | 'eth_getTransactionCount' | 'eth_getCachedTransaction';
103
+ export type TWalletConnectServiceNeoxMethod = TWalletConnectServiceEthereumMethod | 'eth_getTransactionCount' | 'eth_getCachedTransaction' | 'eth_getNonce';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cityofzion/bs-neox",
3
- "version": "3.1.17",
3
+ "version": "3.1.18",
4
4
  "repository": "https://github.com/CityOfZion/blockchain-services",
5
5
  "license": "GPL-3.0-only",
6
6
  "author": "Coz",
@@ -11,23 +11,24 @@
11
11
  ],
12
12
  "dependencies": {
13
13
  "@cityofzion/dora-ts": "0.6.2",
14
- "axios": "~1.15.0",
15
- "ethers": "~5.7.2",
14
+ "axios": "1.16.0",
15
+ "ethers": "6.16.0",
16
16
  "neox-tpke": "~1.0.5",
17
- "viem": "~2.38.5",
18
- "zod": "~4.3.6",
19
- "@cityofzion/blockchain-service": "3.1.17",
20
- "@cityofzion/bs-neo3": "3.1.17",
21
- "@cityofzion/bs-ethereum": "3.1.17"
17
+ "viem": "~2.48.8",
18
+ "zod": "~4.4.3",
19
+ "@cityofzion/bs-neo3": "3.1.18",
20
+ "@cityofzion/bs-ethereum": "3.1.18",
21
+ "@cityofzion/blockchain-service": "3.1.18"
22
22
  },
23
23
  "devDependencies": {
24
- "@ledgerhq/hw-transport": "~6.32.0",
25
- "@ledgerhq/hw-transport-node-hid": "~6.30.0",
24
+ "@ledgerhq/hw-transport": "6.35.1",
25
+ "@ledgerhq/hw-transport-node-hid": "~6.33.1",
26
+ "@types/node": "~25.6.0",
26
27
  "date-fns": "~4.1.0",
27
- "dotenv": "~17.3.1",
28
- "eslint": "~9.37.0",
29
- "typescript": "~5.9.2",
30
- "vitest": "~4.0.18"
28
+ "dotenv": "~17.4.2",
29
+ "eslint": "~10.3.0",
30
+ "typescript": "~6.0.3",
31
+ "vitest": "~4.1.5"
31
32
  },
32
33
  "scripts": {
33
34
  "build": "rm -rf ./dist && rm -f *.tgz && npm run typecheck && tsc --project tsconfig.build.json",