@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.
@@ -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;AAoL1D,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"}
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
- * 'managed' (default): persistence via the ForgeCharts backend
9
- * (/api/watchlist) with live quotes over the runtime WebSocket.
10
- * 'local': persistence in browser localStorage, no quote feed — used by
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
- mode?: 'managed' | 'local';
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, mode }: WatchlistDrawerProps): React.JSX.Element;
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;;;;;OAKG;IACH,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;CAC5B,CAAC;AAyIF,wBAAgB,eAAe,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,IAAgB,EAAE,EAAE,oBAAoB,qBAghBlH"}
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 — implemented by both the managed backend client and the local-storage store. */
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,4IAA4I;AAC5I,MAAM,MAAM,gBAAgB,GAAG,IAAI,CACjC,OAAO,YAAY,EACnB,QAAQ,GAAG,SAAS,GAAG,YAAY,GAAG,iBAAiB,GAAG,UAAU,GAAG,aAAa,GAAG,cAAc,CACtG,CAAC;AA8BF,eAAO,MAAM,iBAAiB,EAAE,gBAiE/B,CAAC"}
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
- * API base URL for the built-in ScriptDrawer's saved-script library
136
- * (GET/POST `/api/scripts` on this base). Optional — without it, script
137
- * authoring and Add to Chart still work; only cloud persistence is off.
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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=hostSchema.test.d.ts.map
@@ -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"}
@@ -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"}
@@ -1046,6 +1046,186 @@ ${drawingList}
1046
1046
  `;
1047
1047
  }
1048
1048
 
1049
- export { FORGESCRIPT_REFERENCE, buildSystemPrompt, getAgentTools };
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