UNPKG

@parcl-finance/product-sdk

Version:

TypeScript SDK for interacting with Parcl's product APIs

155 lines 5.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DealAnalysisClient = void 0; const defaults_1 = require("./constants/defaults"); const httpClient_1 = require("./httpClient"); /** * DealAnalysis class provides methods to analyze real estate investment deals * comparing Parcl synthetic exposure vs physical real estate ownership */ class DealAnalysisClient { headers; expressClient; constructor(env, accessToken) { const headers = {}; if (accessToken) { headers.Authorization = `Bearer ${accessToken}`; } this.headers = headers; this.expressClient = new httpClient_1.HttpClient((0, defaults_1.getDefaultExpressApiUrl)(env), this.headers); } /** * Analyzes a real estate investment deal comparing Parcl vs physical ownership * * @param params - Deal analysis parameters * @param params.symbol - Market symbol (e.g., "NYC", "LA", "SF") * @param params.timeframe - Analysis timeframe ("1m" | "3m" | "6m" | "1y"), defaults to "6m" * @param params.dealsize - Deal size in square feet * @param params.leverage - Leverage ratio (e.g., 5 for 5:1 leverage) * @returns Promise<DealAnalysis> - Comprehensive deal analysis comparing Parcl vs physical * * @example * ```typescript * const analysis = await sdk.dealAnalysis.analyzeDeal({ * symbol: "NYC", * timeframe: "6m", * dealsize: 1000, * leverage: 5 * }); * * console.log(`Parcl net return: ${analysis.netReturn.parclPercentage}%`); * console.log(`Physical net return: ${analysis.netReturn.physicalPercentage}%`); * ``` */ async analyzeDeal(params) { const { symbol, ...queryParams } = params; // Set default timeframe if not provided const finalParams = { timeframe: "6m", ...queryParams, }; const analysis = await this.expressClient.get({ path: `/deal-analysis/${symbol}`, params: finalParams, }); return analysis; } /** * Analyzes multiple deals for comparison * * @param deals - Array of deal parameters to analyze * @returns Promise<DealAnalysis[]> - Array of deal analyses * * @example * ```typescript * const analyses = await sdk.dealAnalysis.analyzeMultipleDeals([ * { symbol: "NYC", dealsize: 1000, leverage: 5 }, * { symbol: "LA", dealsize: 1000, leverage: 5 }, * { symbol: "SF", dealsize: 1000, leverage: 5 } * ]); * * analyses.forEach((analysis, index) => { * console.log(`Deal ${index + 1} Parcl ROI: ${analysis.netReturn.parclPercentage}%`); * }); * ``` */ async analyzeMultipleDeals(deals) { const analyses = await Promise.all(deals.map((deal) => this.analyzeDeal(deal))); return analyses; } /** * Compares Parcl vs physical performance for a specific deal * * @param params - Deal analysis parameters * @returns Promise<{ parclAdvantage: number; recommendation: string; analysis: DealAnalysis }> * * @example * ```typescript * const comparison = await sdk.dealAnalysis.compareParclVsPhysical({ * symbol: "NYC", * dealsize: 1000, * leverage: 5 * }); * * console.log(comparison.recommendation); * console.log(`Parcl advantage: ${comparison.parclAdvantage}%`); * ``` */ async compareParclVsPhysical(params) { const analysis = await this.analyzeDeal(params); const parclAdvantage = analysis.netReturn.parclPercentage - analysis.netReturn.physicalPercentage; let recommendation; if (parclAdvantage > 5) { recommendation = "Strong recommendation for Parcl - significantly better returns with lower costs and complexity"; } else if (parclAdvantage > 0) { recommendation = "Slight advantage to Parcl - better returns with reduced operational overhead"; } else if (parclAdvantage > -5) { recommendation = "Similar performance - consider Parcl for liquidity and simplicity advantages"; } else { recommendation = "Physical real estate shows better returns - consider if you can handle the operational complexity"; } return { parclAdvantage, recommendation, analysis, }; } /** * Gets a summary of key metrics for a deal analysis * * @param params - Deal analysis parameters * @returns Promise<DealSummary> - Key metrics summary */ async getDealSummary(params) { const analysis = await this.analyzeDeal(params); return { symbol: params.symbol, dealSize: analysis.dealsizeSqft, dealValue: analysis.dealsizeNotional, timeframe: params.timeframe || "6m", leverage: params.leverage, parclNetReturn: { percentage: analysis.netReturn.parclPercentage, dollars: analysis.netReturn.parclDollars, }, physicalNetReturn: { percentage: analysis.netReturn.physicalPercentage, dollars: analysis.netReturn.physicalDollars, }, parclCashFlow: analysis.cashFlow.parcl, physicalCashFlow: analysis.cashFlow.physical, parclTotalCosts: analysis.parclTotalCosts, physicalTotalCosts: analysis.physicalTotalCosts, costSavings: analysis.physicalTotalCosts - analysis.parclTotalCosts, }; } } exports.DealAnalysisClient = DealAnalysisClient; //# sourceMappingURL=dealAnalysis.js.map