How barchart/portfolio-public works
This repository publishes a shared portfolio domain library and a JavaScript client SDK. The user-facing path is client code configuring a gateway, obtaining JWT credentials, and invoking Portfolio Service operations; shared models then define validation, transaction formatting, position calculations/grouping, summaries, and serialization. The README documents these package roles; source excerpts show gateway authentication setup and position-processing internals. Many gateway operations and schema relationships are not fully excerpted, so uncertain links are omitted.
Main entry points: PositionContainer.js Position container · PortfolioGateway.js Portfolio gateway · PositionItem.js Position item · InstrumentType.js Domain types
Components 25
Client SDK
- Environment config
packages/portfolio-client-js/lib/common/Configuration.js - Portfolio gateway
packages/portfolio-client-js/lib/gateway/PortfolioGateway.js - JWT provider
packages/portfolio-client-js/lib/security/JwtProvider.js
Portfolio Domain
- Failure types
packages/portfolio-api-common/lib/api/failures/PortfolioFailureType.js - Domain types
packages/portfolio-api-common/lib/data/InstrumentType.js - Transaction rules
packages/portfolio-api-common/lib/data/TransactionValidator.js - Average price
packages/portfolio-api-common/lib/calculators/AveragePriceCalculator.js - Valuation calculator
packages/portfolio-api-common/lib/calculators/ValuationCalculator.js - Transaction formatter
packages/portfolio-api-common/lib/formatters/TransactionFormatter.js - Instrument provider
packages/portfolio-api-common/lib/providers/InstrumentProvider.js - Summary frames
packages/portfolio-api-common/lib/data/PositionSummaryFrame.js - Summary formatter
packages/portfolio-api-common/lib/formatters/PositionSummaryFormatter.js - WebSocket actions
packages/portfolio-api-common/lib/websockets/WebsocketActionType.js
Position Processing
- Position container
packages/portfolio-api-common/lib/processing/PositionContainer.js - Position group
packages/portfolio-api-common/lib/processing/PositionGroup.js - Position item
packages/portfolio-api-common/lib/processing/PositionItem.js - Grouping definition
packages/portfolio-api-common/lib/processing/definitions/PositionLevelDefinition.js - Group binding
packages/portfolio-api-common/lib/processing/binding/PositionGroupBinding.js
Serialization
- Portfolio schema
packages/portfolio-api-common/lib/serialization/PortfolioSchema.js - Position schema
packages/portfolio-api-common/lib/serialization/PositionSchema.js - Summary schema
packages/portfolio-api-common/lib/serialization/PositionSummarySchema.js - Transaction schema
packages/portfolio-api-common/lib/serialization/TransactionSchema.js - Report availability
packages/portfolio-api-common/lib/serialization/reports/BrokerageReportAvailabilitySchema.js
Other components
- SDK consumer
- Portfolio Service
Connections 23
- SDK consumer → Portfolio gateway: invokes SDK
packages/portfolio-client-js/lib/gateway/PortfolioGateway.js - Portfolio gateway → Environment config: uses environment
packages/portfolio-client-js/lib/gateway/PortfolioGateway.js - Portfolio gateway → JWT provider: requests token
packages/portfolio-client-js/lib/gateway/PortfolioGateway.js - JWT provider → Environment config: reads token host
packages/portfolio-client-js/lib/security/JwtProvider.js - Portfolio gateway → Portfolio Service: sends REST requests
packages/portfolio-client-js/lib/gateway/PortfolioGateway.js - JWT provider → Portfolio Service: requests impersonation token
packages/portfolio-client-js/lib/security/JwtProvider.js - Transaction rules → Domain types: validates instrument
packages/portfolio-api-common/lib/data/TransactionValidator.js - Transaction formatter → Average price: calculates average price
packages/portfolio-api-common/lib/formatters/TransactionFormatter.js - Position item → Average price: calculates basis price
packages/portfolio-api-common/lib/processing/PositionItem.js - Position item → Valuation calculator: calculates valuation
packages/portfolio-api-common/lib/processing/PositionItem.js - Position item → Domain types: branches by instrument
packages/portfolio-api-common/lib/processing/PositionItem.js - Position group → Group binding: creates binding
packages/portfolio-api-common/lib/processing/PositionGroup.js - Position group → Grouping definition: uses grouping rules
packages/portfolio-api-common/lib/processing/PositionGroup.js - Position container → Position group: constructs groups
packages/portfolio-api-common/lib/processing/PositionContainer.js - Position container → Position item: manages items
packages/portfolio-api-common/lib/processing/PositionContainer.js - Position container → Summary frames: uses summary frames
packages/portfolio-api-common/lib/processing/PositionContainer.js - Position container → Grouping definition: uses tree definitions
packages/portfolio-api-common/lib/processing/PositionContainer.js - Summary formatter → Summary frames: formats frame data
- Portfolio schema → Position schema: describes portfolio data
- Position schema → Domain types: encodes instrument type
packages/portfolio-api-common/lib/serialization/PositionSchema.js - Summary schema → Summary frames: encodes frame
packages/portfolio-api-common/lib/serialization/PositionSummarySchema.js - Transaction schema → Domain types: encodes instrument type
packages/portfolio-api-common/lib/serialization/TransactionSchema.js - Report availability → Summary frames: encodes summary frame
packages/portfolio-api-common/lib/serialization/reports/BrokerageReportAvailabilitySchema.js