Loading...
Loading...
Orchestrates TypeScript SDK integration for Aptos dApps. Routes to granular skills for specific tasks (client setup, accounts, transactions, view functions, types, wallet adapter). Use this skill for fullstack dApp integration or when multiple SDK concerns are involved. Triggers on: 'typescript sdk', 'ts-sdk', 'aptos sdk', 'SDK setup', 'interact with contract', 'call aptos', 'aptos javascript', 'frontend integration', 'fullstack'.
npx skill4agent add iskysun96/aptos-agent-skills use-ts-sdk@aptos-labs/ts-sdk@aptos-labs/ts-sdkaptosVITE_process.envcreate-aptos-dappfrontend/components/WalletProvider.tsxfrontend/constants.tsNETWORKMODULE_ADDRESSAPTOS_API_KEYfrontend/entry-functions/frontend/view-functions/| Task | Skill |
|---|---|
| Set up Aptos client / configure network | ts-sdk-client |
| Create accounts/signers (server-side) | ts-sdk-account |
| Parse, format, or derive addresses | ts-sdk-address |
| Build, sign, submit, simulate transactions | ts-sdk-transactions |
| Read on-chain data (view, balances, resources) | ts-sdk-view-and-query |
| Map Move types to TypeScript types | ts-sdk-types |
| Connect wallet in React frontend | ts-sdk-wallet-adapter |
src/
lib/
aptos.ts # Singleton Aptos client + MODULE_ADDRESS
view-functions/
getCount.ts # One file per view function
getListing.ts
entry-functions/
increment.ts # One file per entry function
createListing.ts
hooks/
useCounter.ts # React hooks wrapping view functions
useListing.ts
components/
WalletProvider.tsx # AptosWalletAdapterProvider wrapper
IncrementButton.tsx # Components calling entry functionsasync function submitTransaction(
aptos: Aptos,
signer: Account,
payload: InputGenerateTransactionPayloadData
): Promise<string> {
try {
const transaction = await aptos.transaction.build.simple({
sender: signer.accountAddress,
data: payload
});
const pendingTx = await aptos.signAndSubmitTransaction({
signer,
transaction
});
const committed = await aptos.waitForTransaction({
transactionHash: pendingTx.hash
});
if (!committed.success) {
throw new Error(`Transaction failed: ${committed.vm_status}`);
}
return pendingTx.hash;
} catch (error) {
if (error instanceof Error) {
if (error.message.includes("RESOURCE_NOT_FOUND")) {
throw new Error("Resource does not exist at the specified address");
}
if (error.message.includes("MODULE_NOT_FOUND")) {
throw new Error("Contract is not deployed at the specified address");
}
if (error.message.includes("ABORTED")) {
const match = error.message.match(/code: (\d+)/);
const code = match ? match[1] : "unknown";
throw new Error(`Contract error (code ${code})`);
}
}
throw error;
}
}| Scenario | Check | Action |
|---|---|---|
| Resource not found | | Return default value or null |
| Module not deployed | | Show "contract not deployed" message |
| Function not found | | Check function name and module address |
| Move abort | | Parse abort code, map to user-friendly error |
| Out of gas | | Increase |
| Sequence number error | | Retry after fetching fresh sequence number |
| Network timeout | | Retry with exponential backoff |
| Account does not exist | | Fund account or prompt user to create one |
| Insufficient balance | | Show balance and required amount |
| User rejected in wallet | Wallet-specific rejection error | Show "transaction cancelled" message |
aptos@aptos-labs/ts-sdkwaitForTransactionVITE_MODULE_ADDRESSAptosAccount.generate()scriptComposergetAccountCoinAmountgetAccountAPTAmountgetBalance()toString()const key = new Ed25519PrivateKey("0x...");
key.toString(); // Returns AIP-80 prefixed format, NOT raw hexawait aptos.transferFungibleAssetBetweenStores({
sender: account,
fungibleAssetMetadataAddress: metadataAddr,
senderStoreAddress: fromStore,
recipientStoreAddress: toStore,
amount: 1000n
});// Check if AA is enabled for an account
const isEnabled = await aptos.abstraction.isAccountAbstractionEnabled({
accountAddress: "0x...",
authenticationFunction: `${MODULE_ADDRESS}::auth::authenticate`
});
// Enable AA on an account
const enableTxn = await aptos.abstraction.enableAccountAbstractionTransaction({
accountAddress: account.accountAddress,
authenticationFunction: `${MODULE_ADDRESS}::auth::authenticate`
});
// Use AbstractedAccount for signing with custom auth logic
import { AbstractedAccount } from "@aptos-labs/ts-sdk";write-contractsdeploy-contracts