careerly-data-mcp 2.0.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/README.md +230 -0
- package/dist/bigquery/auth.d.ts +18 -0
- package/dist/bigquery/auth.d.ts.map +1 -0
- package/dist/bigquery/auth.js +46 -0
- package/dist/bigquery/auth.js.map +1 -0
- package/dist/bigquery/client.d.ts +77 -0
- package/dist/bigquery/client.d.ts.map +1 -0
- package/dist/bigquery/client.js +495 -0
- package/dist/bigquery/client.js.map +1 -0
- package/dist/bigquery/index.d.ts +7 -0
- package/dist/bigquery/index.d.ts.map +1 -0
- package/dist/bigquery/index.js +7 -0
- package/dist/bigquery/index.js.map +1 -0
- package/dist/bigquery/types.d.ts +137 -0
- package/dist/bigquery/types.d.ts.map +1 -0
- package/dist/bigquery/types.js +40 -0
- package/dist/bigquery/types.js.map +1 -0
- package/dist/cli/setup.d.ts +30 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +859 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/ga4/auth.d.ts +29 -0
- package/dist/ga4/auth.d.ts.map +1 -0
- package/dist/ga4/auth.js +73 -0
- package/dist/ga4/auth.js.map +1 -0
- package/dist/ga4/client.d.ts +51 -0
- package/dist/ga4/client.d.ts.map +1 -0
- package/dist/ga4/client.js +223 -0
- package/dist/ga4/client.js.map +1 -0
- package/dist/ga4/index.d.ts +7 -0
- package/dist/ga4/index.d.ts.map +1 -0
- package/dist/ga4/index.js +7 -0
- package/dist/ga4/index.js.map +1 -0
- package/dist/ga4/types.d.ts +115 -0
- package/dist/ga4/types.d.ts.map +1 -0
- package/dist/ga4/types.js +63 -0
- package/dist/ga4/types.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +114 -0
- package/dist/index.js.map +1 -0
- package/dist/insight/renderer.d.ts +29 -0
- package/dist/insight/renderer.d.ts.map +1 -0
- package/dist/insight/renderer.js +194 -0
- package/dist/insight/renderer.js.map +1 -0
- package/dist/mcp/server.d.ts +20 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +50 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/tools/bq-ga4-events.d.ts +10 -0
- package/dist/tools/bq-ga4-events.d.ts.map +1 -0
- package/dist/tools/bq-ga4-events.js +396 -0
- package/dist/tools/bq-ga4-events.js.map +1 -0
- package/dist/tools/bq-metadata.d.ts +10 -0
- package/dist/tools/bq-metadata.d.ts.map +1 -0
- package/dist/tools/bq-metadata.js +237 -0
- package/dist/tools/bq-metadata.js.map +1 -0
- package/dist/tools/bq-query.d.ts +10 -0
- package/dist/tools/bq-query.d.ts.map +1 -0
- package/dist/tools/bq-query.js +357 -0
- package/dist/tools/bq-query.js.map +1 -0
- package/dist/tools/metadata.d.ts +11 -0
- package/dist/tools/metadata.d.ts.map +1 -0
- package/dist/tools/metadata.js +135 -0
- package/dist/tools/metadata.js.map +1 -0
- package/dist/tools/query.d.ts +10 -0
- package/dist/tools/query.d.ts.map +1 -0
- package/dist/tools/query.js +188 -0
- package/dist/tools/query.js.map +1 -0
- package/package.json +53 -0
package/README.md
ADDED
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
# Careerly GA4 MCP Server
|
|
2
|
+
|
|
3
|
+
Claude Code에서 자연어로 GA4 데이터를 분석하는 MCP(Model Context Protocol) 서버입니다.
|
|
4
|
+
|
|
5
|
+
## 빠른 시작
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# 1. Service Account JSON 키 파일이 있는 폴더에서 실행
|
|
9
|
+
cd /path/to/your/project
|
|
10
|
+
|
|
11
|
+
# 2. 설정 실행 (키 파일 자동 탐지 + Claude Code 자동 등록!)
|
|
12
|
+
npx careerly-ga4-mcp setup
|
|
13
|
+
|
|
14
|
+
# 3. Claude Code 재시작 후 /mcp 확인!
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### 자동 설정 기능
|
|
18
|
+
|
|
19
|
+
`setup` 명령어는 다음을 자동으로 처리합니다:
|
|
20
|
+
|
|
21
|
+
1. **Service Account 키 파일 자동 탐지** - 현재 폴더에서 JSON 파일 스캔
|
|
22
|
+
2. **GA4 연결 테스트** - Property ID와 키 파일 검증
|
|
23
|
+
3. **Claude Code MCP 자동 등록** - `claude mcp add` 명령어로 자동 설정
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
Careerly GA4 MCP Server
|
|
27
|
+
─────────────────────────────────────
|
|
28
|
+
|
|
29
|
+
✔ GA4 Property ID 517059569
|
|
30
|
+
✔ 1개의 Service Account 키 파일 발견
|
|
31
|
+
✔ 사용할 키 파일 선택 my-project-key.json (my-project-id)
|
|
32
|
+
✔ 연결 성공!
|
|
33
|
+
✔ Claude Code MCP 서버 등록 완료
|
|
34
|
+
|
|
35
|
+
✓ 설정 완료!
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## 사전 준비
|
|
39
|
+
|
|
40
|
+
### 1. Google Cloud 설정
|
|
41
|
+
|
|
42
|
+
1. [Google Cloud Console](https://console.cloud.google.com/)에서 프로젝트 생성
|
|
43
|
+
2. **Google Analytics Data API** 활성화
|
|
44
|
+
3. **서비스 계정** 생성 후 JSON 키 다운로드
|
|
45
|
+
|
|
46
|
+
### 2. GA4 권한 설정
|
|
47
|
+
|
|
48
|
+
1. [GA4 Admin](https://analytics.google.com/) > 속성 설정 > 속성 액세스 관리
|
|
49
|
+
2. 서비스 계정 이메일 추가 (뷰어/읽기 전용 권한)
|
|
50
|
+
|
|
51
|
+
> **Tip**: Service Account 이메일은 JSON 키 파일의 `client_email` 필드에서 확인할 수 있습니다.
|
|
52
|
+
|
|
53
|
+
## 기능
|
|
54
|
+
|
|
55
|
+
| Tool | 설명 |
|
|
56
|
+
|------|------|
|
|
57
|
+
| `ga4_query` | GA4 데이터 조회 + 인사이트 생성 |
|
|
58
|
+
| `ga4_metadata` | 지표/차원 목록 확인 |
|
|
59
|
+
| `ga4_status` | 연결 상태 확인 |
|
|
60
|
+
|
|
61
|
+
## 사용 예시
|
|
62
|
+
|
|
63
|
+
Claude Code에서 자연어로 질문:
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
"지난 7일 세션수 보여줘"
|
|
67
|
+
"채널별 전환수 알려줘"
|
|
68
|
+
"어제 대비 오늘 트래픽 어때?"
|
|
69
|
+
"랜딩 페이지별 이탈률 분석해줘"
|
|
70
|
+
"캠페인별 성과 비교해줘"
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## CLI 명령어
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
# 인터랙티브 메뉴
|
|
77
|
+
npx careerly-ga4-mcp
|
|
78
|
+
|
|
79
|
+
# 초기 설정 (자동 키 파일 탐지 + Claude Code 자동 등록)
|
|
80
|
+
npx careerly-ga4-mcp setup
|
|
81
|
+
|
|
82
|
+
# 서버 정보 확인
|
|
83
|
+
npx careerly-ga4-mcp info
|
|
84
|
+
|
|
85
|
+
# GA4 연결 테스트
|
|
86
|
+
npx careerly-ga4-mcp test-connection
|
|
87
|
+
|
|
88
|
+
# MCP 서버 시작 (수동)
|
|
89
|
+
npx careerly-ga4-mcp serve
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## 인터랙티브 메뉴
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
npx careerly-ga4-mcp
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
Careerly GA4 MCP Server
|
|
100
|
+
─────────────────────────────────────
|
|
101
|
+
|
|
102
|
+
Status: ✓ connected
|
|
103
|
+
Property ID: 123456789
|
|
104
|
+
Credentials: ~/project/service-account.json
|
|
105
|
+
Tools: 3 tools
|
|
106
|
+
|
|
107
|
+
? 선택하세요
|
|
108
|
+
❯ View tools
|
|
109
|
+
Reconnect
|
|
110
|
+
Test connection
|
|
111
|
+
Disable
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## 수동 설정
|
|
115
|
+
|
|
116
|
+
### Claude CLI로 추가
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
claude mcp add careerly-ga4 \
|
|
120
|
+
-s user \
|
|
121
|
+
-e GA4_PROPERTY_ID=123456789 \
|
|
122
|
+
-e GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json \
|
|
123
|
+
-- npx -y careerly-ga4-mcp serve
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### 설정 파일 직접 수정
|
|
127
|
+
|
|
128
|
+
`~/.claude/settings.local.json`에 직접 추가:
|
|
129
|
+
|
|
130
|
+
```json
|
|
131
|
+
{
|
|
132
|
+
"mcpServers": {
|
|
133
|
+
"careerly-ga4": {
|
|
134
|
+
"command": "npx",
|
|
135
|
+
"args": ["-y", "careerly-ga4-mcp", "serve"],
|
|
136
|
+
"env": {
|
|
137
|
+
"GA4_PROPERTY_ID": "123456789",
|
|
138
|
+
"GOOGLE_APPLICATION_CREDENTIALS": "/path/to/service-account.json"
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## 문제 해결
|
|
146
|
+
|
|
147
|
+
### MCP 서버가 `/mcp`에 안 보여요
|
|
148
|
+
|
|
149
|
+
1. Claude Code를 완전히 종료 후 재시작
|
|
150
|
+
2. 설정 확인: `claude mcp list`
|
|
151
|
+
3. 재설정: `npx careerly-ga4-mcp setup`
|
|
152
|
+
|
|
153
|
+
### PERMISSION_DENIED 에러
|
|
154
|
+
|
|
155
|
+
GA4에 Service Account 권한이 없습니다:
|
|
156
|
+
|
|
157
|
+
1. GA4 Admin > 속성 설정 > 속성 액세스 관리
|
|
158
|
+
2. Service Account 이메일 추가 (JSON의 `client_email`)
|
|
159
|
+
3. 역할: 뷰어 (읽기 전용)
|
|
160
|
+
|
|
161
|
+
### 설정 삭제
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
# Claude CLI로 삭제
|
|
165
|
+
claude mcp remove careerly-ga4 -s user
|
|
166
|
+
|
|
167
|
+
# 또는 인터랙티브 메뉴에서
|
|
168
|
+
npx careerly-ga4-mcp
|
|
169
|
+
# → Disable 선택
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## Tool 스키마
|
|
173
|
+
|
|
174
|
+
### ga4_query
|
|
175
|
+
|
|
176
|
+
```typescript
|
|
177
|
+
{
|
|
178
|
+
metrics: string[] // 필수: ["sessions", "totalUsers", "conversions"]
|
|
179
|
+
dimensions?: string[] // 선택: ["date", "sessionDefaultChannelGroup"]
|
|
180
|
+
startDate?: string // 기본: "7daysAgo"
|
|
181
|
+
endDate?: string // 기본: "today"
|
|
182
|
+
datePreset?: string // "last_7_days", "last_30_days" 등
|
|
183
|
+
limit?: number // 기본: 10
|
|
184
|
+
}
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### 지표 (Metrics)
|
|
188
|
+
|
|
189
|
+
| 지표 | 설명 |
|
|
190
|
+
|------|------|
|
|
191
|
+
| `sessions` | 세션 수 |
|
|
192
|
+
| `totalUsers` | 전체 사용자 |
|
|
193
|
+
| `newUsers` | 신규 사용자 |
|
|
194
|
+
| `activeUsers` | 활성 사용자 |
|
|
195
|
+
| `bounceRate` | 이탈률 |
|
|
196
|
+
| `conversions` | 전환 수 |
|
|
197
|
+
| `screenPageViews` | 페이지뷰 |
|
|
198
|
+
| `engagementRate` | 참여율 |
|
|
199
|
+
|
|
200
|
+
### 차원 (Dimensions)
|
|
201
|
+
|
|
202
|
+
| 차원 | 설명 |
|
|
203
|
+
|------|------|
|
|
204
|
+
| `date` | 날짜 |
|
|
205
|
+
| `sessionDefaultChannelGroup` | 채널 |
|
|
206
|
+
| `sessionSourceMedium` | 소스/매체 |
|
|
207
|
+
| `sessionCampaignName` | 캠페인 |
|
|
208
|
+
| `landingPage` | 랜딩 페이지 |
|
|
209
|
+
| `deviceCategory` | 디바이스 |
|
|
210
|
+
| `country` | 국가 |
|
|
211
|
+
|
|
212
|
+
## 개발
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
# 의존성 설치
|
|
216
|
+
npm install
|
|
217
|
+
|
|
218
|
+
# 빌드
|
|
219
|
+
npm run build
|
|
220
|
+
|
|
221
|
+
# 개발 모드
|
|
222
|
+
npm run dev
|
|
223
|
+
|
|
224
|
+
# 타입 체크
|
|
225
|
+
npm run typecheck
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
## 라이선스
|
|
229
|
+
|
|
230
|
+
MIT
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BigQuery 인증 모듈
|
|
3
|
+
* GA4 auth.ts와 유사한 패턴
|
|
4
|
+
*/
|
|
5
|
+
import { BigQueryConfig } from "./types.js";
|
|
6
|
+
/**
|
|
7
|
+
* 환경 변수에서 BigQuery 설정 로드
|
|
8
|
+
*/
|
|
9
|
+
export declare function loadBigQueryConfigFromEnv(): BigQueryConfig;
|
|
10
|
+
/**
|
|
11
|
+
* 설정 검증 및 초기화
|
|
12
|
+
*/
|
|
13
|
+
export declare function initializeBigQueryAuth(config?: Partial<BigQueryConfig>): BigQueryConfig;
|
|
14
|
+
/**
|
|
15
|
+
* Project ID 검증
|
|
16
|
+
*/
|
|
17
|
+
export declare function validateProjectId(projectId: string): boolean;
|
|
18
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/bigquery/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAiB,MAAM,YAAY,CAAC;AAE3D;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,cAAc,CAe1D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAC/B,cAAc,CAqBhB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAI5D"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BigQuery 인증 모듈
|
|
3
|
+
* GA4 auth.ts와 유사한 패턴
|
|
4
|
+
*/
|
|
5
|
+
import { BigQueryError } from "./types.js";
|
|
6
|
+
/**
|
|
7
|
+
* 환경 변수에서 BigQuery 설정 로드
|
|
8
|
+
*/
|
|
9
|
+
export function loadBigQueryConfigFromEnv() {
|
|
10
|
+
const projectId = process.env.BQ_PROJECT_ID || process.env.GOOGLE_CLOUD_PROJECT;
|
|
11
|
+
const credentialsPath = process.env.GOOGLE_APPLICATION_CREDENTIALS;
|
|
12
|
+
const location = process.env.BQ_LOCATION || "US";
|
|
13
|
+
if (!projectId) {
|
|
14
|
+
throw new BigQueryError("BQ_PROJECT_ID 또는 GOOGLE_CLOUD_PROJECT 환경 변수가 설정되지 않았습니다.\n" +
|
|
15
|
+
"설정 방법: export BQ_PROJECT_ID=your-project-id", "CONFIG_ERROR");
|
|
16
|
+
}
|
|
17
|
+
return { projectId, credentialsPath, location };
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 설정 검증 및 초기화
|
|
21
|
+
*/
|
|
22
|
+
export function initializeBigQueryAuth(config) {
|
|
23
|
+
const envConfig = loadBigQueryConfigFromEnv();
|
|
24
|
+
const finalConfig = {
|
|
25
|
+
projectId: config?.projectId || envConfig.projectId,
|
|
26
|
+
credentialsPath: config?.credentialsPath || envConfig.credentialsPath,
|
|
27
|
+
location: config?.location || envConfig.location,
|
|
28
|
+
};
|
|
29
|
+
// 자격증명 파일 경로가 설정되어 있으면 로그 출력
|
|
30
|
+
if (finalConfig.credentialsPath) {
|
|
31
|
+
console.error(`[BigQuery] Service Account: ${finalConfig.credentialsPath}`);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
console.error("[BigQuery] Application Default Credentials(ADC) 사용 중");
|
|
35
|
+
}
|
|
36
|
+
return finalConfig;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Project ID 검증
|
|
40
|
+
*/
|
|
41
|
+
export function validateProjectId(projectId) {
|
|
42
|
+
// GCP 프로젝트 ID 규칙: 6-30자, 소문자/숫자/하이픈
|
|
43
|
+
const projectIdRegex = /^[a-z][a-z0-9-]{4,28}[a-z0-9]$/;
|
|
44
|
+
return projectIdRegex.test(projectId);
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/bigquery/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAkB,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3D;;GAEG;AACH,MAAM,UAAU,yBAAyB;IACvC,MAAM,SAAS,GACb,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAChE,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC;IACnE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC;IAEjD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,aAAa,CACrB,4DAA4D;YAC1D,6CAA6C,EAC/C,cAAc,CACf,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAgC;IAEhC,MAAM,SAAS,GAAG,yBAAyB,EAAE,CAAC;IAE9C,MAAM,WAAW,GAAmB;QAClC,SAAS,EAAE,MAAM,EAAE,SAAS,IAAI,SAAS,CAAC,SAAS;QACnD,eAAe,EAAE,MAAM,EAAE,eAAe,IAAI,SAAS,CAAC,eAAe;QACrE,QAAQ,EAAE,MAAM,EAAE,QAAQ,IAAI,SAAS,CAAC,QAAQ;KACjD,CAAC;IAEF,6BAA6B;IAC7B,IAAI,WAAW,CAAC,eAAe,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CACX,+BAA+B,WAAW,CAAC,eAAe,EAAE,CAC7D,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CACX,sDAAsD,CACvD,CAAC;IACJ,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,oCAAoC;IACpC,MAAM,cAAc,GAAG,gCAAgC,CAAC;IACxD,OAAO,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BigQuery 클라이언트
|
|
3
|
+
* @google-cloud/bigquery 래퍼
|
|
4
|
+
*/
|
|
5
|
+
import type { BigQueryConfig, BigQueryRequest, BigQueryResponse, GA4EventsRequest, DatasetInfo, TableInfo } from "./types.js";
|
|
6
|
+
export declare class BigQueryClient {
|
|
7
|
+
private client;
|
|
8
|
+
private projectId;
|
|
9
|
+
private location;
|
|
10
|
+
constructor(config?: Partial<BigQueryConfig>);
|
|
11
|
+
/**
|
|
12
|
+
* 연결 테스트
|
|
13
|
+
*/
|
|
14
|
+
testConnection(): Promise<{
|
|
15
|
+
success: boolean;
|
|
16
|
+
message: string;
|
|
17
|
+
}>;
|
|
18
|
+
/**
|
|
19
|
+
* 파라미터 기반 쿼리 실행
|
|
20
|
+
*/
|
|
21
|
+
runQuery(request: BigQueryRequest): Promise<BigQueryResponse>;
|
|
22
|
+
/**
|
|
23
|
+
* GA4 Export 이벤트 쿼리 실행
|
|
24
|
+
*/
|
|
25
|
+
runGA4EventsQuery(request: GA4EventsRequest): Promise<BigQueryResponse>;
|
|
26
|
+
/**
|
|
27
|
+
* 데이터셋 목록 조회
|
|
28
|
+
*/
|
|
29
|
+
listDatasets(): Promise<DatasetInfo[]>;
|
|
30
|
+
/**
|
|
31
|
+
* 테이블 목록 조회
|
|
32
|
+
*/
|
|
33
|
+
listTables(datasetId: string): Promise<TableInfo[]>;
|
|
34
|
+
/**
|
|
35
|
+
* 테이블 스키마 조회
|
|
36
|
+
*/
|
|
37
|
+
getTableSchema(datasetId: string, tableId: string): Promise<TableInfo>;
|
|
38
|
+
/**
|
|
39
|
+
* SELECT 쿼리 빌드 (SQL Injection 방지)
|
|
40
|
+
*/
|
|
41
|
+
private buildSelectQuery;
|
|
42
|
+
/**
|
|
43
|
+
* GA4 Export 쿼리 빌드
|
|
44
|
+
*/
|
|
45
|
+
private buildGA4EventsQuery;
|
|
46
|
+
/**
|
|
47
|
+
* WHERE 조건 빌드
|
|
48
|
+
*/
|
|
49
|
+
private buildWhereCondition;
|
|
50
|
+
/**
|
|
51
|
+
* 집계 함수 빌드
|
|
52
|
+
*/
|
|
53
|
+
private buildAggregation;
|
|
54
|
+
/**
|
|
55
|
+
* 식별자 이스케이프 (SQL Injection 방지)
|
|
56
|
+
*/
|
|
57
|
+
private escapeIdentifier;
|
|
58
|
+
/**
|
|
59
|
+
* 스키마 변환
|
|
60
|
+
*/
|
|
61
|
+
private transformSchema;
|
|
62
|
+
/**
|
|
63
|
+
* 에러 처리
|
|
64
|
+
*/
|
|
65
|
+
private handleError;
|
|
66
|
+
/**
|
|
67
|
+
* Project ID 반환
|
|
68
|
+
*/
|
|
69
|
+
getProjectId(): string;
|
|
70
|
+
/**
|
|
71
|
+
* Location 반환
|
|
72
|
+
*/
|
|
73
|
+
getLocation(): string;
|
|
74
|
+
}
|
|
75
|
+
export declare function getBigQueryClient(config?: Partial<BigQueryConfig>): BigQueryClient;
|
|
76
|
+
export declare function resetBigQueryClient(): void;
|
|
77
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/bigquery/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,SAAS,EAIV,MAAM,YAAY,CAAC;AAIpB,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAS;gBAEb,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC;IAW5C;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAoBtE;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA+BnE;;OAEG;IACG,iBAAiB,CACrB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,gBAAgB,CAAC;IA+B5B;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAqB5C;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAgCzD;;OAEG;IACG,cAAc,CAClB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,SAAS,CAAC;IAgCrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA4ExB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiH3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAmE3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAevB;;OAEG;IACH,OAAO,CAAC,WAAW;IAuDnB;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,WAAW,IAAI,MAAM;CAGtB;AAKD,wBAAgB,iBAAiB,CAC/B,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAC/B,cAAc,CAKhB;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C"}
|