Added functions for getting wallet balance and user data

restructured project files to be easier to understand
This commit is contained in:
Qortal Dev 2023-10-25 15:34:13 -06:00
parent c5adab5465
commit 808a6fa5d7
18 changed files with 209 additions and 121 deletions

View File

@ -1,10 +1,13 @@
export * from "./src/Core/Interfaces"; export * from "./src/TypescriptUtils/Numbers/Colors";
export * from "./src/Core/SendCoin"; export * from "./src/TypescriptUtils/Numbers/NumberConversion";
export * from "./src/Core/Types"; export * from "./src/TypescriptUtils/Numbers/Numbers";
export * from "./src/Core/API/Names"; export * from "./src/TypescriptUtils/Numbers/StringNumbers";
export * from "./src/Core/API/Transactions"; export * from "./src/TypescriptUtils/Strings/printFunctions";
export * from "./src/Numbers/Colors";
export * from "./src/Numbers/NumberConversion"; export * from "./src/QortalRequest/Utils/Interfaces";
export * from "./src/Numbers/Numbers"; export * from "./src/QortalRequest/Utils/Types";
export * from "./src/Numbers/StringNumbers";
export * from "./src/Strings/printFunctions"; export * from "./src/QortalRequest/getFromAddress";
export * from "./src/QortalRequest/getFromSelf";
export * from "./src/QortalRequest/SendCoin";
export * from "./src/QortalRequest/Transactions";

69
package-lock.json generated
View File

