The mercury-sdk
is a comprehensive SDK that empowers developers to seamlessly interact with the Mercury Indexer. It has been developed and it's currently supported by the PaltaLabs 🥑 Team.
Useful links:
You can install the package via npm:
npm install mercury-sdk
Create and fill the .env
file
cp .env.example .env
Create an instance of mercury:
import { Mercury } from "mercury-sdk";
const mercuryInstance = new Mercury({
backendEndpoint: process.env.MERCURY_BACKEND_ENDPOINT,
graphqlEndpoint: process.env.MERCURY_GRAPHQL_ENDPOINT,
// The post-install script should have saved an API key to .env
apiKey: process.env.MERCURY_API_KEY,
});
endpoints should be without "/" and without /graphql or any other path. It should be only domain:port.
Subscribe to an event:
mercuryInstance.subscribeToContractEvents({
contractId: "someContractId",
});
Subscribe to full accounts:
mercuryInstance.subscribeToFullAccount({
address: "someStellarAddress",
});
Subscribe to ledger entries:
const contractAddress = "CDSUTAZNBTBAMG2SVZ63FRIBIJOEBSRVVR4GZ3TDXX25AHUN5N3ZYMYU";
const args = {
contractId: contractAddress,
keyXdr: "AAAAFA==",
durability: "persistent",
hydrate: true,
}
const subscribe = await mercuryInstance.subscribeToLedgerEntries(args).catch((err) => {
console.error(err)
})
Review subscriptions:
mercuryInstance.getAllContractEventSubscriptions();
or for Accounts
mercuryInstance.getAllFullAccountSubscriptions();
retrieve sent payments:
mercuryInstance.getSentPayments({
publicKey: "someStellarAddress",
});
retrieve received payments:
mercuryInstance.getReceivedPayments({
publicKey: "someStellarAddress",
});
retrieve path payments strict send:
mercuryInstance.getPathPaymentsStrictSend({
publicKey: "someStellarAddress",
});
retrieve path payments strict receive:
mercuryInstance.getPathPaymentsStrictReceive({
publicKey: "someStellarAddress",
});
retrieve SDEX add liquidity:
mercuryInstance.getLiquidityPoolDeposit({
publicKey: "someStellarAddress",
});
retrieve SDEX remove liquidity:
mercuryInstance.getLiquidityPoolWithdraw({
publicKey: "someStellarAddress",
});
retrieve contract events:
mercuryInstance.getContractEvents({
contractId: "someContractId",
});
You can use data parsers to get the results in a cleaner way than just the big GraphQL response
Available parsers:
import {
getSentPaymentsParser,
getReceivedPaymentsParser,
getPathPaymentsStrictSendParser,
getPathPaymentsStrictReceiveParser,
getLiquidityPoolWithdrawParser,
getLiquidityPoolDepositParser,
} from "mercury-sdk";
async function someFunction() {
//Sent payments
const sentPaymentsResponse = await mercuryInstance.getSentPayments({
publicKey: "someStellarAddress",
});
if (sentPaymentsResponse.ok) {
const sentPaymentsParsedData = getSentPaymentsParser(
sentPaymentsResponse.data!
);
}
//Received payments
const receivedPaymentsResponse = await mercuryInstance.getReceivedPayments({
publicKey: "someStellarAddress",
});
if (receivedPaymentsResponse.ok) {
const receivedPaymentsParsedData = getReceivedPaymentsParser(
receivedPaymentsResponse.data!
);
}
//Path Payments Strict Send
const pathPaymentsStrictSendResponse =
await mercuryInstance.getPathPaymentsStrictSend({
publicKey: "someStellarAddress",
});
if (pathPaymentsStrictSendResponse.ok) {
const pathPaymentsStrictSendParsedData = getPathPaymentsStrictSendParser(
pathPaymentsStrictSendResponse.data!
);
}
//Path Payments Strict Receive
const pathPaymentsStrictReceiveResponse =
await mercuryInstance.getPathPaymentsStrictReceive({
publicKey: "someStellarAddress",
});
if (pathPaymentsStrictReceiveResponse.ok) {
const pathPaymentsStrictReceiveParsedData =
getPathPaymentsStrictReceiveParser(
pathPaymentsStrictReceiveResponse.data!
);
}
//Liquidity Pool Withdraw
const liquidityPoolWithdrawResponse =
await mercuryInstance.getLiquidityPoolWithdraw({
publicKey: "someStellarAddress",
});
if (liquidityPoolWithdrawResponse.ok) {
const liquidityPoolWithdrawParsedData = getLiquidityPoolWithdrawParser(
liquidityPoolWithdrawResponse.data!
);
}
//Liquidity Pool Deposit
const liquidityPoolDepositResponse =
await mercuryInstance.getLiquidityPoolDeposit({
publicKey: "someStellarAddress",
});
if (liquidityPoolDepositResponse.ok) {
const liquidityPoolDepositParsedData = getLiquidityPoolDepositParser(
liquidityPoolDepositResponse.data!
);
}
}
// Soroswap Events:
const soroswapEvents =
await mercuryInstance.getContractEvents({
contractId: "someContractId",
});
const soroswapEventsParsedData = await getContractEventsParser(
soroswapEvents.data!
);
Setup your environment variables:
cp .env.example .env
complete the data
You can use the script run.sh
. To run a docker image with node.
Use yarn
Install dependencies with yarn
You can play around with the code in src/example.ts
and run it with:
yarn start:example
In order to get your changes reflected in another project that is using yarn link
to point to this one you need to run:
yarn tsc
This will compile typescript into the folder dist/
where other projects will look for the code.
Make sure you have setup the npm token in your environment variables.
Run yarn publish
and follow the instructions.