UNPKG

@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
"use strict"; /** * 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