korean-stats-mcp 1.4.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.
- package/LICENSE +21 -0
- package/README.md +301 -0
- package/dist/api/client.d.ts +65 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +143 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/types.d.ts +157 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +5 -0
- package/dist/api/types.js.map +1 -0
- package/dist/cache/index.d.ts +55 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +102 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/config/index.d.ts +46 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +54 -0
- package/dist/config/index.js.map +1 -0
- package/dist/data/quickStatsParams.d.ts +76 -0
- package/dist/data/quickStatsParams.d.ts.map +1 -0
- package/dist/data/quickStatsParams.js +1344 -0
- package/dist/data/quickStatsParams.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/index.d.ts +5 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +5 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/statisticsAssistant.d.ts +25 -0
- package/dist/prompts/statisticsAssistant.d.ts.map +1 -0
- package/dist/prompts/statisticsAssistant.js +43 -0
- package/dist/prompts/statisticsAssistant.js.map +1 -0
- package/dist/resources/categoryTree.d.ts +18 -0
- package/dist/resources/categoryTree.d.ts.map +1 -0
- package/dist/resources/categoryTree.js +80 -0
- package/dist/resources/categoryTree.js.map +1 -0
- package/dist/resources/index.d.ts +6 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +6 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/keyIndicators.d.ts +20 -0
- package/dist/resources/keyIndicators.d.ts.map +1 -0
- package/dist/resources/keyIndicators.js +108 -0
- package/dist/resources/keyIndicators.js.map +1 -0
- package/dist/server-http.d.ts +10 -0
- package/dist/server-http.d.ts.map +1 -0
- package/dist/server-http.js +134 -0
- package/dist/server-http.js.map +1 -0
- package/dist/server.d.ts +10 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +194 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/analyzeTimeSeries.d.ts +70 -0
- package/dist/tools/analyzeTimeSeries.d.ts.map +1 -0
- package/dist/tools/analyzeTimeSeries.js +204 -0
- package/dist/tools/analyzeTimeSeries.js.map +1 -0
- package/dist/tools/chains.d.ts +197 -0
- package/dist/tools/chains.d.ts.map +1 -0
- package/dist/tools/chains.js +369 -0
- package/dist/tools/chains.js.map +1 -0
- package/dist/tools/compareStatistics.d.ts +62 -0
- package/dist/tools/compareStatistics.d.ts.map +1 -0
- package/dist/tools/compareStatistics.js +190 -0
- package/dist/tools/compareStatistics.js.map +1 -0
- package/dist/tools/fetchKosisExcel.d.ts +62 -0
- package/dist/tools/fetchKosisExcel.d.ts.map +1 -0
- package/dist/tools/fetchKosisExcel.js +366 -0
- package/dist/tools/fetchKosisExcel.js.map +1 -0
- package/dist/tools/getRecommendedStats.d.ts +41 -0
- package/dist/tools/getRecommendedStats.d.ts.map +1 -0
- package/dist/tools/getRecommendedStats.js +251 -0
- package/dist/tools/getRecommendedStats.js.map +1 -0
- package/dist/tools/getStatisticsData.d.ts +75 -0
- package/dist/tools/getStatisticsData.d.ts.map +1 -0
- package/dist/tools/getStatisticsData.js +305 -0
- package/dist/tools/getStatisticsData.js.map +1 -0
- package/dist/tools/getStatisticsList.d.ts +69 -0
- package/dist/tools/getStatisticsList.d.ts.map +1 -0
- package/dist/tools/getStatisticsList.js +336 -0
- package/dist/tools/getStatisticsList.js.map +1 -0
- package/dist/tools/getTableInfo.d.ts +66 -0
- package/dist/tools/getTableInfo.d.ts.map +1 -0
- package/dist/tools/getTableInfo.js +85 -0
- package/dist/tools/getTableInfo.js.map +1 -0
- package/dist/tools/index.d.ts +14 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +19 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/quickStats.d.ts +71 -0
- package/dist/tools/quickStats.d.ts.map +1 -0
- package/dist/tools/quickStats.js +490 -0
- package/dist/tools/quickStats.js.map +1 -0
- package/dist/tools/quickTrend.d.ts +61 -0
- package/dist/tools/quickTrend.d.ts.map +1 -0
- package/dist/tools/quickTrend.js +328 -0
- package/dist/tools/quickTrend.js.map +1 -0
- package/dist/tools/searchStatistics.d.ts +41 -0
- package/dist/tools/searchStatistics.d.ts.map +1 -0
- package/dist/tools/searchStatistics.js +318 -0
- package/dist/tools/searchStatistics.js.map +1 -0
- package/dist/utils/dataFormatter.d.ts +40 -0
- package/dist/utils/dataFormatter.d.ts.map +1 -0
- package/dist/utils/dataFormatter.js +142 -0
- package/dist/utils/dataFormatter.js.map +1 -0
- package/dist/utils/errorHandler.d.ts +33 -0
- package/dist/utils/errorHandler.d.ts.map +1 -0
- package/dist/utils/errorHandler.js +94 -0
- package/dist/utils/errorHandler.js.map +1 -0
- package/dist/utils/metaLookup.d.ts +93 -0
- package/dist/utils/metaLookup.d.ts.map +1 -0
- package/dist/utils/metaLookup.js +170 -0
- package/dist/utils/metaLookup.js.map +1 -0
- package/dist/utils/queryParser.d.ts +45 -0
- package/dist/utils/queryParser.d.ts.map +1 -0
- package/dist/utils/queryParser.js +244 -0
- package/dist/utils/queryParser.js.map +1 -0
- package/dist/utils/regions.d.ts +70 -0
- package/dist/utils/regions.d.ts.map +1 -0
- package/dist/utils/regions.js +261 -0
- package/dist/utils/regions.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KOSIS OpenAPI 타입 정의
|
|
3
|
+
*/
|
|
4
|
+
export interface KosisApiResponse<T> {
|
|
5
|
+
err?: string;
|
|
6
|
+
errMsg?: string;
|
|
7
|
+
result?: T[];
|
|
8
|
+
}
|
|
9
|
+
export interface StatisticsListItem {
|
|
10
|
+
VW_CD: string;
|
|
11
|
+
VW_NM: string;
|
|
12
|
+
LIST_ID?: string;
|
|
13
|
+
LIST_NM?: string;
|
|
14
|
+
ORG_ID?: string;
|
|
15
|
+
TBL_ID?: string;
|
|
16
|
+
TBL_NM?: string;
|
|
17
|
+
STAT_ID?: string;
|
|
18
|
+
SEND_DE?: string;
|
|
19
|
+
REC_TBL_SE?: string;
|
|
20
|
+
UP_ID?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface StatisticsDataItem {
|
|
23
|
+
ORG_ID: string;
|
|
24
|
+
TBL_ID: string;
|
|
25
|
+
TBL_NM: string;
|
|
26
|
+
C1?: string;
|
|
27
|
+
C1_OBJ_NM?: string;
|
|
28
|
+
C1_NM?: string;
|
|
29
|
+
C2?: string;
|
|
30
|
+
C2_OBJ_NM?: string;
|
|
31
|
+
C2_NM?: string;
|
|
32
|
+
C3?: string;
|
|
33
|
+
C3_OBJ_NM?: string;
|
|
34
|
+
C3_NM?: string;
|
|
35
|
+
C4?: string;
|
|
36
|
+
C4_OBJ_NM?: string;
|
|
37
|
+
C4_NM?: string;
|
|
38
|
+
C5?: string;
|
|
39
|
+
C5_OBJ_NM?: string;
|
|
40
|
+
C5_NM?: string;
|
|
41
|
+
C6?: string;
|
|
42
|
+
C6_OBJ_NM?: string;
|
|
43
|
+
C6_NM?: string;
|
|
44
|
+
C7?: string;
|
|
45
|
+
C7_OBJ_NM?: string;
|
|
46
|
+
C7_NM?: string;
|
|
47
|
+
C8?: string;
|
|
48
|
+
C8_OBJ_NM?: string;
|
|
49
|
+
C8_NM?: string;
|
|
50
|
+
ITM_ID: string;
|
|
51
|
+
ITM_NM: string;
|
|
52
|
+
ITM_NM_ENG?: string;
|
|
53
|
+
UNIT_ID?: string;
|
|
54
|
+
UNIT_NM: string;
|
|
55
|
+
UNIT_NM_ENG?: string;
|
|
56
|
+
PRD_SE: string;
|
|
57
|
+
PRD_DE: string;
|
|
58
|
+
DT: string;
|
|
59
|
+
LST_CHN_DE?: string;
|
|
60
|
+
}
|
|
61
|
+
export interface SearchResultItem {
|
|
62
|
+
ORG_ID: string;
|
|
63
|
+
ORG_NM: string;
|
|
64
|
+
TBL_ID: string;
|
|
65
|
+
TBL_NM: string;
|
|
66
|
+
STAT_ID: string;
|
|
67
|
+
STAT_NM: string;
|
|
68
|
+
VW_CD: string;
|
|
69
|
+
MT_ATITLE?: string;
|
|
70
|
+
FULL_PATH_ID?: string;
|
|
71
|
+
CONTENTS?: string;
|
|
72
|
+
STRT_PRD_DE?: string;
|
|
73
|
+
END_PRD_DE?: string;
|
|
74
|
+
ITEM03?: string;
|
|
75
|
+
REC_TBL_SE?: string;
|
|
76
|
+
TBL_VIEW_URL?: string;
|
|
77
|
+
LINK_URL?: string;
|
|
78
|
+
STAT_DB_CNT?: string;
|
|
79
|
+
QUERY?: string;
|
|
80
|
+
}
|
|
81
|
+
export interface StatisticsExplainItem {
|
|
82
|
+
STAT_ID: string;
|
|
83
|
+
STAT_NM: string;
|
|
84
|
+
STAT_KIND: string;
|
|
85
|
+
WRIT_PURPS: string;
|
|
86
|
+
EXAMIN_PD: string;
|
|
87
|
+
STAT_PERIOD: string;
|
|
88
|
+
MAIN_TERM_EXPL: string;
|
|
89
|
+
JOSA_NM: string;
|
|
90
|
+
CONTACT_DEPT_NM: string;
|
|
91
|
+
}
|
|
92
|
+
export interface StatisticsListParams {
|
|
93
|
+
method: 'getList';
|
|
94
|
+
apiKey: string;
|
|
95
|
+
vwCd: string;
|
|
96
|
+
parentListId?: string;
|
|
97
|
+
format: 'json';
|
|
98
|
+
jsonVD?: 'Y';
|
|
99
|
+
}
|
|
100
|
+
export interface StatisticsDataParams {
|
|
101
|
+
method: 'getList';
|
|
102
|
+
apiKey: string;
|
|
103
|
+
orgId: string;
|
|
104
|
+
tblId: string;
|
|
105
|
+
objL1?: string;
|
|
106
|
+
objL2?: string;
|
|
107
|
+
objL3?: string;
|
|
108
|
+
objL4?: string;
|
|
109
|
+
objL5?: string;
|
|
110
|
+
objL6?: string;
|
|
111
|
+
objL7?: string;
|
|
112
|
+
objL8?: string;
|
|
113
|
+
itmId?: string;
|
|
114
|
+
prdSe: string;
|
|
115
|
+
startPrdDe?: string;
|
|
116
|
+
endPrdDe?: string;
|
|
117
|
+
newEstPrdCnt?: number;
|
|
118
|
+
format: 'json';
|
|
119
|
+
jsonVD?: 'Y';
|
|
120
|
+
}
|
|
121
|
+
export interface SearchStatisticsParams {
|
|
122
|
+
method: 'getList';
|
|
123
|
+
apiKey: string;
|
|
124
|
+
searchNm: string;
|
|
125
|
+
orgId?: string;
|
|
126
|
+
sort?: 'RANK' | 'DATE';
|
|
127
|
+
startCount?: number;
|
|
128
|
+
resultCount?: number;
|
|
129
|
+
format: 'json';
|
|
130
|
+
content?: 'html' | 'json';
|
|
131
|
+
}
|
|
132
|
+
export interface SimplifiedStatisticsItem {
|
|
133
|
+
orgId: string;
|
|
134
|
+
orgName: string;
|
|
135
|
+
tableId: string;
|
|
136
|
+
tableName: string;
|
|
137
|
+
statisticsName?: string;
|
|
138
|
+
period: string;
|
|
139
|
+
periodType: string;
|
|
140
|
+
lastUpdated?: string;
|
|
141
|
+
}
|
|
142
|
+
export interface SimplifiedDataItem {
|
|
143
|
+
period: string;
|
|
144
|
+
value: string;
|
|
145
|
+
classification: string;
|
|
146
|
+
item: string;
|
|
147
|
+
unit: string;
|
|
148
|
+
}
|
|
149
|
+
export interface ListItem {
|
|
150
|
+
id: string;
|
|
151
|
+
name: string;
|
|
152
|
+
isTable: boolean;
|
|
153
|
+
orgId?: string;
|
|
154
|
+
tableId?: string;
|
|
155
|
+
tableName?: string;
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 캐시 매니저
|
|
3
|
+
* 메모리 캐시를 사용하여 KOSIS API 호출을 최적화
|
|
4
|
+
*/
|
|
5
|
+
import NodeCache from 'node-cache';
|
|
6
|
+
declare const TTL: {
|
|
7
|
+
readonly STATISTICS_LIST: number;
|
|
8
|
+
readonly STATISTICS_DATA: number;
|
|
9
|
+
readonly SEARCH_RESULTS: number;
|
|
10
|
+
readonly EXPLANATION: number;
|
|
11
|
+
readonly TABLE_META: number;
|
|
12
|
+
};
|
|
13
|
+
declare class CacheManager {
|
|
14
|
+
private cache;
|
|
15
|
+
constructor();
|
|
16
|
+
/**
|
|
17
|
+
* 캐시 키 생성
|
|
18
|
+
*/
|
|
19
|
+
private generateKey;
|
|
20
|
+
/**
|
|
21
|
+
* 캐시에서 데이터 조회 또는 fetcher 실행
|
|
22
|
+
*/
|
|
23
|
+
getOrFetch<T>(prefix: string, params: Record<string, unknown>, fetcher: () => Promise<T>, ttl?: number): Promise<T>;
|
|
24
|
+
/**
|
|
25
|
+
* 통계 목록 캐시
|
|
26
|
+
*/
|
|
27
|
+
getStatisticsList<T>(params: Record<string, unknown>, fetcher: () => Promise<T>): Promise<T>;
|
|
28
|
+
/**
|
|
29
|
+
* 통계 데이터 캐시
|
|
30
|
+
*/
|
|
31
|
+
getStatisticsData<T>(params: Record<string, unknown>, fetcher: () => Promise<T>): Promise<T>;
|
|
32
|
+
/**
|
|
33
|
+
* 검색 결과 캐시
|
|
34
|
+
*/
|
|
35
|
+
getSearchResults<T>(params: Record<string, unknown>, fetcher: () => Promise<T>): Promise<T>;
|
|
36
|
+
/**
|
|
37
|
+
* 통계 설명 캐시
|
|
38
|
+
*/
|
|
39
|
+
getExplanation<T>(params: Record<string, unknown>, fetcher: () => Promise<T>): Promise<T>;
|
|
40
|
+
/**
|
|
41
|
+
* 테이블 메타데이터 캐시
|
|
42
|
+
*/
|
|
43
|
+
getTableMeta<T>(params: Record<string, unknown>, fetcher: () => Promise<T>): Promise<T>;
|
|
44
|
+
/**
|
|
45
|
+
* 캐시 통계
|
|
46
|
+
*/
|
|
47
|
+
getStats(): NodeCache.Stats;
|
|
48
|
+
/**
|
|
49
|
+
* 캐시 초기화
|
|
50
|
+
*/
|
|
51
|
+
flush(): void;
|
|
52
|
+
}
|
|
53
|
+
export declare function getCacheManager(): CacheManager;
|
|
54
|
+
export { CacheManager, TTL };
|
|
55
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,SAAS,MAAM,YAAY,CAAC;AAInC,QAAA,MAAM,GAAG;;;;;;CAMC,CAAC;AAEX,cAAM,YAAY;IAChB,OAAO,CAAC,KAAK,CAAY;;IAWzB;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;OAEG;IACG,UAAU,CAAC,CAAC,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACzB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,CAAC,CAAC;IAgBb;;OAEG;IACG,iBAAiB,CAAC,CAAC,EACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,CAAC,CAAC;IAIb;;OAEG;IACG,iBAAiB,CAAC,CAAC,EACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,CAAC,CAAC;IAIb;;OAEG;IACG,gBAAgB,CAAC,CAAC,EACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,CAAC,CAAC;IAIb;;OAEG;IACG,cAAc,CAAC,CAAC,EACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,CAAC,CAAC;IAIb;;OAEG;IACG,YAAY,CAAC,CAAC,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,CAAC,CAAC;IAIb;;OAEG;IACH,QAAQ;IAIR;;OAEG;IACH,KAAK;CAGN;AAKD,wBAAgB,eAAe,IAAI,YAAY,CAK9C;AAED,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 캐시 매니저
|
|
3
|
+
* 메모리 캐시를 사용하여 KOSIS API 호출을 최적화
|
|
4
|
+
*/
|
|
5
|
+
import NodeCache from 'node-cache';
|
|
6
|
+
import { config } from '../config/index.js';
|
|
7
|
+
// 캐시 TTL 설정 (초 단위)
|
|
8
|
+
const TTL = {
|
|
9
|
+
STATISTICS_LIST: 24 * 60 * 60, // 목록: 24시간
|
|
10
|
+
STATISTICS_DATA: 6 * 60 * 60, // 데이터: 6시간
|
|
11
|
+
SEARCH_RESULTS: 1 * 60 * 60, // 검색: 1시간
|
|
12
|
+
EXPLANATION: 7 * 24 * 60 * 60, // 설명: 7일
|
|
13
|
+
TABLE_META: 24 * 60 * 60, // 테이블 메타: 24시간
|
|
14
|
+
};
|
|
15
|
+
class CacheManager {
|
|
16
|
+
cache;
|
|
17
|
+
constructor() {
|
|
18
|
+
this.cache = new NodeCache({
|
|
19
|
+
stdTTL: config.cache.ttlHours * 60 * 60,
|
|
20
|
+
checkperiod: 600, // 10분마다 만료 체크
|
|
21
|
+
maxKeys: config.cache.maxKeys,
|
|
22
|
+
useClones: false, // 성능을 위해 복제 비활성화
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* 캐시 키 생성
|
|
27
|
+
*/
|
|
28
|
+
generateKey(prefix, params) {
|
|
29
|
+
const sortedParams = Object.keys(params)
|
|
30
|
+
.sort()
|
|
31
|
+
.map((k) => `${k}=${JSON.stringify(params[k])}`)
|
|
32
|
+
.join('&');
|
|
33
|
+
return `${prefix}:${sortedParams}`;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 캐시에서 데이터 조회 또는 fetcher 실행
|
|
37
|
+
*/
|
|
38
|
+
async getOrFetch(prefix, params, fetcher, ttl) {
|
|
39
|
+
const key = this.generateKey(prefix, params);
|
|
40
|
+
// 캐시에서 조회
|
|
41
|
+
const cached = this.cache.get(key);
|
|
42
|
+
if (cached !== undefined) {
|
|
43
|
+
return cached;
|
|
44
|
+
}
|
|
45
|
+
// API 호출 및 캐시 저장
|
|
46
|
+
const data = await fetcher();
|
|
47
|
+
this.cache.set(key, data, ttl ?? config.cache.ttlHours * 60 * 60);
|
|
48
|
+
return data;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* 통계 목록 캐시
|
|
52
|
+
*/
|
|
53
|
+
async getStatisticsList(params, fetcher) {
|
|
54
|
+
return this.getOrFetch('list', params, fetcher, TTL.STATISTICS_LIST);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* 통계 데이터 캐시
|
|
58
|
+
*/
|
|
59
|
+
async getStatisticsData(params, fetcher) {
|
|
60
|
+
return this.getOrFetch('data', params, fetcher, TTL.STATISTICS_DATA);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* 검색 결과 캐시
|
|
64
|
+
*/
|
|
65
|
+
async getSearchResults(params, fetcher) {
|
|
66
|
+
return this.getOrFetch('search', params, fetcher, TTL.SEARCH_RESULTS);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* 통계 설명 캐시
|
|
70
|
+
*/
|
|
71
|
+
async getExplanation(params, fetcher) {
|
|
72
|
+
return this.getOrFetch('explain', params, fetcher, TTL.EXPLANATION);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* 테이블 메타데이터 캐시
|
|
76
|
+
*/
|
|
77
|
+
async getTableMeta(params, fetcher) {
|
|
78
|
+
return this.getOrFetch('meta', params, fetcher, TTL.TABLE_META);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* 캐시 통계
|
|
82
|
+
*/
|
|
83
|
+
getStats() {
|
|
84
|
+
return this.cache.getStats();
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* 캐시 초기화
|
|
88
|
+
*/
|
|
89
|
+
flush() {
|
|
90
|
+
this.cache.flushAll();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// 싱글톤 인스턴스
|
|
94
|
+
let cacheInstance = null;
|
|
95
|
+
export function getCacheManager() {
|
|
96
|
+
if (!cacheInstance) {
|
|
97
|
+
cacheInstance = new CacheManager();
|
|
98
|
+
}
|
|
99
|
+
return cacheInstance;
|
|
100
|
+
}
|
|
101
|
+
export { CacheManager, TTL };
|
|
102
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import 'dotenv/config';
|
|
2
|
+
export declare const config: {
|
|
3
|
+
readonly kosis: {
|
|
4
|
+
readonly apiKey: string;
|
|
5
|
+
readonly baseUrl: "https://kosis.kr/openapi";
|
|
6
|
+
readonly endpoints: {
|
|
7
|
+
readonly statisticsList: "/statisticsList.do";
|
|
8
|
+
readonly statisticsData: "/statisticsData.do";
|
|
9
|
+
readonly parameterData: "/Param/statisticsParameterData.do";
|
|
10
|
+
readonly searchStatistics: "/statisticsSearch.do";
|
|
11
|
+
readonly statsExplain: "/statsExplain.do";
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
readonly cache: {
|
|
15
|
+
readonly ttlHours: number;
|
|
16
|
+
readonly maxKeys: 1000;
|
|
17
|
+
};
|
|
18
|
+
readonly logLevel: string;
|
|
19
|
+
readonly viewCodes: {
|
|
20
|
+
readonly MT_ZTITLE: "국내통계 주제별";
|
|
21
|
+
readonly MT_OTITLE: "국내통계 기관별";
|
|
22
|
+
readonly MT_GTITLE01: "e-지방지표(주제별)";
|
|
23
|
+
readonly MT_GTITLE02: "e-지방지표(지역별)";
|
|
24
|
+
readonly MT_CHOSUN_TITLE: "광복이전통계(1908~1943)";
|
|
25
|
+
readonly MT_HANKUK_TITLE: "대한민국통계연감";
|
|
26
|
+
readonly MT_STOP_TITLE: "작성중지통계";
|
|
27
|
+
readonly MT_RTITLE: "국제통계";
|
|
28
|
+
readonly MT_BUKHAN: "북한통계";
|
|
29
|
+
readonly MT_TM1_TITLE: "대상별통계";
|
|
30
|
+
readonly MT_TM2_TITLE: "이슈별통계";
|
|
31
|
+
readonly MT_ETITLE: "영문 KOSIS";
|
|
32
|
+
};
|
|
33
|
+
readonly periodCodes: {
|
|
34
|
+
readonly D: "일";
|
|
35
|
+
readonly M: "월";
|
|
36
|
+
readonly Q: "분기";
|
|
37
|
+
readonly S: "반기";
|
|
38
|
+
readonly Y: "년";
|
|
39
|
+
readonly F: "다년(2년~10년)";
|
|
40
|
+
readonly IR: "부정기";
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
export declare function validateConfig(): void;
|
|
44
|
+
export type ViewCode = keyof typeof config.viewCodes;
|
|
45
|
+
export type PeriodCode = keyof typeof config.periodCodes;
|
|
46
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAKvB,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDT,CAAC;AAGX,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,MAAM,CAAC,SAAS,CAAC;AACrD,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,MAAM,CAAC,WAAW,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import 'dotenv/config';
|
|
2
|
+
// 우선순위: 환경변수 KOSIS_API_KEY > 내장 키 (배포 환경 친화)
|
|
3
|
+
const DEFAULT_KOSIS_KEY = 'YThiNDdhYjYyMWZlMDA5NWI5NGI0Y2E0OWRiNjZiYTY=';
|
|
4
|
+
export const config = {
|
|
5
|
+
// KOSIS API 설정
|
|
6
|
+
kosis: {
|
|
7
|
+
apiKey: process.env.KOSIS_API_KEY || DEFAULT_KOSIS_KEY,
|
|
8
|
+
baseUrl: 'https://kosis.kr/openapi',
|
|
9
|
+
endpoints: {
|
|
10
|
+
statisticsList: '/statisticsList.do',
|
|
11
|
+
statisticsData: '/statisticsData.do',
|
|
12
|
+
parameterData: '/Param/statisticsParameterData.do',
|
|
13
|
+
searchStatistics: '/statisticsSearch.do',
|
|
14
|
+
statsExplain: '/statsExplain.do',
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
// 캐시 설정
|
|
18
|
+
cache: {
|
|
19
|
+
ttlHours: parseInt(process.env.CACHE_TTL_HOURS || '6', 10),
|
|
20
|
+
maxKeys: 1000,
|
|
21
|
+
},
|
|
22
|
+
// 로그 레벨
|
|
23
|
+
logLevel: process.env.LOG_LEVEL || 'info',
|
|
24
|
+
// 서비스뷰 코드 (통계 분류 체계)
|
|
25
|
+
viewCodes: {
|
|
26
|
+
MT_ZTITLE: '국내통계 주제별',
|
|
27
|
+
MT_OTITLE: '국내통계 기관별',
|
|
28
|
+
MT_GTITLE01: 'e-지방지표(주제별)',
|
|
29
|
+
MT_GTITLE02: 'e-지방지표(지역별)',
|
|
30
|
+
MT_CHOSUN_TITLE: '광복이전통계(1908~1943)',
|
|
31
|
+
MT_HANKUK_TITLE: '대한민국통계연감',
|
|
32
|
+
MT_STOP_TITLE: '작성중지통계',
|
|
33
|
+
MT_RTITLE: '국제통계',
|
|
34
|
+
MT_BUKHAN: '북한통계',
|
|
35
|
+
MT_TM1_TITLE: '대상별통계',
|
|
36
|
+
MT_TM2_TITLE: '이슈별통계',
|
|
37
|
+
MT_ETITLE: '영문 KOSIS',
|
|
38
|
+
},
|
|
39
|
+
// 주기 코드
|
|
40
|
+
periodCodes: {
|
|
41
|
+
D: '일',
|
|
42
|
+
M: '월',
|
|
43
|
+
Q: '분기',
|
|
44
|
+
S: '반기',
|
|
45
|
+
Y: '년',
|
|
46
|
+
F: '다년(2년~10년)',
|
|
47
|
+
IR: '부정기',
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
// 설정 유효성 검사
|
|
51
|
+
export function validateConfig() {
|
|
52
|
+
// 기본 API 키가 내장되어 있어 별도 검사 불필요
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAEvB,6CAA6C;AAC7C,MAAM,iBAAiB,GAAG,8CAA8C,CAAC;AAEzE,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,eAAe;IACf,KAAK,EAAE;QACL,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,iBAAiB;QACtD,OAAO,EAAE,0BAA0B;QACnC,SAAS,EAAE;YACT,cAAc,EAAE,oBAAoB;YACpC,cAAc,EAAE,oBAAoB;YACpC,aAAa,EAAE,mCAAmC;YAClD,gBAAgB,EAAE,sBAAsB;YACxC,YAAY,EAAE,kBAAkB;SACjC;KACF;IAED,QAAQ;IACR,KAAK,EAAE;QACL,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,GAAG,EAAE,EAAE,CAAC;QAC1D,OAAO,EAAE,IAAI;KACd;IAED,QAAQ;IACR,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;IAEzC,qBAAqB;IACrB,SAAS,EAAE;QACT,SAAS,EAAE,UAAU;QACrB,SAAS,EAAE,UAAU;QACrB,WAAW,EAAE,aAAa;QAC1B,WAAW,EAAE,aAAa;QAC1B,eAAe,EAAE,mBAAmB;QACpC,eAAe,EAAE,UAAU;QAC3B,aAAa,EAAE,QAAQ;QACvB,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,MAAM;QACjB,YAAY,EAAE,OAAO;QACrB,YAAY,EAAE,OAAO;QACrB,SAAS,EAAE,UAAU;KACb;IAEV,QAAQ;IACR,WAAW,EAAE;QACX,CAAC,EAAE,GAAG;QACN,CAAC,EAAE,GAAG;QACN,CAAC,EAAE,IAAI;QACP,CAAC,EAAE,IAAI;QACP,CAAC,EAAE,GAAG;QACN,CAAC,EAAE,YAAY;QACf,EAAE,EAAE,KAAK;KACD;CACF,CAAC;AAEX,YAAY;AACZ,MAAM,UAAU,cAAc;IAC5B,8BAA8B;AAChC,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quick Stats 정적 파라미터 매핑
|
|
3
|
+
* - curl로 다운받은 메타데이터를 분석하여 생성
|
|
4
|
+
* - 동적 조회 대신 미리 검증된 파라미터 사용
|
|
5
|
+
*/
|
|
6
|
+
export interface QuickStatsParam {
|
|
7
|
+
orgId: string;
|
|
8
|
+
tableId: string;
|
|
9
|
+
tableName: string;
|
|
10
|
+
description: string;
|
|
11
|
+
objL1: string;
|
|
12
|
+
objL2?: string;
|
|
13
|
+
itemId: string;
|
|
14
|
+
unit: string;
|
|
15
|
+
regionCodes?: Record<string, string>;
|
|
16
|
+
supportedPeriods?: ('Y' | 'Q' | 'M')[];
|
|
17
|
+
isProjection?: boolean;
|
|
18
|
+
}
|
|
19
|
+
/** 인구동향/출산율/혼인율 등에서 사용하는 지역 코드 */
|
|
20
|
+
export declare const REGION_CODES_DEMOGRAPHIC: Record<string, string>;
|
|
21
|
+
/** 인구(주민등록)에서 사용하는 지역 코드 */
|
|
22
|
+
export declare const REGION_CODES_POPULATION: Record<string, string>;
|
|
23
|
+
/** 물가지수에서 사용하는 지역 코드 */
|
|
24
|
+
export declare const REGION_CODES_CPI: Record<string, string>;
|
|
25
|
+
/** 주택/아파트 가격지수에서 사용하는 지역 코드 */
|
|
26
|
+
export declare const REGION_CODES_HOUSING: Record<string, string>;
|
|
27
|
+
/** PM2.5 미세먼지 지역 코드 (환경부 테이블) */
|
|
28
|
+
export declare const REGION_CODES_PM25: Record<string, string>;
|
|
29
|
+
/** PM10 미세먼지 지역 코드 (환경부 테이블) */
|
|
30
|
+
export declare const REGION_CODES_PM10: Record<string, string>;
|
|
31
|
+
/**
|
|
32
|
+
* 검증된 Quick Stats 파라미터
|
|
33
|
+
* - 2024년 기준 KOSIS API 메타데이터에서 추출
|
|
34
|
+
*/
|
|
35
|
+
export declare const QUICK_STATS_PARAMS: Record<string, QuickStatsParam>;
|
|
36
|
+
/**
|
|
37
|
+
* 자연어 별칭 → 정식 키워드 매핑
|
|
38
|
+
*
|
|
39
|
+
* 설계 (korean-law-mcp의 LAW_ALIAS_ENTRIES 패턴 차용):
|
|
40
|
+
* - 공무원 보고서·민원 응답·연설문에서 흔히 등장하는 구어체/줄임말 포괄
|
|
41
|
+
* - 영문(소문자)도 동일 dict (영문은 lowercase로 정규화)
|
|
42
|
+
* - 률↔율 오타 보정은 BASIC_TYPO_MAP이 별도 담당
|
|
43
|
+
*/
|
|
44
|
+
export declare const KEYWORD_ALIASES: Record<string, string>;
|
|
45
|
+
/**
|
|
46
|
+
* 자주 발생하는 오타·표기 변형 → 정식 키워드 매핑
|
|
47
|
+
* (korean-law-mcp의 BASIC_CHAR_MAP 패턴 차용 — 키워드 단위로 확장)
|
|
48
|
+
*
|
|
49
|
+
* 주요 케이스:
|
|
50
|
+
* - 률/율 받침 규칙 위반 (출산률, 고용율, 이혼률 등)
|
|
51
|
+
* - 공백·중점 변형 (이미 normalizeKeywordKey가 제거하나 명시 매핑도 둠)
|
|
52
|
+
*/
|
|
53
|
+
declare const BASIC_TYPO_MAP: Record<string, string>;
|
|
54
|
+
/**
|
|
55
|
+
* 키워드 정규화 키 (공백 제거 + 소문자 + 일부 특수문자 제거)
|
|
56
|
+
*
|
|
57
|
+
* 정규화 후 동등 비교에 사용. 비교용으로만 사용 — 사용자 입력 자체를 바꾸지 않음.
|
|
58
|
+
*/
|
|
59
|
+
declare function normalizeKeywordKey(value: string): string;
|
|
60
|
+
/** 정규화 키 → 정식 키워드 lookup (사전 빌드) */
|
|
61
|
+
declare const KEYWORD_LOOKUP: Map<string, string>;
|
|
62
|
+
export { normalizeKeywordKey, KEYWORD_LOOKUP, BASIC_TYPO_MAP };
|
|
63
|
+
/**
|
|
64
|
+
* 키워드 조회 — 정확/별칭/정규화/오타 모두 시도
|
|
65
|
+
*
|
|
66
|
+
* 우선순위:
|
|
67
|
+
* 1. 정확 매칭 (사용자 입력 그대로)
|
|
68
|
+
* 2. 별칭 매핑 (대소문자 변형 포함)
|
|
69
|
+
* 3. 정규화 매칭 (공백·소문자·특수문자 무시 + 오타 교정)
|
|
70
|
+
*/
|
|
71
|
+
export declare function getQuickStatsParam(keyword: string): QuickStatsParam | undefined;
|
|
72
|
+
/**
|
|
73
|
+
* 지역 코드 조회
|
|
74
|
+
*/
|
|
75
|
+
export declare function getRegionCode(param: QuickStatsParam, regionName: string): string;
|
|
76
|
+
//# sourceMappingURL=quickStatsParams.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quickStatsParams.d.ts","sourceRoot":"","sources":["../../src/data/quickStatsParams.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IAEpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IAEb,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAErC,gBAAgB,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC;IAEvC,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAKD,kCAAkC;AAClC,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAmB3D,CAAC;AAEF,4BAA4B;AAC5B,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAmB1D,CAAC;AAEF,wBAAwB;AACxB,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAmBnD,CAAC;AAEF,+BAA+B;AAC/B,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAmBvD,CAAC;AAEF,iCAAiC;AACjC,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAmBpD,CAAC;AAEF,gCAAgC;AAChC,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAmBpD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CA2/B9D,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA0GlD,CAAC;AAEF;;;;;;;GAOG;AACH,QAAA,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAgB1C,CAAC;AAEF;;;;GAIG;AACH,iBAAS,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOlD;AAED,oCAAoC;AACpC,QAAA,MAAM,cAAc,qBAA4B,CAAC;AAajD,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC;AAE/D;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAuB/E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAKhF"}
|