@forgecharts/sdk 1.3.10 → 1.3.12
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/dist/index.js +4 -4
- package/dist/internal.js +4 -4
- package/dist/react/index.js +23 -95
- package/dist/react/index.js.map +1 -1
- package/dist/react/internal.js +23 -95
- package/dist/react/internal.js.map +1 -1
- package/dist/react/shell/ScriptDrawer.d.ts.map +1 -1
- package/dist/react/shell/WatchlistDrawer.d.ts +13 -6
- package/dist/react/shell/WatchlistDrawer.d.ts.map +1 -1
- package/dist/react/shell/watchlistApi.d.ts +1 -2
- package/dist/react/shell/watchlistApi.d.ts.map +1 -1
- package/dist/react/workspace/ChartWorkspace.d.ts +9 -4
- package/dist/react/workspace/ChartWorkspace.d.ts.map +1 -1
- package/dist/server/__tests__/hostSchema.test.d.ts +2 -0
- package/dist/server/__tests__/hostSchema.test.d.ts.map +1 -0
- package/dist/server/datasetIngest.d.ts +26 -0
- package/dist/server/datasetIngest.d.ts.map +1 -0
- package/dist/server/hostSchema.d.ts +39 -0
- package/dist/server/hostSchema.d.ts.map +1 -0
- package/dist/server/index.d.ts +4 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +181 -1
- package/dist/server/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/Omne-YBWT34SS.png +0 -0
- package/dist/Rithmic-CDB4YQEZ.png +0 -0
- package/dist/logo_dark-B2KCSRPJ.png +0 -0
- package/dist/logo_light-NAWNBY4G.png +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScriptDrawer.d.ts","sourceRoot":"","sources":["../../../src/react/shell/ScriptDrawer.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAmD,MAAM,OAAO,CAAC;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"ScriptDrawer.d.ts","sourceRoot":"","sources":["../../../src/react/shell/ScriptDrawer.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAmD,MAAM,OAAO,CAAC;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAqL1D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,cAAc,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IAClD,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC/C,CAAC;AAIF,wBAAgB,YAAY,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,iBAAiB,qBAglBhG"}
|
|
@@ -5,12 +5,19 @@ export type WatchlistDrawerProps = {
|
|
|
5
5
|
onSelectSymbol: (symbol: string) => void;
|
|
6
6
|
symbolResolver: ISymbolResolver;
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
* (
|
|
10
|
-
*
|
|
11
|
-
* ChartWorkspace's built-in watchlist in unmanaged deployments.
|
|
8
|
+
* Host API base for persistence — the drawer calls `${apiUrl}/api/watchlist`
|
|
9
|
+
* (see INTEGRATION.md §18 for the route + table contract). Omit for the
|
|
10
|
+
* managed same-origin default.
|
|
12
11
|
*/
|
|
13
|
-
|
|
12
|
+
apiUrl?: string;
|
|
13
|
+
/** Bearer-token resolver for the persistence calls. */
|
|
14
|
+
getAuthToken?: () => string | Promise<string>;
|
|
15
|
+
/**
|
|
16
|
+
* Live quote feed over the ForgeCharts runtime WebSocket. Default true
|
|
17
|
+
* (managed). Unmanaged deployments pass false until a host quote contract
|
|
18
|
+
* exists — rows render without prices instead of hammering a dead socket.
|
|
19
|
+
*/
|
|
20
|
+
liveQuotes?: boolean;
|
|
14
21
|
};
|
|
15
|
-
export declare function WatchlistDrawer({ onClose, onSelectSymbol, symbolResolver,
|
|
22
|
+
export declare function WatchlistDrawer({ onClose, onSelectSymbol, symbolResolver, apiUrl, getAuthToken, liveQuotes }: WatchlistDrawerProps): React.JSX.Element;
|
|
16
23
|
//# sourceMappingURL=WatchlistDrawer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WatchlistDrawer.d.ts","sourceRoot":"","sources":["../../../src/react/shell/WatchlistDrawer.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAc1D,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,cAAc,EAAE,eAAe,CAAC;IAChC
|
|
1
|
+
{"version":3,"file":"WatchlistDrawer.d.ts","sourceRoot":"","sources":["../../../src/react/shell/WatchlistDrawer.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAc1D,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,cAAc,EAAE,eAAe,CAAC;IAChC;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAyIF,wBAAgB,eAAe,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,UAAiB,EAAE,EAAE,oBAAoB,qBAyhBzI"}
|
|
@@ -35,7 +35,6 @@ export declare const watchlistApi: {
|
|
|
35
35
|
removeGroup(id: string): Promise<void>;
|
|
36
36
|
reorderItems(ids: string[]): Promise<void>;
|
|
37
37
|
};
|
|
38
|
-
/** The subset of watchlistApi the WatchlistDrawer consumes —
|
|
38
|
+
/** The subset of watchlistApi the WatchlistDrawer consumes — the host backend must implement these routes (INTEGRATION.md §18). */
|
|
39
39
|
export type WatchlistApiLike = Pick<typeof watchlistApi, 'getAll' | 'addItem' | 'removeItem' | 'moveItemToGroup' | 'addGroup' | 'removeGroup' | 'reorderItems'>;
|
|
40
|
-
export declare const localWatchlistApi: WatchlistApiLike;
|
|
41
40
|
//# sourceMappingURL=watchlistApi.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watchlistApi.d.ts","sourceRoot":"","sources":["../../../src/react/shell/watchlistApi.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAmCH,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,YAAY;mBACR;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;oBAMlF,MAAM,GAAG,IAAI;cAEnB,OAAO,CAAC,aAAa,CAAC;oBAIhB,MAAM,aAAa,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;mBAInD,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;wBAIjB,MAAM,YAAY,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC;mBAI7D,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;oBAI/B,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;sBAIpB,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAG3C,CAAC;AAEF,
|
|
1
|
+
{"version":3,"file":"watchlistApi.d.ts","sourceRoot":"","sources":["../../../src/react/shell/watchlistApi.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAmCH,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,YAAY;mBACR;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;oBAMlF,MAAM,GAAG,IAAI;cAEnB,OAAO,CAAC,aAAa,CAAC;oBAIhB,MAAM,aAAa,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;mBAInD,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;wBAIjB,MAAM,YAAY,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC;mBAI7D,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;oBAI/B,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;sBAIpB,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAG3C,CAAC;AAEF,mIAAmI;AACnI,MAAM,MAAM,gBAAgB,GAAG,IAAI,CACjC,OAAO,YAAY,EACnB,QAAQ,GAAG,SAAS,GAAG,YAAY,GAAG,iBAAiB,GAAG,UAAU,GAAG,aAAa,GAAG,cAAc,CACtG,CAAC"}
|
|
@@ -132,10 +132,15 @@ export type ChartWorkspaceProps = {
|
|
|
132
132
|
*/
|
|
133
133
|
builtinScriptDrawer?: boolean;
|
|
134
134
|
/**
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
*
|
|
135
|
+
* Host backend base URL for built-in drawer persistence — the workspace
|
|
136
|
+
* calls `${hostApiUrl}/api/scripts` and `${hostApiUrl}/api/watchlist`.
|
|
137
|
+
* REQUIRED for saved scripts and watchlists to persist: the SDK never
|
|
138
|
+
* stores feature data in localStorage; hosts implement these routes and
|
|
139
|
+
* create the backing tables per INTEGRATION.md §18 (the SDK ships the
|
|
140
|
+
* schema via `ensureForgeChartsTables` in `@forgecharts/sdk/server`).
|
|
138
141
|
*/
|
|
142
|
+
hostApiUrl?: string;
|
|
143
|
+
/** @deprecated Use `hostApiUrl`. */
|
|
139
144
|
scriptApiUrl?: string;
|
|
140
145
|
showTradeButton?: boolean;
|
|
141
146
|
tradeDrawerOpen?: boolean;
|
|
@@ -191,5 +196,5 @@ export type ChartWorkspaceProps = {
|
|
|
191
196
|
tradingOverlayStore?: TradingOverlayStore;
|
|
192
197
|
};
|
|
193
198
|
export type { TabItem };
|
|
194
|
-
export declare function ChartWorkspace({ tabs, activeTabId, onSelectTab, onAddTab, onCloseTab, onRenameTab, symbol, timeframe, theme, customTimeframes, favoriteTfs, onSymbolChange, onTimeframeChange, onAddCustomTimeframe, onRemoveCustomTimeframe, onFavoriteTfsChange, onAddIndicator, maxIndicators, indicatorsOpen, onToggleIndicators, onToggleTheme, onCopyScreenshot, onDownloadScreenshot, onFullscreen, isFullscreen, currentLayoutName, currentLayoutId, autoSave, onFetchLayouts, onSaveLayout, onLoadLayout, onRenameLayout, onCopyLayout, onToggleAutoSave, onDeleteLayout, onOpenLayoutInNewTab, showTradeButton, tradeDrawerOpen, onToggleTradeDrawer, symbolResolver, rollRule, onRollRuleChange, extraTfGroups, watchlistOpen, onToggleWatchlist, builtinWatchlistDrawer, orderEntryOpen, onToggleOrderEntry, showOrderEntry, showAgent, agentOpen, onToggleAgent, domOpen, onToggleDOM, showDrawingTools, showIndicators, showForgeScript, showWatchlist, showSavedLayouts, showCustomTimeframes, showDataExport, showMultiChartLayout, showMultipleTabs, activeSymbol, timezone, onTimezoneChange, session, onSessionChange, scriptDrawerOpen, onToggleScriptDrawer, builtinScriptDrawer, scriptApiUrl, tradingPanel, tradingPanelOpen, onToggleTradingPanel, tradingPanelRefreshTick, rithmicConnected, gridTemplate, gridSyncOptions, onGridTemplateChange, onGridSyncChange, onExitGridMode, chartSlots, isLicensed, wsLoaded, leftDrawers, drawers, getAuthToken, tradingBridge, tradingOverlayStore, }: ChartWorkspaceProps): React.JSX.Element;
|
|
199
|
+
export declare function ChartWorkspace({ tabs, activeTabId, onSelectTab, onAddTab, onCloseTab, onRenameTab, symbol, timeframe, theme, customTimeframes, favoriteTfs, onSymbolChange, onTimeframeChange, onAddCustomTimeframe, onRemoveCustomTimeframe, onFavoriteTfsChange, onAddIndicator, maxIndicators, indicatorsOpen, onToggleIndicators, onToggleTheme, onCopyScreenshot, onDownloadScreenshot, onFullscreen, isFullscreen, currentLayoutName, currentLayoutId, autoSave, onFetchLayouts, onSaveLayout, onLoadLayout, onRenameLayout, onCopyLayout, onToggleAutoSave, onDeleteLayout, onOpenLayoutInNewTab, showTradeButton, tradeDrawerOpen, onToggleTradeDrawer, symbolResolver, rollRule, onRollRuleChange, extraTfGroups, watchlistOpen, onToggleWatchlist, builtinWatchlistDrawer, orderEntryOpen, onToggleOrderEntry, showOrderEntry, showAgent, agentOpen, onToggleAgent, domOpen, onToggleDOM, showDrawingTools, showIndicators, showForgeScript, showWatchlist, showSavedLayouts, showCustomTimeframes, showDataExport, showMultiChartLayout, showMultipleTabs, activeSymbol, timezone, onTimezoneChange, session, onSessionChange, scriptDrawerOpen, onToggleScriptDrawer, builtinScriptDrawer, hostApiUrl, scriptApiUrl, tradingPanel, tradingPanelOpen, onToggleTradingPanel, tradingPanelRefreshTick, rithmicConnected, gridTemplate, gridSyncOptions, onGridTemplateChange, onGridSyncChange, onExitGridMode, chartSlots, isLicensed, wsLoaded, leftDrawers, drawers, getAuthToken, tradingBridge, tradingOverlayStore, }: ChartWorkspaceProps): React.JSX.Element;
|
|
195
200
|
//# sourceMappingURL=ChartWorkspace.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartWorkspace.d.ts","sourceRoot":"","sources":["../../../src/react/workspace/ChartWorkspace.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ChartWorkspace.d.ts","sourceRoot":"","sources":["../../../src/react/workspace/ChartWorkspace.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hostSchema.test.d.ts","sourceRoot":"","sources":["../../../src/server/__tests__/hostSchema.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dataset ingestion helpers — parsing for the host persistence contract's
|
|
3
|
+
* dataset routes (INTEGRATION.md §18). Ships in the SDK so host backends
|
|
4
|
+
* ingest CSV/JSON dataset uploads with the exact semantics the chart's
|
|
5
|
+
* ForgeScript engine expects, instead of reimplementing the parser.
|
|
6
|
+
*
|
|
7
|
+
* Mirrors the managed worker's ingestion: every row needs a `time` value
|
|
8
|
+
* (Unix seconds/millis or ISO date); remaining cells are coerced per the
|
|
9
|
+
* dataset's column definitions.
|
|
10
|
+
*/
|
|
11
|
+
export type DatasetColumnDef = {
|
|
12
|
+
name: string;
|
|
13
|
+
type: 'number' | 'integer' | 'text' | 'boolean' | 'date' | 'timestamp' | 'percentage' | 'price';
|
|
14
|
+
nullable: boolean;
|
|
15
|
+
};
|
|
16
|
+
/** One parsed dataset row: ISO bar time + coerced data cells. */
|
|
17
|
+
export type ParsedDatasetRow = {
|
|
18
|
+
bar_time: string;
|
|
19
|
+
data: Record<string, unknown>;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Parse an uploaded dataset file into rows ready for insertion into
|
|
23
|
+
* fc_dataset_rows. Throws with a user-readable message on malformed input.
|
|
24
|
+
*/
|
|
25
|
+
export declare function parseDatasetFile(content: string, fileType: 'csv' | 'json', columns: DatasetColumnDef[]): ParsedDatasetRow[];
|
|
26
|
+
//# sourceMappingURL=datasetIngest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"datasetIngest.d.ts","sourceRoot":"","sources":["../../src/server/datasetIngest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAM,MAAM,CAAC;IACjB,IAAI,EAAM,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,WAAW,GAAG,YAAY,GAAG,OAAO,CAAC;IACpG,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,iEAAiE;AACjE,MAAM,MAAM,gBAAgB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC;AAEnF;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,KAAK,GAAG,MAAM,EACxB,OAAO,EAAE,gBAAgB,EAAE,GAC1B,gBAAgB,EAAE,CAIpB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Host persistence schema — the database tables an unmanaged deployment
|
|
3
|
+
* must provide for the chart's persisted features (INTEGRATION.md §18).
|
|
4
|
+
*
|
|
5
|
+
* The SDK is a browser package and never touches a database or
|
|
6
|
+
* localStorage; the HOST backend owns persistence. This module ships the
|
|
7
|
+
* canonical DDL so integrators create exactly the tables the documented
|
|
8
|
+
* API route contracts expect:
|
|
9
|
+
*
|
|
10
|
+
* fc_watchlist_groups / fc_watchlist_items → /api/watchlist/*
|
|
11
|
+
* fc_scripts / fc_script_versions → /api/scripts/*
|
|
12
|
+
* fc_datasets / fc_dataset_rows → /api/scripts/:id/datasets/*
|
|
13
|
+
* fc_chart_layouts → layout handler props
|
|
14
|
+
* fc_chart_preferences → preferences (optional)
|
|
15
|
+
* fc_agent_messages → /api/agent/history
|
|
16
|
+
*
|
|
17
|
+
* All statements are idempotent (CREATE TABLE IF NOT EXISTS) — safe to run
|
|
18
|
+
* on every backend boot via `ensureForgeChartsTables`.
|
|
19
|
+
*
|
|
20
|
+
* `user_id` is VARCHAR(64) so any host user-id scheme (int, uuid) fits;
|
|
21
|
+
* scope every query by your authenticated user.
|
|
22
|
+
*/
|
|
23
|
+
export type HostSchemaDialect = 'mysql' | 'postgres';
|
|
24
|
+
/** Returns the CREATE TABLE statements for the host persistence schema. */
|
|
25
|
+
export declare function getHostSchemaStatements(dialect?: HostSchemaDialect): string[];
|
|
26
|
+
/**
|
|
27
|
+
* Creates the host persistence tables in the customer's database. Driver
|
|
28
|
+
* agnostic — pass any async `query(sql)` executor (mysql2, pg, knex.raw, …).
|
|
29
|
+
* Idempotent: call it on every backend boot, after your own migrations.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* import { ensureForgeChartsTables } from '@forgecharts/sdk/server';
|
|
33
|
+
* await ensureForgeChartsTables({ query: (sql) => pool.query(sql), dialect: 'mysql' });
|
|
34
|
+
*/
|
|
35
|
+
export declare function ensureForgeChartsTables(opts: {
|
|
36
|
+
query: (sql: string) => Promise<unknown>;
|
|
37
|
+
dialect?: HostSchemaDialect;
|
|
38
|
+
}): Promise<void>;
|
|
39
|
+
//# sourceMappingURL=hostSchema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hostSchema.d.ts","sourceRoot":"","sources":["../../src/server/hostSchema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,UAAU,CAAC;AAErD,2EAA2E;AAC3E,wBAAgB,uBAAuB,CAAC,OAAO,GAAE,iBAA2B,GAAG,MAAM,EAAE,CA6FtF;AAED;;;;;;;;GAQG;AACH,wBAAsB,uBAAuB,CAAC,IAAI,EAAE;IAClD,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B,GAAG,OAAO,CAAC,IAAI,CAAC,CAIhB"}
|
package/dist/server/index.d.ts
CHANGED
|
@@ -19,4 +19,8 @@
|
|
|
19
19
|
export { getAgentTools } from './tools';
|
|
20
20
|
export { buildSystemPrompt } from './systemPrompt';
|
|
21
21
|
export { FORGESCRIPT_REFERENCE } from './knowledge';
|
|
22
|
+
export { ensureForgeChartsTables, getHostSchemaStatements } from './hostSchema';
|
|
23
|
+
export type { HostSchemaDialect } from './hostSchema';
|
|
24
|
+
export { parseDatasetFile } from './datasetIngest';
|
|
25
|
+
export type { DatasetColumnDef, ParsedDatasetRow } from './datasetIngest';
|
|
22
26
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAChF,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/server/index.js
CHANGED
|
@@ -1046,6 +1046,186 @@ ${drawingList}
|
|
|
1046
1046
|
`;
|
|
1047
1047
|
}
|
|
1048
1048
|
|
|
1049
|
-
|
|
1049
|
+
// src/server/hostSchema.ts
|
|
1050
|
+
function getHostSchemaStatements(dialect = "mysql") {
|
|
1051
|
+
const pk = dialect === "mysql" ? "id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY" : "id SERIAL PRIMARY KEY";
|
|
1052
|
+
const json = dialect === "mysql" ? "JSON" : "JSONB";
|
|
1053
|
+
const now = "CURRENT_TIMESTAMP";
|
|
1054
|
+
const updatedAt = dialect === "mysql" ? `updated_at TIMESTAMP NOT NULL DEFAULT ${now} ON UPDATE ${now}` : `updated_at TIMESTAMP NOT NULL DEFAULT ${now}`;
|
|
1055
|
+
return [
|
|
1056
|
+
// ── Watchlist ─────────────────────────────────────────────────────────
|
|
1057
|
+
`CREATE TABLE IF NOT EXISTS fc_watchlist_groups (
|
|
1058
|
+
${pk},
|
|
1059
|
+
user_id VARCHAR(64) NOT NULL,
|
|
1060
|
+
name VARCHAR(128) NOT NULL,
|
|
1061
|
+
position INT NOT NULL DEFAULT 0,
|
|
1062
|
+
created_at TIMESTAMP NOT NULL DEFAULT ${now}
|
|
1063
|
+
)`,
|
|
1064
|
+
`CREATE TABLE IF NOT EXISTS fc_watchlist_items (
|
|
1065
|
+
${pk},
|
|
1066
|
+
user_id VARCHAR(64) NOT NULL,
|
|
1067
|
+
group_id INT NULL,
|
|
1068
|
+
symbol VARCHAR(64) NOT NULL,
|
|
1069
|
+
position INT NOT NULL DEFAULT 0,
|
|
1070
|
+
created_at TIMESTAMP NOT NULL DEFAULT ${now}
|
|
1071
|
+
)`,
|
|
1072
|
+
// ── ForgeScript scripts (versioned source) ────────────────────────────
|
|
1073
|
+
`CREATE TABLE IF NOT EXISTS fc_scripts (
|
|
1074
|
+
${pk},
|
|
1075
|
+
user_id VARCHAR(64) NOT NULL,
|
|
1076
|
+
name VARCHAR(128) NOT NULL,
|
|
1077
|
+
language VARCHAR(32) NOT NULL DEFAULT 'forgescript',
|
|
1078
|
+
created_at TIMESTAMP NOT NULL DEFAULT ${now},
|
|
1079
|
+
${updatedAt}
|
|
1080
|
+
)`,
|
|
1081
|
+
`CREATE TABLE IF NOT EXISTS fc_script_versions (
|
|
1082
|
+
${pk},
|
|
1083
|
+
script_id INT NOT NULL,
|
|
1084
|
+
version INT NOT NULL,
|
|
1085
|
+
source MEDIUMTEXT NOT NULL,
|
|
1086
|
+
created_at TIMESTAMP NOT NULL DEFAULT ${now}
|
|
1087
|
+
)`.replace("MEDIUMTEXT", dialect === "mysql" ? "MEDIUMTEXT" : "TEXT"),
|
|
1088
|
+
// ── ForgeScript datasets (schema + time-indexed rows) ─────────────────
|
|
1089
|
+
`CREATE TABLE IF NOT EXISTS fc_datasets (
|
|
1090
|
+
${pk},
|
|
1091
|
+
user_id VARCHAR(64) NOT NULL,
|
|
1092
|
+
script_id INT NOT NULL,
|
|
1093
|
+
name VARCHAR(64) NOT NULL,
|
|
1094
|
+
columns_json ${json} NOT NULL,
|
|
1095
|
+
row_count INT NOT NULL DEFAULT 0,
|
|
1096
|
+
ingest_status VARCHAR(16) NOT NULL DEFAULT 'ready',
|
|
1097
|
+
ingest_error TEXT NULL,
|
|
1098
|
+
created_at TIMESTAMP NOT NULL DEFAULT ${now},
|
|
1099
|
+
${updatedAt}
|
|
1100
|
+
)`,
|
|
1101
|
+
`CREATE TABLE IF NOT EXISTS fc_dataset_rows (
|
|
1102
|
+
${pk},
|
|
1103
|
+
dataset_id INT NOT NULL,
|
|
1104
|
+
bar_time DATETIME NOT NULL,
|
|
1105
|
+
data ${json} NOT NULL
|
|
1106
|
+
)`.replace("DATETIME", dialect === "mysql" ? "DATETIME" : "TIMESTAMP"),
|
|
1107
|
+
// ── Chart layouts + preferences ───────────────────────────────────────
|
|
1108
|
+
`CREATE TABLE IF NOT EXISTS fc_chart_layouts (
|
|
1109
|
+
${pk},
|
|
1110
|
+
user_id VARCHAR(64) NOT NULL,
|
|
1111
|
+
name VARCHAR(128) NOT NULL,
|
|
1112
|
+
symbol VARCHAR(64) NULL,
|
|
1113
|
+
timeframe VARCHAR(16) NULL,
|
|
1114
|
+
config ${json} NOT NULL,
|
|
1115
|
+
created_at TIMESTAMP NOT NULL DEFAULT ${now},
|
|
1116
|
+
${updatedAt}
|
|
1117
|
+
)`,
|
|
1118
|
+
`CREATE TABLE IF NOT EXISTS fc_chart_preferences (
|
|
1119
|
+
user_id VARCHAR(64) NOT NULL PRIMARY KEY,
|
|
1120
|
+
data ${json} NOT NULL,
|
|
1121
|
+
${updatedAt}
|
|
1122
|
+
)`,
|
|
1123
|
+
// ── AI Assistant conversation history ─────────────────────────────────
|
|
1124
|
+
`CREATE TABLE IF NOT EXISTS fc_agent_messages (
|
|
1125
|
+
${pk},
|
|
1126
|
+
user_id VARCHAR(64) NOT NULL,
|
|
1127
|
+
client_msg_id VARCHAR(64) NOT NULL,
|
|
1128
|
+
role VARCHAR(16) NOT NULL,
|
|
1129
|
+
content MEDIUMTEXT NOT NULL,
|
|
1130
|
+
tool_calls ${json} NULL,
|
|
1131
|
+
created_at TIMESTAMP NOT NULL DEFAULT ${now}
|
|
1132
|
+
)`.replace("MEDIUMTEXT", dialect === "mysql" ? "MEDIUMTEXT" : "TEXT")
|
|
1133
|
+
].map((s) => s.replace(/\s+/g, " ").trim());
|
|
1134
|
+
}
|
|
1135
|
+
async function ensureForgeChartsTables(opts) {
|
|
1136
|
+
for (const stmt of getHostSchemaStatements(opts.dialect ?? "mysql")) {
|
|
1137
|
+
await opts.query(stmt);
|
|
1138
|
+
}
|
|
1139
|
+
}
|
|
1140
|
+
|
|
1141
|
+
// src/server/datasetIngest.ts
|
|
1142
|
+
function parseDatasetFile(content, fileType, columns) {
|
|
1143
|
+
const rows = fileType === "csv" ? parseCsv(content, columns) : parseJson(content, columns);
|
|
1144
|
+
if (rows.length === 0) throw new Error("No valid rows found in the uploaded file.");
|
|
1145
|
+
return rows;
|
|
1146
|
+
}
|
|
1147
|
+
function parseCsv(content, columns) {
|
|
1148
|
+
const lines = content.split(/\r?\n/).filter((l) => l.trim().length > 0);
|
|
1149
|
+
if (lines.length < 2) throw new Error("CSV must have a header row and at least one data row.");
|
|
1150
|
+
const headers = lines[0].split(",").map((h) => h.trim().toLowerCase());
|
|
1151
|
+
const timeIdx = headers.indexOf("time");
|
|
1152
|
+
if (timeIdx === -1) throw new Error("CSV must have a 'time' column.");
|
|
1153
|
+
const colNames = new Set(columns.map((c) => c.name));
|
|
1154
|
+
const colMap = new Map(columns.map((c) => [c.name, c]));
|
|
1155
|
+
const rows = [];
|
|
1156
|
+
for (let i = 1; i < lines.length; i++) {
|
|
1157
|
+
const cells = lines[i].split(",").map((c) => c.trim());
|
|
1158
|
+
const rawTime = cells[timeIdx];
|
|
1159
|
+
if (!rawTime) continue;
|
|
1160
|
+
const bar_time = normaliseTime(rawTime);
|
|
1161
|
+
if (!bar_time) continue;
|
|
1162
|
+
const data = {};
|
|
1163
|
+
for (let j = 0; j < headers.length; j++) {
|
|
1164
|
+
const header = headers[j];
|
|
1165
|
+
if (j === timeIdx) continue;
|
|
1166
|
+
if (!colNames.has(header)) continue;
|
|
1167
|
+
const col = colMap.get(header);
|
|
1168
|
+
data[header] = coerce(cells[j] ?? "", col);
|
|
1169
|
+
}
|
|
1170
|
+
rows.push({ bar_time, data });
|
|
1171
|
+
}
|
|
1172
|
+
return rows;
|
|
1173
|
+
}
|
|
1174
|
+
function parseJson(content, columns) {
|
|
1175
|
+
let parsed;
|
|
1176
|
+
try {
|
|
1177
|
+
parsed = JSON.parse(content);
|
|
1178
|
+
} catch {
|
|
1179
|
+
throw new Error("Invalid JSON content.");
|
|
1180
|
+
}
|
|
1181
|
+
if (!Array.isArray(parsed)) throw new Error("JSON must be an array of objects.");
|
|
1182
|
+
const colMap = new Map(columns.map((c) => [c.name, c]));
|
|
1183
|
+
const rows = [];
|
|
1184
|
+
for (const item of parsed) {
|
|
1185
|
+
const rawTime = item["time"];
|
|
1186
|
+
if (!rawTime) continue;
|
|
1187
|
+
const bar_time = normaliseTime(String(rawTime));
|
|
1188
|
+
if (!bar_time) continue;
|
|
1189
|
+
const data = {};
|
|
1190
|
+
for (const col of columns) {
|
|
1191
|
+
const raw = item[col.name];
|
|
1192
|
+
data[col.name] = raw !== void 0 ? coerce(String(raw), colMap.get(col.name)) : null;
|
|
1193
|
+
}
|
|
1194
|
+
rows.push({ bar_time, data });
|
|
1195
|
+
}
|
|
1196
|
+
return rows;
|
|
1197
|
+
}
|
|
1198
|
+
function normaliseTime(raw) {
|
|
1199
|
+
if (/^\d{9,13}$/.test(raw)) {
|
|
1200
|
+
const ms = raw.length === 13 ? Number(raw) : Number(raw) * 1e3;
|
|
1201
|
+
return new Date(ms).toISOString();
|
|
1202
|
+
}
|
|
1203
|
+
const d = new Date(raw);
|
|
1204
|
+
if (!isNaN(d.getTime())) return d.toISOString();
|
|
1205
|
+
return null;
|
|
1206
|
+
}
|
|
1207
|
+
function coerce(raw, col) {
|
|
1208
|
+
if (raw === "" || raw === "null" || raw === "NULL") return col.nullable ? null : void 0;
|
|
1209
|
+
switch (col.type) {
|
|
1210
|
+
case "number":
|
|
1211
|
+
case "percentage":
|
|
1212
|
+
case "price":
|
|
1213
|
+
return parseFloat(raw);
|
|
1214
|
+
case "integer":
|
|
1215
|
+
return parseInt(raw, 10);
|
|
1216
|
+
case "boolean":
|
|
1217
|
+
return raw.toLowerCase() === "true" || raw === "1";
|
|
1218
|
+
case "date":
|
|
1219
|
+
case "timestamp": {
|
|
1220
|
+
const d = new Date(raw);
|
|
1221
|
+
return isNaN(d.getTime()) ? null : d.toISOString();
|
|
1222
|
+
}
|
|
1223
|
+
case "text":
|
|
1224
|
+
default:
|
|
1225
|
+
return raw;
|
|
1226
|
+
}
|
|
1227
|
+
}
|
|
1228
|
+
|
|
1229
|
+
export { FORGESCRIPT_REFERENCE, buildSystemPrompt, ensureForgeChartsTables, getAgentTools, getHostSchemaStatements, parseDatasetFile };
|
|
1050
1230
|
//# sourceMappingURL=index.js.map
|
|
1051
1231
|
//# sourceMappingURL=index.js.map
|