Examples
This page contains practical examples of using the xByte SDK in common scenarios.
Complete Setup Flow
This example shows the complete flow from creating a client to setting content prices:
import { xByteClient } from "xbyte-sdk";
async function setupContentPlatform() {
const client = new xByteClient();
const clientResponse = await client.createClient({
name: "My Music Platform",
wallet: "0x1234567890123456789012345678901234567890",
});
if (clientResponse.status !== "Success") {
throw new Error(`Failed to create client: ${clientResponse.data}`);
}
const clientId = clientResponse.data.id!;
const bucketResponse = await client.registerBucket({
bucket: "music-content",
client: clientId,
});
if (bucketResponse.status !== "Success") {
throw new Error(`Failed to register bucket: ${bucketResponse.data}`);
}
console.log("Setup complete! Client ID:", clientId);
return clientId;
}
Setting Prices for Multiple Files
import { xByteClient } from "xbyte-sdk";
async function setPricesForFiles(
client: xByteClient,
bucket: string,
files: Array<{ name: string; price: number }>,
) {
const results = await Promise.allSettled(
files.map((file) =>
client.setPrice({
bucket,
object: file.name,
price: file.price,
}),
),
);
results.forEach((result, index) => {
if (result.status === "fulfilled" && result.value.status === "Success") {
console.log(`✓ Price set for ${files[index].name}`);
} else {
console.error(`✗ Failed to set price for ${files[index].name}`);
}
});
}
const client = new xByteClient();
await setPricesForFiles(client, "music-content", [
{ name: "song1.mp3", price: 0.001 },
{ name: "song2.mp3", price: 0.0015 },
{ name: "album.zip", price: 0.002 },
]);
Checking Vault Balance
import { xByteEvmClient } from "xbyte-sdk";
async function checkVaultEarnings(ownerAddress: string) {
const evmClient = new xByteEvmClient();
const vaultAddress = await evmClient.getComputeVaultAddress(ownerAddress);
const nativeBalance = await evmClient.getVaultBalance(vaultAddress);
const usdcAddress = "0x036CbD53842c5426634e7929541eC2318f3dCF7e";
const usdcBalance = await evmClient.getVaultERC20Balance(vaultAddress, usdcAddress);
console.log("Vault Address:", vaultAddress);
console.log("Native Balance (ETH):", Number(nativeBalance) / 1e18);
console.log("USDC Balance:", Number(usdcBalance) / 1e6);
}
Monitoring Vault Events
import { xByteEvmClient } from "xbyte-sdk";
async function monitorVaultWithdrawals(vaultAddress: string) {
const evmClient = new xByteEvmClient();
const events = await evmClient.getVaultEvents(vaultAddress);
events.forEach((event) => {
if (event.eventName === "WithdrawNative") {
console.log("Native withdrawal:", {
amount: event.args.amount,
owner: event.args.owner,
blockNumber: event.blockNumber,
});
} else if (event.eventName === "Withdraw") {
console.log("ERC20 withdrawal:", {
amount: event.args.amount,
token: event.args.token,
owner: event.args.owner,
blockNumber: event.blockNumber,
});
}
});
}
Error Handling Wrapper
import { xByteClient, ApiResponse } from "xbyte-sdk";
class XByteService {
constructor(private client: xByteClient) {}
async safeCall<T>(
operation: () => Promise<ApiResponse<T, string>>,
errorMessage: string,
): Promise<T> {
const response = await operation();
if (response.status === "Success") {
return response.data;
} else if (response.status === "PaymentRequired") {
throw new Error(`Payment required: ${response.data}`);
} else {
throw new Error(`${errorMessage}: ${response.data}`);
}
}
async getPriceSafe(bucket: string, object: string): Promise<number> {
return this.safeCall(() => this.client.getPrice(bucket, object), "Failed to get price");
}
async setPriceSafe(bucket: string, object: string, price: number): Promise<void> {
await this.safeCall(
() => this.client.setPrice({ bucket, object, price }),
"Failed to set price",
);
}
}
const service = new XByteService(new xByteClient());
const price = await service.getPriceSafe("bucket", "object");
React Hook Example
import { useState, useEffect } from "react";
import { xByteClient, ApiResponse } from "xbyte-sdk";
function useXBytePrice(bucket: string, object: string) {
const [price, setPrice] = useState<number | null>(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState<string | null>(null);
useEffect(() => {
const client = new xByteClient();
client
.getPrice(bucket, object)
.then((response: ApiResponse<number, string>) => {
if (response.status === "Success") {
setPrice(response.data);
} else {
setError(response.data);
}
})
.catch((err) => setError(err.message))
.finally(() => setLoading(false));
}, [bucket, object]);
return { price, loading, error };
}
function ContentPrice({ bucket, object }: { bucket: string; object: string }) {
const { price, loading, error } = useXBytePrice(bucket, object);
if (loading) return <div>Loading price...</div>;
if (error) return <div>Error: {error}</div>;
return <div>Price: {price} USDC per byte</div>;
}
Batch Operations
import { xByteClient } from "xbyte-sdk";
async function batchGetPrices(
client: xByteClient,
bucket: string,
objects: string[],
): Promise<Map<string, number>> {
const priceMap = new Map<string, number>();
await Promise.all(
objects.map(async (object) => {
const response = await client.getPrice(bucket, object);
if (response.status === "Success") {
priceMap.set(object, response.data);
}
}),
);
return priceMap;
}
const client = new xByteClient();
const prices = await batchGetPrices(client, "music-content", [
"song1.mp3",
"song2.mp3",
"song3.mp3",
]);
prices.forEach((price, object) => {
console.log(`${object}: ${price} USDC per byte`);
});
Integration with Wallet
import { xByteEvmClient } from "xbyte-sdk";
async function createVaultWithWallet() {
const evmClient = new xByteEvmClient();
const signature = evmClient.signatureCreateVault();
if (!window.ethereum) {
throw new Error("MetaMask not found");
}
const accounts = await window.ethereum.request({
method: "eth_requestAccounts",
});
const txHash = await window.ethereum.request({
method: "eth_sendTransaction",
params: [
{
from: accounts[0],
to: "0x4957cDc66a60FfBf6E78baE23d18973a5dcC3e05",
data: signature,
},
],
});
console.log("Transaction hash:", txHash);
return txHash;
}