npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

nemeos-sdk

v0.1.7

Published

Nemeos SDK to facilitate integration with the Nemeos platform

Downloads

19

Readme

Building new web3 economies.

npm package npm downloads license

Nemeos SDK

Nemeos SDK to facilitate integration with the Nemeos platform.

Install

pnpm install nemeos-sdk

Usage

Note: This is a pure ESM package. If you are using CommonJS, you can use a bundler or import using dynamic import().

// ESM / TypeScript
import { NemeosSDK } from 'nemeos-sdk'

// CommonJS
const { NemeosSDK } = await import('nemeos-sdk')

Initialize SDK

Node.js

import * as ethers from 'ethers'
import { NemeosSDK } from 'nemeos-sdk'

const provider = new ethers.JsonRpcProvider(process.env.INFURA_ENDPOINT_WITH_API_KEY)
const wallet = new ethers.Wallet(process.env.WALLET_PRIVATE_KEY, provider)

const nemeosSdk = new NemeosSDK(wallet, {
  enableLogging: true, // Enable logging to the console - Optional, default: `true`
  nemeosBackendEnvironment: NemeosSDK.NemeosBackendEnvironment.Production, // Optional, default: `Production`
})

Browser

Using ethers.js
import * as ethers from 'ethers'
import { NemeosSDK } from 'nemeos-sdk'

const provider = new ethers.BrowserProvider(window.ethereum)
const signer = await provider.getSigner()

const nemeosSdk = new NemeosSDK(signer, {
  enableLogging: true, // Enable logging to the console - Optional, default: `true`
  nemeosBackendEnvironment: NemeosSDK.NemeosBackendEnvironment.Production, // Optional, default: `Production`
})
Using window.ethereum
import { NemeosSDK, getBrowserProvider } from 'nemeos-sdk'

const provider = getBrowserProvider(window.ethereum)
const signer = await provider.getSigner()

const nemeosSdk = new NemeosSDK(signer, {
  enableLogging: true, // Enable logging to the console - Optional, default: `true`
  nemeosBackendEnvironment: NemeosSDK.NemeosBackendEnvironment.Production, // Optional, default: `Production`
})

Nemeos Customer Client

The Nemeos Customer Client is used to interact with the Nemeos backend to manage customer data.

const nemeosCustomerClient = nemeosSdk.getNemeosCustomerClient()

Generate login signature

Trigger a signature request to the wallet. This signature is used to ensure that the customer is the owner of the wallet when interacting with the Nemeos backend.

The signature is valid for a few days.

const loginSignature = await nemeosCustomerClient.requestLoginSignature()

Fetch customer data

Fetch the customer data associated with the wallet address.

const customerData = await nemeosCustomerClient.fetchCustomerData(loginSignature)

Register email

Register the wallet to an email address. This is used to send email notifications and reminders to customers about their loans.

The email address will not be broadcasted on the blockchain. It is only stored in Nemeos backend database.

const emailAddress = '[email protected]'
await nemeosCustomerClient.registerEmail(loginSignature, emailAddress)

Unregister email

Unregister the wallet from its associated email address. The customer will no longer receive email notifications and reminders.

This will remove the email address from the Nemeos backend database.

await nemeosCustomerClient.unregisterEmail(loginSignature)

Nemeos Pool Client

The Nemeos Pool Client is used to interact with Nemeos pools smart contracts on the blockchain.

const nemeosPoolClient = nemeosSdk.getNemeosPoolClient({
  nemeosPoolAddress: '0x812db15b8Bb43dBA89042eA8b919740C23aD48a3',
  nftCollectionAddress: '0x15cd1cfCd48C06cfC44D433D66C7a9fE06b2C2c3',
  nemeosPoolMode: NemeosSDK.NemeosPoolMode.BuyOpenSea, // Can be `BuyOpenSea` or `DirectMint`
})

Get Pool Balance

Retrieve the current balance of the pool smart contract in native token in wei (if balance is 1 ETH, will return 1000000000000000000).

const poolBalance = await nemeosPoolClient.getPoolBalance()
console.log('Pool Balance:', poolBalance)

Preview a loan

