@mulsok/traders-client 0.1.0 → 0.2.1
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/CHANGELOG.md +80 -0
- package/README.md +42 -5
- package/bin/cli.js +618 -38
- package/dist/server/auth/admin.js +32 -0
- package/dist/server/auth/admin.js.map +1 -0
- package/dist/server/broker/kiwoom/_helpers/symbol-code.js +21 -0
- package/dist/server/broker/kiwoom/_helpers/symbol-code.js.map +1 -0
- package/dist/server/broker/kiwoom/client.js +23 -4
- package/dist/server/broker/kiwoom/client.js.map +1 -1
- package/dist/server/broker/kiwoom/endpoints/account.js +14 -6
- package/dist/server/broker/kiwoom/endpoints/account.js.map +1 -1
- package/dist/server/broker/kiwoom/endpoints/quote.js +99 -13
- package/dist/server/broker/kiwoom/endpoints/quote.js.map +1 -1
- package/dist/server/broker/kiwoom/index.js +1 -1
- package/dist/server/broker/kiwoom/index.js.map +1 -1
- package/dist/server/broker/kiwoom/order-tracker.js +13 -0
- package/dist/server/broker/kiwoom/order-tracker.js.map +1 -1
- package/dist/server/broker/kiwoom/price-feed.js +13 -0
- package/dist/server/broker/kiwoom/price-feed.js.map +1 -1
- package/dist/server/broker/kiwoom/ws/endpoints/condition.js +3 -2
- package/dist/server/broker/kiwoom/ws/endpoints/condition.js.map +1 -1
- package/dist/server/calendar/kst-marker.js +68 -0
- package/dist/server/calendar/kst-marker.js.map +1 -0
- package/dist/server/config.js +370 -72
- package/dist/server/config.js.map +1 -1
- package/dist/server/db/sqlite.js +53 -29
- package/dist/server/db/sqlite.js.map +1 -1
- package/dist/server/diary/writer.js +151 -46
- package/dist/server/diary/writer.js.map +1 -1
- package/dist/server/index.js +166 -11
- package/dist/server/index.js.map +1 -1
- package/dist/server/jobs/universe-sync.js +48 -11
- package/dist/server/jobs/universe-sync.js.map +1 -1
- package/dist/server/jobs/watchdog.js +4 -0
- package/dist/server/jobs/watchdog.js.map +1 -1
- package/dist/server/journal/telemetry.js +11 -0
- package/dist/server/journal/telemetry.js.map +1 -1
- package/dist/server/journal/trade-journal.js +42 -16
- package/dist/server/journal/trade-journal.js.map +1 -1
- package/dist/server/llm/context-builder.js +9 -5
- package/dist/server/llm/context-builder.js.map +1 -1
- package/dist/server/personas/loader.js +46 -16
- package/dist/server/personas/loader.js.map +1 -1
- package/dist/server/personas/persona-agent.js +93 -21
- package/dist/server/personas/persona-agent.js.map +1 -1
- package/dist/server/personas/persona-state.js +198 -19
- package/dist/server/personas/persona-state.js.map +1 -1
- package/dist/server/personas/runner.js +29 -0
- package/dist/server/personas/runner.js.map +1 -1
- package/dist/server/personas/schema.js +13 -0
- package/dist/server/personas/schema.js.map +1 -1
- package/dist/server/personas/wake-plan.js +4 -67
- package/dist/server/personas/wake-plan.js.map +1 -1
- package/dist/server/readiness.js +70 -0
- package/dist/server/readiness.js.map +1 -1
- package/dist/server/routes.js +300 -13
- package/dist/server/routes.js.map +1 -1
- package/dist/server/screener/engine.js +110 -1
- package/dist/server/screener/engine.js.map +1 -1
- package/dist/server/screener/indicators.js +63 -0
- package/dist/server/screener/indicators.js.map +1 -0
- package/dist/server/server-sync.js +387 -126
- package/dist/server/server-sync.js.map +1 -1
- package/dist/server/share/postgres-publish.js +139 -0
- package/dist/server/share/postgres-publish.js.map +1 -0
- package/dist/server/share/prepare-state.js +50 -0
- package/dist/server/share/prepare-state.js.map +1 -0
- package/dist/server/share/prepare.js +61 -0
- package/dist/server/share/prepare.js.map +1 -0
- package/dist/server/share/publish-cron.js +96 -0
- package/dist/server/share/publish-cron.js.map +1 -0
- package/dist/server/share/snapshot.js +81 -0
- package/dist/server/share/snapshot.js.map +1 -0
- package/dist/server/watchers/condition-watcher.js +57 -16
- package/dist/server/watchers/condition-watcher.js.map +1 -1
- package/dist/web/assets/index-B1C-UX9W.js +88 -0
- package/dist/web/assets/index-N7Xwheka.css +1 -0
- package/dist/web/index.html +2 -2
- package/package.json +4 -5
- package/dist/web/assets/index-62SMpbaf.js +0 -79
- package/dist/web/assets/index-BPLQR0wt.css +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-sync.js","sourceRoot":"","sources":["../../src-server/server-sync.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server-sync.js","sourceRoot":"","sources":["../../src-server/server-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 5e-1' · admin SQLite → Supabase Postgres (market.*) bulk publish.
|
|
3
|
+
*
|
|
4
|
+
* 흐름:
|
|
5
|
+
* 1. admin 만 호출 가능 (endpoint 단에서 isAdmin 체크 — 본 모듈은 무관심)
|
|
6
|
+
* 2. SQLite (~/.mulsok-traders/market.db) 의 universe + daily_candles 를
|
|
7
|
+
* chunk 단위로 읽어 Postgres 의 market.universe / market.daily_candles 에 upsert
|
|
8
|
+
* 3. 멱등 — onConflict(code,date) / onConflict(code) 로 재실행 안전
|
|
9
|
+
* 4. progress 콜백 — chunk 단위 진행 알림
|
|
10
|
+
*
|
|
11
|
+
* 환경변수:
|
|
12
|
+
* - SUPABASE_URL (예: https://lqwrnmubxlhqfarmvejn.supabase.co)
|
|
13
|
+
* - SUPABASE_SERVICE_ROLE_KEY (admin only · ~/.mulsok-traders/.env 에 보관)
|
|
14
|
+
*
|
|
15
|
+
* chunk 크기:
|
|
16
|
+
* - 1,000 row · Supabase REST 의 ~10MB body 한도 안전 (~80B/row × 1000 = 80KB)
|
|
17
|
+
* - 너무 작으면 round-trip overhead, 너무 크면 timeout · network 실패
|
|
18
|
+
*
|
|
19
|
+
* 멱등성:
|
|
20
|
+
* - daily_candles: PRIMARY KEY (code, date) → 같은 row 재실행 시 update
|
|
21
|
+
* - universe: PRIMARY KEY (code) → 같은 code 재실행 시 update
|
|
22
|
+
* - 도중 중단 → 다음 실행 시 처음부터 다시 (resume 최적화 5e-3 단계에서 추가)
|
|
23
|
+
*/
|
|
24
|
+
import { createClient } from "@supabase/supabase-js";
|
|
25
|
+
import { getDb, recordSync } from "../db/sqlite.js";
|
|
26
|
+
const CHUNK_SIZE = 1000;
|
|
27
|
+
function getSupabase() {
|
|
28
|
+
const url = process.env.SUPABASE_URL;
|
|
29
|
+
const key = process.env.SUPABASE_SERVICE_ROLE_KEY;
|
|
30
|
+
if (!url || !key) {
|
|
31
|
+
return {
|
|
32
|
+
error: "SUPABASE_URL / SUPABASE_SERVICE_ROLE_KEY 미설정 — ~/.mulsok-traders/.env 에 추가 후 daemon restart",
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
return createClient(url, key, {
|
|
36
|
+
auth: { persistSession: false, autoRefreshToken: false },
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
export async function publishToPostgres(opts = {}) {
|
|
40
|
+
const start = Date.now();
|
|
41
|
+
const supabase = getSupabase();
|
|
42
|
+
if ("error" in supabase)
|
|
43
|
+
return { ok: false, error: supabase.error };
|
|
44
|
+
const db = getDb();
|
|
45
|
+
let universeRows = 0;
|
|
46
|
+
let candleRows = 0;
|
|
47
|
+
/* ─── 1. universe ─── */
|
|
48
|
+
if (!opts.candlesOnly) {
|
|
49
|
+
const total = db.prepare("SELECT COUNT(*) AS n FROM universe").get().n;
|
|
50
|
+
if (total > 0) {
|
|
51
|
+
const stmt = db.prepare("SELECT * FROM universe");
|
|
52
|
+
const all = stmt.all();
|
|
53
|
+
for (let i = 0; i < all.length; i += CHUNK_SIZE) {
|
|
54
|
+
const chunk = all.slice(i, i + CHUNK_SIZE);
|
|
55
|
+
const { error } = await supabase
|
|
56
|
+
.schema("market")
|
|
57
|
+
.from("universe")
|
|
58
|
+
.upsert(chunk, { onConflict: "code" });
|
|
59
|
+
if (error) {
|
|
60
|
+
return { ok: false, error: `universe upsert 실패 (chunk ${i}): ${error.message}` };
|
|
61
|
+
}
|
|
62
|
+
universeRows += chunk.length;
|
|
63
|
+
opts.onProgress?.("universe", universeRows, total);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/* ─── 2. daily_candles ─── */
|
|
68
|
+
if (!opts.universeOnly) {
|
|
69
|
+
const total = db.prepare("SELECT COUNT(*) AS n FROM daily_candles").get().n;
|
|
70
|
+
if (total > 0) {
|
|
71
|
+
// ORDER BY 로 일관된 진행 (resume 시 비교 용이) · sqlite 메모리 압박 X (iterate stream)
|
|
72
|
+
const iter = db
|
|
73
|
+
.prepare("SELECT * FROM daily_candles ORDER BY code, date")
|
|
74
|
+
.iterate();
|
|
75
|
+
let buf = [];
|
|
76
|
+
for (const row of iter) {
|
|
77
|
+
buf.push(row);
|
|
78
|
+
if (buf.length >= CHUNK_SIZE) {
|
|
79
|
+
const { error } = await supabase
|
|
80
|
+
.schema("market")
|
|
81
|
+
.from("daily_candles")
|
|
82
|
+
.upsert(buf, { onConflict: "code,date" });
|
|
83
|
+
if (error) {
|
|
84
|
+
return {
|
|
85
|
+
ok: false,
|
|
86
|
+
error: `daily_candles upsert 실패 (rows ${candleRows}~${candleRows + buf.length}): ${error.message}`,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
candleRows += buf.length;
|
|
90
|
+
opts.onProgress?.("candles", candleRows, total);
|
|
91
|
+
buf = [];
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (buf.length > 0) {
|
|
95
|
+
const { error } = await supabase
|
|
96
|
+
.schema("market")
|
|
97
|
+
.from("daily_candles")
|
|
98
|
+
.upsert(buf, { onConflict: "code,date" });
|
|
99
|
+
if (error) {
|
|
100
|
+
return { ok: false, error: `daily_candles upsert 실패 (final): ${error.message}` };
|
|
101
|
+
}
|
|
102
|
+
candleRows += buf.length;
|
|
103
|
+
opts.onProgress?.("candles", candleRows, total);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/* ─── 3. sync_meta ─── */
|
|
108
|
+
const { error: metaErr } = await supabase
|
|
109
|
+
.schema("market")
|
|
110
|
+
.from("sync_meta")
|
|
111
|
+
.upsert([
|
|
112
|
+
{
|
|
113
|
+
kind: "publish",
|
|
114
|
+
last_run_at: new Date().toISOString(),
|
|
115
|
+
item_count: candleRows + universeRows,
|
|
116
|
+
status: "ok",
|
|
117
|
+
message: `universe ${universeRows} · candles ${candleRows} · ${Date.now() - start}ms`,
|
|
118
|
+
},
|
|
119
|
+
], { onConflict: "kind" });
|
|
120
|
+
if (metaErr) {
|
|
121
|
+
// sync_meta 실패는 본 작업 성공 여부에 영향 X — 경고만
|
|
122
|
+
console.warn(`[postgres-publish] sync_meta 갱신 실패: ${metaErr.message}`);
|
|
123
|
+
}
|
|
124
|
+
// SQLite sync_meta 에도 기록 — admin daemon 재기동 시 catch-up 판정 (마지막
|
|
125
|
+
// publish 시각 > 6h 면 즉시 publish trigger) 의 source.
|
|
126
|
+
try {
|
|
127
|
+
recordSync("postgres-publish", candleRows + universeRows, "ok", `universe ${universeRows} · candles ${candleRows}`);
|
|
128
|
+
}
|
|
129
|
+
catch (e) {
|
|
130
|
+
console.warn(`[postgres-publish] sqlite sync_meta 갱신 실패: ${String(e)}`);
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
ok: true,
|
|
134
|
+
universeRows,
|
|
135
|
+
candleRows,
|
|
136
|
+
elapsedMs: Date.now() - start,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=postgres-publish.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-publish.js","sourceRoot":"","sources":["../../../src-server/share/postgres-publish.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 5e-4 · prepare 진행 상태 (in-memory).
|
|
3
|
+
*
|
|
4
|
+
* `mulsok-client prepare` CLI 와 추후 WebUI 가 polling 으로 사용.
|
|
5
|
+
* daemon 단일 process 이므로 in-memory 충분 (재시작 시 reset OK).
|
|
6
|
+
*
|
|
7
|
+
* 동시성:
|
|
8
|
+
* - prepare 가 이미 running 이면 startPrepare() 가 즉시 같은 state 공유 반환
|
|
9
|
+
* - 두 번째 호출자는 같은 진행 보면 됨 (별도 작업 안 트리거)
|
|
10
|
+
*/
|
|
11
|
+
let state = freshState();
|
|
12
|
+
function freshState() {
|
|
13
|
+
return {
|
|
14
|
+
running: false,
|
|
15
|
+
startedAt: null,
|
|
16
|
+
finishedAt: null,
|
|
17
|
+
ok: null,
|
|
18
|
+
error: null,
|
|
19
|
+
universe: { done: false, count: 0 },
|
|
20
|
+
candles: { done: false, pages: 0, returned: 0, sinceCurrent: "" },
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export function getPrepareState() {
|
|
24
|
+
return state;
|
|
25
|
+
}
|
|
26
|
+
export function isPrepareRunning() {
|
|
27
|
+
return state.running;
|
|
28
|
+
}
|
|
29
|
+
export function beginPrepare() {
|
|
30
|
+
state = freshState();
|
|
31
|
+
state.running = true;
|
|
32
|
+
state.startedAt = Date.now();
|
|
33
|
+
}
|
|
34
|
+
export function reportUniverse(count) {
|
|
35
|
+
state.universe.count = count;
|
|
36
|
+
state.universe.done = true;
|
|
37
|
+
}
|
|
38
|
+
export function reportCandlePage(pages, returned, since) {
|
|
39
|
+
state.candles.pages = pages;
|
|
40
|
+
state.candles.returned = returned;
|
|
41
|
+
state.candles.sinceCurrent = since;
|
|
42
|
+
}
|
|
43
|
+
export function finishPrepare(ok, error = null) {
|
|
44
|
+
state.running = false;
|
|
45
|
+
state.finishedAt = Date.now();
|
|
46
|
+
state.ok = ok;
|
|
47
|
+
state.error = error;
|
|
48
|
+
state.candles.done = ok;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=prepare-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepare-state.js","sourceRoot":"","sources":["../../../src-server/share/prepare-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAoBH,IAAI,KAAK,GAAiB,UAAU,EAAE,CAAC;AAEvC,SAAS,UAAU;IACjB,OAAO;QACL,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,IAAI;QACf,UAAU,EAAE,IAAI;QAChB,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE;QACnC,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE;KAClE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,KAAK,GAAG,UAAU,EAAE,CAAC;IACrB,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,KAAK,CAAC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;IAC7B,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,QAAgB,EAAE,KAAa;IAC7E,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;IAC5B,KAAK,CAAC,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAClC,KAAK,CAAC,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAAW,EAAE,QAAuB,IAAI;IACpE,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;IACtB,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC9B,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;IACd,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 5e-4 · 명시적 prepare orchestration.
|
|
3
|
+
*
|
|
4
|
+
* 첫 install 사용자가 cycle 시도 전 시세 데이터 준비를 명시적으로 수행하고
|
|
5
|
+
* 진행률을 가시적으로 받기 위한 entry point. CLI 와 WebUI 둘 다 사용.
|
|
6
|
+
*
|
|
7
|
+
* 흐름:
|
|
8
|
+
* 1. beginPrepare() — state reset
|
|
9
|
+
* 2. pullUniverseFromServer (~수 초 · ~4,300 row)
|
|
10
|
+
* 3. pullCandlesFromServer (첫 install 5~10분 · ~10.87M row)
|
|
11
|
+
* · 매 page 후 reportCandlePage 으로 in-memory state 갱신
|
|
12
|
+
* 4. finishPrepare(ok)
|
|
13
|
+
*
|
|
14
|
+
* 동시성:
|
|
15
|
+
* - 이미 running 이면 즉시 같은 state 공유 반환 (skip 새 trigger)
|
|
16
|
+
* - 두 번째 호출자도 polling 으로 같은 진행 본다
|
|
17
|
+
*
|
|
18
|
+
* background 자동 pull 과의 관계:
|
|
19
|
+
* - 본 함수는 explicit prepare. startPeriodicSync 의 자동 pull 과 무관.
|
|
20
|
+
* - 두 흐름이 동시 실행되어도 멱등 upsert 라 안전 (단 race overhead 약간).
|
|
21
|
+
*/
|
|
22
|
+
import { pullUniverseFromServer, pullCandlesFromServer } from "../server-sync.js";
|
|
23
|
+
import { beginPrepare, finishPrepare, isPrepareRunning, reportCandlePage, reportUniverse, getPrepareState, } from "./prepare-state.js";
|
|
24
|
+
/**
|
|
25
|
+
* prepare 시작. 이미 running 이면 trigger 안 하고 즉시 반환.
|
|
26
|
+
* fire-and-forget 이라 이 함수는 await 즉시 끝남 (실 작업은 background).
|
|
27
|
+
*/
|
|
28
|
+
export function startPrepare() {
|
|
29
|
+
if (isPrepareRunning()) {
|
|
30
|
+
return { started: false, state: getPrepareState() };
|
|
31
|
+
}
|
|
32
|
+
beginPrepare();
|
|
33
|
+
void runPrepare();
|
|
34
|
+
return { started: true, state: getPrepareState() };
|
|
35
|
+
}
|
|
36
|
+
async function runPrepare() {
|
|
37
|
+
try {
|
|
38
|
+
// 1) universe
|
|
39
|
+
const u = await pullUniverseFromServer();
|
|
40
|
+
if (!u.ok) {
|
|
41
|
+
finishPrepare(false, `universe 실패: ${u.error}`);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
reportUniverse(u.universeAdded ?? 0);
|
|
45
|
+
// 2) candles (page loop · 매 page 후 progress 보고)
|
|
46
|
+
const c = await pullCandlesFromServer({
|
|
47
|
+
onProgress: (pages, accumulated, since) => {
|
|
48
|
+
reportCandlePage(pages, accumulated, since);
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
if (!c.ok) {
|
|
52
|
+
finishPrepare(false, `candles 실패: ${c.error}`);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
finishPrepare(true);
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
finishPrepare(false, String(e));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=prepare.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../../src-server/share/prepare.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAClF,OAAO,EACL,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,eAAe,GAEhB,MAAM,oBAAoB,CAAC;AAE5B;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC1B,IAAI,gBAAgB,EAAE,EAAE,CAAC;QACvB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,CAAC;IACtD,CAAC;IAED,YAAY,EAAE,CAAC;IACf,KAAK,UAAU,EAAE,CAAC;IAClB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,CAAC;AACrD,CAAC;AAED,KAAK,UAAU,UAAU;IACvB,IAAI,CAAC;QACH,cAAc;QACd,MAAM,CAAC,GAAG,MAAM,sBAAsB,EAAE,CAAC;QACzC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACV,aAAa,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YAChD,OAAO;QACT,CAAC;QACD,cAAc,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC;QAErC,gDAAgD;QAChD,MAAM,CAAC,GAAG,MAAM,qBAAqB,CAAC;YACpC,UAAU,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE;gBACxC,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;YAC9C,CAAC;SACF,CAAC,CAAC;QACH,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACV,aAAa,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YAC/C,OAAO;QACT,CAAC;QACD,aAAa,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 5e-2 · admin 일일 sync + publish cron (매일 16:35 KST 평일).
|
|
3
|
+
*
|
|
4
|
+
* 흐름:
|
|
5
|
+
* 16:35 KST · sync 먼저 (universe-sync · ~10분) — SQLite daily_candles 갱신
|
|
6
|
+
* (universe-sync cron 자체는 SPEC-27 ADR-012 로 폐기 · 본 cron 안에서 trigger)
|
|
7
|
+
* 16:45 KST · publish (postgres-publish · ~15~30분) — SQLite → Supabase Postgres
|
|
8
|
+
* 17:15 KST · 다른 client 들이 server-sync (1h interval) 에서 incremental pull (5e-3)
|
|
9
|
+
*
|
|
10
|
+
* 가드:
|
|
11
|
+
* 1. SUPABASE_URL · SUPABASE_SERVICE_ROLE_KEY 환경변수 둘 다 있어야 시작
|
|
12
|
+
* 2. config.auth.userEmail 이 admin (env ADMIN_EMAIL · 기본 gnajte@naver.com) 이어야
|
|
13
|
+
* 3. 평일만 (KST · 주말 KRX 휴장)
|
|
14
|
+
*
|
|
15
|
+
* 에러 정책:
|
|
16
|
+
* - sync 실패 (예: 키움 일부 timeout) 면 errorCount 누적되지만 publish 는 계속
|
|
17
|
+
* — 부분 데이터라도 publish 가치 있음 (멱등 upsert · 다음 사이클 보강)
|
|
18
|
+
* - sync catastrophic failure (throw) 시도 publish 시도 — 직전 SQLite 데이터로 publish
|
|
19
|
+
*
|
|
20
|
+
* 환경 미충족 시 graceful skip — daemon 가동 자체엔 영향 X.
|
|
21
|
+
* idempotent — 중복 호출 시 1번만 timer 시작.
|
|
22
|
+
*/
|
|
23
|
+
import { loadConfig } from "../config.js";
|
|
24
|
+
import { isAdmin } from "../auth/admin.js";
|
|
25
|
+
let cronTimer = null;
|
|
26
|
+
function envReady() {
|
|
27
|
+
return !!(process.env.SUPABASE_URL && process.env.SUPABASE_SERVICE_ROLE_KEY);
|
|
28
|
+
}
|
|
29
|
+
function callerIsAdmin() {
|
|
30
|
+
try {
|
|
31
|
+
const cfg = loadConfig();
|
|
32
|
+
return isAdmin(cfg.auth?.userEmail);
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export function startPublishCron() {
|
|
39
|
+
if (cronTimer)
|
|
40
|
+
return;
|
|
41
|
+
if (!envReady()) {
|
|
42
|
+
console.log("[publish-cron] SUPABASE env 미설정 — admin only · cron skip");
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (!callerIsAdmin()) {
|
|
46
|
+
console.log("[publish-cron] 비-admin user — cron skip (admin 만 publish)");
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
cronTimer = setInterval(async () => {
|
|
50
|
+
const now = new Date();
|
|
51
|
+
const kst = new Date(now.getTime() + 9 * 3600_000);
|
|
52
|
+
const day = kst.getUTCDay();
|
|
53
|
+
if (day === 0 || day === 6)
|
|
54
|
+
return; // 주말 skip
|
|
55
|
+
if (kst.getUTCHours() === 16 && kst.getUTCMinutes() === 35) {
|
|
56
|
+
console.log("[publish-cron] 16:35 KST · 일일 sync + publish 시작 (~30~40분)");
|
|
57
|
+
// 1) sync — SQLite daily_candles 갱신 (candleDays=120 single chunk · ~10분)
|
|
58
|
+
try {
|
|
59
|
+
const { runUniverseSync } = await import("../jobs/universe-sync.js");
|
|
60
|
+
const sr = await runUniverseSync({ maxCodes: 0, candleDays: 120 });
|
|
61
|
+
console.log(`[publish-cron] sync 완료 · universe ${sr.universeCount} · candles ${sr.candlesCount} · err ${sr.errorCount} · ${sr.elapsedMs}ms`);
|
|
62
|
+
}
|
|
63
|
+
catch (e) {
|
|
64
|
+
// sync 자체가 throw 해도 publish 는 계속 — 직전 SQLite 데이터라도 propagate
|
|
65
|
+
console.error("[publish-cron] sync 예외 (publish 는 계속):", e);
|
|
66
|
+
}
|
|
67
|
+
// 2) publish — SQLite → Supabase Postgres (~15~30분)
|
|
68
|
+
try {
|
|
69
|
+
const { publishToPostgres } = await import("./postgres-publish.js");
|
|
70
|
+
const r = await publishToPostgres({
|
|
71
|
+
onProgress: (kind, done, total) => {
|
|
72
|
+
if (done % 100000 === 0 || done === total) {
|
|
73
|
+
console.log(`[publish-cron] ${kind} ${done}/${total}`);
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
if (!r.ok) {
|
|
78
|
+
console.error(`[publish-cron] publish 실패: ${r.error}`);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
console.log(`[publish-cron] publish 완료 · universe ${r.universeRows} · candles ${r.candleRows} · ${r.elapsedMs}ms`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch (e) {
|
|
85
|
+
console.error("[publish-cron] publish 예외:", e);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}, 60_000);
|
|
89
|
+
console.log("[publish-cron] cron started · 매일 16:35 KST 자동 sync + publish (admin · 평일 · ~40분)");
|
|
90
|
+
}
|
|
91
|
+
export function stopPublishCron() {
|
|
92
|
+
if (cronTimer)
|
|
93
|
+
clearInterval(cronTimer);
|
|
94
|
+
cronTimer = null;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=publish-cron.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish-cron.js","sourceRoot":"","sources":["../../../src-server/share/publish-cron.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 5e-1a · admin 시세 스냅샷 export.
|
|
3
|
+
*
|
|
4
|
+
* SQLite (~/.mulsok-traders/market.db · public 시세만) 를 VACUUM INTO 로
|
|
5
|
+
* 사본 생성 후 gzip 압축. 사용자별 share 디렉토리에 저장.
|
|
6
|
+
*
|
|
7
|
+
* 산출:
|
|
8
|
+
* ~/.mulsok-traders/u/<userId>/share/market-YYYY-MM-DD.sqlite.gz
|
|
9
|
+
*
|
|
10
|
+
* VACUUM INTO 의 안전성:
|
|
11
|
+
* - 원본 DB 의 모든 페이지를 새 파일로 복제 (lock 영향 없음 · 동시 read 안전)
|
|
12
|
+
* - 80MB 기준 5-10초 소요 · 1.4GB 기준 3-5분 추정
|
|
13
|
+
* - WAL/journal 자동 통합 → 결과 .sqlite 는 단일 페이지 정합성 보장
|
|
14
|
+
*
|
|
15
|
+
* 호출 흐름:
|
|
16
|
+
* 1. (admin only) /api/admin/share/dump
|
|
17
|
+
* 2. exportSnapshot()
|
|
18
|
+
* 3. VACUUM INTO 임시 sqlite → gzip → 압축 파일만 보존 (원본 unlink)
|
|
19
|
+
*
|
|
20
|
+
* 보안:
|
|
21
|
+
* - 본 함수는 endpoint 단에서 isAdmin 체크 후 호출 — 자체 게이트 X.
|
|
22
|
+
* - 산출 파일에는 daily_candles + universe + sync_meta · 사용자 자격증명 X.
|
|
23
|
+
* - watchers 테이블도 export 됨 (Phase 5e-1b 에서 redact 검토 — RLS 보강).
|
|
24
|
+
*
|
|
25
|
+
* 5e-1b 와 분리:
|
|
26
|
+
* - 본 모듈은 「로컬 파일 생성」 까지만. Supabase Storage 업로드는 별도.
|
|
27
|
+
*/
|
|
28
|
+
import path from "node:path";
|
|
29
|
+
import fs from "node:fs";
|
|
30
|
+
import zlib from "node:zlib";
|
|
31
|
+
import { getDb } from "../db/sqlite.js";
|
|
32
|
+
import { ensureUserDir, requireUserId } from "../config.js";
|
|
33
|
+
export async function exportSnapshot() {
|
|
34
|
+
const start = Date.now();
|
|
35
|
+
const userId = requireUserId();
|
|
36
|
+
const shareDir = ensureUserDir(userId, "share");
|
|
37
|
+
const today = new Date(Date.now() + 9 * 3600_000).toISOString().slice(0, 10);
|
|
38
|
+
const rawPath = path.join(shareDir, `market-${today}.sqlite`);
|
|
39
|
+
const gzPath = `${rawPath}.gz`;
|
|
40
|
+
// 1. VACUUM INTO — 안전한 사본 생성 (lock 영향 없음)
|
|
41
|
+
try {
|
|
42
|
+
if (fs.existsSync(rawPath))
|
|
43
|
+
fs.unlinkSync(rawPath);
|
|
44
|
+
if (fs.existsSync(gzPath))
|
|
45
|
+
fs.unlinkSync(gzPath);
|
|
46
|
+
const db = getDb();
|
|
47
|
+
db.exec(`VACUUM INTO '${rawPath.replace(/'/g, "''")}'`);
|
|
48
|
+
}
|
|
49
|
+
catch (e) {
|
|
50
|
+
return { ok: false, error: `VACUUM INTO 실패: ${String(e)}` };
|
|
51
|
+
}
|
|
52
|
+
if (!fs.existsSync(rawPath)) {
|
|
53
|
+
return { ok: false, error: "VACUUM 후 raw 파일 미생성" };
|
|
54
|
+
}
|
|
55
|
+
const rawBytes = fs.statSync(rawPath).size;
|
|
56
|
+
// 2. gzip 압축 (level 9 · 최대 압축 · 1회용 dump 라 시간 부담 OK)
|
|
57
|
+
try {
|
|
58
|
+
const raw = fs.readFileSync(rawPath);
|
|
59
|
+
const compressed = zlib.gzipSync(raw, { level: 9 });
|
|
60
|
+
fs.writeFileSync(gzPath, compressed, { mode: 0o600 });
|
|
61
|
+
fs.unlinkSync(rawPath);
|
|
62
|
+
}
|
|
63
|
+
catch (e) {
|
|
64
|
+
// gzip 실패 시 raw 라도 보존 (디버깅용)
|
|
65
|
+
return { ok: false, error: `gzip 실패: ${String(e)} · raw 보존: ${rawPath}` };
|
|
66
|
+
}
|
|
67
|
+
const gzBytes = fs.statSync(gzPath).size;
|
|
68
|
+
const compressionRatio = rawBytes > 0 ? gzBytes / rawBytes : 0;
|
|
69
|
+
console.log(`[share] snapshot 생성 완료 · ${rawPath.split("/").pop()} → ` +
|
|
70
|
+
`${(rawBytes / 1e6).toFixed(1)}MB → ${(gzBytes / 1e6).toFixed(1)}MB (` +
|
|
71
|
+
`${(100 - compressionRatio * 100).toFixed(0)}% 압축)`);
|
|
72
|
+
return {
|
|
73
|
+
ok: true,
|
|
74
|
+
path: gzPath,
|
|
75
|
+
bytes: rawBytes,
|
|
76
|
+
bytesGzip: gzBytes,
|
|
77
|
+
compressionRatio,
|
|
78
|
+
elapsedMs: Date.now() - start,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../../src-server/share/snapshot.ts"],"names":[],"mappings":"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"}
|