diff --git a/examples/with-ton/.env.local.example b/examples/with-ton/.env.local.example new file mode 100644 index 000000000..25c0707e1 --- /dev/null +++ b/examples/with-ton/.env.local.example @@ -0,0 +1,8 @@ +API_PUBLIC_KEY="" +API_PRIVATE_KEY="" +BASE_URL="https://api.turnkey.com" +ORGANIZATION_ID="" +TON_ADDRESS="" +TON_PUBLIC_KEY="" +TON_RPC_URL="" +TON_API_KEY="" \ No newline at end of file diff --git a/examples/with-ton/README.md b/examples/with-ton/README.md new file mode 100644 index 000000000..14c1a61d9 --- /dev/null +++ b/examples/with-ton/README.md @@ -0,0 +1,60 @@ +# Example: `with-ton` + +This is a simple example that walks through the construction of a TON transaction and sending the funds out on mainnet + +## Getting started + +### 1/ Cloning the example + +Make sure you have `Node.js` installed locally; we recommend using Node v18+. + +```bash +$ git clone https://github.com/tkhq/sdk +$ cd sdk/ +$ corepack enable # Install `pnpm` +$ pnpm install -r # Install dependencies +$ pnpm run build-all # Compile source code +$ cd examples/with-ton/ +``` + +### 2/ Setting up Turnkey + +The first step is to set up your Turnkey organization. By following the [Quickstart](https://docs.turnkey.com/getting-started/quickstart) guide, you should have: + +- A public/private API key pair for Turnkey +- An organization ID + +Once you've gathered these values, add them to a new `.env.local` file. Notice that your private key should be securely managed and **_never_** be committed to git. + +```bash +$ cp .env.local.example .env.local +``` + +Now open `.env.local` and add the missing environment variables: + +- `API_PUBLIC_KEY` +- `API_PRIVATE_KEY` +- `BASE_URL` +- `ORGANIZATION_ID` +- `TON_ADDRESS` +- `TON_PUBLIC_KEY` +- `TON_RPC_URL` +- `TON_API_KEY` + +### 3/ Running the script + +Note that this example is currently set up with TON mainnet. You will need a balance to run this example + +```bash +$ pnpm start +``` + +You should see output similar to the following: + +``` +? Recipient address: () + +Sending 0.015 TON to + +Transaction sent successfully +``` diff --git a/examples/with-ton/package.json b/examples/with-ton/package.json new file mode 100644 index 000000000..d5a1006cc --- /dev/null +++ b/examples/with-ton/package.json @@ -0,0 +1,27 @@ +{ + "name": "@turnkey/example-with-ton", + "version": "0.1.0", + "private": true, + "scripts": { + "start": "pnpm tsx src/index.ts", + "clean": "rimraf ./dist ./.cache", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@inquirer/prompts": "^2.1.0", + "@noble/hashes": "1.4.0", + "@ton/core": "^0.59.0", + "@ton/crypto": "^3.3.0", + "@ton/ton": "^15.1.0", + "@turnkey/http": "workspace:*", + "@turnkey/sdk-server": "workspace:*", + "async-retry": "^1.3.3", + "cross-fetch": "^4.0.0", + "dotenv": "^16.0.3" + }, + "devDependencies": { + "@types/async-retry": "^1.4.8", + "tsx": "^3.12.7", + "typescript": "^5.0.4" + } +} diff --git a/examples/with-ton/src/index.ts b/examples/with-ton/src/index.ts new file mode 100644 index 000000000..8a8676b54 --- /dev/null +++ b/examples/with-ton/src/index.ts @@ -0,0 +1,180 @@ +import * as dotenv from "dotenv"; +import * as path from "path"; +import { + TonClient, + Address, + beginCell, + WalletContractV4, + internal, + storeMessageRelaxed, + SendMode, + Cell, + storeMessage, + external, +} from "@ton/ton"; +import { input } from "@inquirer/prompts"; +import { Turnkey } from "@turnkey/sdk-server"; +import { bytesToHex } from "@noble/hashes/utils"; + +dotenv.config({ path: path.resolve(process.cwd(), ".env.local") }); + +async function createWalletTransferV4WithTurnkey(args: { + seqno: number; + sendMode: number; + walletId: number; + messages: any[]; + turnkeyClient: Turnkey; + walletAddress: string; +}) { + // Check number of messages + if (args.messages.length > 4) { + throw Error("Maximum number of messages in a single transfer is 4"); + } + + let signingMessageBuilder = beginCell().storeUint(args.walletId, 32); + + if (args.seqno === 0) { + for (let i = 0; i < 32; i++) { + signingMessageBuilder.storeBit(1); // Initial state for uninitialized wallet + } + } else { + signingMessageBuilder.storeUint(Math.floor(Date.now() / 1e3) + 60, 32); // Default timeout: 60 seconds + } + + signingMessageBuilder.storeUint(args.seqno, 32); + signingMessageBuilder.storeUint(0, 8); // Simple order + for (let m of args.messages) { + signingMessageBuilder.storeUint(args.sendMode, 8); + signingMessageBuilder.storeRef(beginCell().store(storeMessageRelaxed(m))); + } + + const signingMessage = signingMessageBuilder.endCell().hash(); + + // Sign message using Turnkey + const txSignResult = await args.turnkeyClient.apiClient().signRawPayload({ + signWith: args.walletAddress, + payload: bytesToHex(signingMessage), + encoding: "PAYLOAD_ENCODING_HEXADECIMAL", + hashFunction: "HASH_FUNCTION_NOT_APPLICABLE", + }); + + const { r, s } = txSignResult; + const signatureBytes = Buffer.from(r + s, "hex"); + const body = beginCell() + .storeBuffer(signatureBytes) + .storeBuilder(signingMessageBuilder) + .endCell(); + return body; +} + +async function externalTransaction( + client: TonClient, + address: Address, + init: { code: Cell | null; data: Cell | null } | null, + body: Cell +) { + // Check if the contract needs initialization (init code/data) + let neededInit: { code: Cell | null; data: Cell | null } | null = null; + if (init && !(await client.isContractDeployed(address))) { + neededInit = init; + } + + // Create the external message + const ext = external({ + to: address, + init: neededInit ? { code: neededInit.code, data: neededInit.data } : null, + body: body, + }); + + // Build the final message to send + const boc = beginCell().store(storeMessage(ext)).endCell().toBoc(); + + // Send the transaction + await client.sendFile(boc); +} + +async function main() { + const organizationId = process.env.ORGANIZATION_ID!; + const turnkeyClient = new Turnkey({ + apiBaseUrl: process.env.BASE_URL!, + apiPublicKey: process.env.API_PUBLIC_KEY!, + apiPrivateKey: process.env.API_PRIVATE_KEY!, + defaultOrganizationId: organizationId, + }); + + const client = new TonClient({ + endpoint: process.env.TON_RPC_URL!, + apiKey: process.env.TON_API_KEY!, + }); + const walletAddress = process.env.TON_ADDRESS!; + const walletPublicKey = process.env.TON_PUBLIC_KEY!; + + if (!walletAddress || !walletPublicKey) { + throw new Error( + "Please set your TON_ADDRESS and TON_PUBLIC_KEY in the .env.local file." + ); + } + + console.log(`Using TON address: ${walletAddress}`); + + const tonAddress = Address.parse(walletAddress); + let accountData; + try { + accountData = await client.getBalance(tonAddress); + } catch (error) { + throw new Error( + `Failed to retrieve balance for address ${tonAddress}: ${error}` + ); + } + if (!accountData || BigInt(accountData) === 0n) { + console.log( + `Your account does not exist or has zero balance. Fund your address ${walletAddress} to proceed.` + ); + process.exit(1); + } + + const recipientAddress = await input({ + message: "Recipient address:", + default: "", + }); + + console.log(`\nSending 0.015 TON to ${recipientAddress}`); + + const tonWallet = WalletContractV4.create({ + workchain: 0, + publicKey: Buffer.from(walletPublicKey, "hex"), + }); + + const opened = client.open(tonWallet); + const seqno = await opened.getSeqno(); + const message = internal({ + value: "0.015", + to: recipientAddress, + body: "Transfer body", + }); + + const body = await createWalletTransferV4WithTurnkey({ + seqno, + sendMode: SendMode.PAY_GAS_SEPARATELY, + walletId: tonWallet.walletId, + messages: [message], + turnkeyClient, + walletAddress, + }); + + // Check if the wallet is deployed, if not provide init data + const init = + opened.init && !(await client.isContractDeployed(tonAddress)) + ? opened.init + : null; + + // Send the transaction using the external transaction logic + externalTransaction(client, tonAddress, init, body); + + console.log("Transaction sent successfully."); +} + +main().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/examples/with-ton/tsconfig.json b/examples/with-ton/tsconfig.json new file mode 100644 index 000000000..6d4b83714 --- /dev/null +++ b/examples/with-ton/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "noEmit": true, + "tsBuildInfoFile": "./.cache/.tsbuildinfo" + }, + "include": ["src/**/*.ts", "src/**/*.js", "src/**/*.json"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 59fb2a1f4..0ac74db5c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1219,6 +1219,49 @@ importers: specifier: ^5.0.4 version: 5.1.5 + examples/with-ton: + dependencies: + '@inquirer/prompts': + specifier: ^2.1.0 + version: 2.1.0 + '@noble/hashes': + specifier: 1.4.0 + version: 1.4.0 + '@ton/core': + specifier: ^0.59.0 + version: 0.59.0(@ton/crypto@3.3.0) + '@ton/crypto': + specifier: ^3.3.0 + version: 3.3.0 + '@ton/ton': + specifier: ^15.1.0 + version: 15.1.0(@ton/core@0.59.0)(@ton/crypto@3.3.0) + '@turnkey/http': + specifier: workspace:* + version: link:../../packages/http + '@turnkey/sdk-server': + specifier: workspace:* + version: link:../../packages/sdk-server + async-retry: + specifier: ^1.3.3 + version: 1.3.3 + cross-fetch: + specifier: ^4.0.0 + version: 4.0.0 + dotenv: + specifier: ^16.0.3 + version: 16.0.3 + devDependencies: + '@types/async-retry': + specifier: ^1.4.8 + version: 1.4.8 + tsx: + specifier: ^3.12.7 + version: 3.12.7 + typescript: + specifier: ^5.0.4 + version: 5.1.5 + examples/with-uniswap: dependencies: '@turnkey/ethers': @@ -5124,6 +5167,7 @@ packages: /@esbuild-kit/core-utils@3.1.0: resolution: {integrity: sha512-Uuk8RpCg/7fdHSceR1M6XbSZFSuMrxcePFuGgyvsBn+u339dk5OeL4jv2EojwTN2st/unJGsVm4qHWjWNmJ/tw==} + deprecated: 'Merged into tsx: https://tsx.is' dependencies: esbuild: 0.17.18 source-map-support: 0.5.21 @@ -5131,6 +5175,7 @@ packages: /@esbuild-kit/esm-loader@2.5.5: resolution: {integrity: sha512-Qwfvj/qoPbClxCRNuac1Du01r9gvNOT+pMYtJDapfB1eoGN1YlJ1BixLyL9WVENRx5RXgNLdfYdx/CuswlGhMw==} + deprecated: 'Merged into tsx: https://tsx.is' dependencies: '@esbuild-kit/core-utils': 3.1.0 get-tsconfig: 4.8.1 @@ -5817,6 +5862,147 @@ packages: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} deprecated: Use @eslint/object-schema instead + /@inquirer/checkbox@1.5.2: + resolution: {integrity: sha512-CifrkgQjDkUkWexmgYYNyB5603HhTHI91vLFeQXh6qrTKiCMVASol01Rs1cv6LP/A2WccZSRlJKZhbaBIs/9ZA==} + engines: {node: '>=14.18.0'} + dependencies: + '@inquirer/core': 6.0.0 + '@inquirer/type': 1.5.5 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + figures: 3.2.0 + dev: false + + /@inquirer/confirm@2.0.17: + resolution: {integrity: sha512-EqzhGryzmGpy2aJf6LxJVhndxYmFs+m8cxXzf8nejb1DE3sabf6mUgBcp4J0jAUEiAcYzqmkqRr7LPFh/WdnXA==} + engines: {node: '>=14.18.0'} + dependencies: + '@inquirer/core': 6.0.0 + '@inquirer/type': 1.5.5 + chalk: 4.1.2 + dev: false + + /@inquirer/core@2.3.1: + resolution: {integrity: sha512-faYAYnIfdEuns3jGKykaog5oUqFiEVbCx9nXGZfUhyEEpKcHt5bpJfZTb3eOBQKo8I/v4sJkZeBHmFlSZQuBCw==} + engines: {node: '>=14.18.0'} + dependencies: + '@inquirer/type': 1.5.5 + '@types/mute-stream': 0.0.1 + '@types/node': 20.17.6 + '@types/wrap-ansi': 3.0.0 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-spinners: 2.9.2 + cli-width: 4.1.0 + figures: 3.2.0 + mute-stream: 1.0.0 + run-async: 3.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + dev: false + + /@inquirer/core@6.0.0: + resolution: {integrity: sha512-fKi63Khkisgda3ohnskNf5uZJj+zXOaBvOllHsOkdsXRA/ubQLJQrZchFFi57NKbZzkTunXiBMdvWOv71alonw==} + engines: {node: '>=14.18.0'} + dependencies: + '@inquirer/type': 1.5.5 + '@types/mute-stream': 0.0.4 + '@types/node': 20.17.6 + '@types/wrap-ansi': 3.0.0 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-spinners: 2.9.2 + cli-width: 4.1.0 + figures: 3.2.0 + mute-stream: 1.0.0 + run-async: 3.0.0 + signal-exit: 4.1.0 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + dev: false + + /@inquirer/editor@1.2.15: + resolution: {integrity: sha512-gQ77Ls09x5vKLVNMH9q/7xvYPT6sIs5f7URksw+a2iJZ0j48tVS6crLqm2ugG33tgXHIwiEqkytY60Zyh5GkJQ==} + engines: {node: '>=14.18.0'} + dependencies: + '@inquirer/core': 6.0.0 + '@inquirer/type': 1.5.5 + chalk: 4.1.2 + external-editor: 3.1.0 + dev: false + + /@inquirer/expand@1.1.16: + resolution: {integrity: sha512-TGLU9egcuo+s7PxphKUCnJnpCIVY32/EwPCLLuu+gTvYiD8hZgx8Z2niNQD36sa6xcfpdLY6xXDBiL/+g1r2XQ==} + engines: {node: '>=14.18.0'} + dependencies: + '@inquirer/core': 6.0.0 + '@inquirer/type': 1.5.5 + chalk: 4.1.2 + figures: 3.2.0 + dev: false + + /@inquirer/input@1.2.16: + resolution: {integrity: sha512-Ou0LaSWvj1ni+egnyQ+NBtfM1885UwhRCMtsRt2bBO47DoC1dwtCa+ZUNgrxlnCHHF0IXsbQHYtIIjFGAavI4g==} + engines: {node: '>=14.18.0'} + dependencies: + '@inquirer/core': 6.0.0 + '@inquirer/type': 1.5.5 + chalk: 4.1.2 + dev: false + + /@inquirer/password@1.1.16: + resolution: {integrity: sha512-aZYZVHLUXZ2gbBot+i+zOJrks1WaiI95lvZCn1sKfcw6MtSSlYC8uDX8sTzQvAsQ8epHoP84UNvAIT0KVGOGqw==} + engines: {node: '>=14.18.0'} + dependencies: + '@inquirer/core': 6.0.0 + '@inquirer/type': 1.5.5 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + dev: false + + /@inquirer/prompts@2.1.0: + resolution: {integrity: sha512-YpfNrTjItyB9CYJUdIBp+9hRUu0e5JR//qC55gRrKjpGZP7CwrMvFJiS1LMZNG5vzd61CDxpOvNmkHcmMe6QmA==} + engines: {node: '>=14.18.0'} + dependencies: + '@inquirer/checkbox': 1.5.2 + '@inquirer/confirm': 2.0.17 + '@inquirer/core': 2.3.1 + '@inquirer/editor': 1.2.15 + '@inquirer/expand': 1.1.16 + '@inquirer/input': 1.2.16 + '@inquirer/password': 1.1.16 + '@inquirer/rawlist': 1.2.16 + '@inquirer/select': 1.3.3 + dev: false + + /@inquirer/rawlist@1.2.16: + resolution: {integrity: sha512-pZ6TRg2qMwZAOZAV6TvghCtkr53dGnK29GMNQ3vMZXSNguvGqtOVc4j/h1T8kqGJFagjyfBZhUPGwNS55O5qPQ==} + engines: {node: '>=14.18.0'} + dependencies: + '@inquirer/core': 6.0.0 + '@inquirer/type': 1.5.5 + chalk: 4.1.2 + dev: false + + /@inquirer/select@1.3.3: + resolution: {integrity: sha512-RzlRISXWqIKEf83FDC9ZtJ3JvuK1l7aGpretf41BCWYrvla2wU8W8MTRNMiPrPJ+1SIqrRC1nZdZ60hD9hRXLg==} + engines: {node: '>=14.18.0'} + dependencies: + '@inquirer/core': 6.0.0 + '@inquirer/type': 1.5.5 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + figures: 3.2.0 + dev: false + + /@inquirer/type@1.5.5: + resolution: {integrity: sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==} + engines: {node: '>=18'} + dependencies: + mute-stream: 1.0.0 + dev: false + /@isaacs/cliui@8.0.2: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -11122,6 +11308,46 @@ packages: zod: 3.23.8 dev: false + /@ton/core@0.59.0(@ton/crypto@3.3.0): + resolution: {integrity: sha512-LSIkGst7BoY7fMWshejzcH0UJnoW21JGlRrW0ch+6A7Xb/7EuekxgdKym7fHxcry6OIf6FoeFg97lJ960N/Ghg==} + peerDependencies: + '@ton/crypto': '>=3.2.0' + dependencies: + '@ton/crypto': 3.3.0 + symbol.inspect: 1.0.1 + dev: false + + /@ton/crypto-primitives@2.1.0: + resolution: {integrity: sha512-PQesoyPgqyI6vzYtCXw4/ZzevePc4VGcJtFwf08v10OevVJHVfW238KBdpj1kEDQkxWLeuNHEpTECNFKnP6tow==} + dependencies: + jssha: 3.2.0 + dev: false + + /@ton/crypto@3.3.0: + resolution: {integrity: sha512-/A6CYGgA/H36OZ9BbTaGerKtzWp50rg67ZCH2oIjV1NcrBaCK9Z343M+CxedvM7Haf3f/Ee9EhxyeTp0GKMUpA==} + dependencies: + '@ton/crypto-primitives': 2.1.0 + jssha: 3.2.0 + tweetnacl: 1.0.3 + dev: false + + /@ton/ton@15.1.0(@ton/core@0.59.0)(@ton/crypto@3.3.0): + resolution: {integrity: sha512-almetcfTu7jLjcNcEEPB7wAc8yl90ES1M//sOr1QE+kv7RbmEvMkaPSc7kFxzs10qrjIPKxlodBJlMSWP5LuVQ==} + peerDependencies: + '@ton/core': '>=0.59.0' + '@ton/crypto': '>=3.2.0' + dependencies: + '@ton/core': 0.59.0(@ton/crypto@3.3.0) + '@ton/crypto': 3.3.0 + axios: 1.7.4 + dataloader: 2.2.2 + symbol.inspect: 1.0.1 + teslabot: 1.5.0 + zod: 3.23.8 + transitivePeerDependencies: + - debug + dev: false + /@toruslabs/base-controllers@2.9.0(@babel/runtime@7.25.6): resolution: {integrity: sha512-rKc+bR4QB/wdbH0CxLZC5e2PUZcIgkr9yY7TMd3oIffDklaYBnsuC5ES2/rgK1aRUDRWz+qWbTwLqsY6PlT37Q==} peerDependencies: @@ -11754,6 +11980,18 @@ packages: resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} dev: false + /@types/mute-stream@0.0.1: + resolution: {integrity: sha512-0yQLzYhCqGz7CQPE3iDmYjhb7KMBFOP+tBkyw+/Y2YyDI5wpS7itXXxneN1zSsUwWx3Ji6YiVYrhAnpQGS/vkw==} + dependencies: + '@types/node': 20.3.1 + dev: false + + /@types/mute-stream@0.0.4: + resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==} + dependencies: + '@types/node': 20.3.1 + dev: false + /@types/node-forge@1.3.11: resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} dependencies: @@ -11769,6 +12007,12 @@ packages: /@types/node@18.18.2: resolution: {integrity: sha512-u1cis+7wLZMPI62EozwsqvgMZyauczyiqRRu/vcqZKI5N5yidrJHqOFxEg5seT8adc96Q6Yczg1c0DlqGtMJMw==} + /@types/node@20.17.6: + resolution: {integrity: sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ==} + dependencies: + undici-types: 6.19.8 + dev: false + /@types/node@20.3.1: resolution: {integrity: sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==} @@ -11889,6 +12133,10 @@ packages: resolution: {integrity: sha512-oQD74hl+cNCZdSWIupJCXZ2azTuB3MJ/mrWlgYt+v4pD7/Dr78gl5hKAdieZNf9NrAqwUez79bHtnFVSNSscWA==} dev: false + /@types/wrap-ansi@3.0.0: + resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} + dev: false + /@types/ws@7.4.7: resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} dependencies: @@ -12955,6 +13203,7 @@ packages: /aptos@1.21.0: resolution: {integrity: sha512-PRKjoFgL8tVEc9+oS7eJUv8GNxx8n3+0byH2+m7CP3raYOD6yFKOecuwjVMIJmgfpjp6xH0P0HDMGZAXmSyU0Q==} engines: {node: '>=11.0.0'} + deprecated: Package aptos is no longer supported, please migrate to https://www.npmjs.com/package/@aptos-labs/ts-sdk dependencies: '@aptos-labs/aptos-client': 0.1.1 '@noble/hashes': 1.3.3 @@ -14008,7 +14257,6 @@ packages: /chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - dev: true /chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} @@ -14116,6 +14364,11 @@ packages: engines: {node: '>=6'} dev: false + /cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + dev: false + /client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} dev: false @@ -14562,6 +14815,10 @@ packages: es-errors: 1.3.0 is-data-view: 1.0.1 + /dataloader@2.2.2: + resolution: {integrity: sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==} + dev: false + /dateformat@4.6.3: resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} dev: true @@ -15833,7 +16090,6 @@ packages: chardet: 0.7.0 iconv-lite: 0.4.24 tmp: 0.0.33 - dev: true /eyes@0.1.8: resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} @@ -15911,6 +16167,13 @@ packages: encoding: 0.1.12 dev: false + /figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + dependencies: + escape-string-regexp: 1.0.5 + dev: false + /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -18033,6 +18296,10 @@ packages: resolution: {integrity: sha512-dxLob7q65Xg2DvstYkRpkYtmKm2sPJ9oFhrhmudT1dZvNFFTlroai3AWSpLey/w5vMcLBXRgOJsbXpdN9HzU/A==} dev: false + /jssha@3.2.0: + resolution: {integrity: sha512-QuruyBENDWdN4tZwJbQq7/eAK85FqrI4oDbXjy5IBhYD+2pTJyBUWZe8ctWaCkrV0gy6AaelgOZZBMeswEa/6Q==} + dev: false + /jsx-ast-utils@3.3.4: resolution: {integrity: sha512-fX2TVdCViod6HwKEtSWGHs57oFhVfCMwieb9PuRDgjDPh5XeqJiHFFFJCHxU5cnTc3Bu/GRL+kPiFmw8XWOfKw==} engines: {node: '>=4.0'} @@ -18830,6 +19097,11 @@ packages: resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} dev: false + /mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: false + /mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} dependencies: @@ -20768,6 +21040,11 @@ packages: dependencies: execa: 5.1.1 + /run-async@3.0.0: + resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + engines: {node: '>=0.12.0'} + dev: false + /run-parallel-limit@1.1.0: resolution: {integrity: sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==} dependencies: @@ -21540,6 +21817,10 @@ packages: engines: {node: '>=0.10'} dev: false + /symbol.inspect@1.0.1: + resolution: {integrity: sha512-YQSL4duoHmLhsTD1Pw8RW6TZ5MaTX5rXJnqacJottr2P2LZBF/Yvrc3ku4NUpMOm8aM0KOCqM+UAkMA5HWQCzQ==} + dev: false + /synckit@0.8.5: resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} engines: {node: ^14.18.0 || >=16.0.0} @@ -21680,6 +21961,10 @@ packages: source-map-support: 0.5.21 dev: false + /teslabot@1.5.0: + resolution: {integrity: sha512-e2MmELhCgrgZEGo7PQu/6bmYG36IDH+YrBI1iGm6jovXkeDIGa3pZ2WSqRjzkuw2vt1EqfkZoV5GpXgqL8QJVg==} + dev: false + /test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -22075,6 +22360,10 @@ packages: resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} dev: false + /undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + dev: false + /undici@5.19.1: resolution: {integrity: sha512-YiZ61LPIgY73E7syxCDxxa3LV2yl3sN8spnIuTct60boiiRaE1J8mNWHO8Im2Zi/sFrPusjLlmRPrsyraSqX6A==} engines: {node: '>=12.18'}