try {
  // Preview loan for Nemeos Pool `BuyOpenSea` mode
  const nftId = '231'
  const loanDurationDays = 61
  const loanData = await nemeosPoolBuyOpenSeaClient.previewLoan(nftId, loanDurationDays)

  // Preview loan for Nemeos Pool `DirectMint` mode
  const loanDurationDays = 61
  const loanData2 = await nemeosPoolDirectMintClient.previewLoan(loanDurationDays)

  console.log('Preview loanData:', loanData)
  console.log('Preview loanData2:', loanData2)
} catch (error) {
  console.error('Preview loan failed!', error.message)
  throw error
}
export type NftLivePriceBuyOpenSeaData = {
  nftFullLivePriceData: {
    /** @example "231" */
    nftId: string
    /** @example "4000000000000000000" */
    openSeaNftPrice: string
    /** @example "4" */
    openSeaNftPriceHuman: string
    /** @example "4" */
    openSeaNftPriceHumanShortRound: string
    /** @example "12686.2" */
    openSeaNftPriceHumanUSD: string
    /** @example "160000000000000003" */
    nemeosOracleNftCollectionFloorPrice: string
    /** @example "0.16" */
    nemeosOracleNftCollectionFloorPriceHuman: string
    /** @example "0.16" */
    nemeosOracleNftCollectionFloorPriceHumanShortRound: string
    /** @example "507.45" */
    nemeosOracleNftCollectionFloorPriceHumanUSD: string
    /** @example "3880000000000000000" */
    proposedUpfrontPaymentGivenPrices: string
    /** @example "3.88" */
    proposedUpfrontPaymentGivenPricesHuman: string
    /** @example "3.88" */
    proposedUpfrontPaymentGivenPricesHumanShortRound: string
    /** @example "12305.61" */
    proposedUpfrontPaymentGivenPricesHumanUSD: string
    /** @example "4000000000000000000" */
    openSeaNftCollectionFloorPrice: string
    /** @example "4" */
    openSeaNftCollectionFloorPriceHuman: string
    /** @example "4" */
    openSeaNftCollectionFloorPriceHumanShortRound: string
    /** @example "12686.2" */
    openSeaNftCollectionFloorPriceHumanUSD: string
    /** @example "3171.55" */
    exchangeRateToUSD: string
    /** @example "120000000000000000" */
    remainingToPayPrice: string
    /** @example "0.12" */
    remainingToPayPriceHuman: string
    /** @example "0.12" */
    remainingToPayPriceHumanShortRound: string
    /** @example "380.59" */
    remainingToPayPriceHumanUSD: string
    /** @example "121464000000000000" */
    remainingToPayPriceWithInterests: string
    /** @example "0.121464" */
    remainingToPayPriceWithInterestsHuman: string
    /** @example "0.121" */
    remainingToPayPriceWithInterestsHumanShortRound: string
    /** @example "385.23" */
    remainingToPayPriceWithInterestsHumanUSD: string
    /** @example "1464000000000000" */
    interestsToPay: string
    /** @example "0.001464" */
    interestsToPayHuman: string
    /** @example "0.001" */
    interestsToPayHumanShortRound: string
    /** @example "4.64" */
    interestsToPayHumanUSD: string
    /** @example "4001464000000000000" */
    totalLoanPrice: string
    /** @example "4.001464" */
    totalLoanPriceHuman: string
    /** @example "4.001" */
    totalLoanPriceHumanShortRound: string
    /** @example "12690.84" */
    totalLoanPriceHumanUSD: string
    /** @example 3 */
    numberOfInstallments: number
    paySchedule: Array<{
      /** @example "3880000000000000000" */
      toPay: string
      /** @example "3.88" */
      toPayHuman: string
      /** @example "3.88" */
      toPayHumanShortRound: string
      /** @example "12305.61" */
      toPayHumanUSD: string
      /** @example "1721947310346" */
      unixTimestampMs: string
      /** @example "Friday, July 26" */
      dateTimeHuman: string
      /** @example "2024-07-25T22:41:50.346Z" */
      dateTimeJSON: string
    }>
  }
  nftPoolLiveData: {
    /** @example "0x3a668917C167dfa823b2816e782704444503078D" */
    nftPoolAddress: string
    /** @example "25" */
    minimalDepositPercent: string
    /** @example "25" */
    minimalDepositPercentHuman: string
    /** @example "7" */
    yearlyInterestPercent: string
    /** @example "7" */
    yearlyInterestPercentHuman: string
    /** @example "5.6000000000000005" */
    yearlyLiquidityProviderProfitsEstimationPercent: string
    /** @example "5.6" */
    yearlyLiquidityProviderProfitsEstimationPercentHuman: string
    /** @example "309586878710840000" */
    availableLiquidity: string
    /** @example "0.30958687871084" */
    availableLiquidityHuman: string
    /** @example "0.31" */
    availableLiquidityHumanShortRound: string
    /** @example "981.87" */
    availableLiquidityHumanUSD: string
    /** @example "0" */
    liquidityLockedInLoans: string
    /** @example "0" */
    liquidityLockedInLoansHuman: string
    /** @example "0" */
    liquidityLockedInLoansHumanShortRound: string
    /** @example "0" */
    liquidityLockedInLoansHumanUSD: string
    /** @example "309586878710840000" */
    totalValueLocked: string
    /** @example "0.30958687871084" */
    totalValueLockedHuman: string
    /** @example "0.31" */
    totalValueLockedHumanShortRound: string
    /** @example "981.87" */
    totalValueLockedHumanUSD: string
    /** @example "3650" */
    maxYearlyLoanRate: string
    /** @example "43200" */
    vestingTimePerBasisPoint: string
    /** @example 0 */
    currentOngoingLoansCount: number
    /** @example 3 */
    allTimeLoansCount: number
  }
}
export type NftLivePriceDirectMintData = {
  nftFullLivePriceData: {
    /** @example "100000000000000000" */
    mintPrice: string
    /** @example "0.1" */
    mintPriceHuman: string
    /** @example "0.1" */
    mintPriceHumanShortRound: string
    /** @example "316.55" */
    mintPriceHumanUSD: string
    /** @example "25000000000000000" */
    proposedUpfrontPaymentGivenPrices: string
    /** @example "0.025" */
    proposedUpfrontPaymentGivenPricesHuman: string
    /** @example "0.025" */
    proposedUpfrontPaymentGivenPricesHumanShortRound: string
    /** @example "79.14" */
    proposedUpfrontPaymentGivenPricesHumanUSD: string
    /** @example "3165.45" */
    exchangeRateToUSD: string
    /** @example "75000000000000000" */
    remainingToPayPrice: string
    /** @example "0.075" */
    remainingToPayPriceHuman: string
    /** @example "0.075" */
    remainingToPayPriceHumanShortRound: string
    /** @example "237.41" */
    remainingToPayPriceHumanUSD: string
    /** @example "76372500000000000" */
    remainingToPayPriceWithInterests: string
    /** @example "0.0763725" */
    remainingToPayPriceWithInterestsHuman: string
    /** @example "0.076" */
    remainingToPayPriceWithInterestsHumanShortRound: string
    /** @example "241.75" */
    remainingToPayPriceWithInterestsHumanUSD: string
    /** @example "1372500000000000" */
    interestsToPay: string
    /** @example "0.0013725" */
    interestsToPayHuman: string
    /** @example "0.001" */
    interestsToPayHumanShortRound: string
    /** @example "4.34" */
    interestsToPayHumanUSD: string
    /** @example "101372500000000000" */
    totalLoanPrice: string
    /** @example "0.1013725" */
    totalLoanPriceHuman: string
    /** @example "0.101" */
    totalLoanPriceHumanShortRound: string
    /** @example "320.89" */
    totalLoanPriceHumanUSD: string
    /** @example 3 */
    numberOfInstallments: number
    paySchedule: Array<{
      /** @example "25000000000000000" */
      toPay: string
      /** @example "0.025" */
      toPayHuman: string
      /** @example "0.025" */
      toPayHumanShortRound: string
      /** @example "79.14" */
      toPayHumanUSD: string
      /** @example "1721946366176" */
      unixTimestampMs: string
      /** @example "Friday, July 26" */
      dateTimeHuman: string
      /** @example "2024-07-25T22:26:06.176Z" */
      dateTimeJSON: string
    }>
  }
  nftPoolLiveData: {
    /** @example "0xf4180C986Aec6f8fAdc6eFe4A0eC237c819AC074" */
    nftPoolAddress: string
    /** @example "25" */
    minimalDepositPercent: string
    /** @example "25" */
    minimalDepositPercentHuman: string
    /** @example "10" */
    yearlyInterestPercent: string
    /** @example "10" */
    yearlyInterestPercentHuman: string
    /** @example "8" */
    yearlyLiquidityProviderProfitsEstimationPercent: string
    /** @example "8" */
    yearlyLiquidityProviderProfitsEstimationPercentHuman: string
    /** @example "100000000000000000" */
    availableLiquidity: string
    /** @example "0.1" */
    availableLiquidityHuman: string
    /** @example "0.1" */
    availableLiquidityHumanShortRound: string
    /** @example "316.55" */
    availableLiquidityHumanUSD: string
    /** @example "0" */
    liquidityLockedInLoans: string
    /** @example "0" */
    liquidityLockedInLoansHuman: string
    /** @example "0" */
    liquidityLockedInLoansHumanShortRound: string
    /** @example "0" */
    liquidityLockedInLoansHumanUSD: string
    /** @example "100000000000000000" */
    totalValueLocked: string
    /** @example "0.1" */
    totalValueLockedHuman: string
    /** @example "0.1" */
    totalValueLockedHumanShortRound: string
    /** @example "316.55" */
    totalValueLockedHumanUSD: string
    /** @example "3650" */
    maxYearlyLoanRate: string
    /** @example "43200" */
    vestingTimePerBasisPoint: string
    /** @example 0 */
    currentOngoingLoansCount: number
    /** @example 0 */
    allTimeLoansCount: number
  }
}

