Research
Security News
Quasar RAT Disguised as an npm Package for Detecting Vulnerabilities in Ethereum Smart Contracts
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
@dimo-network/data-sdk
Advanced tools
This is an official DIMO Data SDK written in TypeScript. The objective of this project is to make our API more accessible to the general public.
Use npm:
npm install @dimo-network/data-sdk
or use yarn instead:
yarn add @dimo-network/data-sdk
Run npm test
or npm run test
to execute the Jest tests.
Please visit the DIMO Developer Documentation to learn more about building on DIMO and detailed information on the API.
Import the SDK library:
import { DIMO } from '@dimo-network/data-sdk';
Initiate the SDK:
const dimo = new DIMO('Production');
As part of the authentication process, you will need to obtain a Developer License via the DIMO Developer Console. To get started with registration, follow the steps below:
Create app
and fill out the details about your project namespace (external-facing, e.g. Drive2Survive LLC.
) and your application name (internal, e.g. app-prod
)The SDK provides you with all the steps needed in the Authentication Flow to obtain a Developer JWT.
client_id
This is a utility function call to get a Developer JWT in one step:
const developerJwt = await dimo.auth.getToken({
client_id: '<client_id>',
domain: '<domain>',
private_key: '<api_key>',
});
Once you have the developerJwt
, you'll have access to the DIMO API endpoints. For endpoints that require the authorization headers, you can simply pass the results.
// Pass the developerJwt object to a protected endpoint
await dimo.user.get(developerJwt);
// Pass the developerJwt object to a protected endpoint with body parameters
await dimo.tokenexchange.exchange({
...developerJwt,
privileges: [4],
tokenId: <vehicle_token_id>
});
By loading a valid .credentials.json
, you can easily call dimo.authenticate()
if you prefer to manage your credentials differently. Instead of calling the Auth
endpoint, you would directly interact with the SDK main class.
Start by navigating to the SDK directory that was installed, if you used NPM, you can execute npm list -g | dimo
to find the directory. In the root directory of the SDK, there will be .credentials.json.example
- simply remove the .example
extension to proceed with authentication:
// After .credentials.json are provided
const developerJwt = await dimo.authenticate();
// The rest would be the same as option 1
The SDK supports async await and your typical JS Promises. HTTP operations can be utilized in either ways:
// Async Await
async function countCars() {
try {
let response = await dimo.identity.countDimoVehicles();
// Do something with the response
}
catch (err) { /* ... */ }
}
countCars();
// JS Promises
dimo.identity.countDimoVehicles().then((result) => {
return result;
}).catch((err) => {
/* ...handle the error... */
});
For query parameters, simply feed in an input that matches with the expected query parameters:
dimo.devicedefinitions.search({
query: '<query>',
makeSlug: '<makeSlug>',
year: 2021
});
For path parameters, simply feed in an input that matches with the expected path parameters:
dimo.attestation.createVinVC({
...vehicle_jwt,
tokenId: 117315,
force: false
})
As the 2nd leg of the API authentication, applications may exchange for short-lived Vehicle JWT for specific vehicles that granted permissions to the app. This uses the DIMO Token Exchange API.
For the end users of your application, they will need to share their vehicle permissions via the DIMO Mobile App or via your implementation of Login with DIMO or even by sharing on the Vehicle NFT directly. Once vehicles are shared, you will be able to get a Vehicle JWT.
const vehicle_jwt = await dimo.tokenexchange.exchange({
...auth,
privileges: [1, 5],
tokenId: <vehicle_token_id>
});
// Vehicle Status uses privId 1
await dimo.devicedata.getVehicleStatus({
...vehicle_jwt,
tokenId: <vehicle_token_id>
});
// Proof of Movement Verifiable Credentials uses privId 4
await dimo.attestation.createPomVC({
...vehicle_jwt,
tokenId: <vehicle_token_id>
})
// VIN Verifiable Credentials uses privId 5
await dimo.attestation.createVinVC({
...vehicle_jwt,
tokenId: <vehicle_token_id>
});
The SDK accepts any type of valid custom GraphQL queries, but we've also included a few sample queries to help you understand the DIMO GraphQL APIs.
The GraphQL entry points are designed almost identical to the REST API entry points. For any GraphQL API that requires auth headers (Telemetry API for example), you can use the same pattern as you would in the REST protected endpoints.
const vehicleJwt = await dimo.tokenexchange.exchange({
...vehicleJwt,
privileges: [1, 3, 4],
tokenId: <vehicle_token_id>
});
const something = await dimo.telemetry.query({
...vehicleJwt,
query: `
query {
some_valid_GraphQL_query
}
`
});
In order to get to the VIN of a given vehicle, your application (aka Developer License) will need permissions to view VIN credentials (Privilege ID: 5). As long as you have permissions to view the vehicle's VIN, simply call the getVin
utility function.
const getVin = async(vehicle_jwt: any) => {
return await dimo.telemetry.getVin({
...vehicle_jwt,
tokenId: <vehicle_token_id>
});
}
This utility function streamlines two calls: Creating a VIN VC on Attestation API and Getting the Latest VIN VC on Telemetry API.
To send a custom GraphQL query, you can simply call the query
function on any GraphQL API Endpoints and pass in any valid GraphQL query. To check whether your GraphQL query is valid, please visit our Identity API GraphQL Playground or Telemetry API GraphQL Playground.
const yourQuery = `{
vehicles (first:10) {
totalCount
}
}`;
const totalNetworkVehicles = await dimo.identity.query({
query: yourQuery
});
This GraphQL API query is equivalent to calling dimo.identity.countDimoVehicles()
.
Read more about contributing here.
FAQs
DIMO Data SDK for JavaScript
The npm package @dimo-network/data-sdk receives a total of 87 weekly downloads. As such, @dimo-network/data-sdk popularity was classified as not popular.
We found that @dimo-network/data-sdk demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.