@fideliosai/db 0.0.40 → 0.0.41
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/analytics.test.d.ts +2 -0
- package/dist/analytics.test.d.ts.map +1 -0
- package/dist/analytics.test.js +195 -0
- package/dist/analytics.test.js.map +1 -0
- package/dist/migrations/0049_backfill_decode_whitespace_entities_in_comments.sql +41 -0
- package/dist/schema/analytics.d.ts +603 -0
- package/dist/schema/analytics.d.ts.map +1 -0
- package/dist/schema/analytics.js +55 -0
- package/dist/schema/analytics.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.test.d.ts","sourceRoot":"","sources":["../src/analytics.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
2
|
+
import postgres from "postgres";
|
|
3
|
+
import { getEmbeddedPostgresTestSupport, startEmbeddedPostgresTestDatabase, } from "./test-embedded-postgres.js";
|
|
4
|
+
const cleanups = [];
|
|
5
|
+
const embeddedPostgresSupport = await getEmbeddedPostgresTestSupport();
|
|
6
|
+
const describeEmbeddedPostgres = embeddedPostgresSupport.supported
|
|
7
|
+
? describe
|
|
8
|
+
: describe.skip;
|
|
9
|
+
async function createTempDatabase() {
|
|
10
|
+
const db = await startEmbeddedPostgresTestDatabase("fidelios-db-analytics-");
|
|
11
|
+
cleanups.push(db.cleanup);
|
|
12
|
+
return db.connectionString;
|
|
13
|
+
}
|
|
14
|
+
afterEach(async () => {
|
|
15
|
+
while (cleanups.length > 0) {
|
|
16
|
+
const cleanup = cleanups.pop();
|
|
17
|
+
await cleanup?.();
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
if (!embeddedPostgresSupport.supported) {
|
|
21
|
+
console.warn(`Skipping analytics tests: ${embeddedPostgresSupport.reason ?? "unsupported environment"}`);
|
|
22
|
+
}
|
|
23
|
+
describeEmbeddedPostgres("analytics schema", () => {
|
|
24
|
+
it("creates all 4 analytics tables with correct structure", async () => {
|
|
25
|
+
const connectionString = await createTempDatabase();
|
|
26
|
+
const sql = postgres(connectionString, { max: 1, onnotice: () => { } });
|
|
27
|
+
try {
|
|
28
|
+
const tables = await sql `
|
|
29
|
+
SELECT tablename FROM pg_tables
|
|
30
|
+
WHERE tablename LIKE 'analytics_%'
|
|
31
|
+
ORDER BY tablename
|
|
32
|
+
`;
|
|
33
|
+
expect(tables.map((r) => r.tablename)).toEqual([
|
|
34
|
+
"analytics_articles",
|
|
35
|
+
"analytics_markets",
|
|
36
|
+
"analytics_price_history",
|
|
37
|
+
"analytics_signals",
|
|
38
|
+
]);
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
await sql.end();
|
|
42
|
+
}
|
|
43
|
+
}, { timeout: 120_000 });
|
|
44
|
+
it("pgvector extension is enabled and vector columns work", async () => {
|
|
45
|
+
const connectionString = await createTempDatabase();
|
|
46
|
+
const sql = postgres(connectionString, { max: 1, onnotice: () => { } });
|
|
47
|
+
try {
|
|
48
|
+
const extensions = await sql `
|
|
49
|
+
SELECT extname FROM pg_extension WHERE extname = 'vector'
|
|
50
|
+
`;
|
|
51
|
+
expect(extensions).toHaveLength(1);
|
|
52
|
+
// Insert article with embedding
|
|
53
|
+
const embedding = new Array(768).fill(0).map((_, i) => Math.sin(i / 100));
|
|
54
|
+
const embeddingStr = `[${embedding.join(",")}]`;
|
|
55
|
+
await sql `
|
|
56
|
+
INSERT INTO analytics_articles (title, content, published_at, source, tags, embedding)
|
|
57
|
+
VALUES (
|
|
58
|
+
'Test Vector Article',
|
|
59
|
+
'Testing pgvector embeddings for similarity search',
|
|
60
|
+
'2026-04-01T00:00:00Z',
|
|
61
|
+
'test',
|
|
62
|
+
${sql.array(["test", "vector"])},
|
|
63
|
+
${embeddingStr}::vector
|
|
64
|
+
)
|
|
65
|
+
`;
|
|
66
|
+
const rows = await sql `SELECT id, embedding FROM analytics_articles LIMIT 1`;
|
|
67
|
+
expect(rows).toHaveLength(1);
|
|
68
|
+
expect(rows[0].embedding).toBeTruthy();
|
|
69
|
+
}
|
|
70
|
+
finally {
|
|
71
|
+
await sql.end();
|
|
72
|
+
}
|
|
73
|
+
}, { timeout: 120_000 });
|
|
74
|
+
it("tsvector search_vector column is auto-generated", async () => {
|
|
75
|
+
const connectionString = await createTempDatabase();
|
|
76
|
+
const sql = postgres(connectionString, { max: 1, onnotice: () => { } });
|
|
77
|
+
try {
|
|
78
|
+
await sql `
|
|
79
|
+
INSERT INTO analytics_articles (title, content, published_at)
|
|
80
|
+
VALUES ('Prediction Markets Rise', 'Polymarket sees record volume in election markets', '2026-04-01T00:00:00Z')
|
|
81
|
+
`;
|
|
82
|
+
const rows = await sql `
|
|
83
|
+
SELECT search_vector::text FROM analytics_articles
|
|
84
|
+
WHERE search_vector @@ to_tsquery('english', 'market')
|
|
85
|
+
`;
|
|
86
|
+
expect(rows).toHaveLength(1);
|
|
87
|
+
const noRows = await sql `
|
|
88
|
+
SELECT id FROM analytics_articles
|
|
89
|
+
WHERE search_vector @@ to_tsquery('english', 'blockchain')
|
|
90
|
+
`;
|
|
91
|
+
expect(noRows).toHaveLength(0);
|
|
92
|
+
}
|
|
93
|
+
finally {
|
|
94
|
+
await sql.end();
|
|
95
|
+
}
|
|
96
|
+
}, { timeout: 120_000 });
|
|
97
|
+
it("inserts sample rows into all 4 tables with foreign key relationships", async () => {
|
|
98
|
+
const connectionString = await createTempDatabase();
|
|
99
|
+
const sql = postgres(connectionString, { max: 1, onnotice: () => { } });
|
|
100
|
+
try {
|
|
101
|
+
// Insert article
|
|
102
|
+
const [article] = await sql `
|
|
103
|
+
INSERT INTO analytics_articles (title, content, published_at, source, tags)
|
|
104
|
+
VALUES ('Election Coverage', 'Detailed analysis of prediction market movements', '2026-04-01T00:00:00Z', 'reuters', ARRAY['politics', 'markets']::text[])
|
|
105
|
+
RETURNING id
|
|
106
|
+
`;
|
|
107
|
+
// Insert market
|
|
108
|
+
const [market] = await sql `
|
|
109
|
+
INSERT INTO analytics_markets (external_id, question, description, category, outcome_prices, volume_total)
|
|
110
|
+
VALUES ('poly-123', 'Will candidate X win?', 'Presidential election market', 'politics', '{"Yes": 0.65, "No": 0.35}'::jsonb, 1500000)
|
|
111
|
+
RETURNING id
|
|
112
|
+
`;
|
|
113
|
+
// Insert price history
|
|
114
|
+
await sql `
|
|
115
|
+
INSERT INTO analytics_price_history (market_id, timestamp, price)
|
|
116
|
+
VALUES
|
|
117
|
+
(${market.id}, '2026-04-01T00:00:00Z', 0.55),
|
|
118
|
+
(${market.id}, '2026-04-02T00:00:00Z', 0.60),
|
|
119
|
+
(${market.id}, '2026-04-03T00:00:00Z', 0.65)
|
|
120
|
+
`;
|
|
121
|
+
// Insert signal
|
|
122
|
+
await sql `
|
|
123
|
+
INSERT INTO analytics_signals (article_id, market_id, similarity_score, time_delta_hours, price_at_publish, signal_quality)
|
|
124
|
+
VALUES (${article.id}, ${market.id}, 0.87, 12, 0.55, 'high')
|
|
125
|
+
`;
|
|
126
|
+
// Verify counts
|
|
127
|
+
const articleCount = await sql `SELECT count(*) as c FROM analytics_articles`;
|
|
128
|
+
const marketCount = await sql `SELECT count(*) as c FROM analytics_markets`;
|
|
129
|
+
const priceCount = await sql `SELECT count(*) as c FROM analytics_price_history`;
|
|
130
|
+
const signalCount = await sql `SELECT count(*) as c FROM analytics_signals`;
|
|
131
|
+
expect(Number(articleCount[0].c)).toBe(1);
|
|
132
|
+
expect(Number(marketCount[0].c)).toBe(1);
|
|
133
|
+
expect(Number(priceCount[0].c)).toBe(3);
|
|
134
|
+
expect(Number(signalCount[0].c)).toBe(1);
|
|
135
|
+
}
|
|
136
|
+
finally {
|
|
137
|
+
await sql.end();
|
|
138
|
+
}
|
|
139
|
+
}, { timeout: 120_000 });
|
|
140
|
+
it("hybrid search (RRF) query returns ranked results", async () => {
|
|
141
|
+
const connectionString = await createTempDatabase();
|
|
142
|
+
const sql = postgres(connectionString, { max: 1, onnotice: () => { } });
|
|
143
|
+
try {
|
|
144
|
+
// Insert multiple articles with embeddings
|
|
145
|
+
const baseEmbedding = new Array(768).fill(0).map((_, i) => Math.sin(i / 100));
|
|
146
|
+
const similarEmbedding = baseEmbedding.map((v) => v + Math.random() * 0.01);
|
|
147
|
+
const differentEmbedding = new Array(768).fill(0).map((_, i) => Math.cos(i / 50));
|
|
148
|
+
await sql `
|
|
149
|
+
INSERT INTO analytics_articles (title, content, published_at, embedding) VALUES
|
|
150
|
+
('Prediction Markets Surge', 'Polymarket trading volume hits all-time high as election approaches', '2026-04-01T00:00:00Z', ${`[${baseEmbedding.join(",")}]`}::vector),
|
|
151
|
+
('Market Analysis Report', 'Election prediction markets show increased activity and accuracy', '2026-04-02T00:00:00Z', ${`[${similarEmbedding.join(",")}]`}::vector),
|
|
152
|
+
('Weather Forecast Today', 'Sunny skies expected across the region with mild temperatures', '2026-04-03T00:00:00Z', ${`[${differentEmbedding.join(",")}]`}::vector)
|
|
153
|
+
`;
|
|
154
|
+
// Hybrid search: combine full-text search with vector similarity using RRF
|
|
155
|
+
const queryEmbedding = `[${baseEmbedding.join(",")}]`;
|
|
156
|
+
const searchQuery = "prediction markets election";
|
|
157
|
+
const k = 60; // RRF constant
|
|
158
|
+
const results = await sql `
|
|
159
|
+
WITH text_ranked AS (
|
|
160
|
+
SELECT id, title,
|
|
161
|
+
ROW_NUMBER() OVER (ORDER BY ts_rank(search_vector, websearch_to_tsquery('english', ${searchQuery})) DESC) as text_rank
|
|
162
|
+
FROM analytics_articles
|
|
163
|
+
WHERE search_vector @@ websearch_to_tsquery('english', ${searchQuery})
|
|
164
|
+
),
|
|
165
|
+
vector_ranked AS (
|
|
166
|
+
SELECT id, title,
|
|
167
|
+
ROW_NUMBER() OVER (ORDER BY embedding <=> ${queryEmbedding}::vector) as vec_rank
|
|
168
|
+
FROM analytics_articles
|
|
169
|
+
WHERE embedding IS NOT NULL
|
|
170
|
+
ORDER BY embedding <=> ${queryEmbedding}::vector
|
|
171
|
+
LIMIT 10
|
|
172
|
+
)
|
|
173
|
+
SELECT
|
|
174
|
+
COALESCE(t.id, v.id) as id,
|
|
175
|
+
COALESCE(t.title, v.title) as title,
|
|
176
|
+
COALESCE(1.0 / (${k} + t.text_rank), 0) + COALESCE(1.0 / (${k} + v.vec_rank), 0) as rrf_score
|
|
177
|
+
FROM text_ranked t
|
|
178
|
+
FULL OUTER JOIN vector_ranked v ON t.id = v.id
|
|
179
|
+
ORDER BY rrf_score DESC
|
|
180
|
+
`;
|
|
181
|
+
// The prediction markets article should rank highest (matches both text and vector)
|
|
182
|
+
expect(results.length).toBeGreaterThanOrEqual(2);
|
|
183
|
+
expect(results[0].title).toBe("Prediction Markets Surge");
|
|
184
|
+
// The weather article should rank lower or not appear in text search
|
|
185
|
+
const weatherResult = results.find((r) => r.title === "Weather Forecast Today");
|
|
186
|
+
if (weatherResult) {
|
|
187
|
+
expect(Number(weatherResult.rrf_score)).toBeLessThan(Number(results[0].rrf_score));
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
finally {
|
|
191
|
+
await sql.end();
|
|
192
|
+
}
|
|
193
|
+
}, { timeout: 120_000 });
|
|
194
|
+
});
|
|
195
|
+
//# sourceMappingURL=analytics.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.test.js","sourceRoot":"","sources":["../src/analytics.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
-- FID-43: Backfill decode whitespace HTML numeric entities in issue_comments.body.
|
|
2
|
+
--
|
|
3
|
+
-- Some Telegram clients (notably iOS) emit trailing whitespace as numeric
|
|
4
|
+
-- HTML entities (" ", " ", etc.). When markdown is re-pasted, the
|
|
5
|
+
-- ampersand may be backslash-escaped to "\ ". Both forms survive the
|
|
6
|
+
-- react-markdown pipeline and surface as literal text in the FideliOS UI.
|
|
7
|
+
--
|
|
8
|
+
-- The ingestion-side fix in packages/plugins/examples/telegram-gateway
|
|
9
|
+
-- (worker.ts: decodeWhitespaceEntities) prevents new occurrences. This
|
|
10
|
+
-- migration normalizes existing rows so that previously-broken comments
|
|
11
|
+
-- (e.g. on FID-39) render cleanly without manual edits.
|
|
12
|
+
--
|
|
13
|
+
-- Scope is intentionally narrow — only whitespace entities — to avoid
|
|
14
|
+
-- changing semantics for comments that legitimately mention "&#xNN;".
|
|
15
|
+
-- The optional leading backslash (markdown escape for "&") is consumed
|
|
16
|
+
-- along with the entity so we end up with plain whitespace, not "\ ".
|
|
17
|
+
|
|
18
|
+
--   /   / \  / \  → space (U+0020)
|
|
19
|
+
UPDATE "issue_comments"
|
|
20
|
+
SET "body" = regexp_replace("body", '\\?&#(?:x20|32);', ' ', 'g')
|
|
21
|
+
WHERE "body" ~ '\\?&#(?:x20|32);';
|
|
22
|
+
|
|
23
|
+
--   /   /   / \  / ... → non-breaking space (U+00A0)
|
|
24
|
+
UPDATE "issue_comments"
|
|
25
|
+
SET "body" = regexp_replace("body", '\\?&#(?:x[Aa]0|160);', U&'\00A0', 'g')
|
|
26
|
+
WHERE "body" ~ '\\?&#(?:x[Aa]0|160);';
|
|
27
|
+
|
|
28
|
+
-- 	 / 	 / \	 / \	 → tab (U+0009)
|
|
29
|
+
UPDATE "issue_comments"
|
|
30
|
+
SET "body" = regexp_replace("body", '\\?&#(?:x09|9);', E'\t', 'g')
|
|
31
|
+
WHERE "body" ~ '\\?&#(?:x09|9);';
|
|
32
|
+
|
|
33
|
+
-- 
 / 
 / / ... → line feed (U+000A)
|
|
34
|
+
UPDATE "issue_comments"
|
|
35
|
+
SET "body" = regexp_replace("body", '\\?&#(?:x0[Aa]|10);', E'\n', 'g')
|
|
36
|
+
WHERE "body" ~ '\\?&#(?:x0[Aa]|10);';
|
|
37
|
+
|
|
38
|
+
-- 
 / 
 / / ... → carriage return (U+000D)
|
|
39
|
+
UPDATE "issue_comments"
|
|
40
|
+
SET "body" = regexp_replace("body", '\\?&#(?:x0[Dd]|13);', E'\r', 'g')
|
|
41
|
+
WHERE "body" ~ '\\?&#(?:x0[Dd]|13);';
|
|
@@ -0,0 +1,603 @@
|
|
|
1
|
+
export declare const analyticsArticles: import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
2
|
+
name: "analytics_articles";
|
|
3
|
+
schema: undefined;
|
|
4
|
+
columns: {
|
|
5
|
+
id: import("drizzle-orm/pg-core").PgColumn<{
|
|
6
|
+
name: "id";
|
|
7
|
+
tableName: "analytics_articles";
|
|
8
|
+
dataType: "string";
|
|
9
|
+
columnType: "PgUUID";
|
|
10
|
+
data: string;
|
|
11
|
+
driverParam: string;
|
|
12
|
+
notNull: true;
|
|
13
|
+
hasDefault: true;
|
|
14
|
+
isPrimaryKey: true;
|
|
15
|
+
isAutoincrement: false;
|
|
16
|
+
hasRuntimeDefault: false;
|
|
17
|
+
enumValues: undefined;
|
|
18
|
+
baseColumn: never;
|
|
19
|
+
identity: undefined;
|
|
20
|
+
generated: undefined;
|
|
21
|
+
}, {}, {}>;
|
|
22
|
+
title: import("drizzle-orm/pg-core").PgColumn<{
|
|
23
|
+
name: "title";
|
|
24
|
+
tableName: "analytics_articles";
|
|
25
|
+
dataType: "string";
|
|
26
|
+
columnType: "PgText";
|
|
27
|
+
data: string;
|
|
28
|
+
driverParam: string;
|
|
29
|
+
notNull: true;
|
|
30
|
+
hasDefault: false;
|
|
31
|
+
isPrimaryKey: false;
|
|
32
|
+
isAutoincrement: false;
|
|
33
|
+
hasRuntimeDefault: false;
|
|
34
|
+
enumValues: [string, ...string[]];
|
|
35
|
+
baseColumn: never;
|
|
36
|
+
identity: undefined;
|
|
37
|
+
generated: undefined;
|
|
38
|
+
}, {}, {}>;
|
|
39
|
+
content: import("drizzle-orm/pg-core").PgColumn<{
|
|
40
|
+
name: "content";
|
|
41
|
+
tableName: "analytics_articles";
|
|
42
|
+
dataType: "string";
|
|
43
|
+
columnType: "PgText";
|
|
44
|
+
data: string;
|
|
45
|
+
driverParam: string;
|
|
46
|
+
notNull: true;
|
|
47
|
+
hasDefault: false;
|
|
48
|
+
isPrimaryKey: false;
|
|
49
|
+
isAutoincrement: false;
|
|
50
|
+
hasRuntimeDefault: false;
|
|
51
|
+
enumValues: [string, ...string[]];
|
|
52
|
+
baseColumn: never;
|
|
53
|
+
identity: undefined;
|
|
54
|
+
generated: undefined;
|
|
55
|
+
}, {}, {}>;
|
|
56
|
+
publishedAt: import("drizzle-orm/pg-core").PgColumn<{
|
|
57
|
+
name: "published_at";
|
|
58
|
+
tableName: "analytics_articles";
|
|
59
|
+
dataType: "date";
|
|
60
|
+
columnType: "PgTimestamp";
|
|
61
|
+
data: Date;
|
|
62
|
+
driverParam: string;
|
|
63
|
+
notNull: true;
|
|
64
|
+
hasDefault: false;
|
|
65
|
+
isPrimaryKey: false;
|
|
66
|
+
isAutoincrement: false;
|
|
67
|
+
hasRuntimeDefault: false;
|
|
68
|
+
enumValues: undefined;
|
|
69
|
+
baseColumn: never;
|
|
70
|
+
identity: undefined;
|
|
71
|
+
generated: undefined;
|
|
72
|
+
}, {}, {}>;
|
|
73
|
+
source: import("drizzle-orm/pg-core").PgColumn<{
|
|
74
|
+
name: "source";
|
|
75
|
+
tableName: "analytics_articles";
|
|
76
|
+
dataType: "string";
|
|
77
|
+
columnType: "PgText";
|
|
78
|
+
data: string;
|
|
79
|
+
driverParam: string;
|
|
80
|
+
notNull: false;
|
|
81
|
+
hasDefault: false;
|
|
82
|
+
isPrimaryKey: false;
|
|
83
|
+
isAutoincrement: false;
|
|
84
|
+
hasRuntimeDefault: false;
|
|
85
|
+
enumValues: [string, ...string[]];
|
|
86
|
+
baseColumn: never;
|
|
87
|
+
identity: undefined;
|
|
88
|
+
generated: undefined;
|
|
89
|
+
}, {}, {}>;
|
|
90
|
+
sourceUrl: import("drizzle-orm/pg-core").PgColumn<{
|
|
91
|
+
name: "source_url";
|
|
92
|
+
tableName: "analytics_articles";
|
|
93
|
+
dataType: "string";
|
|
94
|
+
columnType: "PgText";
|
|
95
|
+
data: string;
|
|
96
|
+
driverParam: string;
|
|
97
|
+
notNull: false;
|
|
98
|
+
hasDefault: false;
|
|
99
|
+
isPrimaryKey: false;
|
|
100
|
+
isAutoincrement: false;
|
|
101
|
+
hasRuntimeDefault: false;
|
|
102
|
+
enumValues: [string, ...string[]];
|
|
103
|
+
baseColumn: never;
|
|
104
|
+
identity: undefined;
|
|
105
|
+
generated: undefined;
|
|
106
|
+
}, {}, {}>;
|
|
107
|
+
tags: import("drizzle-orm/pg-core").PgColumn<{
|
|
108
|
+
name: "tags";
|
|
109
|
+
tableName: "analytics_articles";
|
|
110
|
+
dataType: "array";
|
|
111
|
+
columnType: "PgArray";
|
|
112
|
+
data: string[];
|
|
113
|
+
driverParam: string | string[];
|
|
114
|
+
notNull: false;
|
|
115
|
+
hasDefault: false;
|
|
116
|
+
isPrimaryKey: false;
|
|
117
|
+
isAutoincrement: false;
|
|
118
|
+
hasRuntimeDefault: false;
|
|
119
|
+
enumValues: [string, ...string[]];
|
|
120
|
+
baseColumn: import("drizzle-orm").Column<{
|
|
121
|
+
name: "tags";
|
|
122
|
+
tableName: "analytics_articles";
|
|
123
|
+
dataType: "string";
|
|
124
|
+
columnType: "PgText";
|
|
125
|
+
data: string;
|
|
126
|
+
driverParam: string;
|
|
127
|
+
notNull: false;
|
|
128
|
+
hasDefault: false;
|
|
129
|
+
isPrimaryKey: false;
|
|
130
|
+
isAutoincrement: false;
|
|
131
|
+
hasRuntimeDefault: false;
|
|
132
|
+
enumValues: [string, ...string[]];
|
|
133
|
+
baseColumn: never;
|
|
134
|
+
identity: undefined;
|
|
135
|
+
generated: undefined;
|
|
136
|
+
}, {}, {}>;
|
|
137
|
+
identity: undefined;
|
|
138
|
+
generated: undefined;
|
|
139
|
+
}, {}, {
|
|
140
|
+
baseBuilder: import("drizzle-orm/pg-core").PgColumnBuilder<{
|
|
141
|
+
name: "tags";
|
|
142
|
+
dataType: "string";
|
|
143
|
+
columnType: "PgText";
|
|
144
|
+
data: string;
|
|
145
|
+
enumValues: [string, ...string[]];
|
|
146
|
+
driverParam: string;
|
|
147
|
+
}, {}, {}, import("drizzle-orm").ColumnBuilderExtraConfig>;
|
|
148
|
+
size: undefined;
|
|
149
|
+
}>;
|
|
150
|
+
embedding: import("drizzle-orm/pg-core").PgColumn<{
|
|
151
|
+
name: "embedding";
|
|
152
|
+
tableName: "analytics_articles";
|
|
153
|
+
dataType: "array";
|
|
154
|
+
columnType: "PgVector";
|
|
155
|
+
data: number[];
|
|
156
|
+
driverParam: string;
|
|
157
|
+
notNull: false;
|
|
158
|
+
hasDefault: false;
|
|
159
|
+
isPrimaryKey: false;
|
|
160
|
+
isAutoincrement: false;
|
|
161
|
+
hasRuntimeDefault: false;
|
|
162
|
+
enumValues: undefined;
|
|
163
|
+
baseColumn: never;
|
|
164
|
+
identity: undefined;
|
|
165
|
+
generated: undefined;
|
|
166
|
+
}, {}, {
|
|
167
|
+
dimensions: 768;
|
|
168
|
+
}>;
|
|
169
|
+
};
|
|
170
|
+
dialect: "pg";
|
|
171
|
+
}>;
|
|
172
|
+
export declare const analyticsMarkets: import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
173
|
+
name: "analytics_markets";
|
|
174
|
+
schema: undefined;
|
|
175
|
+
columns: {
|
|
176
|
+
id: import("drizzle-orm/pg-core").PgColumn<{
|
|
177
|
+
name: "id";
|
|
178
|
+
tableName: "analytics_markets";
|
|
179
|
+
dataType: "string";
|
|
180
|
+
columnType: "PgUUID";
|
|
181
|
+
data: string;
|
|
182
|
+
driverParam: string;
|
|
183
|
+
notNull: true;
|
|
184
|
+
hasDefault: true;
|
|
185
|
+
isPrimaryKey: true;
|
|
186
|
+
isAutoincrement: false;
|
|
187
|
+
hasRuntimeDefault: false;
|
|
188
|
+
enumValues: undefined;
|
|
189
|
+
baseColumn: never;
|
|
190
|
+
identity: undefined;
|
|
191
|
+
generated: undefined;
|
|
192
|
+
}, {}, {}>;
|
|
193
|
+
externalId: import("drizzle-orm/pg-core").PgColumn<{
|
|
194
|
+
name: "external_id";
|
|
195
|
+
tableName: "analytics_markets";
|
|
196
|
+
dataType: "string";
|
|
197
|
+
columnType: "PgText";
|
|
198
|
+
data: string;
|
|
199
|
+
driverParam: string;
|
|
200
|
+
notNull: false;
|
|
201
|
+
hasDefault: false;
|
|
202
|
+
isPrimaryKey: false;
|
|
203
|
+
isAutoincrement: false;
|
|
204
|
+
hasRuntimeDefault: false;
|
|
205
|
+
enumValues: [string, ...string[]];
|
|
206
|
+
baseColumn: never;
|
|
207
|
+
identity: undefined;
|
|
208
|
+
generated: undefined;
|
|
209
|
+
}, {}, {}>;
|
|
210
|
+
question: import("drizzle-orm/pg-core").PgColumn<{
|
|
211
|
+
name: "question";
|
|
212
|
+
tableName: "analytics_markets";
|
|
213
|
+
dataType: "string";
|
|
214
|
+
columnType: "PgText";
|
|
215
|
+
data: string;
|
|
216
|
+
driverParam: string;
|
|
217
|
+
notNull: true;
|
|
218
|
+
hasDefault: false;
|
|
219
|
+
isPrimaryKey: false;
|
|
220
|
+
isAutoincrement: false;
|
|
221
|
+
hasRuntimeDefault: false;
|
|
222
|
+
enumValues: [string, ...string[]];
|
|
223
|
+
baseColumn: never;
|
|
224
|
+
identity: undefined;
|
|
225
|
+
generated: undefined;
|
|
226
|
+
}, {}, {}>;
|
|
227
|
+
description: import("drizzle-orm/pg-core").PgColumn<{
|
|
228
|
+
name: "description";
|
|
229
|
+
tableName: "analytics_markets";
|
|
230
|
+
dataType: "string";
|
|
231
|
+
columnType: "PgText";
|
|
232
|
+
data: string;
|
|
233
|
+
driverParam: string;
|
|
234
|
+
notNull: false;
|
|
235
|
+
hasDefault: false;
|
|
236
|
+
isPrimaryKey: false;
|
|
237
|
+
isAutoincrement: false;
|
|
238
|
+
hasRuntimeDefault: false;
|
|
239
|
+
enumValues: [string, ...string[]];
|
|
240
|
+
baseColumn: never;
|
|
241
|
+
identity: undefined;
|
|
242
|
+
generated: undefined;
|
|
243
|
+
}, {}, {}>;
|
|
244
|
+
category: import("drizzle-orm/pg-core").PgColumn<{
|
|
245
|
+
name: "category";
|
|
246
|
+
tableName: "analytics_markets";
|
|
247
|
+
dataType: "string";
|
|
248
|
+
columnType: "PgText";
|
|
249
|
+
data: string;
|
|
250
|
+
driverParam: string;
|
|
251
|
+
notNull: false;
|
|
252
|
+
hasDefault: false;
|
|
253
|
+
isPrimaryKey: false;
|
|
254
|
+
isAutoincrement: false;
|
|
255
|
+
hasRuntimeDefault: false;
|
|
256
|
+
enumValues: [string, ...string[]];
|
|
257
|
+
baseColumn: never;
|
|
258
|
+
identity: undefined;
|
|
259
|
+
generated: undefined;
|
|
260
|
+
}, {}, {}>;
|
|
261
|
+
outcome: import("drizzle-orm/pg-core").PgColumn<{
|
|
262
|
+
name: "outcome";
|
|
263
|
+
tableName: "analytics_markets";
|
|
264
|
+
dataType: "string";
|
|
265
|
+
columnType: "PgText";
|
|
266
|
+
data: string;
|
|
267
|
+
driverParam: string;
|
|
268
|
+
notNull: false;
|
|
269
|
+
hasDefault: false;
|
|
270
|
+
isPrimaryKey: false;
|
|
271
|
+
isAutoincrement: false;
|
|
272
|
+
hasRuntimeDefault: false;
|
|
273
|
+
enumValues: [string, ...string[]];
|
|
274
|
+
baseColumn: never;
|
|
275
|
+
identity: undefined;
|
|
276
|
+
generated: undefined;
|
|
277
|
+
}, {}, {}>;
|
|
278
|
+
outcomePrices: import("drizzle-orm/pg-core").PgColumn<{
|
|
279
|
+
name: "outcome_prices";
|
|
280
|
+
tableName: "analytics_markets";
|
|
281
|
+
dataType: "json";
|
|
282
|
+
columnType: "PgJsonb";
|
|
283
|
+
data: unknown;
|
|
284
|
+
driverParam: unknown;
|
|
285
|
+
notNull: false;
|
|
286
|
+
hasDefault: false;
|
|
287
|
+
isPrimaryKey: false;
|
|
288
|
+
isAutoincrement: false;
|
|
289
|
+
hasRuntimeDefault: false;
|
|
290
|
+
enumValues: undefined;
|
|
291
|
+
baseColumn: never;
|
|
292
|
+
identity: undefined;
|
|
293
|
+
generated: undefined;
|
|
294
|
+
}, {}, {}>;
|
|
295
|
+
closedAt: import("drizzle-orm/pg-core").PgColumn<{
|
|
296
|
+
name: "closed_at";
|
|
297
|
+
tableName: "analytics_markets";
|
|
298
|
+
dataType: "date";
|
|
299
|
+
columnType: "PgTimestamp";
|
|
300
|
+
data: Date;
|
|
301
|
+
driverParam: string;
|
|
302
|
+
notNull: false;
|
|
303
|
+
hasDefault: false;
|
|
304
|
+
isPrimaryKey: false;
|
|
305
|
+
isAutoincrement: false;
|
|
306
|
+
hasRuntimeDefault: false;
|
|
307
|
+
enumValues: undefined;
|
|
308
|
+
baseColumn: never;
|
|
309
|
+
identity: undefined;
|
|
310
|
+
generated: undefined;
|
|
311
|
+
}, {}, {}>;
|
|
312
|
+
createdAt: import("drizzle-orm/pg-core").PgColumn<{
|
|
313
|
+
name: "created_at";
|
|
314
|
+
tableName: "analytics_markets";
|
|
315
|
+
dataType: "date";
|
|
316
|
+
columnType: "PgTimestamp";
|
|
317
|
+
data: Date;
|
|
318
|
+
driverParam: string;
|
|
319
|
+
notNull: false;
|
|
320
|
+
hasDefault: false;
|
|
321
|
+
isPrimaryKey: false;
|
|
322
|
+
isAutoincrement: false;
|
|
323
|
+
hasRuntimeDefault: false;
|
|
324
|
+
enumValues: undefined;
|
|
325
|
+
baseColumn: never;
|
|
326
|
+
identity: undefined;
|
|
327
|
+
generated: undefined;
|
|
328
|
+
}, {}, {}>;
|
|
329
|
+
volumeTotal: import("drizzle-orm/pg-core").PgColumn<{
|
|
330
|
+
name: "volume_total";
|
|
331
|
+
tableName: "analytics_markets";
|
|
332
|
+
dataType: "string";
|
|
333
|
+
columnType: "PgNumeric";
|
|
334
|
+
data: string;
|
|
335
|
+
driverParam: string;
|
|
336
|
+
notNull: false;
|
|
337
|
+
hasDefault: false;
|
|
338
|
+
isPrimaryKey: false;
|
|
339
|
+
isAutoincrement: false;
|
|
340
|
+
hasRuntimeDefault: false;
|
|
341
|
+
enumValues: undefined;
|
|
342
|
+
baseColumn: never;
|
|
343
|
+
identity: undefined;
|
|
344
|
+
generated: undefined;
|
|
345
|
+
}, {}, {}>;
|
|
346
|
+
clobTokenId: import("drizzle-orm/pg-core").PgColumn<{
|
|
347
|
+
name: "clob_token_id";
|
|
348
|
+
tableName: "analytics_markets";
|
|
349
|
+
dataType: "string";
|
|
350
|
+
columnType: "PgText";
|
|
351
|
+
data: string;
|
|
352
|
+
driverParam: string;
|
|
353
|
+
notNull: false;
|
|
354
|
+
hasDefault: false;
|
|
355
|
+
isPrimaryKey: false;
|
|
356
|
+
isAutoincrement: false;
|
|
357
|
+
hasRuntimeDefault: false;
|
|
358
|
+
enumValues: [string, ...string[]];
|
|
359
|
+
baseColumn: never;
|
|
360
|
+
identity: undefined;
|
|
361
|
+
generated: undefined;
|
|
362
|
+
}, {}, {}>;
|
|
363
|
+
embedding: import("drizzle-orm/pg-core").PgColumn<{
|
|
364
|
+
name: "embedding";
|
|
365
|
+
tableName: "analytics_markets";
|
|
366
|
+
dataType: "array";
|
|
367
|
+
columnType: "PgVector";
|
|
368
|
+
data: number[];
|
|
369
|
+
driverParam: string;
|
|
370
|
+
notNull: false;
|
|
371
|
+
hasDefault: false;
|
|
372
|
+
isPrimaryKey: false;
|
|
373
|
+
isAutoincrement: false;
|
|
374
|
+
hasRuntimeDefault: false;
|
|
375
|
+
enumValues: undefined;
|
|
376
|
+
baseColumn: never;
|
|
377
|
+
identity: undefined;
|
|
378
|
+
generated: undefined;
|
|
379
|
+
}, {}, {
|
|
380
|
+
dimensions: 768;
|
|
381
|
+
}>;
|
|
382
|
+
};
|
|
383
|
+
dialect: "pg";
|
|
384
|
+
}>;
|
|
385
|
+
export declare const analyticsPriceHistory: import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
386
|
+
name: "analytics_price_history";
|
|
387
|
+
schema: undefined;
|
|
388
|
+
columns: {
|
|
389
|
+
marketId: import("drizzle-orm/pg-core").PgColumn<{
|
|
390
|
+
name: "market_id";
|
|
391
|
+
tableName: "analytics_price_history";
|
|
392
|
+
dataType: "string";
|
|
393
|
+
columnType: "PgUUID";
|
|
394
|
+
data: string;
|
|
395
|
+
driverParam: string;
|
|
396
|
+
notNull: true;
|
|
397
|
+
hasDefault: false;
|
|
398
|
+
isPrimaryKey: false;
|
|
399
|
+
isAutoincrement: false;
|
|
400
|
+
hasRuntimeDefault: false;
|
|
401
|
+
enumValues: undefined;
|
|
402
|
+
baseColumn: never;
|
|
403
|
+
identity: undefined;
|
|
404
|
+
generated: undefined;
|
|
405
|
+
}, {}, {}>;
|
|
406
|
+
timestamp: import("drizzle-orm/pg-core").PgColumn<{
|
|
407
|
+
name: "timestamp";
|
|
408
|
+
tableName: "analytics_price_history";
|
|
409
|
+
dataType: "date";
|
|
410
|
+
columnType: "PgTimestamp";
|
|
411
|
+
data: Date;
|
|
412
|
+
driverParam: string;
|
|
413
|
+
notNull: true;
|
|
414
|
+
hasDefault: false;
|
|
415
|
+
isPrimaryKey: false;
|
|
416
|
+
isAutoincrement: false;
|
|
417
|
+
hasRuntimeDefault: false;
|
|
418
|
+
enumValues: undefined;
|
|
419
|
+
baseColumn: never;
|
|
420
|
+
identity: undefined;
|
|
421
|
+
generated: undefined;
|
|
422
|
+
}, {}, {}>;
|
|
423
|
+
price: import("drizzle-orm/pg-core").PgColumn<{
|
|
424
|
+
name: "price";
|
|
425
|
+
tableName: "analytics_price_history";
|
|
426
|
+
dataType: "string";
|
|
427
|
+
columnType: "PgNumeric";
|
|
428
|
+
data: string;
|
|
429
|
+
driverParam: string;
|
|
430
|
+
notNull: true;
|
|
431
|
+
hasDefault: false;
|
|
432
|
+
isPrimaryKey: false;
|
|
433
|
+
isAutoincrement: false;
|
|
434
|
+
hasRuntimeDefault: false;
|
|
435
|
+
enumValues: undefined;
|
|
436
|
+
baseColumn: never;
|
|
437
|
+
identity: undefined;
|
|
438
|
+
generated: undefined;
|
|
439
|
+
}, {}, {}>;
|
|
440
|
+
};
|
|
441
|
+
dialect: "pg";
|
|
442
|
+
}>;
|
|
443
|
+
export declare const analyticsSignals: import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
444
|
+
name: "analytics_signals";
|
|
445
|
+
schema: undefined;
|
|
446
|
+
columns: {
|
|
447
|
+
id: import("drizzle-orm/pg-core").PgColumn<{
|
|
448
|
+
name: "id";
|
|
449
|
+
tableName: "analytics_signals";
|
|
450
|
+
dataType: "string";
|
|
451
|
+
columnType: "PgUUID";
|
|
452
|
+
data: string;
|
|
453
|
+
driverParam: string;
|
|
454
|
+
notNull: true;
|
|
455
|
+
hasDefault: true;
|
|
456
|
+
isPrimaryKey: true;
|
|
457
|
+
isAutoincrement: false;
|
|
458
|
+
hasRuntimeDefault: false;
|
|
459
|
+
enumValues: undefined;
|
|
460
|
+
baseColumn: never;
|
|
461
|
+
identity: undefined;
|
|
462
|
+
generated: undefined;
|
|
463
|
+
}, {}, {}>;
|
|
464
|
+
articleId: import("drizzle-orm/pg-core").PgColumn<{
|
|
465
|
+
name: "article_id";
|
|
466
|
+
tableName: "analytics_signals";
|
|
467
|
+
dataType: "string";
|
|
468
|
+
columnType: "PgUUID";
|
|
469
|
+
data: string;
|
|
470
|
+
driverParam: string;
|
|
471
|
+
notNull: false;
|
|
472
|
+
hasDefault: false;
|
|
473
|
+
isPrimaryKey: false;
|
|
474
|
+
isAutoincrement: false;
|
|
475
|
+
hasRuntimeDefault: false;
|
|
476
|
+
enumValues: undefined;
|
|
477
|
+
baseColumn: never;
|
|
478
|
+
identity: undefined;
|
|
479
|
+
generated: undefined;
|
|
480
|
+
}, {}, {}>;
|
|
481
|
+
marketId: import("drizzle-orm/pg-core").PgColumn<{
|
|
482
|
+
name: "market_id";
|
|
483
|
+
tableName: "analytics_signals";
|
|
484
|
+
dataType: "string";
|
|
485
|
+
columnType: "PgUUID";
|
|
486
|
+
data: string;
|
|
487
|
+
driverParam: string;
|
|
488
|
+
notNull: false;
|
|
489
|
+
hasDefault: false;
|
|
490
|
+
isPrimaryKey: false;
|
|
491
|
+
isAutoincrement: false;
|
|
492
|
+
hasRuntimeDefault: false;
|
|
493
|
+
enumValues: undefined;
|
|
494
|
+
baseColumn: never;
|
|
495
|
+
identity: undefined;
|
|
496
|
+
generated: undefined;
|
|
497
|
+
}, {}, {}>;
|
|
498
|
+
similarityScore: import("drizzle-orm/pg-core").PgColumn<{
|
|
499
|
+
name: "similarity_score";
|
|
500
|
+
tableName: "analytics_signals";
|
|
501
|
+
dataType: "string";
|
|
502
|
+
columnType: "PgNumeric";
|
|
503
|
+
data: string;
|
|
504
|
+
driverParam: string;
|
|
505
|
+
notNull: false;
|
|
506
|
+
hasDefault: false;
|
|
507
|
+
isPrimaryKey: false;
|
|
508
|
+
isAutoincrement: false;
|
|
509
|
+
hasRuntimeDefault: false;
|
|
510
|
+
enumValues: undefined;
|
|
511
|
+
baseColumn: never;
|
|
512
|
+
identity: undefined;
|
|
513
|
+
generated: undefined;
|
|
514
|
+
}, {}, {}>;
|
|
515
|
+
timeDeltaHours: import("drizzle-orm/pg-core").PgColumn<{
|
|
516
|
+
name: "time_delta_hours";
|
|
517
|
+
tableName: "analytics_signals";
|
|
518
|
+
dataType: "number";
|
|
519
|
+
columnType: "PgInteger";
|
|
520
|
+
data: number;
|
|
521
|
+
driverParam: string | number;
|
|
522
|
+
notNull: false;
|
|
523
|
+
hasDefault: false;
|
|
524
|
+
isPrimaryKey: false;
|
|
525
|
+
isAutoincrement: false;
|
|
526
|
+
hasRuntimeDefault: false;
|
|
527
|
+
enumValues: undefined;
|
|
528
|
+
baseColumn: never;
|
|
529
|
+
identity: undefined;
|
|
530
|
+
generated: undefined;
|
|
531
|
+
}, {}, {}>;
|
|
532
|
+
priceAtPublish: import("drizzle-orm/pg-core").PgColumn<{
|
|
533
|
+
name: "price_at_publish";
|
|
534
|
+
tableName: "analytics_signals";
|
|
535
|
+
dataType: "string";
|
|
536
|
+
columnType: "PgNumeric";
|
|
537
|
+
data: string;
|
|
538
|
+
driverParam: string;
|
|
539
|
+
notNull: false;
|
|
540
|
+
hasDefault: false;
|
|
541
|
+
isPrimaryKey: false;
|
|
542
|
+
isAutoincrement: false;
|
|
543
|
+
hasRuntimeDefault: false;
|
|
544
|
+
enumValues: undefined;
|
|
545
|
+
baseColumn: never;
|
|
546
|
+
identity: undefined;
|
|
547
|
+
generated: undefined;
|
|
548
|
+
}, {}, {}>;
|
|
549
|
+
priceAtResolution: import("drizzle-orm/pg-core").PgColumn<{
|
|
550
|
+
name: "price_at_resolution";
|
|
551
|
+
tableName: "analytics_signals";
|
|
552
|
+
dataType: "string";
|
|
553
|
+
columnType: "PgNumeric";
|
|
554
|
+
data: string;
|
|
555
|
+
driverParam: string;
|
|
556
|
+
notNull: false;
|
|
557
|
+
hasDefault: false;
|
|
558
|
+
isPrimaryKey: false;
|
|
559
|
+
isAutoincrement: false;
|
|
560
|
+
hasRuntimeDefault: false;
|
|
561
|
+
enumValues: undefined;
|
|
562
|
+
baseColumn: never;
|
|
563
|
+
identity: undefined;
|
|
564
|
+
generated: undefined;
|
|
565
|
+
}, {}, {}>;
|
|
566
|
+
signalQuality: import("drizzle-orm/pg-core").PgColumn<{
|
|
567
|
+
name: "signal_quality";
|
|
568
|
+
tableName: "analytics_signals";
|
|
569
|
+
dataType: "string";
|
|
570
|
+
columnType: "PgText";
|
|
571
|
+
data: string;
|
|
572
|
+
driverParam: string;
|
|
573
|
+
notNull: false;
|
|
574
|
+
hasDefault: false;
|
|
575
|
+
isPrimaryKey: false;
|
|
576
|
+
isAutoincrement: false;
|
|
577
|
+
hasRuntimeDefault: false;
|
|
578
|
+
enumValues: [string, ...string[]];
|
|
579
|
+
baseColumn: never;
|
|
580
|
+
identity: undefined;
|
|
581
|
+
generated: undefined;
|
|
582
|
+
}, {}, {}>;
|
|
583
|
+
createdAt: import("drizzle-orm/pg-core").PgColumn<{
|
|
584
|
+
name: "created_at";
|
|
585
|
+
tableName: "analytics_signals";
|
|
586
|
+
dataType: "date";
|
|
587
|
+
columnType: "PgTimestamp";
|
|
588
|
+
data: Date;
|
|
589
|
+
driverParam: string;
|
|
590
|
+
notNull: false;
|
|
591
|
+
hasDefault: true;
|
|
592
|
+
isPrimaryKey: false;
|
|
593
|
+
isAutoincrement: false;
|
|
594
|
+
hasRuntimeDefault: false;
|
|
595
|
+
enumValues: undefined;
|
|
596
|
+
baseColumn: never;
|
|
597
|
+
identity: undefined;
|
|
598
|
+
generated: undefined;
|
|
599
|
+
}, {}, {}>;
|
|
600
|
+
};
|
|
601
|
+
dialect: "pg";
|
|
602
|
+
}>;
|
|
603
|
+
//# sourceMappingURL=analytics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/schema/analytics.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqB7B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuB5B,CAAC;AAEF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYjC,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAU3B,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { pgTable, uuid, text, timestamp, numeric, integer, jsonb, index, primaryKey, } from "drizzle-orm/pg-core";
|
|
2
|
+
import { vector } from "drizzle-orm/pg-core";
|
|
3
|
+
// Note: search_vector (tsvector GENERATED ALWAYS AS) is added via raw SQL in the migration
|
|
4
|
+
// because Drizzle does not support generated tsvector columns natively.
|
|
5
|
+
export const analyticsArticles = pgTable("analytics_articles", {
|
|
6
|
+
id: uuid("id").primaryKey().defaultRandom(),
|
|
7
|
+
title: text("title").notNull(),
|
|
8
|
+
content: text("content").notNull(),
|
|
9
|
+
publishedAt: timestamp("published_at", { withTimezone: true }).notNull(),
|
|
10
|
+
source: text("source"),
|
|
11
|
+
sourceUrl: text("source_url"),
|
|
12
|
+
tags: text("tags").array(),
|
|
13
|
+
embedding: vector("embedding", { dimensions: 768 }),
|
|
14
|
+
}, (table) => ({
|
|
15
|
+
embeddingIdx: index("analytics_articles_embedding_idx").using("hnsw", table.embedding.op("vector_cosine_ops")),
|
|
16
|
+
publishedAtIdx: index("analytics_articles_published_at_idx").on(table.publishedAt),
|
|
17
|
+
}));
|
|
18
|
+
export const analyticsMarkets = pgTable("analytics_markets", {
|
|
19
|
+
id: uuid("id").primaryKey().defaultRandom(),
|
|
20
|
+
externalId: text("external_id").unique(),
|
|
21
|
+
question: text("question").notNull(),
|
|
22
|
+
description: text("description"),
|
|
23
|
+
category: text("category"),
|
|
24
|
+
outcome: text("outcome"),
|
|
25
|
+
outcomePrices: jsonb("outcome_prices"),
|
|
26
|
+
closedAt: timestamp("closed_at", { withTimezone: true }),
|
|
27
|
+
createdAt: timestamp("created_at", { withTimezone: true }),
|
|
28
|
+
volumeTotal: numeric("volume_total"),
|
|
29
|
+
clobTokenId: text("clob_token_id"),
|
|
30
|
+
embedding: vector("embedding", { dimensions: 768 }),
|
|
31
|
+
}, (table) => ({
|
|
32
|
+
embeddingIdx: index("analytics_markets_embedding_idx").using("hnsw", table.embedding.op("vector_cosine_ops")),
|
|
33
|
+
closedAtIdx: index("analytics_markets_closed_at_idx").on(table.closedAt),
|
|
34
|
+
}));
|
|
35
|
+
export const analyticsPriceHistory = pgTable("analytics_price_history", {
|
|
36
|
+
marketId: uuid("market_id")
|
|
37
|
+
.notNull()
|
|
38
|
+
.references(() => analyticsMarkets.id),
|
|
39
|
+
timestamp: timestamp("timestamp", { withTimezone: true }).notNull(),
|
|
40
|
+
price: numeric("price").notNull(),
|
|
41
|
+
}, (table) => ({
|
|
42
|
+
pk: primaryKey({ columns: [table.marketId, table.timestamp] }),
|
|
43
|
+
}));
|
|
44
|
+
export const analyticsSignals = pgTable("analytics_signals", {
|
|
45
|
+
id: uuid("id").primaryKey().defaultRandom(),
|
|
46
|
+
articleId: uuid("article_id").references(() => analyticsArticles.id),
|
|
47
|
+
marketId: uuid("market_id").references(() => analyticsMarkets.id),
|
|
48
|
+
similarityScore: numeric("similarity_score"),
|
|
49
|
+
timeDeltaHours: integer("time_delta_hours"),
|
|
50
|
+
priceAtPublish: numeric("price_at_publish"),
|
|
51
|
+
priceAtResolution: numeric("price_at_resolution"),
|
|
52
|
+
signalQuality: text("signal_quality"),
|
|
53
|
+
createdAt: timestamp("created_at", { withTimezone: true }).defaultNow(),
|
|
54
|
+
});
|
|
55
|
+
//# sourceMappingURL=analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/schema/analytics.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fideliosai/db",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.41",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"homepage": "https://github.com/fideliosai/fidelios",
|
|
6
6
|
"bugs": {
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
],
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@aws-sdk/client-s3": "^3.888.0",
|
|
33
|
-
"@fideliosai/shared": "0.0.
|
|
33
|
+
"@fideliosai/shared": "0.0.41",
|
|
34
34
|
"drizzle-orm": "^0.38.4",
|
|
35
35
|
"embedded-postgres": "^18.1.0-beta.16",
|
|
36
36
|
"postgres": "^3.4.5"
|