Start a loan

try {
  // Start loan for Nemeos Pool `BuyOpenSea` mode
  const nftId = '224'
  const loanDurationDays = 90
  const tx = await nemeosPoolBuyOpenSeaClient.startLoan(nftId, loanDurationDays)

  // Start loan for Nemeos Pool `DirectMint` mode
  const loanDurationDays = 90
  const whitelistProof = ['0x1234567890123456789012345678901234567890'] // Optional, necessary if there is a whitelist
  const tx2 = await nemeosPoolDirectMintClient.startLoan(loanDurationDays, whitelistProof)

  console.log('Starting loan success! Transaction hash:', tx.hash)
} catch (error) {
  console.error('Starting loan failed!', error.message)
  throw error
}

Retrieve a loan

const nftId = '224'
const loan = await nemeosPoolClient.retrieveLoan(nftId)
type Loan = {
  /** Borrower address */
  borrower: string
  /** Token ID */
  tokenID: bigint
  /** Amount owed with interest */
  amountOwedWithInterest: bigint
  /** Next payment amount */
  nextPaymentAmount: bigint
  /** Interest amount per payment */
  interestAmountPerPayment: bigint
  /** Loan duration in seconds */
  loanDurationInSeconds: bigint
  /** Start time */
  startTime: bigint
  /** Next payment time */
  nextPaymentTime: bigint
  /** Remaining number of installments */
  remainingNumberOfInstallments: number
  /** Daily interest rate at start */
  dailyInterestRateAtStart: bigint
  /** Is closed */
  isClosed: boolean
  /** Is in liquidation */
  isInLiquidation: boolean
}

Pay the next loan step

try {
  const nftId = '224'
  const tx = await nemeosPoolClient.payNextLoanStep(nftId)

  console.log('Paying next loan step success! Transaction hash:', tx.hash)
} catch (error) {
  console.error('Paying next loan step failed!', error.message)
  throw error
}

Build

pnpm build

Tests

Test script

# touch .env, or set the environment variables in the command line
export NODE_ENV=development # to connect to Nemeos backend at http://localhost:3000
export WALLET_PRIVATE_KEY=43ac571235456515454565645445454546123121454848791215488877897123
export INFURA_ENDPOINT_WITH_API_KEY=https://sepolia.infura.io/v3/b3866123121321321231212132131123

node tests/test.mjs

Browser test page

Build the test page and the required dependencies with Parcel

pnpm i --global parcel
parcel tests/browser/index.html

License

The MIT License