@tradejs/app 1.0.0 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,15 @@
1
1
  {
2
2
  "name": "@tradejs/app",
3
- "version": "1.0.0",
3
+ "version": "1.0.3",
4
+ "keywords": [
5
+ "tradejs",
6
+ "trading",
7
+ "backtesting",
8
+ "app",
9
+ "dashboard",
10
+ "nextjs",
11
+ "signals"
12
+ ],
4
13
  "files": [
5
14
  "README.md",
6
15
  "bin",
@@ -24,12 +33,12 @@
24
33
  "@emotion/react": "^11.14.0",
25
34
  "@langchain/core": "^0.3.68",
26
35
  "@langchain/openai": "^0.6.11",
27
- "@tradejs/connectors": "^1.0.0",
28
- "@tradejs/core": "^1.0.0",
29
- "@tradejs/indicators": "^1.0.0",
30
- "@tradejs/infra": "^1.0.0",
31
- "@tradejs/node": "^1.0.0",
32
- "@tradejs/types": "^1.0.0",
36
+ "@tradejs/connectors": "^1.0.3",
37
+ "@tradejs/core": "^1.0.3",
38
+ "@tradejs/indicators": "^1.0.3",
39
+ "@tradejs/infra": "^1.0.3",
40
+ "@tradejs/node": "^1.0.3",
41
+ "@tradejs/types": "^1.0.3",
33
42
  "bcryptjs": "^2.4.3",
34
43
  "date-fns": "^3.3.1",
35
44
  "idb-keyval": "^6.2.2",
@@ -5,7 +5,7 @@ import {
5
5
  HumanMessage,
6
6
  SystemMessage,
7
7
  } from '@langchain/core/messages';
8
- import { toJson } from '@tradejs/core/json';
8
+ import { toJson } from '@tradejs/core/data';
9
9
  import { getConnectorCreatorByProvider } from '@tradejs/node/connectors';
10
10
  import {
11
11
  AIChatHistory,
@@ -19,9 +19,11 @@ import { logger } from '@tradejs/infra/logger';
19
19
  export const dynamic = 'force-dynamic';
20
20
 
21
21
  const HISTORY_DIR = 'data/chats';
22
+ const projectRoot =
23
+ String(process.env.PROJECT_CWD || process.cwd()).trim() || process.cwd();
22
24
 
23
25
  const getHistory = async (symbol: string): Promise<AIChatHistory> => {
24
- const history = await getFile(HISTORY_DIR, symbol);
26
+ const history = await getFile(HISTORY_DIR, symbol, [], projectRoot);
25
27
  return history;
26
28
  };
27
29
 
@@ -30,7 +32,9 @@ const appendMessagesToHistory = async (
30
32
  messages: AIChatHistory,
31
33
  ): Promise<void> => {
32
34
  const history = await getHistory(symbol);
33
- await setFile(HISTORY_DIR, symbol, [...history, ...messages]);
35
+ await setFile(HISTORY_DIR, symbol, [...history, ...messages], {
36
+ projectRoot,
37
+ });
34
38
  };
35
39
 
36
40
  const buildMessages = (
@@ -115,7 +119,10 @@ export const POST = async (request: NextRequest) => {
115
119
 
116
120
  await appendMessagesToHistory(filters.symbol, [message]);
117
121
 
118
- const connectorCreator = await getConnectorCreatorByProvider('bybit');
122
+ const connectorCreator = await getConnectorCreatorByProvider(
123
+ 'bybit',
124
+ projectRoot,
125
+ );
119
126
  if (!connectorCreator) {
120
127
  throw new Error('No connector available for provider');
121
128
  }
@@ -7,12 +7,14 @@ import { ensureIndicatorPluginsLoaded } from '@tradejs/node/registry';
7
7
  import { logger } from '@tradejs/infra/logger';
8
8
 
9
9
  export const dynamic = 'force-dynamic';
10
+ const projectRoot =
11
+ String(process.env.PROJECT_CWD || process.cwd()).trim() || process.cwd();
10
12
 
11
13
  export const GET = async () => {
12
14
  try {
13
- await ensureIndicatorPluginsLoaded();
14
- const data = getPluginIndicatorCatalog();
15
- const renderers = getPluginIndicatorRenderers();
15
+ await ensureIndicatorPluginsLoaded(projectRoot);
16
+ const data = getPluginIndicatorCatalog(projectRoot);
17
+ const renderers = getPluginIndicatorRenderers(projectRoot);
16
18
  return NextResponse.json({ data, renderers });
17
19
  } catch (error) {
18
20
  logger.log('error', 'Indicators catalog error: %o', error);
@@ -14,6 +14,8 @@ import {
14
14
  } from '@tradejs/types';
15
15
 
16
16
  export const dynamic = 'force-dynamic';
17
+ const projectRoot =
18
+ String(process.env.PROJECT_CWD || process.cwd()).trim() || process.cwd();
17
19
 
18
20
  interface Params {
19
21
  provider: string;
@@ -32,6 +34,7 @@ const enrichWithPluginIndicators = (
32
34
 
33
35
  const history = createIndicators(data, btcData, {
34
36
  includeMlPayload: false,
37
+ pluginRegistryScope: projectRoot,
35
38
  }).result() as Record<string, number[]>;
36
39
 
37
40
  const nextData = data.map((candle) => ({ ...candle }));
@@ -78,8 +81,8 @@ export const POST = async (
78
81
  }
79
82
 
80
83
  const connectorCreator =
81
- (await getConnectorCreatorByProvider(provider)) ||
82
- (await getConnectorCreatorByProvider('bybit'));
84
+ (await getConnectorCreatorByProvider(provider, projectRoot)) ||
85
+ (await getConnectorCreatorByProvider('bybit', projectRoot));
83
86
  if (!connectorCreator) {
84
87
  throw new Error('No connector available for provider');
85
88
  }
@@ -93,8 +96,8 @@ export const POST = async (
93
96
  ...options,
94
97
  });
95
98
 
96
- await ensureIndicatorPluginsLoaded();
97
- const pluginKeys = getRegisteredIndicatorEntries().map(
99
+ await ensureIndicatorPluginsLoaded(projectRoot);
100
+ const pluginKeys = getRegisteredIndicatorEntries(projectRoot).map(
98
101
  (entry) => entry.historyKey || entry.indicator.id,
99
102
  );
100
103
  if (!pluginKeys.length) {
@@ -5,6 +5,8 @@ import { getTopTickers } from '@tradejs/core/tickers';
5
5
  import { logger } from '@tradejs/infra/logger';
6
6
 
7
7
  export const dynamic = 'force-dynamic';
8
+ const projectRoot =
9
+ String(process.env.PROJECT_CWD || process.cwd()).trim() || process.cwd();
8
10
 
9
11
  interface Params {
10
12
  provider: string;
@@ -17,8 +19,8 @@ export const GET = async (
17
19
  try {
18
20
  const { provider } = await params;
19
21
  const connectorCreator =
20
- (await getConnectorCreatorByProvider(provider)) ||
21
- (await getConnectorCreatorByProvider('bybit'));
22
+ (await getConnectorCreatorByProvider(provider, projectRoot)) ||
23
+ (await getConnectorCreatorByProvider('bybit', projectRoot));
22
24
  if (!connectorCreator) {
23
25
  throw new Error('No connector available for provider');
24
26
  }
@@ -5,10 +5,15 @@ import { logger } from '@tradejs/infra/logger';
5
5
  import { ConnectorCreator } from '@tradejs/types';
6
6
 
7
7
  export const dynamic = 'force-dynamic';
8
+ const projectRoot =
9
+ String(process.env.PROJECT_CWD || process.cwd()).trim() || process.cwd();
8
10
 
9
11
  export const GET = async () => {
10
12
  try {
11
- const connectorCreator = await getConnectorCreatorByProvider('bybit');
13
+ const connectorCreator = await getConnectorCreatorByProvider(
14
+ 'bybit',
15
+ projectRoot,
16
+ );
12
17
  if (!connectorCreator) {
13
18
  throw new Error('No connector available for provider');
14
19
  }
package/tsconfig.json CHANGED
@@ -1,6 +1,5 @@
1
1
  {
2
2
  "compilerOptions": {
3
- "target": "ES2017",
4
3
  "lib": ["dom", "dom.iterable", "esnext"],
5
4
  "types": ["jest", "node"],
6
5
  "allowJs": true,
@@ -10,23 +9,25 @@
10
9
  "esModuleInterop": true,
11
10
  "module": "esnext",
12
11
  "moduleResolution": "bundler",
13
- "baseUrl": "./src",
14
12
  "resolveJsonModule": true,
15
13
  "isolatedModules": true,
16
14
  "jsx": "react-jsx",
17
15
  "incremental": true,
16
+ "target": "ES2017",
17
+ "baseUrl": ".",
18
18
  "plugins": [
19
19
  {
20
20
  "name": "next"
21
21
  }
22
22
  ],
23
23
  "paths": {
24
- "@app/*": ["app/*"],
25
- "@actions/*": ["app/actions/*"],
26
- "@store": ["app/store/index"],
27
- "@shared/*": ["app/components/Shared/*"],
28
- "@UI": ["app/components/UI/index"],
29
- "@components/*": ["app/components/*"]
24
+ "@/*": ["./src/*"],
25
+ "@app/*": ["./src/app/*"],
26
+ "@actions/*": ["./src/app/actions/*"],
27
+ "@store": ["./src/app/store/index"],
28
+ "@shared/*": ["./src/app/components/Shared/*"],
29
+ "@UI": ["./src/app/components/UI/index"],
30
+ "@components/*": ["./src/app/components/*"]
30
31
  }
31
32
  },
32
33
  "include": [