@ -1,12 +1,12 @@
{ {
"name": "qortal-app-utils", "name": "qortal-app-utils",
"version": "1.1.0", "version": "1.1.1",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "qortal-app-utils", "name": "qortal-app-utils",
"version": "1.1.0", "version": "1.1.1",
"dependencies": { "dependencies": {
"@emotion/react": "^11.11.1", "@emotion/react": "^11.11.1",
"@emotion/styled": "^11.11.0", "@emotion/styled": "^11.11.0",
@ -22,7 +22,8 @@
"react-intersection-observer": "^9.4.3", "react-intersection-observer": "^9.4.3",
"react-quill": "^2.0.0", "react-quill": "^2.0.0",
"react-rnd": "^10.4.1", "react-rnd": "^10.4.1",
"ts-key-enum": "^2.0.12" "ts-key-enum": "^2.0.12",
"vite-tsconfig-paths": "^4.2.1"
}, },
"devDependencies": { "devDependencies": {
"@types/react": "^18.0.28", "@types/react": "^18.0.28",
@ -1949,7 +1950,6 @@
"version": "4.3.4", "version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dev": true,
"dependencies": { "dependencies": {
"ms": "2.1.2" "ms": "2.1.2"
}, },
@ -2050,7 +2050,7 @@
"version": "0.18.20", "version": "0.18.20",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz",
"integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==",
"dev": true, "devOptional": true,
"hasInstallScript": true, "hasInstallScript": true,
"bin": { "bin": {
"esbuild": "bin/esbuild" "esbuild": "bin/esbuild"
@ -2658,6 +2658,11 @@
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
} }
}, },
"node_modules/globrex": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
"integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg=="
},
"node_modules/graphemer": { "node_modules/graphemer": {
"version": "1.4.0", "version": "1.4.0",
"resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
@ -3071,14 +3076,13 @@
"node_modules/ms": { "node_modules/ms": {
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
"dev": true
}, },
"node_modules/nanoid": { "node_modules/nanoid": {
"version": "3.3.6", "version": "3.3.6",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
"integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
"dev": true, "devOptional": true,
"funding": [ "funding": [
{ {
"type": "github", "type": "github",
@ -3294,7 +3298,7 @@
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
"dev": true "devOptional": true
}, },
"node_modules/picomatch": { "node_modules/picomatch": {
"version": "2.3.1", "version": "2.3.1",
@ -3312,7 +3316,7 @@
"version": "8.4.29", "version": "8.4.29",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz",
"integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==", "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==",
"dev": true, "devOptional": true,
"funding": [ "funding": [
{ {
"type": "opencollective", "type": "opencollective",
@ -3646,7 +3650,7 @@
"version": "3.28.1", "version": "3.28.1",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-3.28.1.tgz", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.28.1.tgz",
"integrity": "sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==", "integrity": "sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==",
"dev": true, "devOptional": true,
"bin": { "bin": {
"rollup": "dist/bin/rollup" "rollup": "dist/bin/rollup"
}, },
@ -3764,7 +3768,7 @@
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
"dev": true, "devOptional": true,
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=0.10.0"
} }
@ -3851,6 +3855,25 @@
"resolved": "https://registry.npmjs.org/ts-key-enum/-/ts-key-enum-2.0.12.tgz", "resolved": "https://registry.npmjs.org/ts-key-enum/-/ts-key-enum-2.0.12.tgz",
"integrity": "sha512-Ety4IvKMaeG34AyXMp5r11XiVZNDRL+XWxXbVVJjLvq2vxKRttEANBE7Za1bxCAZRdH2/sZT6jFyyTWxXz28hw==" "integrity": "sha512-Ety4IvKMaeG34AyXMp5r11XiVZNDRL+XWxXbVVJjLvq2vxKRttEANBE7Za1bxCAZRdH2/sZT6jFyyTWxXz28hw=="
}, },
"node_modules/tsconfck": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-2.1.2.tgz",
"integrity": "sha512-ghqN1b0puy3MhhviwO2kGF8SeMDNhEbnKxjK7h6+fvY9JAxqvXi8y5NAHSQv687OVboS2uZIByzGd45/YxrRHg==",
"bin": {
"tsconfck": "bin/tsconfck.js"
},
"engines": {
"node": "^14.13.1 || ^16 || >=18"
},
"peerDependencies": {
"typescript": "^4.3.5 || ^5.0.0"
},
"peerDependenciesMeta": {
"typescript": {
"optional": true
}
}
},
"node_modules/tslib": { "node_modules/tslib": {
"version": "2.6.2", "version": "2.6.2",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
@ -3905,7 +3928,7 @@
"version": "5.2.2", "version": "5.2.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
"integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
"dev": true, "devOptional": true,
"bin": { "bin": {
"tsc": "bin/tsc", "tsc": "bin/tsc",
"tsserver": "bin/tsserver" "tsserver": "bin/tsserver"
@ -3962,7 +3985,7 @@
"version": "4.4.9", "version": "4.4.9",
"resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz",
"integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==",
"dev": true, "devOptional": true,
"dependencies": { "dependencies": {
"esbuild": "^0.18.10", "esbuild": "^0.18.10",
"postcss": "^8.4.27", "postcss": "^8.4.27",
@ -4013,6 +4036,24 @@
} }
} }
}, },
"node_modules/vite-tsconfig-paths": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-4.2.1.tgz",
"integrity": "sha512-GNUI6ZgPqT3oervkvzU+qtys83+75N/OuDaQl7HmOqFTb0pjZsuARrRipsyJhJ3enqV8beI1xhGbToR4o78nSQ==",
"dependencies": {
"debug": "^4.1.1",
"globrex": "^0.1.2",
"tsconfck": "^2.1.0"
},
"peerDependencies": {
"vite": "*"
},
"peerDependenciesMeta": {
"vite": {
"optional": true
}
}
},
"node_modules/which": { "node_modules/which": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",

View File

@ -36,7 +36,8 @@
"react-intersection-observer": "^9.4.3", "react-intersection-observer": "^9.4.3",
"react-quill": "^2.0.0", "react-quill": "^2.0.0",
"react-rnd": "^10.4.1", "react-rnd": "^10.4.1",
"ts-key-enum": "^2.0.12" "ts-key-enum": "^2.0.12",
"vite-tsconfig-paths": "^4.2.1"
}, },
"devDependencies": { "devDependencies": {
"@types/react": "^18.0.28", "@types/react": "^18.0.28",

View File

@ -1,7 +1,9 @@
import { CoinType } from "./Utils/Types";
export const sendCoin = async ( export const sendCoin = async (
address: string, address: string,
amount: number, amount: number,
coin: string coin: CoinType
) => { ) => {
return qortalRequest({ return qortalRequest({
action: "SEND_COIN", action: "SEND_COIN",

View File

@ -1,7 +1,7 @@
import { import {
SearchTransactionResponse, SearchTransactionResponse,
TransactionSearchParams, TransactionSearchParams,
} from "../Interfaces"; } from "./Utils/Interfaces";
export const searchTransactions = async (params: TransactionSearchParams) => { export const searchTransactions = async (params: TransactionSearchParams) => {
return (await qortalRequest({ return (await qortalRequest({

View File

@ -1,4 +1,4 @@
import { ConfirmationStatus, TransactionType } from ".//Types"; import { ConfirmationStatus, TransactionType } from "./Types";
export interface GetRequestData { export interface GetRequestData {
limit?: number; limit?: number;

View File

@ -41,3 +41,5 @@ export type TransactionType =
| "ACCOUNT_LEVEL" | "ACCOUNT_LEVEL"
| "TRANSFER_PRIVS" | "TRANSFER_PRIVS"
| "PRESENCE"; | "PRESENCE";
export type CoinType = "QORT" | "BTC" | "LTC" | "DOGE" | "DGB" | "RVN" | "ARRR";

View File

@ -1,5 +1,5 @@
import { stringIsEmpty } from "../../Numbers/StringNumbers"; import { stringIsEmpty } from "../TypescriptUtils/Numbers/StringNumbers";
import { GetRequestData } from "../Interfaces"; import { GetRequestData } from "./Utils/Interfaces";
type AccountName = { name: string; owner: string }; type AccountName = { name: string; owner: string };
export const getAccountNames = async ( export const getAccountNames = async (
@ -19,3 +19,10 @@ export const getAccountNames = async (
return emptyNamesFilled.length > 0 ? emptyNamesFilled : [namelessAddress]; return emptyNamesFilled.length > 0 ? emptyNamesFilled : [namelessAddress];
}; };
export const getBalance = async (address: string) => {
return (await qortalRequest({
action: "GET_BALANCE",
address,
})) as number;
};

View File

@ -0,0 +1,22 @@
import { getBalance } from "./getFromAddress";
import { CoinType } from "./Utils/Types";
export const getWalletBalance = async (coin: CoinType) => {
return (await qortalRequest({
action: "GET_WALLET_BALANCE",
coin,
})) as number;
};
export const getUserBalance = async () => {
const accountInfo = await getUserAccount();
return (await getBalance(accountInfo.address)) as number;
};
export type AccountInfo = { address: string; publicKey: string };
export const getUserAccount = async () => {
return (await qortalRequest({
action: "GET_USER_ACCOUNT",
})) as AccountInfo;
};

174
src/global.d.ts vendored
View File

@ -1,92 +1,92 @@
type TransactionType = type TransactionType =
| "GENESIS" | "GENESIS"
| "PAYMENT" | "PAYMENT"
| "REGISTER_NAME" | "REGISTER_NAME"
| "UPDATE_NAME" | "UPDATE_NAME"
| "SELL_NAME" | "SELL_NAME"
| "CANCEL_SELL_NAME" | "CANCEL_SELL_NAME"
| "BUY_NAME" | "BUY_NAME"
| "CREATE_POLL" | "CREATE_POLL"
| "VOTE_ON_POLL" | "VOTE_ON_POLL"
| "ARBITRARY" | "ARBITRARY"
| "ISSUE_ASSET" | "ISSUE_ASSET"
| "TRANSFER_ASSET" | "TRANSFER_ASSET"
| "CREATE_ASSET_ORDER" | "CREATE_ASSET_ORDER"
| "CANCEL_ASSET_ORDER" | "CANCEL_ASSET_ORDER"
| "MULTI_PAYMENT" | "MULTI_PAYMENT"
| "DEPLOY_AT" | "DEPLOY_AT"
| "MESSAGE" | "MESSAGE"
| "CHAT" | "CHAT"
| "PUBLICIZE" | "PUBLICIZE"
| "AIRDROP" | "AIRDROP"
| "AT" | "AT"
| "CREATE_GROUP" | "CREATE_GROUP"
| "UPDATE_GROUP" | "UPDATE_GROUP"
| "ADD_GROUP_ADMIN" | "ADD_GROUP_ADMIN"
| "REMOVE_GROUP_ADMIN" | "REMOVE_GROUP_ADMIN"
| "GROUP_BAN" | "GROUP_BAN"
| "CANCEL_GROUP_BAN" | "CANCEL_GROUP_BAN"
| "GROUP_KICK" | "GROUP_KICK"
| "GROUP_INVITE" | "GROUP_INVITE"
| "CANCEL_GROUP_INVITE" | "CANCEL_GROUP_INVITE"
| "JOIN_GROUP" | "JOIN_GROUP"
| "LEAVE_GROUP" | "LEAVE_GROUP"
| "GROUP_APPROVAL" | "GROUP_APPROVAL"
| "SET_GROUP" | "SET_GROUP"
| "UPDATE_ASSET" | "UPDATE_ASSET"
| "ACCOUNT_FLAGS" | "ACCOUNT_FLAGS"
| "ENABLE_FORGING" | "ENABLE_FORGING"
| "REWARD_SHARE" | "REWARD_SHARE"
| "ACCOUNT_LEVEL" | "ACCOUNT_LEVEL"
| "TRANSFER_PRIVS" | "TRANSFER_PRIVS"
| "PRESENCE"; | "PRESENCE";
interface QortalRequestOptions { interface QortalRequestOptions {
action: string; action: string;
name?: string; name?: string;
service?: string; service?: string;
data64?: string; data64?: string;
title?: string; title?: string;
description?: string; description?: string;
category?: string; category?: string;
tags?: string[] | string; tags?: string[] | string;
identifier?: string; identifier?: string;
address?: string; address?: string;
metaData?: string; metaData?: string;
encoding?: string; encoding?: string;
includeMetadata?: boolean; includeMetadata?: boolean;
limit?: number; limit?: number;
offset?: number; offset?: number;
reverse?: boolean; reverse?: boolean;
resources?: any[]; resources?: any[];
filename?: string; filename?: string;
list_name?: string; list_name?: string;
item?: string; item?: string;
items?: string[]; items?: string[];
tag1?: string; tag1?: string;
tag2?: string; tag2?: string;
tag3?: string; tag3?: string;
tag4?: string; tag4?: string;
tag5?: string; tag5?: string;
coin?: string; coin?: string;
destinationAddress?: string; destinationAddress?: string;
amount?: number; amount?: number;
blob?: Blob; blob?: Blob;
mimeType?: string; mimeType?: string;
file?: File; file?: File;
encryptedData?: string; encryptedData?: string;
mode?: string; mode?: string;
query?: string; query?: string;
excludeBlocked?: boolean; excludeBlocked?: boolean;
exactMatchNames?: boolean; exactMatchNames?: boolean;
creationBytes?: string; creationBytes?: string;
type?: string; type?: string;
assetId?: number; assetId?: number;
txType?: TransactionType[]; txType?: TransactionType[];
confirmationStatus?: string; confirmationStatus?: string;
startBlock?: number; startBlock?: number;
blockLimit?: number; blockLimit?: number;
txGroupId?: number; txGroupId?: number;
} }
declare function qortalRequest(options: QortalRequestOptions): Promise<object>; declare function qortalRequest(options: QortalRequestOptions): Promise<any>;

View File

@ -2,7 +2,11 @@
"compilerOptions": { "compilerOptions": {
"target": "ESNext", "target": "ESNext",
"module": "ESNext", "module": "ESNext",
"lib": ["DOM", "DOM.Iterable", "ESNext"], "lib": [
"DOM",
"DOM.Iterable",
"ESNext"
],
"skipLibCheck": true, "skipLibCheck": true,
"declaration": true, "declaration": true,
"sourceMap": true, "sourceMap": true,
@ -26,6 +30,12 @@
"esm": true "esm": true
}, },
"experimentalSpecifierResolution": "node", "experimentalSpecifierResolution": "node",
"references": [
{
"path": "./tsconfig.node.json"
}
],
"baseUrl": "./src",
"include": ["src/**/*"], "include": ["src/**/*"],
"references": [{ "path": "./tsconfig.node.json" }]
} }

View File

@ -1,6 +1,7 @@
import { defineConfig } from "vite"; import { defineConfig } from "vite";
import react from "@vitejs/plugin-react"; import react from "@vitejs/plugin-react";
import { resolve } from "path"; import { resolve } from "path";
// https://vitejs.dev/config/ // https://vitejs.dev/config/
export default defineConfig({ export default defineConfig({
build: { build: {
@ -10,5 +11,4 @@ export default defineConfig({
}, },
}, },
plugins: [react()], plugins: [react()],
base: "",
}); });