@livefolio/sdk 0.2.0

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.
Files changed (70) hide show
  1. package/README.md +191 -0
  2. package/dist/auth/client.d.ts +4 -0
  3. package/dist/auth/client.d.ts.map +1 -0
  4. package/dist/auth/client.js +37 -0
  5. package/dist/auth/client.js.map +1 -0
  6. package/dist/auth/index.d.ts +3 -0
  7. package/dist/auth/index.d.ts.map +1 -0
  8. package/dist/auth/index.js +6 -0
  9. package/dist/auth/index.js.map +1 -0
  10. package/dist/auth/types.d.ts +9 -0
  11. package/dist/auth/types.d.ts.map +1 -0
  12. package/dist/auth/types.js +3 -0
  13. package/dist/auth/types.js.map +1 -0
  14. package/dist/index.d.ts +23 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +55 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/market/client.d.ts +4 -0
  19. package/dist/market/client.d.ts.map +1 -0
  20. package/dist/market/client.js +65 -0
  21. package/dist/market/client.js.map +1 -0
  22. package/dist/market/index.d.ts +3 -0
  23. package/dist/market/index.d.ts.map +1 -0
  24. package/dist/market/index.js +6 -0
  25. package/dist/market/index.js.map +1 -0
  26. package/dist/market/types.d.ts +20 -0
  27. package/dist/market/types.d.ts.map +1 -0
  28. package/dist/market/types.js +3 -0
  29. package/dist/market/types.js.map +1 -0
  30. package/dist/portfolio/client.d.ts +4 -0
  31. package/dist/portfolio/client.d.ts.map +1 -0
  32. package/dist/portfolio/client.js +7 -0
  33. package/dist/portfolio/client.js.map +1 -0
  34. package/dist/portfolio/index.d.ts +3 -0
  35. package/dist/portfolio/index.d.ts.map +1 -0
  36. package/dist/portfolio/index.js +6 -0
  37. package/dist/portfolio/index.js.map +1 -0
  38. package/dist/portfolio/types.d.ts +3 -0
  39. package/dist/portfolio/types.d.ts.map +1 -0
  40. package/dist/portfolio/types.js +3 -0
  41. package/dist/portfolio/types.js.map +1 -0
  42. package/dist/strategy/client.d.ts +4 -0
  43. package/dist/strategy/client.d.ts.map +1 -0
  44. package/dist/strategy/client.js +350 -0
  45. package/dist/strategy/client.js.map +1 -0
  46. package/dist/strategy/evaluate.d.ts +10 -0
  47. package/dist/strategy/evaluate.d.ts.map +1 -0
  48. package/dist/strategy/evaluate.js +498 -0
  49. package/dist/strategy/evaluate.js.map +1 -0
  50. package/dist/strategy/index.d.ts +6 -0
  51. package/dist/strategy/index.d.ts.map +1 -0
  52. package/dist/strategy/index.js +20 -0
  53. package/dist/strategy/index.js.map +1 -0
  54. package/dist/strategy/symbols.d.ts +4 -0
  55. package/dist/strategy/symbols.d.ts.map +1 -0
  56. package/dist/strategy/symbols.js +41 -0
  57. package/dist/strategy/symbols.js.map +1 -0
  58. package/dist/strategy/time.d.ts +9 -0
  59. package/dist/strategy/time.d.ts.map +1 -0
  60. package/dist/strategy/time.js +28 -0
  61. package/dist/strategy/time.js.map +1 -0
  62. package/dist/strategy/types.d.ts +107 -0
  63. package/dist/strategy/types.d.ts.map +1 -0
  64. package/dist/strategy/types.js +3 -0
  65. package/dist/strategy/types.js.map +1 -0
  66. package/dist/types.d.ts +4 -0
  67. package/dist/types.d.ts.map +1 -0
  68. package/dist/types.js +3 -0
  69. package/dist/types.js.map +1 -0
  70. package/package.json +47 -0
