Your ROOT_URL in app.ini is https://git.cloudchain.link/ but you are visiting https://dash.bss.nz/open-source-mirrors/ghostfolio/commit/c973ffd3ba24084452c0a7bfd424fc6703e76b51?style=unified&whitespace=ignore-eol
You should set ROOT_URL correctly, otherwise the web may not work correctly.
93 changed files with
244 additions and
213 deletions
@ -15,6 +15,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Hid unknown exchange in the position overview
- Refactored the portfolio unit tests to work without database
- Moved shared interfaces to `@ghostfolio/helper/interfaces`
- Moved shared types to `@ghostfolio/helper/types`
## 1.3.0 - 15.05.2021
@ -1,10 +1,10 @@
import { RequestWithUser } from '@ghostfolio/api/app/interfaces/request-with-user.type' ;
import { Access } from '@ghostfolio/helper/interfaces' ;
import { RequestWithUser } from '@ghostfolio/helper/types' ;
import { Controller , Get , Inject , UseGuards } from '@nestjs/common' ;
import { REQUEST } from '@nestjs/core' ;
import { AuthGuard } from '@nestjs/passport' ;
import { AccessService } from './access.service' ;
import { Access } from './interfaces/access.interface' ;
@Controller ( 'access' )
export class AccessController {
@ -1,9 +1,8 @@
import { PrismaService } from '@ghostfolio/api/services/prisma.service' ;
import { AccessWithGranteeUser } from '@ghostfolio/helper/types' ;
import { Injectable } from '@nestjs/common' ;
import { Prisma } from '@prisma/client' ;
import { AccessWithGranteeUser } from './interfaces/access-with-grantee-user.type' ;
@Injectable ( )
export class AccessService {
public constructor ( private prisma : PrismaService ) { }
@ -1,7 +1,11 @@
import { RequestWithUser } from '@ghostfolio/api/app/interfaces/request-with-user.type' ;
import { nullifyValuesInObjects } from '@ghostfolio/api/helper/object.helper' ;
import { ImpersonationService } from '@ghostfolio/api/services/impersonation.service' ;
import { getPermissions , hasPermission , permissions } from '@ghostfolio/helper' ;
import {
getPermissions ,
hasPermission ,
permissions
} from '@ghostfolio/helper/permissions' ;
import { RequestWithUser } from '@ghostfolio/helper/types' ;
import {
Body ,
Controller ,
@ -17,7 +21,7 @@ import {
} from '@nestjs/common' ;
import { REQUEST } from '@nestjs/core' ;
import { AuthGuard } from '@nestjs/passport' ;
import { Account as AccountModel , Order } from '@prisma/client' ;
import { Account as AccountModel } from '@prisma/client' ;
import { StatusCodes , getReasonPhrase } from 'http-status-codes' ;
import { AccountService } from './account.service' ;
@ -1,6 +1,11 @@
import { RequestWithUser } from '@ghostfolio/api/app/interfaces/request-with-user.type' ;
import { DataGatheringService } from '@ghostfolio/api/services/data-gathering.service' ;
import { getPermissions , hasPermission , permissions } from '@ghostfolio/helper' ;
import { AdminData } from '@ghostfolio/helper/interfaces' ;
import {
getPermissions ,
hasPermission ,
permissions
} from '@ghostfolio/helper/permissions' ;
import { RequestWithUser } from '@ghostfolio/helper/types' ;
import {
Controller ,
Get ,
@ -14,7 +19,6 @@ import { AuthGuard } from '@nestjs/passport';
import { StatusCodes , getReasonPhrase } from 'http-status-codes' ;
import { AdminService } from './admin.service' ;
import { AdminData } from './interfaces/admin-data.interface' ;
@Controller ( 'admin' )
export class AdminController {
@ -1,10 +1,9 @@
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data.service' ;
import { PrismaService } from '@ghostfolio/api/services/prisma.service' ;
import { AdminData } from '@ghostfolio/helper/interfaces' ;
import { Injectable } from '@nestjs/common' ;
import { Currency } from '@prisma/client' ;
import { AdminData } from './interfaces/admin-data.interface' ;
@Injectable ( )
export class AdminService {
public constructor (
@ -1,5 +1,5 @@
import { RequestWithUser } from '@ghostfolio/ api/app/interfaces/request-with-user.type ';
import { Controller , Inject , P aram, P ost, UseGuards } from '@nestjs/common' ;
import { RequestWithUser } from '@ghostfolio/ helper/types ';
import { Controller , Inject , P ost, UseGuards } from '@nestjs/common' ;
import { REQUEST } from '@nestjs/core' ;
import { AuthGuard } from '@nestjs/passport' ;
@ -1,9 +1,6 @@
import { RequestWithUser } from '@ghostfolio/api/app/interfaces/request-with-user.type' ;
import {
baseCurrency ,
benchmarks ,
isApiTokenAuthorized
} from '@ghostfolio/helper' ;
import { baseCurrency , benchmarks } from '@ghostfolio/helper/config' ;
import { isApiTokenAuthorized } from '@ghostfolio/helper/permissions' ;
import { RequestWithUser } from '@ghostfolio/helper/types' ;
import {
Body ,
Controller ,
@ -3,11 +3,11 @@ import { DataProviderService } from '@ghostfolio/api/services/data-provider.serv
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data.service' ;
import { PrismaService } from '@ghostfolio/api/services/prisma.service' ;
import { RulesService } from '@ghostfolio/api/services/rules.service' ;
import { OrderWithAccount } from '@ghostfolio/helper/types' ;
import { Injectable } from '@nestjs/common' ;
import { Currency , Type } from '@prisma/client' ;
import { parseISO } from 'date-fns' ;
import { OrderWithAccount } from '../order/interfaces/order-with-account.type' ;
import { CreateOrderDto } from './create-order.dto' ;
import { Data } from './interfaces/data.interface' ;
@ -1,7 +1,7 @@
import { InfoItem } from '@ghostfolio/helper/interfaces' ;
import { Controller , Get } from '@nestjs/common' ;
import { InfoService } from './info.service' ;
import { InfoItem } from './interfaces/info-item.interface' ;
@Controller ( 'info' )
export class InfoController {
@ -1,12 +1,11 @@
import { ConfigurationService } from '@ghostfolio/api/services/configuration.service' ;
import { PrismaService } from '@ghostfolio/api/services/prisma.service' ;
import { permissions } from '@ghostfolio/helper' ;
import { InfoItem } from '@ghostfolio/helper/interfaces' ;
import { permissions } from '@ghostfolio/helper/permissions' ;
import { Injectable } from '@nestjs/common' ;
import { JwtService } from '@nestjs/jwt' ;
import { Currency } from '@prisma/client' ;
import { InfoItem } from './interfaces/info-item.interface' ;
@Injectable ( )
export class InfoService {
private static DEMO_USER_ID = '9b112b4d-3b7d-4bad-9bdd-3b0f7b4dac2f' ;
@ -1,7 +1,11 @@
import { RequestWithUser } from '@ghostfolio/api/app/interfaces/request-with-user.type' ;
import { nullifyValuesInObjects } from '@ghostfolio/api/helper/object.helper' ;
import { ImpersonationService } from '@ghostfolio/api/services/impersonation.service' ;
import { getPermissions , hasPermission , permissions } from '@ghostfolio/helper' ;
import {
getPermissions ,
hasPermission ,
permissions
} from '@ghostfolio/helper/permissions' ;
import { RequestWithUser } from '@ghostfolio/helper/types' ;
import {
Body ,
Controller ,
@ -1,11 +1,11 @@
import { DataGatheringService } from '@ghostfolio/api/services/data-gathering.service' ;
import { PrismaService } from '@ghostfolio/api/services/prisma.service' ;
import { OrderWithAccount } from '@ghostfolio/helper/types' ;
import { Injectable } from '@nestjs/common' ;
import { Order , Prisma } from '@prisma/client' ;
import { CacheService } from '../cache/cache.service' ;
import { RedisCacheService } from '../redis-cache/redis-cache.service' ;
import { OrderWithAccount } from './interfaces/order-with-account.type' ;
@Injectable ( )
export class OrderService {
@ -4,7 +4,19 @@ import {
} from '@ghostfolio/api/helper/object.helper' ;
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data.service' ;
import { ImpersonationService } from '@ghostfolio/api/services/impersonation.service' ;
import { getPermissions , hasPermission , permissions } from '@ghostfolio/helper' ;
import {
PortfolioItem ,
PortfolioOverview ,
PortfolioPerformance ,
PortfolioPosition ,
PortfolioReport
} from '@ghostfolio/helper/interfaces' ;
import {
getPermissions ,
hasPermission ,
permissions
} from '@ghostfolio/helper/permissions' ;
import { RequestWithUser } from '@ghostfolio/helper/types' ;
import {
Controller ,
Get ,
@ -21,16 +33,10 @@ import { AuthGuard } from '@nestjs/passport';
import { Response } from 'express' ;
import { StatusCodes , getReasonPhrase } from 'http-status-codes' ;
import { RequestWithUser } from '../interfaces/request-with-user.type' ;
import { PortfolioItem } from './interfaces/portfolio-item.interface' ;
import { PortfolioOverview } from './interfaces/portfolio-overview.interface' ;
import { PortfolioPerformance } from './interfaces/portfolio-performance.interface' ;
import {
HistoricalDataItem ,
PortfolioPositionDetail
} from './interfaces/portfolio-position-detail.interface' ;
import { PortfolioPosition } from './interfaces/portfolio-position.interface' ;
import { PortfolioReport } from './interfaces/portfolio-report.interface' ;
import { PortfolioService } from './portfolio.service' ;
@Controller ( 'portfolio' )
@ -1,10 +1,14 @@
import { RequestWithUser } from '@ghostfolio/api/app/interfaces/request-with-user.type' ;
import { Portfolio } from '@ghostfolio/api/models/portfolio' ;
import { DataProviderService } from '@ghostfolio/api/services/data-provider.service' ;
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data.service' ;
import { ImpersonationService } from '@ghostfolio/api/services/impersonation.service' ;
import { IOrder } from '@ghostfolio/api/services/interfaces/interfaces' ;
import { RulesService } from '@ghostfolio/api/services/rules.service' ;
import {
PortfolioItem ,
PortfolioOverview
} from '@ghostfolio/helper/interfaces' ;
import { DateRange , RequestWithUser } from '@ghostfolio/helper/types' ;
import { Inject , Injectable } from '@nestjs/common' ;
import { REQUEST } from '@nestjs/core' ;
import {
@ -26,9 +30,6 @@ import * as roundTo from 'round-to';
import { OrderService } from '../order/order.service' ;
import { RedisCacheService } from '../redis-cache/redis-cache.service' ;
import { UserService } from '../user/user.service' ;
import { DateRange } from './interfaces/date-range.type' ;
import { PortfolioItem } from './interfaces/portfolio-item.interface' ;
import { PortfolioOverview } from './interfaces/portfolio-overview.interface' ;
import {
HistoricalDataItem ,
PortfolioPositionDetail
@ -1,4 +1,4 @@
import { RequestWithUser } from '@ghostfolio/ api/app/interfaces/request-with-user.type ';
import { RequestWithUser } from '@ghostfolio/ helper/types ';
import {
Controller ,
Get ,
@ -1,5 +1,10 @@
import { RequestWithUser } from '@ghostfolio/api/app/interfaces/request-with-user.type' ;
import { getPermissions , hasPermission , permissions } from '@ghostfolio/helper' ;
import { User } from '@ghostfolio/helper/interfaces' ;
import {
getPermissions ,
hasPermission ,
permissions
} from '@ghostfolio/helper/permissions' ;
import { RequestWithUser } from '@ghostfolio/helper/types' ;
import {
Body ,
Controller ,
@ -20,7 +25,6 @@ import { User as UserModel } from '@prisma/client';
import { StatusCodes , getReasonPhrase } from 'http-status-codes' ;
import { UserItem } from './interfaces/user-item.interface' ;
import { User } from './interfaces/user.interface' ;
import { UpdateUserSettingsDto } from './update-user-settings.dto' ;
import { UserService } from './user.service' ;
@ -1,18 +1,13 @@
import { ConfigurationService } from '@ghostfolio/api/services/configuration.service' ;
import { PrismaService } from '@ghostfolio/api/services/prisma.service' ;
import {
getPermissions ,
locale ,
permissions ,
resetHours
} from '@ghostfolio/helper' ;
import { locale } from '@ghostfolio/helper/config' ;
import { resetHours } from '@ghostfolio/helper/helper' ;
import { User as IUser , UserWithSettings } from '@ghostfolio/helper/interfaces' ;
import { getPermissions , permissions } from '@ghostfolio/helper/permissions' ;
import { Injectable } from '@nestjs/common' ;
import { Currency , Prisma , Provider , User } from '@prisma/client' ;
import { add } from 'date-fns' ;
import { UserWithSettings } from '../interfaces/user-with-settings' ;
import { User as IUser } from './interfaces/user.interface' ;
const crypto = require ( 'crypto' ) ;
@Injectable ( )
@ -1,7 +1,4 @@
import {
PortfolioItem ,
Position
} from '@ghostfolio/api/app/portfolio/interfaces/portfolio-item.interface' ;
import { PortfolioItem , Position } from '@ghostfolio/helper/interfaces' ;
import { Order } from '../order' ;
@ -1,4 +1,4 @@
import { PortfolioPosition } from '@ghostfolio/ api/app/portfolio/interfaces/portfolio-position.interface ';
import { PortfolioPosition } from '@ghostfolio/ helper/interfaces ';
import { EvaluationResult } from './evaluation-result.interface' ;
@ -1,17 +1,13 @@
import {
UNKNOWN_KEY ,
baseCurrency ,
getUtc ,
getYesterday
} from '@ghostfolio/helper' ;
import { UNKNOWN_KEY , baseCurrency } from '@ghostfolio/helper/config' ;
import { getUtc , getYesterday } from '@ghostfolio/helper/helper' ;
import { AccountType , Currency , DataSource , Role , Type } from '@prisma/client' ;
import { format } from 'date-fns' ;
import { DataProviderService } from '../services/data-provider.service' ;
import { ExchangeRateDataService } from '../services/exchange-rate-data.service' ;
import { MarketState } from '../services/interfaces/interfaces' ;
import { RulesService } from '../services/rules.service' ;
import { Portfolio } from './portfolio' ;
import { format } from 'date-fns' ;
jest . mock ( '../services/data-provider.service' , ( ) = > {
return {
@ -1,13 +1,14 @@
import { UNKNOWN_KEY } from '@ghostfolio/helper/config' ;
import { getToday , getYesterday , resetHours } from '@ghostfolio/helper/helper' ;
import {
PortfolioItem ,
Position
} from '@ghostfolio/api/app/portfolio/interfaces/portfolio-item.interface' ;
import {
UNKNOWN_KEY ,
getToday ,
getYesterday ,
resetHours
} from '@ghostfolio/helper' ;
PortfolioPerformance ,
PortfolioPosition ,
PortfolioReport ,
Position ,
UserWithSettings
} from '@ghostfolio/helper/interfaces' ;
import { DateRange , OrderWithAccount } from '@ghostfolio/helper/types' ;
import {
add ,
format ,
@ -27,12 +28,6 @@ import {
import { cloneDeep , isEmpty } from 'lodash' ;
import * as roundTo from 'round-to' ;
import { UserWithSettings } from '../app/interfaces/user-with-settings' ;
import { OrderWithAccount } from '../app/order/interfaces/order-with-account.type' ;
import { DateRange } from '../app/portfolio/interfaces/date-range.type' ;
import { PortfolioPerformance } from '../app/portfolio/interfaces/portfolio-performance.interface' ;
import { PortfolioPosition } from '../app/portfolio/interfaces/portfolio-position.interface' ;
import { PortfolioReport } from '../app/portfolio/interfaces/portfolio-report.interface' ;
import { DataProviderService } from '../services/data-provider.service' ;
import { ExchangeRateDataService } from '../services/exchange-rate-data.service' ;
import { IOrder } from '../services/interfaces/interfaces' ;
@ -1,7 +1,7 @@
import { groupBy } from '@ghostfolio/helper' ;
import { groupBy } from '@ghostfolio/helper/helper' ;
import { PortfolioPosition } from '@ghostfolio/helper/interfaces' ;
import { Currency } from '@prisma/client' ;
import { PortfolioPosition } from '../app/portfolio/interfaces/portfolio-position.interface' ;
import { ExchangeRateDataService } from '../services/exchange-rate-data.service' ;
import { EvaluationResult } from './interfaces/evaluation-result.interface' ;
import { RuleInterface } from './interfaces/rule.interface' ;
@ -1,5 +1,5 @@
import { PortfolioPosition } from '@ghostfolio/api/app/portfolio/interfaces/portfolio-position.interface' ;
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data.service' ;
import { PortfolioPosition } from '@ghostfolio/helper/interfaces' ;
import { Rule } from '../../rule' ;
@ -1,4 +1,4 @@
import { PortfolioPosition } from '@ghostfolio/ api/app/portfolio/interfaces/portfolio-position.interface ';
import { PortfolioPosition } from '@ghostfolio/ helper/interfaces ';
import { ExchangeRateDataService } from 'apps/api/src/services/exchange-rate-data.service' ;
import { Rule } from '../../rule' ;
@ -1,4 +1,4 @@
import { PortfolioPosition } from '@ghostfolio/ api/app/portfolio/interfaces/portfolio-position.interface ';
import { PortfolioPosition } from '@ghostfolio/ helper/interfaces ';
import { ExchangeRateDataService } from 'apps/api/src/services/exchange-rate-data.service' ;
import { Rule } from '../../rule' ;
@ -1,5 +1,5 @@
import { PortfolioPosition } from '@ghostfolio/api/app/portfolio/interfaces/portfolio-position.interface' ;
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data.service' ;
import { PortfolioPosition } from '@ghostfolio/helper/interfaces' ;
import { Rule } from '../../rule' ;
@ -1,4 +1,4 @@
import { PortfolioPosition } from '@ghostfolio/ api/app/portfolio/interfaces/portfolio-position.interface ';
import { PortfolioPosition } from '@ghostfolio/ helper/interfaces ';
import { ExchangeRateDataService } from 'apps/api/src/services/exchange-rate-data.service' ;
import { Rule } from '../../rule' ;
@ -1,4 +1,4 @@
import { PortfolioPosition } from '@ghostfolio/ api/app/portfolio/interfaces/portfolio-position.interface ';
import { PortfolioPosition } from '@ghostfolio/ helper/interfaces ';
import { ExchangeRateDataService } from 'apps/api/src/services/exchange-rate-data.service' ;
import { Rule } from '../../rule' ;
@ -1,4 +1,4 @@
import { PortfolioPosition } from '@ghostfolio/ api/app/portfolio/interfaces/portfolio-position.interface ';
import { PortfolioPosition } from '@ghostfolio/ helper/interfaces ';
import { ExchangeRateDataService } from 'apps/api/src/services/exchange-rate-data.service' ;
import { Rule } from '../../rule' ;
@ -1,4 +1,4 @@
import { PortfolioPosition } from '@ghostfolio/ api/app/portfolio/interfaces/portfolio-position.interface ';
import { PortfolioPosition } from '@ghostfolio/ helper/interfaces ';
import { ExchangeRateDataService } from 'apps/api/src/services/exchange-rate-data.service' ;
import { Rule } from '../../rule' ;
@ -1,10 +1,9 @@
import { benchmarks , currencyPairs } from '@ghostfolio/helper/config' ;
import {
benchmarks ,
currencyPairs ,
getUtc ,
isGhostfolioScraperApiSymbol ,
resetHours
} from '@ghostfolio/helper ';
} from '@ghostfolio/helper /helper ';
import { Injectable } from '@nestjs/common' ;
import {
differenceInHours ,
@ -2,7 +2,8 @@ import {
isCrypto ,
isGhostfolioScraperApiSymbol ,
isRakutenRapidApiSymbol
} from '@ghostfolio/helper' ;
} from '@ghostfolio/helper/helper' ;
import { Granularity } from '@ghostfolio/helper/types' ;
import { Injectable } from '@nestjs/common' ;
import { MarketData } from '@prisma/client' ;
import { format } from 'date-fns' ;
@ -13,7 +14,6 @@ import { GhostfolioScraperApiService } from './data-provider/ghostfolio-scraper-
import { RakutenRapidApiService } from './data-provider/rakuten-rapid-api/rakuten-rapid-api.service' ;
import { YahooFinanceService } from './data-provider/yahoo-finance/yahoo-finance.service' ;
import { DataProviderInterface } from './interfaces/data-provider.interface' ;
import { Granularity } from './interfaces/granularity.type' ;
import {
IDataProviderHistoricalResponse ,
IDataProviderResponse
@ -1,9 +1,9 @@
import { Granularity } from '@ghostfolio/helper/types' ;
import { Injectable } from '@nestjs/common' ;
import { isAfter , isBefore , parse } from 'date-fns' ;
import { ConfigurationService } from '../../configuration.service' ;
import { DataProviderInterface } from '../../interfaces/data-provider.interface' ;
import { Granularity } from '../../interfaces/granularity.type' ;
import {
IDataProviderHistoricalResponse ,
IDataProviderResponse
@ -1,4 +1,5 @@
import { getYesterday } from '@ghostfolio/helper' ;
import { getYesterday } from '@ghostfolio/helper/helper' ;
import { Granularity } from '@ghostfolio/helper/types' ;
import { Injectable } from '@nestjs/common' ;
import { DataSource } from '@prisma/client' ;
import * as bent from 'bent' ;
@ -6,7 +7,6 @@ import * as cheerio from 'cheerio';
import { format } from 'date-fns' ;
import { DataProviderInterface } from '../../interfaces/data-provider.interface' ;
import { Granularity } from '../../interfaces/granularity.type' ;
import {
IDataProviderHistoricalResponse ,
IDataProviderResponse ,
@ -1,4 +1,5 @@
import { getToday , getYesterday } from '@ghostfolio/helper' ;
import { getToday , getYesterday } from '@ghostfolio/helper/helper' ;
import { Granularity } from '@ghostfolio/helper/types' ;
import { Injectable } from '@nestjs/common' ;
import { DataSource } from '@prisma/client' ;
import * as bent from 'bent' ;
@ -6,7 +7,6 @@ import { format, subMonths, subWeeks, subYears } from 'date-fns';
import { ConfigurationService } from '../../configuration.service' ;
import { DataProviderInterface } from '../../interfaces/data-provider.interface' ;
import { Granularity } from '../../interfaces/granularity.type' ;
import {
IDataProviderHistoricalResponse ,
IDataProviderResponse ,
@ -1,16 +1,12 @@
import {
UNKNOWN_KEY ,
isCrypto ,
isCurrency ,
parseCurrency
} from '@ghostfolio/helper' ;
import { UNKNOWN_KEY } from '@ghostfolio/helper/config' ;
import { isCrypto , isCurrency , parseCurrency } from '@ghostfolio/helper/helper' ;
import { Granularity } from '@ghostfolio/helper/types' ;
import { Injectable } from '@nestjs/common' ;
import { DataSource } from '@prisma/client' ;
import { format } from 'date-fns' ;
import * as yahooFinance from 'yahoo-finance' ;
import { DataProviderInterface } from '../../interfaces/data-provider.interface' ;
import { Granularity } from '../../interfaces/granularity.type' ;
import {
IDataProviderHistoricalResponse ,
IDataProviderResponse ,
@ -1,4 +1,4 @@
import { getYesterday } from '@ghostfolio/helper ';
import { getYesterday } from '@ghostfolio/helper /helper ';
import { Injectable } from '@nestjs/common' ;
import { Currency } from '@prisma/client' ;
import { format } from 'date-fns' ;
@ -1,4 +1,5 @@
import { Granularity } from './granularity.type' ;
import { Granularity } from '@ghostfolio/helper/types' ;
import {
IDataProviderHistoricalResponse ,
IDataProviderResponse
@ -1,4 +1,4 @@
import { UNKNOWN_KEY } from '@ghostfolio/helper ';
import { UNKNOWN_KEY } from '@ghostfolio/helper /config ';
import { Account , Currency , DataSource } from '@prisma/client' ;
import { OrderType } from '../../models/order-type' ;
@ -1,7 +1,7 @@
import {
DEFAULT_DATE_FORMAT ,
DEFAULT_DATE_FORMAT_MONTH_YEAR
} from '@ghostfolio/helper ';
} from '@ghostfolio/helper /config ';
export const DateFormats = {
display : {
@ -6,14 +6,9 @@ import {
OnInit
} from '@angular/core' ;
import { NavigationEnd , PRIMARY_OUTLET , Router } from '@angular/router' ;
import { InfoItem } from '@ghostfolio/api/app/info/interfaces/info-item.interface' ;
import { User } from '@ghostfolio/api/app/user/interfaces/user.interface' ;
import {
hasPermission ,
permissions ,
primaryColorHex ,
secondaryColorHex
} from '@ghostfolio/helper' ;
import { primaryColorHex , secondaryColorHex } from '@ghostfolio/helper/config' ;
import { InfoItem , User } from '@ghostfolio/helper/interfaces' ;
import { hasPermission , permissions } from '@ghostfolio/helper/permissions' ;
import { MaterialCssVarsService } from 'angular-material-css-vars' ;
import { Subject } from 'rxjs' ;
import { filter , takeUntil } from 'rxjs/operators' ;
@ -6,7 +6,7 @@ import {
OnInit
} from '@angular/core' ;
import { MatTableDataSource } from '@angular/material/table' ;
import { Access } from '@ghostfolio/ api/app/access/interfaces/access.interface ';
import { Access } from '@ghostfolio/ helper/interfaces ';
@Component ( {
selector : 'gf-access-table' ,
@ -5,7 +5,7 @@ import {
OnChanges ,
OnInit
} from '@angular/core' ;
import { resolveFearAndGreedIndex } from '@ghostfolio/helper ';
import { resolveFearAndGreedIndex } from '@ghostfolio/helper /helper ';
@Component ( {
selector : 'gf-fear-and-greed-index' ,
@ -6,13 +6,12 @@ import {
} from '@angular/core' ;
import { MatDialog } from '@angular/material/dialog' ;
import { Router } from '@angular/router' ;
import { InfoItem } from '@ghostfolio/api/app/info/interfaces/info-item.interface' ;
import { User } from '@ghostfolio/api/app/user/interfaces/user.interface' ;
import { LoginWithAccessTokenDialog } from '@ghostfolio/client/pages/login/login-with-access-token-dialog/login-with-access-token-dialog.component' ;
import { DataService } from '@ghostfolio/client/services/data.service' ;
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service' ;
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service' ;
import { hasPermission , permissions } from '@ghostfolio/helper' ;
import { InfoItem , User } from '@ghostfolio/helper/interfaces' ;
import { hasPermission , permissions } from '@ghostfolio/helper/permissions' ;
import { EMPTY , Subject } from 'rxjs' ;
import { catchError , takeUntil } from 'rxjs/operators' ;
@ -9,8 +9,8 @@ import {
OnInit ,
ViewChild
} from '@angular/core' ;
import { PortfolioItem } from '@ghostfolio/api/app/portfolio/interfaces/portfolio-item.interface ';
import { primaryColorRgb } from '@ghostfolio/helper ';
import { primaryColorRgb } from '@ghostfolio/helper/config ';
import { PortfolioItem } from '@ghostfolio/helper /interfaces ';
import {
LineController ,
LineElement ,
@ -9,11 +9,8 @@ import {
OnInit ,
ViewChild
} from '@angular/core' ;
import {
getBackgroundColor ,
primaryColorRgb ,
secondaryColorRgb
} from '@ghostfolio/helper' ;
import { primaryColorRgb , secondaryColorRgb } from '@ghostfolio/helper/config' ;
import { getBackgroundColor } from '@ghostfolio/helper/helper' ;
import {
Chart ,
Filler ,
@ -5,7 +5,7 @@ import {
OnChanges ,
OnInit
} from '@angular/core' ;
import { PortfolioOverview } from '@ghostfolio/ api/app/portfolio/interfaces/portfolio-overview.interface ';
import { PortfolioOverview } from '@ghostfolio/ helper/interfaces ';
import { Currency } from '@prisma/client' ;
@Component ( {
@ -7,7 +7,7 @@ import {
OnInit ,
ViewChild
} from '@angular/core' ;
import { PortfolioPerformance } from '@ghostfolio/ api/app/portfolio/interfaces/portfolio-performance.interface ';
import { PortfolioPerformance } from '@ghostfolio/ helper/interfaces ';
import { Currency } from '@prisma/client' ;
import { CountUp } from 'countup.js' ;
import { isNumber } from 'lodash' ;
@ -4,7 +4,7 @@ import {
Input ,
OnInit
} from '@angular/core' ;
import { PortfolioPerformance } from '@ghostfolio/ api/app/portfolio/interfaces/portfolio-performance.interface ';
import { PortfolioPerformance } from '@ghostfolio/ helper/interfaces ';
import { Currency } from '@prisma/client' ;
@Component ( {
@ -7,7 +7,7 @@ import {
OnChanges ,
OnInit
} from '@angular/core' ;
import { PortfolioItem } from '@ghostfolio/ api/app/portfolio/interfaces/portfolio-item.interface ';
import { PortfolioItem } from '@ghostfolio/ helper/interfaces ';
import { endOfDay , parseISO , startOfDay } from 'date-fns' ;
@Component ( {
@ -7,8 +7,9 @@ import {
OnInit ,
ViewChild
} from '@angular/core' ;
import { PortfolioPosition } from '@ghostfolio/api/app/portfolio/interfaces/portfolio-position.interface' ;
import { UNKNOWN_KEY , getCssVariable , getTextColor } from '@ghostfolio/helper' ;
import { UNKNOWN_KEY } from '@ghostfolio/helper/config' ;
import { getCssVariable , getTextColor } from '@ghostfolio/helper/helper' ;
import { PortfolioPosition } from '@ghostfolio/helper/interfaces' ;
import { Currency } from '@prisma/client' ;
import { Tooltip } from 'chart.js' ;
import { LinearScale } from 'chart.js' ;
@ -7,8 +7,8 @@ import {
} from '@angular/core' ;
import { MatDialog } from '@angular/material/dialog' ;
import { ActivatedRoute , Router } from '@angular/router' ;
import { PortfolioPosition } from '@ghostfolio/api/app/portfolio/interfaces/portfolio-position.interface ';
import { UNKNOWN_KEY } from '@ghostfolio/helper ';
import { UNKNOWN_KEY } from '@ghostfolio/helper/config ';
import { PortfolioPosition } from '@ghostfolio/helper /interfaces ';
import { Subject } from 'rxjs' ;
import { takeUntil } from 'rxjs/operators' ;
@ -13,7 +13,7 @@ import { MatPaginator } from '@angular/material/paginator';
import { MatSort } from '@angular/material/sort' ;
import { MatTableDataSource } from '@angular/material/table' ;
import { ActivatedRoute , Router } from '@angular/router' ;
import { PortfolioPosition } from '@ghostfolio/ api/app/portfolio/interfaces/portfolio-position.interface ';
import { PortfolioPosition } from '@ghostfolio/ helper/interfaces ';
import { Order as OrderModel } from '@prisma/client' ;
import { Subject , Subscription } from 'rxjs' ;
import { takeUntil } from 'rxjs/operators' ;
@ -5,8 +5,8 @@ import {
OnChanges ,
OnInit
} from '@angular/core' ;
import { PortfolioPosition } from '@ghostfolio/api/app/portfolio/interfaces/portfolio-position.interface' ;
import { MarketState } from '@ghostfolio/api/services/interfaces/interfaces' ;
import { PortfolioPosition } from '@ghostfolio/helper/interfaces/portfolio-position.interface' ;
@Component ( {
selector : 'gf-positions' ,
@ -4,7 +4,7 @@ import {
Input ,
OnInit
} from '@angular/core' ;
import { PortfolioReportRule } from '@ghostfolio/ api/app/portfolio/interfaces/portfolio-report.interface ';
import { PortfolioReportRule } from '@ghostfolio/ helper/interfaces ';
@Component ( {
selector : 'gf-rule' ,
@ -1,5 +1,5 @@
import { ChangeDetectionStrategy , Component , Input } from '@angular/core' ;
import { PortfolioReportRule } from '@ghostfolio/ api/app/portfolio/interfaces/portfolio-report.interface ';
import { PortfolioReportRule } from '@ghostfolio/ helper/interfaces ';
@Component ( {
selector : 'gf-rules' ,
@ -21,9 +21,9 @@ import { MatDialog } from '@angular/material/dialog';
import { MatSort } from '@angular/material/sort' ;
import { MatTableDataSource } from '@angular/material/table' ;
import { ActivatedRoute , Router } from '@angular/router' ;
import { OrderWithAccount } from '@ghostfolio/api/app/order/interfaces/order-with-account.type ';
import { DEFAULT_DATE_FORMAT } from '@ghostfolio/helper ';
import { format , parse , parseISO } from 'date-fns' ;
import { DEFAULT_DATE_FORMAT } from '@ghostfolio/helper/config ';
import { OrderWithAccount } from '@ghostfolio/helper /types ';
import { format } from 'date-fns' ;
import { BehaviorSubject , Observable , Subject , Subscription } from 'rxjs' ;
import { takeUntil } from 'rxjs/operators' ;
@ -5,7 +5,7 @@ import {
OnChanges ,
OnInit
} from '@angular/core' ;
import { DEFAULT_DATE_FORMAT } from '@ghostfolio/helper ';
import { DEFAULT_DATE_FORMAT } from '@ghostfolio/helper /config ';
import { format , isDate } from 'date-fns' ;
import { isNumber } from 'lodash' ;
@ -1,8 +1,4 @@
import {
HTTP_INTERCEPTORS ,
HttpErrorResponse ,
HttpEvent
} from '@angular/common/http' ;
import { HTTP_INTERCEPTORS , HttpEvent } from '@angular/common/http' ;
import {
HttpHandler ,
HttpInterceptor ,
@ -11,7 +7,6 @@ import {
import { Injectable } from '@angular/core' ;
import { Router } from '@angular/router' ;
import { Observable } from 'rxjs' ;
import { tap } from 'rxjs/operators' ;
import { ImpersonationStorageService } from '../services/impersonation-storage.service' ;
import { TokenStorageService } from '../services/token-storage.service' ;
@ -1,8 +1,8 @@
import { ChangeDetectorRef , Component , OnInit } from '@angular/core' ;
import { User } from '@ghostfolio/api/app/user/interfaces/user.interface' ;
import { DataService } from '@ghostfolio/client/services/data.service' ;
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service' ;
import { baseCurrency } from '@ghostfolio/helper' ;
import { baseCurrency } from '@ghostfolio/helper/config' ;
import { User } from '@ghostfolio/helper/interfaces' ;
import { Subject } from 'rxjs' ;
import { takeUntil } from 'rxjs/operators' ;
@ -1,13 +1,9 @@
import { ChangeDetectorRef , Component , OnDestroy , OnInit } from '@angular/core' ;
import { Access } from '@ghostfolio/api/app/access/interfaces/access.interface' ;
import { User } from '@ghostfolio/api/app/user/interfaces/user.interface' ;
import { DataService } from '@ghostfolio/client/services/data.service' ;
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service' ;
import {
DEFAULT_DATE_FORMAT ,
hasPermission ,
permissions
} from '@ghostfolio/helper' ;
import { DEFAULT_DATE_FORMAT } from '@ghostfolio/helper/config' ;
import { Access , User } from '@ghostfolio/helper/interfaces' ;
import { hasPermission , permissions } from '@ghostfolio/helper/permissions' ;
import { Currency } from '@prisma/client' ;
import { Subject } from 'rxjs' ;
import { takeUntil } from 'rxjs/operators' ;
@ -3,11 +3,11 @@ import { MatDialog } from '@angular/material/dialog';
import { ActivatedRoute , Router } from '@angular/router' ;
import { CreateAccountDto } from '@ghostfolio/api/app/account/create-account.dto' ;
import { UpdateAccountDto } from '@ghostfolio/api/app/account/update-account.dto' ;
import { User } from '@ghostfolio/api/app/user/interfaces/user.interface' ;
import { DataService } from '@ghostfolio/client/services/data.service' ;
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service' ;
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service' ;
import { hasPermission , permissions } from '@ghostfolio/helper' ;
import { User } from '@ghostfolio/helper/interfaces' ;
import { hasPermission , permissions } from '@ghostfolio/helper/permissions' ;
import { Account as AccountModel , AccountType } from '@prisma/client' ;
import { DeviceDetectorService } from 'ngx-device-detector' ;
import { Subject , Subscription } from 'rxjs' ;
@ -1,11 +1,10 @@
import { ChangeDetectorRef , Component , OnInit } from '@angular/core' ;
import { AdminData } from '@ghostfolio/api/app/admin/interfaces/admin-data.interface' ;
import { User } from '@ghostfolio/api/app/user/interfaces/user.interface' ;
import { AdminService } from '@ghostfolio/client/services/admin.service' ;
import { CacheService } from '@ghostfolio/client/services/cache.service' ;
import { DataService } from '@ghostfolio/client/services/data.service' ;
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service' ;
import { DEFAULT_DATE_FORMAT } from '@ghostfolio/helper' ;
import { DEFAULT_DATE_FORMAT } from '@ghostfolio/helper/config' ;
import { AdminData , User } from '@ghostfolio/helper/interfaces' ;
import { formatDistanceToNow , isValid , parseISO , sub } from 'date-fns' ;
import { Subject } from 'rxjs' ;
import { takeUntil } from 'rxjs/operators' ;
@ -1,11 +1,13 @@
import { ChangeDetectorRef , Component , OnDestroy , OnInit } from '@angular/core' ;
import { PortfolioItem } from '@ghostfolio/api/app/portfolio/interfaces/portfolio-item.interface' ;
import { PortfolioPosition } from '@ghostfolio/api/app/portfolio/interfaces/portfolio-position.interface' ;
import { User } from '@ghostfolio/api/app/user/interfaces/user.interface' ;
import { ToggleOption } from '@ghostfolio/client/components/toggle/interfaces/toggle-option.type' ;
import { DataService } from '@ghostfolio/client/services/data.service' ;
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service' ;
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service' ;
import {
PortfolioItem ,
PortfolioPosition ,
User
} from '@ghostfolio/helper/interfaces' ;
import { DeviceDetectorService } from 'ngx-device-detector' ;
import { Subject } from 'rxjs' ;
import { takeUntil } from 'rxjs/operators' ;
@ -1,11 +1,6 @@
import { ChangeDetectorRef , Component , OnDestroy , OnInit } from '@angular/core' ;
import { MatDialog } from '@angular/material/dialog' ;
import { ActivatedRoute , Router } from '@angular/router' ;
import { DateRange } from '@ghostfolio/api/app/portfolio/interfaces/date-range.type' ;
import { PortfolioOverview } from '@ghostfolio/api/app/portfolio/interfaces/portfolio-overview.interface' ;
import { PortfolioPerformance } from '@ghostfolio/api/app/portfolio/interfaces/portfolio-performance.interface' ;
import { PortfolioPosition } from '@ghostfolio/api/app/portfolio/interfaces/portfolio-position.interface' ;
import { User } from '@ghostfolio/api/app/user/interfaces/user.interface' ;
import { LineChartItem } from '@ghostfolio/client/components/line-chart/interfaces/line-chart.interface' ;
import { PerformanceChartDialog } from '@ghostfolio/client/components/performance-chart-dialog/performance-chart-dialog.component' ;
import { ToggleOption } from '@ghostfolio/client/components/toggle/interfaces/toggle-option.type' ;
@ -16,7 +11,14 @@ import {
SettingsStorageService
} from '@ghostfolio/client/services/settings-storage.service' ;
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service' ;
import { hasPermission , permissions } from '@ghostfolio/helper' ;
import {
PortfolioOverview ,
PortfolioPerformance ,
PortfolioPosition ,
User
} from '@ghostfolio/helper/interfaces' ;
import { hasPermission , permissions } from '@ghostfolio/helper/permissions' ;
import { DateRange } from '@ghostfolio/helper/types' ;
import { DeviceDetectorService } from 'ngx-device-detector' ;
import { Subject , Subscription } from 'rxjs' ;
import { takeUntil } from 'rxjs/operators' ;
@ -1,8 +1,8 @@
import { ChangeDetectorRef , Component , OnInit } from '@angular/core' ;
import { User } from '@ghostfolio/api/app/user/interfaces/user.interface' ;
import { DataService } from '@ghostfolio/client/services/data.service' ;
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service' ;
import { baseCurrency } from '@ghostfolio/helper' ;
import { baseCurrency } from '@ghostfolio/helper/config' ;
import { User } from '@ghostfolio/helper/interfaces' ;
import { Subject } from 'rxjs' ;
import { takeUntil } from 'rxjs/operators' ;
@ -1,6 +1,6 @@
import { ChangeDetectorRef , Component , OnInit } from '@angular/core' ;
import { PortfolioReportRule } from '@ghostfolio/api/app/portfolio/interfaces/portfolio-report.interface' ;
import { DataService } from '@ghostfolio/client/services/data.service' ;
import { PortfolioReportRule } from '@ghostfolio/helper/interfaces' ;
import { Subject } from 'rxjs' ;
import { takeUntil } from 'rxjs/operators' ;
@ -3,11 +3,11 @@ import { MatDialog } from '@angular/material/dialog';
import { ActivatedRoute , Router } from '@angular/router' ;
import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto' ;
import { UpdateOrderDto } from '@ghostfolio/api/app/order/update-order.dto' ;
import { User } from '@ghostfolio/api/app/user/interfaces/user.interface' ;
import { DataService } from '@ghostfolio/client/services/data.service' ;
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service' ;
import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service' ;
import { hasPermission , permissions } from '@ghostfolio/helper' ;
import { User } from '@ghostfolio/helper/interfaces' ;
import { hasPermission , permissions } from '@ghostfolio/helper/permissions' ;
import { Order as OrderModel } from '@prisma/client' ;
import { DeviceDetectorService } from 'ngx-device-detector' ;
import { Subject , Subscription } from 'rxjs' ;
@ -1,5 +1,5 @@
import { Pipe , PipeTransform } from '@angular/core' ;
import { ghostfolioScraperApiSymbolPrefix } from '@ghostfolio/helper ';
import { ghostfolioScraperApiSymbolPrefix } from '@ghostfolio/helper /config ';
@Pipe ( { name : 'gfSymbol' } )
export class SymbolPipe implements PipeTransform {
@ -1,26 +1,30 @@
import { } from '@ghostfolio/helper/interfaces' ;
import { HttpClient } from '@angular/common/http' ;
import { Injectable } from '@angular/core' ;
import { Access } from '@ghostfolio/api/app/access/interfaces/access.interface' ;
import { CreateAccountDto } from '@ghostfolio/api/app/account/create-account.dto' ;
import { UpdateAccountDto } from '@ghostfolio/api/app/account/update-account.dto' ;
import { AdminData } from '@ghostfolio/api/app/admin/interfaces/admin-data.interface' ;
import { InfoItem } from '@ghostfolio/api/app/info/interfaces/info-item.interface' ;
import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto' ;
import { UpdateOrderDto } from '@ghostfolio/api/app/order/update-order.dto' ;
import { PortfolioItem } from '@ghostfolio/api/app/portfolio/interfaces/portfolio-item.interface' ;
import { PortfolioOverview } from '@ghostfolio/api/app/portfolio/interfaces/portfolio-overview.interface' ;
import { PortfolioPerformance } from '@ghostfolio/api/app/portfolio/interfaces/portfolio-performance.interface' ;
import {
HistoricalDataItem ,
PortfolioPositionDetail
} from '@ghostfolio/api/app/portfolio/interfaces/portfolio-position-detail.interface' ;
import { PortfolioPosition } from '@ghostfolio/api/app/portfolio/interfaces/portfolio-position.interface' ;
import { PortfolioReport } from '@ghostfolio/api/app/portfolio/interfaces/portfolio-report.interface' ;
import { LookupItem } from '@ghostfolio/api/app/symbol/interfaces/lookup-item.interface' ;
import { SymbolItem } from '@ghostfolio/api/app/symbol/interfaces/symbol-item.interface' ;
import { UserItem } from '@ghostfolio/api/app/user/interfaces/user-item.interface' ;
import { User } from '@ghostfolio/api/app/user/interfaces/user.interface' ;
import { UpdateUserSettingsDto } from '@ghostfolio/api/app/user/update-user-settings.dto' ;
import {
Access ,
AdminData ,
InfoItem ,
PortfolioItem ,
PortfolioOverview ,
PortfolioPerformance ,
PortfolioPosition ,
PortfolioReport ,
User
} from '@ghostfolio/helper/interfaces' ;
import { Order as OrderModel } from '@prisma/client' ;
import { Account as AccountModel } from '@prisma/client' ;
import { parseISO } from 'date-fns' ;
@ -1,3 +0,0 @@
export * from './lib/config' ;
export * from './lib/helper' ;
export * from './lib/permissions' ;
@ -0,0 +1,29 @@
import { Access } from './access.interface' ;
import { AdminData } from './admin-data.interface' ;
import { InfoItem } from './info-item.interface' ;
import { PortfolioItem } from './portfolio-item.interface' ;
import { PortfolioOverview } from './portfolio-overview.interface' ;
import { PortfolioPerformance } from './portfolio-performance.interface' ;
import { PortfolioPosition } from './portfolio-position.interface' ;
import { PortfolioReportRule } from './portfolio-report-rule.interface' ;
import { PortfolioReport } from './portfolio-report.interface' ;
import { Position } from './position.interface' ;
import { UserSettings } from './user-settings.interface' ;
import { UserWithSettings } from './user-with-settings' ;
import { User } from './user.interface' ;
export {
Access ,
AdminData ,
InfoItem ,
PortfolioItem ,
PortfolioOverview ,
PortfolioPerformance ,
PortfolioPosition ,
PortfolioReport ,
PortfolioReportRule ,
Position ,
User ,
UserSettings ,
UserWithSettings
} ;
@ -0,0 +1,9 @@
import { Position } from '@ghostfolio/helper/interfaces' ;
export interface PortfolioItem {
date : string ;
grossPerformancePercent : number ;
investment : number ;
positions : { [ symbol : string ] : Position } ;
value : number ;
}
@ -1,7 +1,3 @@
export interface PortfolioReport {
rules : { [ group : string ] : PortfolioReportRule [ ] } ;
}
export interface PortfolioReportRule {
evaluation : string ;
name : string ;
@ -0,0 +1,5 @@
import { PortfolioReportRule } from './portfolio-report-rule.interface' ;
export interface PortfolioReport {
rules : { [ group : string ] : PortfolioReportRule [ ] } ;
}
@ -1,13 +1,5 @@
import { Currency } from '@prisma/client' ;
export interface PortfolioItem {
date : string ;
grossPerformancePercent : number ;
investment : number ;
positions : { [ symbol : string ] : Position } ;
value : number ;
}
export interface Position {
averagePrice : number ;
currency : Currency ;
@ -0,0 +1,6 @@
import { Currency } from '@prisma/client' ;
export interface UserSettings {
baseCurrency : Currency ;
locale : string ;
}
@ -1,6 +1,7 @@
import { Account , Currency } from '@prisma/client' ;
import { Access } from '@ghostfolio/api/app/user/interfaces/access.interface' ;
import { Account } from '@prisma/client' ;
import { Access } from './acces s.interface';
import { UserSettings } from './user-setting s.interface';
export interface User {
access : Access [ ] ;
@ -14,8 +15,3 @@ export interface User {
type : 'Trial' ;
} ;
}
export interface UserSettings {
baseCurrency : Currency ;
locale : string ;
}
@ -0,0 +1,13 @@
import { AccessWithGranteeUser } from './access-with-grantee-user.type' ;
import { DateRange } from './date-range.type' ;
import { Granularity } from './granularity.type' ;
import { OrderWithAccount } from './order-with-account.type' ;
import { RequestWithUser } from './request-with-user.type' ;
export {
AccessWithGranteeUser ,
DateRange ,
Granularity ,
OrderWithAccount ,
RequestWithUser
} ;
@ -1,3 +1,3 @@
import { UserWithSettings } from ' ./user-with-setting s';
import { UserWithSettings } from ' @ghostfolio/helper/interface s';
export type RequestWithUser = Request & { user : UserWithSettings } ;
@ -18,7 +18,7 @@
"paths" : {
"@ghostfolio/api/*" : [ "apps/api/src/*" ] ,
"@ghostfolio/client/*" : [ "apps/client/src/app/*" ] ,
"@ghostfolio/helper ": [ "libs/helper/src/ index.ts "]
"@ghostfolio/helper /* ": [ "libs/helper/src/ lib/* "]
}
} ,
"exclude" : [ "node_modules" , "tmp" ]