@yogesh0333/yogiway
Version:
YOGIWAY Format - Ultra-compact, nested-aware data format for LLM prompts. Handles deeply nested JSON efficiently, 10-15% more efficient than TOON.
128 lines • 4.03 kB
JavaScript
;
/**
* Token Usage Tracker
* Tracks token savings and charges user's wallet
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.setUserEmail = setUserEmail;
exports.trackUsage = trackUsage;
exports.getWalletBalance = getWalletBalance;
const auth_1 = require("./auth");
// Usage tracking servers (deprecated - library is now free, tracking is optional)
const USAGE_SERVER_URL = process.env.YOGIWAY_USAGE_SERVER || "";
const WALLET_SERVER_URL = process.env.YOGIWAY_WALLET_SERVER || "";
/**
* Estimate tokens from text size (rough approximation)
* 1 token ≈ 4 characters for English text
*/
function estimateTokens(text) {
return Math.ceil(text.length / 4);
}
/**
* @deprecated Use login() from auth module instead
* Set user email for usage tracking (legacy support)
*/
function setUserEmail(email) {
// This is now handled by authentication
console.warn("setUserEmail is deprecated. Use login() from auth module instead.");
}
/**
* Track token usage and charge wallet
*/
async function trackUsage(originalData, compressedData) {
// Usage tracking is optional - library is free
// Only track if user is authenticated and wants to track usage
const user = (0, auth_1.getCurrentUser)();
if (!user) {
// If not authenticated, still return stats but don't track
const originalTokens = estimateTokens(JSON.stringify(originalData));
const compressedTokens = estimateTokens(compressedData);
return {
originalTokens,
compressedTokens,
tokensSaved: originalTokens - compressedTokens,
cost: 0,
};
}
// Calculate sizes
const originalSize = JSON.stringify(originalData).length;
const compressedSize = compressedData.length;
// Estimate tokens
const originalTokens = estimateTokens(JSON.stringify(originalData));
const compressedTokens = estimateTokens(compressedData);
const tokensSaved = originalTokens - compressedTokens;
if (tokensSaved <= 0) {
return {
originalTokens,
compressedTokens,
tokensSaved: 0,
cost: 0,
};
}
try {
// Send to server with authentication
const response = await (0, auth_1.authenticatedFetch)(USAGE_SERVER_URL, {
method: "POST",
body: JSON.stringify({
tokensSaved,
originalSize,
compressedSize,
}),
});
const data = (await response.json());
if (!data.success) {
// Insufficient balance or error
throw new Error(data.error || "Failed to track usage. Please check your wallet balance.");
}
return {
originalTokens,
compressedTokens,
tokensSaved,
cost: data.cost || 0,
};
}
catch (error) {
// Don't block usage if tracking fails
console.warn("Usage tracking failed:", error);
return {
originalTokens,
compressedTokens,
tokensSaved,
cost: 0,
};
}
}
/**
* Get wallet balance
*/
async function getWalletBalance() {
const user = (0, auth_1.getCurrentUser)();
if (!user) {
return {
balance: 0,
totalSpent: 0,
totalTokensSaved: 0,
};
}
try {
const response = await (0, auth_1.authenticatedFetch)(WALLET_SERVER_URL, {
method: "POST",
body: JSON.stringify({}),
});
const data = (await response.json());
return {
balance: data.balance || 0,
totalSpent: data.totalSpent || 0,
totalTokensSaved: data.totalTokensSaved || 0,
};
}
catch (error) {
console.error("Failed to get wallet balance:", error);
return {
balance: 0,
totalSpent: 0,
totalTokensSaved: 0,
};
}
}
//# sourceMappingURL=usage-tracker.js.map