@@ -0,0 +1,350 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createStrategy = createStrategy;
4
+ const evaluate_1 = require("./evaluate");
5
+ const symbols_1 = require("./symbols");
6
+ const client_1 = require("../market/client");
7
+ // ---------------------------------------------------------------------------
8
+ // Row → domain mapping helpers
9
+ // ---------------------------------------------------------------------------
10
+ function mapTicker(row) {
11
+ return { symbol: row.symbol, leverage: row.leverage };
12
+ }
13
+ function mapIndicator(row) {
14
+ return {
15
+ type: row.type,
16
+ ticker: row.tickers ? mapTicker(row.tickers) : { symbol: '', leverage: 1 },
17
+ lookback: row.lookback,
18
+ delay: row.delay,
19
+ unit: row.unit ?? null,
20
+ threshold: row.threshold,
21
+ };
22
+ }
23
+ function mapSignal(row) {
24
+ return {
25
+ left: mapIndicator(row.indicator_1),
26
+ comparison: row.comparison,
27
+ right: mapIndicator(row.indicator_2),
28
+ tolerance: row.tolerance,
29
+ };
30
+ }
31
+ // ---------------------------------------------------------------------------
32
+ // Factory
33
+ // ---------------------------------------------------------------------------
34
+ function createStrategy(client) {
35
+ // Cast to any for new tables not yet in generated types.
36
+ // Will be removed after regenerating database.types.ts.
37
+ const db = client;
38
+ const market = (0, client_1.createMarket)(client);
39
+ // -----------------------------------------------------------------------
40
+ // Private helpers (moved from public storage methods)
41
+ // -----------------------------------------------------------------------
42
+ async function fetchSignalStates(strategyId) {
43
+ const { data: nsRows, error: nsErr } = await db
44
+ .from('named_signals')
45
+ .select(`
46
+ signal_id,
47
+ signals:signal_id (
48
+ id,
49
+ indicator_1:indicator_id_1 ( type, tickers:ticker_id ( symbol, leverage ), lookback, delay, unit, threshold ),
50
+ indicator_2:indicator_id_2 ( type, tickers:ticker_id ( symbol, leverage ), lookback, delay, unit, threshold ),
51
+ comparison,
52
+ tolerance
53
+ )
54
+ `)
55
+ .eq('strategy_id', strategyId);
56
+ if (nsErr || !nsRows || nsRows.length === 0)
57
+ return {};
58
+ const signalIds = nsRows.map((r) => r.signal_id);
59
+ const { data: evalRows, error: evalErr } = await client
60
+ .from('signal_evaluations')
61
+ .select('signal_id, result, trading_day_id')
62
+ .in('signal_id', signalIds)
63
+ .order('trading_day_id', { ascending: false });
64
+ if (evalErr || !evalRows)
65
+ return {};
66
+ const latestBySignalId = new Map();
67
+ for (const row of evalRows) {
68
+ if (!latestBySignalId.has(row.signal_id)) {
69
+ latestBySignalId.set(row.signal_id, row.result);
70
+ }
71
+ }
72
+ const result = {};
73
+ for (const nsRow of nsRows) {
74
+ const signal = mapSignal(nsRow.signals);
75
+ const key = (0, evaluate_1.signalKey)(signal);
76
+ const val = latestBySignalId.get(nsRow.signal_id);
77
+ if (val !== undefined) {
78
+ result[key] = val;
79
+ }
80
+ }
81
+ return result;
82
+ }
83
+ async function fetchSignalStatesForDay(strategyId, tradingDayId) {
84
+ const { data: nsRows, error: nsErr } = await db
85
+ .from('named_signals')
86
+ .select(`
87
+ signal_id,
88
+ signals:signal_id (
89
+ id,
90
+ indicator_1:indicator_id_1 ( type, tickers:ticker_id ( symbol, leverage ), lookback, delay, unit, threshold ),
91
+ indicator_2:indicator_id_2 ( type, tickers:ticker_id ( symbol, leverage ), lookback, delay, unit, threshold ),
92
+ comparison,
93
+ tolerance
94
+ )
95
+ `)
96
+ .eq('strategy_id', strategyId);
97
+ if (nsErr || !nsRows || nsRows.length === 0)
98
+ return {};
99
+ const signalIds = nsRows.map((r) => r.signal_id);
100
+ const { data: evalRows, error: evalErr } = await client
101
+ .from('signal_evaluations')
102
+ .select('signal_id, result')
103
+ .in('signal_id', signalIds)
104
+ .eq('trading_day_id', tradingDayId);
105
+ if (evalErr || !evalRows)
106
+ return {};
107
+ const signalIdToResult = new Map();
108
+ for (const row of evalRows) {
109
+ signalIdToResult.set(row.signal_id, row.result);
110
+ }
111
+ const result = {};
112
+ for (const nsRow of nsRows) {
113
+ const signal = mapSignal(nsRow.signals);
114
+ const key = (0, evaluate_1.signalKey)(signal);
115
+ const val = signalIdToResult.get(nsRow.signal_id);
116
+ if (val !== undefined) {
117
+ result[key] = val;
118
+ }
119
+ }
120
+ return result;
121
+ }
122
+ async function fetchIndicatorKeyMap(strategyId) {
123
+ const { data: nsRows, error: nsErr } = await db
124
+ .from('named_signals')
125
+ .select(`
126
+ signals:signal_id (
127
+ indicator_1:indicator_id_1 ( id, type, tickers:ticker_id ( symbol, leverage ), lookback, delay, unit, threshold ),
128
+ indicator_2:indicator_id_2 ( id, type, tickers:ticker_id ( symbol, leverage ), lookback, delay, unit, threshold )
129
+ )
130
+ `)
131
+ .eq('strategy_id', strategyId);
132
+ if (nsErr || !nsRows || nsRows.length === 0)
133
+ return new Map();
134
+ const keyToId = new Map();
135
+ for (const nsRow of nsRows) {
136
+ for (const ind of [nsRow.signals.indicator_1, nsRow.signals.indicator_2]) {
137
+ const key = (0, evaluate_1.indicatorKey)(mapIndicator(ind));
138
+ if (!keyToId.has(key)) {
139
+ keyToId.set(key, ind.id);
140
+ }
141
+ }
142
+ }
143
+ return keyToId;
144
+ }
145
+ async function fetchIndicatorEvaluationsForDay(strategyId, tradingDayId) {
146
+ const keyToId = await fetchIndicatorKeyMap(strategyId);
147
+ if (keyToId.size === 0)
148
+ return {};
149
+ const indicatorIds = [...keyToId.values()];
150
+ const { data: evalRows, error: evalErr } = await db
151
+ .from('indicator_evaluations')
152
+ .select('indicator_id, value, metadata, trading_days!inner(post)')
153
+ .in('indicator_id', indicatorIds)
154
+ .eq('trading_day_id', tradingDayId);
155
+ if (evalErr || !evalRows)
156
+ return {};
157
+ const byIndicatorId = new Map();
158
+ for (const row of evalRows) {
159
+ byIndicatorId.set(row.indicator_id, {
160
+ value: Number(row.value),
161
+ metadata: row.metadata,
162
+ post: row.trading_days.post,
163
+ });
164
+ }
165
+ const result = {};
166
+ for (const [key, id] of keyToId) {
167
+ const entry = byIndicatorId.get(id);
168
+ if (entry) {
169
+ result[key] = {
170
+ timestamp: entry.post,
171
+ value: entry.value,
172
+ ...(entry.metadata != null ? { metadata: entry.metadata } : {}),
173
+ };
174
+ }
175
+ }
176
+ return result;
177
+ }
178
+ async function fetchIndicatorMetadata(strategyId) {
179
+ const keyToId = await fetchIndicatorKeyMap(strategyId);
180
+ if (keyToId.size === 0)
181
+ return {};
182
+ const indicatorIds = [...keyToId.values()];
183
+ const { data: evalRows, error: evalErr } = await db
184
+ .from('indicator_evaluations')
185
+ .select('indicator_id, metadata, trading_day_id')
186
+ .in('indicator_id', indicatorIds)
187
+ .order('trading_day_id', { ascending: false });
188
+ if (evalErr || !evalRows)
189
+ return {};
190
+ const latestByIndicatorId = new Map();
191
+ for (const row of evalRows) {
192
+ if (!latestByIndicatorId.has(row.indicator_id) && row.metadata != null) {
193
+ latestByIndicatorId.set(row.indicator_id, row.metadata);
194
+ }
195
+ }
196
+ const result = {};
197
+ for (const [key, id] of keyToId) {
198
+ const meta = latestByIndicatorId.get(id);
199
+ if (meta !== undefined) {
200
+ result[key] = meta;
201
+ }
202
+ }
203
+ return result;
204
+ }
205
+ async function storeResult(strategy, result, tradingDayId) {
206
+ // Resolve strategy_id for indicator key → DB ID mapping
207
+ const { data: stratRow } = await client
208
+ .from('strategies')
209
+ .select('id')
210
+ .eq('link_id', strategy.linkId)
211
+ .limit(1)
212
+ .maybeSingle();
213
+ const signalResults = Object.entries(result.signals).map(([_key, sigResult]) => {
214
+ const ns = strategy.signals.find((ns) => (0, evaluate_1.signalKey)(ns.signal) === _key);
215
+ return { name: ns?.name ?? _key, result: sigResult };
216
+ });
217
+ // Map indicator keys to database IDs
218
+ const keyToId = stratRow ? await fetchIndicatorKeyMap(stratRow.id) : new Map();
219
+ const indicatorResults = Object.entries(result.indicators)
220
+ .filter(([key]) => keyToId.has(key))
221
+ .map(([key, indResult]) => ({
222
+ indicatorId: keyToId.get(key),
223
+ value: indResult.value,
224
+ metadata: indResult.metadata ?? null,
225
+ }));
226
+ const { error } = await db.rpc('upsert_evaluation', {
227
+ p_link_id: strategy.linkId,
228
+ p_allocation_name: result.allocation.name,
229
+ p_signal_results: signalResults,
230
+ p_indicator_results: indicatorResults,
231
+ p_trading_day_id: tradingDayId,
232
+ });
233
+ if (error)
234
+ throw new Error(`Failed to store evaluation: ${error.message}`);
235
+ }
236
+ // -----------------------------------------------------------------------
237
+ // Module
238
+ // -----------------------------------------------------------------------
239
+ return {
240
+ // ----- Retrieval -----
241
+ async get(linkId) {
242
+ const { data, error } = await client.functions.invoke('strategy', {
243
+ body: { linkId },
244
+ });
245
+ if (error || !data)
246
+ return null;
247
+ return data;
248
+ },
249
+ async getMany(linkIds) {
250
+ if (linkIds.length === 0)
251
+ return {};
252
+ const result = {};
253
+ // Use parallel fetches
254
+ const promises = linkIds.map(async (id) => {
255
+ const strategy = await this.get(id);
256
+ if (strategy)
257
+ result[id] = strategy;
258
+ });
259
+ await Promise.all(promises);
260
+ return result;
261
+ },
262
+ // ----- Cache-through evaluation -----
263
+ async evaluate(strategy, at) {
264
+ // 1. Fetch series + resolve strategy_id in parallel
265
+ const symbols = (0, symbols_1.extractSymbols)(strategy);
266
+ const [batchSeries, stratRow] = await Promise.all([
267
+ market.getBatchSeries(symbols),
268
+ client
269
+ .from('strategies')
270
+ .select('id')
271
+ .eq('link_id', strategy.linkId)
272
+ .limit(1)
273
+ .maybeSingle()
274
+ .then(({ data }) => data),
275
+ ]);
276
+ // 2. Build options for pure evaluation
277
+ const options = { at, batchSeries };
278
+ const evaluationDate = (0, evaluate_1.getEvaluationDate)(strategy.trading, options);
279
+ // 4. No DB strategy → pure eval
280
+ if (!stratRow)
281
+ return (0, evaluate_1.evaluate)(strategy, options);
282
+ // 5. Resolve trading_day_id
283
+ const { data: tdRow } = await db
284
+ .from('trading_days')
285
+ .select('id')
286
+ .lte('post', evaluationDate.toISOString())
287
+ .order('post', { ascending: false })
288
+ .limit(1)
289
+ .maybeSingle();
290
+ if (!tdRow)
291
+ return (0, evaluate_1.evaluate)(strategy, options);
292
+ // 6. Check cache
293
+ const { data: cacheRow } = await db
294
+ .from('strategy_evaluations')
295
+ .select('allocation_id')
296
+ .eq('strategy_id', stratRow.id)
297
+ .eq('trading_day_id', tdRow.id)
298
+ .limit(1)
299
+ .maybeSingle();
300
+ if (cacheRow) {
301
+ // CACHE HIT — reconstruct result
302
+ const { data: allocRow } = await db
303
+ .from('allocations')
304
+ .select('name')
305
+ .eq('id', cacheRow.allocation_id)
306
+ .limit(1)
307
+ .maybeSingle();
308
+ const namedAlloc = strategy.allocations.find(na => na.name === allocRow?.name)
309
+ ?? strategy.allocations[strategy.allocations.length - 1];
310
+ const [signals, indicators] = await Promise.all([
311
+ fetchSignalStatesForDay(stratRow.id, tdRow.id),
312
+ fetchIndicatorEvaluationsForDay(stratRow.id, tdRow.id),
313
+ ]);
314
+ return {
315
+ allocation: {
316
+ name: namedAlloc.name,
317
+ holdings: namedAlloc.allocation.holdings,
318
+ },
319
+ asOf: evaluationDate,
320
+ signals,
321
+ indicators,
322
+ };
323
+ }
324
+ // 7. CACHE MISS — fetch prior state, evaluate, store
325
+ const [prevSignals, prevMeta] = await Promise.all([
326
+ fetchSignalStates(stratRow.id),
327
+ fetchIndicatorMetadata(stratRow.id),
328
+ ]);
329
+ const result = (0, evaluate_1.evaluate)(strategy, {
330
+ ...options,
331
+ previousSignalStates: prevSignals,
332
+ previousIndicatorMetadata: prevMeta,
333
+ });
334
+ // Store (non-blocking)
335
+ storeResult(strategy, result, tdRow.id).catch(err => console.error('Failed to store evaluation:', err));
336
+ return result;
337
+ },
338
+ // ----- Pure evaluation (delegate to evaluate.ts) -----
339
+ evaluateIndicator: evaluate_1.evaluateIndicator,
340
+ evaluateSignal: evaluate_1.evaluateSignal,
341
+ evaluateAllocation: evaluate_1.evaluateAllocation,
342
+ getEvaluationDate: evaluate_1.getEvaluationDate,
343
+ // ----- Utilities -----
344
+ extractSymbols: symbols_1.extractSymbols,
345
+ async backtest(_strategy, _options) {
346
+ throw new Error('Not implemented');
347
+ },
348
+ };
349
+ }
350
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/strategy/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Allocation, Condition, EvaluationOptions, Indicator, IndicatorEvaluation, Signal, Strategy, StrategyEvaluation, Trading } from './types';
2
+ export declare function indicatorKey(ind: Indicator): string;
3
+ export declare function signalKey(signal: Signal): string;
4
+ export declare function evaluateIndicator(indicator: Indicator, options: EvaluationOptions): IndicatorEvaluation;
5
+ export declare function evaluateSignal(signal: Signal, options: EvaluationOptions): boolean;
6
+ export declare function evaluateAllocation(allocation: Allocation, options: EvaluationOptions): boolean;
7
+ export declare function evaluate(strategy: Strategy, options: EvaluationOptions): StrategyEvaluation;
8
+ export declare function findAllSignals(condition: Condition): Signal[];
9
+ export declare function getEvaluationDate(trading: Trading, options: EvaluationOptions): Date;
10
+ //# sourceMappingURL=evaluate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../src/strategy/evaluate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,SAAS,EACT,mBAAmB,EAEnB,MAAM,EACN,QAAQ,EACR,kBAAkB,EAElB,OAAO,EACR,MAAM,SAAS,CAAC;AAqBjB,wBAAgB,YAAY,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAInD;AAMD,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEhD;AA8QD,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,iBAAiB,GACzB,mBAAmB,CAqBrB;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAkClF;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAE9F;AAeD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,GAAG,kBAAkB,CA8C3F;AAuBD,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,EAAE,CAiC7D;AAMD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAqCpF"}