The DIMO transactions SDK was created to help developers build on DIMO.
Use npm:
npm install @dimo-network/transactions
If you're a developer interested in using the DIMO Transactions SDK for multi-user or corporate purposes, where you will want to prompt DIMO users to take actions on their own accounts, the Kernel Client is for you. Kernel Clients are intended to work with DIMOs Global Accounts, security-improved wallets that reduce fees for users, enable account recorvery options, and create a more flexible ecosystem for developers to build on DIMO. See below for an example:
- WebauthnStamper (@turnkey/webauthn-stamper)
- IframeStamper (@turnkey/iframe-stamper)
- ApiKeyStamper (@turnkey/api-key-stamper)
import { PasskeyStamper } from "@turnkey/react-native-passkey-stamper";
import { KernelSigner, newKernelConfig, sacdPermissionValue } from '@dimo-network/transactions';
const kernelSignerConfig = newKernelConfig({
rpcUrl: RPC_URL,
bundlerUrl: BUNDLER_RPC,
paymasterUrl: PAYMASTER_RPC,
environment: 'dev', // omit to default to prod
});
// NOTE: use the correct stamper for your framework
const stamper = new PasskeyStamper({
rpId: RPID,
});
const kernelSigner = new KernelSigner(kernelSignerConfig);
await kernelSigner.passkeyToSession(
subOrganizationId,
walletAddress as `0x${string}`,
stamper,
);
const permissions = sacdPermissionValue({
ALLTIME_LOCATION: true,
});
const ipfsRes = await kernelSigner.signAndUploadSACDAgreement({
driverID: grantee,
appID: DIMO_APP_ID,
appName: APP_NAME,
expiration: expiration,
permissions: permissions,
tokenId: tokenId,
grantee: grantee,
attachments: [],
grantor: kernelSigner.smartContractAddress!,
});
if (!ipfsRes.success) {
throw new Error(
`Unable to sign and upload SACD agreement: ${ipfsRes.error}`,
);
}
const result = await kernelSigner.setVehiclePermissions({
tokenId,
grantee,
permissions,
expiration,
source: `ipfs://${ipfsRes.data?.cid}`,
});
Notes | Method |
---|---|
Initialize signer with user account infos | passkeyInit() |
Prompt the user for their signature to open a wallet session, length of wallet session can be set in config | openSessionWithPasskey() |
Use credentials returned from DIMO Accounts api to open a wallet session for user | openSessionWithApiStamper() |
Get passkey client (this will require user to sign for all transactions) | getPasskeyClient() |
Return active API or wallet session client, if applicable, otherwise, return passkey client | getActiveClient() |
mintVehicleWithDeviceDefinition() | |
setVehiclePermissions() | |
setVehiclePermissionsBulk() | |
sendDIMOTokens() | |
claimAftermarketDevice() | |
pairAftermarketDevice() | |
claimAndPairAftermarketDevice() | |
burnVehicle() | |
transferVehicleAndAftermarketDevices() | |
unpairAftermarketDevice() | |
signTypedData() | |
signChallenge() | |
generateChallenge() | |
submitWeb3Challenge() | |
uploadSACDAgreement() | |
signSACDPermissionTemplate() | |
signAndUploadSACDAgreement() | |
getUserOperationReceipt() | |
resetClient() |