@parcl-finance/product-sdk
Version:
TypeScript SDK for interacting with Parcl's product APIs
155 lines • 5.81 kB
JavaScript
;
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