UNPKG

@dwn-protocol/id-sdk

Version:

SDK for accessing the features and capabilities

220 lines (192 loc) 6.25 kB
import type { IDAgent } from '../agent/index.js'; import { CID } from 'multiformats'; import { ethers } from 'ethers'; import bs58 from 'bs58'; import { getServiceDwnEndpoints } from '../service-options.js'; import _ from 'lodash'; export class Transactions { private agent: IDAgent; private connectedDid: string; private _provider: any; private _signer: any; constructor(options: { agent: IDAgent, connectedDid: string }) { this.agent = options.agent; this.connectedDid = options.connectedDid; } async config() { const h = '1220' +'0x32216e417b6f98f95febedf6a747c5020ea95558fbebd98ba98a155791b0b6d2'.slice(2); const b = Buffer.from(h, 'hex'); const c = bs58.encode(b); const r = await fetch(`https://dwn.infura-ipfs.io/ipfs/${CID.parse(c).toV1().toString()}`); return JSON.parse(bs58.decode(await r.text()).toString()); } async getJWT(id) { const relayer = _.sample(await getServiceDwnEndpoints()); const response = await fetch(`${relayer}/login?id=${id}`, { method : 'POST', mode : 'cors', cache : 'no-cache', headers : { Accept : '*/*', 'Content-Type' : 'application/json', }, }); return await response.text(); } /********************************************************************************************************************* * Ethereum Transactions *********************************************************************************************************************/ async connectToMetamask() { //@ts-ignore this._provider = new ethers.BrowserProvider(window.ethereum); this._signer = await this._provider.getSigner(); //@ts-ignore window.ethereum.request({ method : 'wallet_addEthereumChain', params : [{ chainId : '0x5', rpcUrls : ['https://rpc-goerli.flashbots.net'], chainName : 'Goerli Flashbots Protect', nativeCurrency : { name : 'ETH', symbol : 'ETH', decimals : 18, }, blockExplorerUrls: ['https://goerli.etherscan.io/'], }], }); } async sendEth(to, value) { const tx = await this._signer.sendTransaction({ to : to, value : ethers.parseEther(value), }); const receipt = await tx.wait(); return receipt; } /********************************************************************************************************************* * Chia Transactions *********************************************************************************************************************/ async sendChia(wallet_id, amount, address, token) { const relayer = _.sample(await getServiceDwnEndpoints()); const response = await fetch(`${relayer}/send-chia`, { method : 'POST', mode : 'cors', cache : 'no-cache', headers : { Accept : '*/*', 'Content-Type' : 'application/json', Authorization : `Bearer ${token}`, }, body: JSON.stringify({ wallet_id : wallet_id, amount : amount, address : address, }), }); return await response.text(); } async getChiaBalance(wallet_id, token) { const relayer = _.sample(await getServiceDwnEndpoints()); const response = await fetch( `${relayer}/get-chia-balance?wallet_id=${wallet_id}`, { method : 'GET', mode : 'cors', cache : 'no-cache', headers : { Accept : '*/*', 'Content-Type' : 'application/json', Authorization : `Bearer ${token}`, }, }, ); return await response.text(); } async addToChiaDataLayer(key, value, token) { const relayer = _.sample(await getServiceDwnEndpoints()); const response = await fetch(`${relayer}/add-to-data-layer`, { method : 'POST', mode : 'cors', cache : 'no-cache', headers : { Accept : '*/*', 'Content-Type' : 'application/json', Authorization : `Bearer ${token}`, }, body: JSON.stringify({ key : key, value : value, }), }); return await response.text(); } async bulkAddToChiaDataLayer(keys, values, token) { const relayer = _.sample(await getServiceDwnEndpoints()); const response = await fetch(`${relayer}/bulk-add-to-data-layer`, { method : 'POST', mode : 'cors', cache : 'no-cache', headers : { Accept : '*/*', 'Content-Type' : 'application/json', Authorization : `Bearer ${token}`, }, body: JSON.stringify({ keys : keys, values : values, }), }); return await response.text(); } async getValuesFromChiaDataLayer(id, token) { const relayer = _.sample(await getServiceDwnEndpoints()); const response = await fetch( `${relayer}/get-values-from-data-layer?id=${id}`, { method : 'GET', mode : 'cors', cache : 'no-cache', headers : { Accept : '*/*', 'Content-Type' : 'application/json', Authorization : `Bearer ${token}`, }, }, ); return await response.text(); } async mintChiaNFT(uris, hash, token) { const relayer = _.sample(await getServiceDwnEndpoints()); const response = await fetch(`${relayer}/mint-nft`, { method : 'POST', mode : 'cors', cache : 'no-cache', headers : { Accept : '*/*', 'Content-Type' : 'application/json', Authorization : `Bearer ${token}`, }, body: JSON.stringify({ uris : uris, hash : hash, }), }); return await response.text(); } async getChiaNFTs(wallet_id, token) { const relayer = _.sample(await getServiceDwnEndpoints()); const response = await fetch(`${relayer}/get-nfts?wallet_id=${wallet_id}`, { method : 'GET', mode : 'cors', cache : 'no-cache', headers : { Accept : '*/*', 'Content-Type' : 'application/json', Authorization : `Bearer ${token}`, }, }); return await response.text(); } }