Catalog npm
Back to packageRELEASE DETAILS

1.0.0

npm

0xppl-solana-portfolio

[![Core NPM Version](https://img.shields.io/npm/v/@sonarwatch/portfolio-core?color=33cd56&label=npm%20core)](https://www.npmjs.com/package/@sonarwatch/portfolio-core) [![Plugins NPM Version](https://img.shields.io/npm/v/@sonarwatch/portfolio-plugins?color

Published7 Nov 2024
Direct dependencies72
Transitive dependenciesNot calculated

README

Current package documentation

SonarWatch Portfolio

Core NPM Version Plugins NPM Version

Useful links:

This repository powers SonarWatch website by fetching all DeFi assets for a wallet on multiple chains, it covers:

  • Tokens value
  • NFTs (listed included)
  • LP Tokens value
  • Lending and borrowing amount
  • Spot accounts
  • Native stake accounts
  • many other to come!

How does it works?

Anyone can contribute to this repository to help us cover more protocols and create a better coverage for the user.

This repository is divided in plugins, each plugin can have :

  • Job(s) : they retrieve common data for all users and store it in the Cache
  • Fetcher(s) : they retrieve information for a single user and send back a list of assets

What is a Job ?

A Job will store data into our Cache, those data are usually common data for all users (information about the amounts of a tokens on a lending protocol, liquidity pools prices, etc..)

To add data to the Cache, you will mainly use the following methods on the cache object :

  • Add a price for a specific Token address (token, lp, etc...) : cache.setTokenPriceSource()
  • Add any item : cache.setItem()

Warning If your Job is adding prices for tokens, make sure to verify those prices by :

  1. Running your local cache.
  2. Running your Job, this will add prices into your local cache.
  3. Running the Fetcher wallet-tokens-<networkId>, this will fetch all tokens within the wallet and get the prices from the Cache (local + distant). (see below for commands)

You can create as many Jobs as needed by plugins.

What is a Fetcher ?

A Fetcher is were the logic stand, it usually (not necessarily) recover some data from the Cache, then use it to compute the value of the assets deposited by a user on a protocol.

Some examples of Fetchers :

  • Get all Concentrated Liquidity Positions of a user from an AMM
  • Get all deposits and loans of a user on a Lending protocol
  • Get all listed NFTs for a user on a marketplace
  • etc...

You can create as many Fetchers as needed by plugins, each Fetcher being entitled to a Networkd (Solana, Sui, Aptos etc..).

You always need to provide a user address to run a fetcher.

How to start ?

Setup your environment

  1. Clone this repository.
  2. Run
npm install
  1. Setup your own .env file by running :
cp .env.example .env
  1. If you need a new plugin, run :
npx nx generate @sonarwatch/portfolio-plugins:plugin my-super-protocol
  1. Depending on what you're trying to achieve, either create a Job or a Fetcher (see commands below)

Import your fetchers and jobs

Once you're down writing the logic on your Job or Fetcher :

  1. Add your Job(s) and Fetcher(s) to your index.ts file in your plugin folder
  2. Add your Fetchers and Jobs to the packages\plugins\src\index.ts file

Test your job/fetcher

Before anything, you need to run the Cache on your local network, simply run :

npx nx run plugins:serve-cache

If you are adding a liquidity protocol You're now ready to try your Fetcher or Job by running the following commands :

  • Job :
npx nx run plugins:run-job jobId

Example :

# Run the job mango-banks
npx nx run plugins:run-job mango-banks
  • Fetcher (remember to provide an address):
npx nx run plugins:run-fetcher fetcherId userAddress

Example :

# Run the fetcher mango-collateral on the address Demo...tKG
npx nx run plugins:run-fetcher mango-collateral DemoSX9F2zXfQLtBr56Yr5he15P7viZWsYJpSDAX3tKG

Missing a token price ?

If you need the price of a token but don't find it in the Cache, please submit a PR to our token list repository

Useful commands

Here is a list of useful command that can help you during your integration.

# Getting started
npm install
cp .env.example .env
# Set your RPCs

# Generate a plugin
npx nx generate @sonarwatch/portfolio-plugins:plugin my-super-protocol

# Generator a job
npx nx generate @sonarwatch/portfolio-plugins:job --jobName=myJob --pluginId=my-super-protocol

# Generator a fetcher
npx nx generate @sonarwatch/portfolio-plugins:fetcher --fetcherName=myFetcher --pluginId=my-super-protocol

# Serve cache in background
npx nx run plugins:serve-cache

# Run a job
npx nx run plugins:run-job mango-banks
npx nx run plugins:run-job wallet-tokens-aptos

# Run a fetcher
npx nx run plugins:run-fetcher mango-collateral DemoSX9F2zXfQLtBr56Yr5he15P7viZWsYJpSDAX3tKG
npx nx run plugins:run-fetcher marinade-tickets DemoSX9F2zXfQLtBr56Yr5he15P7viZWsYJpSDAX3tKG
npx nx run plugins:run-fetcher wallet-tokens-aptos \"0xaa3fca2b46efb0c9b63e9c92ee31a28b9f22ca52a36967151416706f2ca138c6\"
npx nx run plugins:run-fetcher wallet-tokens-aptos aa3fca2b46efb0c9b63e9c92ee31a28b9f22ca52a36967151416706f2ca138c6
npx nx run plugins:run-fetcher wallet-tokens-ethereum-top \"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\"
npx nx run plugins:run-fetcher wallet-tokens-ethereum-top d8dA6BF26964aF9D7eEd9e03E53415D37aA96045

# Run a airdrop fetcher
npx nx run plugins:run-airdrop-fetcher drift-airdrop-1 DemoSX9F2zXfQLtBr56Yr5he15P7viZWsYJpSDAX3tKG

Build

npx nx run core:build
npx nx run plugins:build

Deploy

npx nx run core:version --releaseAs=patch
npx nx run plugins:version --releaseAs=patch

npx nx run core:version --releaseAs=minor
npx nx run plugins:version --releaseAs=minor

npm run nx:version

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 73

Native requirements
72 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
@aave/contract-helpers
Environment
{
  "local_name": "@aave/contract-helpers",
  "alias": false,
  "peer_metadata": null
}
^1.28.2runtime
@aave/math-utils
Environment
{
  "local_name": "@aave/math-utils",
  "alias": false,
  "peer_metadata": null
}
^1.28.2runtime
@aptos-labs/ts-sdk
Environment
{
  "local_name": "@aptos-labs/ts-sdk",
  "alias": false,
  "peer_metadata": null
}
^1.19.0runtime
@bonfida/spl-name-service
Environment
{
  "local_name": "@bonfida/spl-name-service",
  "alias": false,
  "peer_metadata": null
}
^1.0.10runtime
@cosmjs/cosmwasm-stargate
Environment
{
  "local_name": "@cosmjs/cosmwasm-stargate",
  "alias": false,
  "peer_metadata": null
}
^0.31.1runtime
@ethersproject/address
Environment
{
  "local_name": "@ethersproject/address",
  "alias": false,
  "peer_metadata": null
}
^5.7.0runtime
@ethersproject/bignumber
Environment
{
  "local_name": "@ethersproject/bignumber",
  "alias": false,
  "peer_metadata": null
}
^5.7.0runtime
@ethersproject/bytes
Environment
{
  "local_name": "@ethersproject/bytes",
  "alias": false,
  "peer_metadata": null
}
^5.7.0runtime
@ethersproject/constants
Environment
{
  "local_name": "@ethersproject/constants",
  "alias": false,
  "peer_metadata": null
}
^5.7.0runtime
@ethersproject/providers
Environment
{
  "local_name": "@ethersproject/providers",
  "alias": false,
  "peer_metadata": null
}
^5.7.2runtime
@ethersproject/units
Environment
{
  "local_name": "@ethersproject/units",
  "alias": false,
  "peer_metadata": null
}
^5.7.0runtime
@metaplex-foundation/beet
Environment
{
  "local_name": "@metaplex-foundation/beet",
  "alias": false,
  "peer_metadata": null
}
^0.7.1runtime
@metaplex-foundation/beet-solana
Environment
{
  "local_name": "@metaplex-foundation/beet-solana",
  "alias": false,
  "peer_metadata": null
}
^0.4.0runtime
@metaplex-foundation/umi-serializers-encodings
Environment
{
  "local_name": "@metaplex-foundation/umi-serializers-encodings",
  "alias": false,
  "peer_metadata": null
}
^0.8.9runtime
@mysten/bcs
Environment
{
  "local_name": "@mysten/bcs",
  "alias": false,
  "peer_metadata": null
}
^0.11.1runtime
@mysten/sui
Environment
{
  "local_name": "@mysten/sui",
  "alias": false,
  "peer_metadata": null
}
^1.12.0runtime
@onsol/tldparser
Environment
{
  "local_name": "@onsol/tldparser",
  "alias": false,
  "peer_metadata": null
}
^0.6.1runtime
@sei-js/core
Environment
{
  "local_name": "@sei-js/core",
  "alias": false,
  "peer_metadata": null
}
^3.0.1runtime
@sei-js/proto
Environment
{
  "local_name": "@sei-js/proto",
  "alias": false,
  "peer_metadata": null
}
^3.0.1runtime
@solana/web3.js
Environment
{
  "local_name": "@solana/web3.js",
  "alias": false,
  "peer_metadata": null
}
^1.91.8runtime
@solanafm/explorer-kit
Environment
{
  "local_name": "@solanafm/explorer-kit",
  "alias": false,
  "peer_metadata": null
}
^1.1.3runtime
@solanafm/explorer-kit-idls
Environment
{
  "local_name": "@solanafm/explorer-kit-idls",
  "alias": false,
  "peer_metadata": null
}
^1.1.3runtime
axios
Environment
{
  "local_name": "axios",
  "alias": false,
  "peer_metadata": null
}
^1.7.7runtime
bignumber.js
Environment
{
  "local_name": "bignumber.js",
  "alias": false,
  "peer_metadata": null
}
^9.1.2runtime
bitcoin-address-validation
Environment
{
  "local_name": "bitcoin-address-validation",
  "alias": false,
  "peer_metadata": null
}
^2.2.1runtime
bn.js
Environment
{
  "local_name": "bn.js",
  "alias": false,
  "peer_metadata": null
}
^5.2.1runtime
decimal.js
Environment
{
  "local_name": "decimal.js",
  "alias": false,
  "peer_metadata": null
}
^10.4.3runtime
dsa-connect
Environment
{
  "local_name": "dsa-connect",
  "alias": false,
  "peer_metadata": null
}
^0.6.47runtime
ethers
Environment
{
  "local_name": "ethers",
  "alias": false,
  "peer_metadata": null
}
^5.7.2runtime
graphql
Environment
{
  "local_name": "graphql",
  "alias": false,
  "peer_metadata": null
}
^16.8.1runtime
graphql-request
Environment
{
  "local_name": "graphql-request",
  "alias": false,
  "peer_metadata": null
}
^6.1.0runtime
ioredis
Environment
{
  "local_name": "ioredis",
  "alias": false,
  "peer_metadata": null
}
^5.4.1runtime
js-sha256
Environment
{
  "local_name": "js-sha256",
  "alias": false,
  "peer_metadata": null
}
^0.11.0runtime
long
Environment
{
  "local_name": "long",
  "alias": false,
  "peer_metadata": null
}
^5.2.3runtime
osmojs
Environment
{
  "local_name": "osmojs",
  "alias": false,
  "peer_metadata": null
}
^16.5.1runtime
reflect-metadata
Environment
{
  "local_name": "reflect-metadata",
  "alias": false,
  "peer_metadata": null
}
^0.1.13runtime
tslib
Environment
{
  "local_name": "tslib",
  "alias": false,
  "peer_metadata": null
}
^2.3.0runtime
unstorage
Environment
{
  "local_name": "unstorage",
  "alias": false,
  "peer_metadata": null
}
^1.10.2runtime
viem
Environment
{
  "local_name": "viem",
  "alias": false,
  "peer_metadata": null
}
^1.16.5runtime
web3
Environment
{
  "local_name": "web3-v1",
  "alias": true,
  "peer_metadata": null
}
npm:web3@^1.5.0runtime
web3
Environment
{
  "local_name": "web3-v4",
  "alias": true,
  "peer_metadata": null
}
npm:web3@^4.0.3runtime
@jscutlery/semver
Environment
{
  "local_name": "@jscutlery/semver",
  "alias": false,
  "peer_metadata": null
}
3.4.1development
@nx/devkit
Environment
{
  "local_name": "@nx/devkit",
  "alias": false,
  "peer_metadata": null
}
16.8.1development
@nx/esbuild
Environment
{
  "local_name": "@nx/esbuild",
  "alias": false,
  "peer_metadata": null
}
16.8.1development
@nx/eslint-plugin
Environment
{
  "local_name": "@nx/eslint-plugin",
  "alias": false,
  "peer_metadata": null
}
16.8.1development
@nx/jest
Environment
{
  "local_name": "@nx/jest",
  "alias": false,
  "peer_metadata": null
}
16.8.1development
@nx/js
Environment
{
  "local_name": "@nx/js",
  "alias": false,
  "peer_metadata": null
}
16.8.1development
@nx/linter
Environment
{
  "local_name": "@nx/linter",
  "alias": false,
  "peer_metadata": null
}
16.8.1development
@nx/node
Environment
{
  "local_name": "@nx/node",
  "alias": false,
  "peer_metadata": null
}
16.8.1development
@nx/plugin
Environment
{
  "local_name": "@nx/plugin",
  "alias": false,
  "peer_metadata": null
}
16.8.1development
@types/bn.js
Environment
{
  "local_name": "@types/bn.js",
  "alias": false,
  "peer_metadata": null
}
^5.1.1development
@types/jest
Environment
{
  "local_name": "@types/jest",
  "alias": false,
  "peer_metadata": null
}
^29.4.0development
@types/node
Environment
{
  "local_name": "@types/node",
  "alias": false,
  "peer_metadata": null
}
20.10.3development
@typescript-eslint/eslint-plugin
Environment
{
  "local_name": "@typescript-eslint/eslint-plugin",
  "alias": false,
  "peer_metadata": null
}
5.62.0development
@typescript-eslint/parser
Environment
{
  "local_name": "@typescript-eslint/parser",
  "alias": false,
  "peer_metadata": null
}
5.62.0development
esbuild
Environment
{
  "local_name": "esbuild",
  "alias": false,
  "peer_metadata": null
}
0.19.9development
eslint
Environment
{
  "local_name": "eslint",
  "alias": false,
  "peer_metadata": null
}
8.46.0development
eslint-config-airbnb-base
Environment
{
  "local_name": "eslint-config-airbnb-base",
  "alias": false,
  "peer_metadata": null
}
^15.0.0development
eslint-config-airbnb-typescript
Environment
{
  "local_name": "eslint-config-airbnb-typescript",
  "alias": false,
  "peer_metadata": null
}
^17.0.0development
eslint-config-prettier
Environment
{
  "local_name": "eslint-config-prettier",
  "alias": false,
  "peer_metadata": null
}
8.1.0development
jest
Environment
{
  "local_name": "jest",
  "alias": false,
  "peer_metadata": null
}
^29.4.1development
jest-environment-node
Environment
{
  "local_name": "jest-environment-node",
  "alias": false,
  "peer_metadata": null
}
^29.4.1development
listhen
Environment
{
  "local_name": "listhen",
  "alias": false,
  "peer_metadata": null
}
^1.5.5development
ngx-deploy-npm
Environment
{
  "local_name": "ngx-deploy-npm",
  "alias": false,
  "peer_metadata": null
}
^6.0.0development
npm-run-all
Environment
{
  "local_name": "npm-run-all",
  "alias": false,
  "peer_metadata": null
}
^4.1.5development
nx
Environment
{
  "local_name": "nx",
  "alias": false,
  "peer_metadata": null
}
16.8.1development
prettier
Environment
{
  "local_name": "prettier",
  "alias": false,
  "peer_metadata": null
}
^2.6.2development
ts-jest
Environment
{
  "local_name": "ts-jest",
  "alias": false,
  "peer_metadata": null
}
^29.1.0development
ts-node
Environment
{
  "local_name": "ts-node",
  "alias": false,
  "peer_metadata": null
}
^10.9.1development
tsconfig-paths
Environment
{
  "local_name": "tsconfig-paths",
  "alias": false,
  "peer_metadata": null
}
^4.2.0development
typedoc
Environment
{
  "local_name": "typedoc",
  "alias": false,
  "peer_metadata": null
}
^0.25.4development
typescript
Environment
{
  "local_name": "typescript",
  "alias": false,
  "peer_metadata": null
}
~5.3.2development
verdaccio
Environment
{
  "local_name": "verdaccio",
  "alias": false,
  "peer_metadata": null
}
^5.0.4development

Distribution files

1 collected
Distribution 1

Source distribution

Source file
Checksums from source
{
  "integrity": "sha512-dV5U4EL5+QtIikKBSpiTdHNJqyhgEKruxZvtmsqfrrH0By35RQJS2XL4cE/6PAze8RDcpxizhhbYHIpJeqaLWQ==",
  "shasum": "950b9817662ad38ea43b8061de923e5860cfc094",
  "tarball": "https://registry.npmjs.org/0xppl-solana-portfolio/-/0xppl-solana-portfolio-1.0.0.tgz",
  "fileCount": 1383,
  "unpackedSize": 3483073,
  "signatures": [
    {
      "keyid": "SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA",
      "sig": "MEUCIDH9h/P5XWzTMij7vocQ/s3XjaA4RjA9AUGjUigRxdlIAiEAytszwrm97zBbiIhmue+Bn4GNP+50BG6eO81uRub7c4w="
    }
  ]
}

Repository

PENDING
0xpeople/solana-portfolio

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 17:52 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:a57db85b05e517ba2af4f06e8a6091765660d9dc8135e00237cd51fdbad42bbb

Other collected versions

View all collected versions →