import type { OAuth2Client } from 'google-auth-library'; /** Admin API(analyticsadmin — property/data stream 생성·조회)가 요구하는 스코프. */ export declare const GA4_SCOPE = "https://www.googleapis.com/auth/analytics.edit"; /** * Data API(analyticsdata — runReport)가 요구하는 스코프. * * ⚠️ analytics.edit 은 **Admin API 전용**이라 Data API 가 받아주지 않는다. 둘을 같은 * 스코프로 묶으면 pre-flight 는 통과시켜 놓고 구글이 403 을 던져서, "API 가 꺼졌나"로 * 오진하게 된다 — property 목록은 멀쩡히 보이는데 리포트만 막히는 형태라 더 헷갈린다. * (2026-07 실사고: 맑음 D1 지표를 뽑으려다 Analytics API 활성화 문제로 오인.) */ export declare const GA4_DATA_SCOPE = "https://www.googleapis.com/auth/analytics.readonly"; export type Ga4Auth = OAuth2Client; export type DataStreamPlatform = 'web' | 'android' | 'ios'; /** '123' | 'accounts/123' → 'accounts/123' */ export declare function normalizeAccountName(accountId: string): string; /** '123' | 'properties/123' → 'properties/123' */ export declare function normalizePropertyName(propertyId: string): string; /** 'my-project' | 'projects/my-project' → 'projects/my-project' */ export declare function normalizeCloudProjectName(projectId: string): string; /** * dataStreams.create 응답에서 클라이언트가 실제로 필요로 하는 식별자를 평탄화한다. * - web stream → measurementId (G-XXXX, gtag/web 연동용) * - app stream → firebaseAppId (Firebase 앱과 자동 링크된 경우) */ export declare function flattenDataStream(d: { name?: string | null; type?: string | null; displayName?: string | null; webStreamData?: { measurementId?: string | null; defaultUri?: string | null; } | null; androidAppStreamData?: { firebaseAppId?: string | null; packageName?: string | null; } | null; iosAppStreamData?: { firebaseAppId?: string | null; bundleId?: string | null; } | null; }): { name: string | null; type: string | null; displayName: string | null; measurementId: string | null; firebaseAppId: string | null; }; /** data stream 생성 요청 본문 조립 (순수 함수 — 테스트 대상). */ export declare function buildDataStreamBody(opts: { platform: DataStreamPlatform; displayName: string; defaultUri?: string; packageName?: string; bundleId?: string; }): { type: string; displayName: string; webStreamData: { defaultUri: string | undefined; }; androidAppStreamData?: undefined; iosAppStreamData?: undefined; } | { type: string; displayName: string; androidAppStreamData: { packageName: string | undefined; }; webStreamData?: undefined; iosAppStreamData?: undefined; } | { type: string; displayName: string; iosAppStreamData: { bundleId: string | undefined; }; webStreamData?: undefined; androidAppStreamData?: undefined; }; export interface BigQueryLinkOptions { projectId: string; datasetLocation: string; dailyExportEnabled?: boolean; streamingExportEnabled?: boolean; freshDailyExportEnabled?: boolean; includeAdvertisingId?: boolean; } /** BigQueryLink 생성 요청 본문 조립 (순수 함수 — 테스트 대상). */ export declare function buildBigQueryLinkBody(opts: BigQueryLinkOptions): { project: string; datasetLocation: string; dailyExportEnabled: boolean; streamingExportEnabled: boolean; freshDailyExportEnabled: boolean; includeAdvertisingId: boolean; }; export declare function flattenBigQueryLink(link: { name?: string | null; project?: string | null; datasetLocation?: string | null; createTime?: string | null; dailyExportEnabled?: boolean | null; streamingExportEnabled?: boolean | null; freshDailyExportEnabled?: boolean | null; includeAdvertisingId?: boolean | null; }): { name: string | null; project: string | null; datasetLocation: string | null; createTime: string | null; dailyExportEnabled: boolean; streamingExportEnabled: boolean; freshDailyExportEnabled: boolean; includeAdvertisingId: boolean; }; /** 접근 가능한 GA 계정 + 각 계정의 property 요약. accountId/propertyId 를 찾는 시작점. */ export declare function listAccountSummaries(auth: Ga4Auth): Promise; /** 계정 하위 GA4 property 목록. accountId: '123' 또는 'accounts/123'. */ export declare function listProperties(auth: Ga4Auth, accountId: string): Promise; export declare function createProperty(auth: Ga4Auth, opts: { accountId: string; displayName: string; timeZone?: string; currencyCode?: string; }): Promise; export declare function createDataStream(auth: Ga4Auth, propertyId: string, opts: { platform: DataStreamPlatform; displayName: string; defaultUri?: string; packageName?: string; bundleId?: string; }): Promise<{ raw: import("googleapis/build/src/apis/analyticsadmin/v1beta.js").analyticsadmin_v1beta.Schema$GoogleAnalyticsAdminV1betaDataStream; name: string | null; type: string | null; displayName: string | null; measurementId: string | null; firebaseAppId: string | null; }>; export declare function listDataStreams(auth: Ga4Auth, propertyId: string): Promise<{ name: string | null; type: string | null; displayName: string | null; measurementId: string | null; firebaseAppId: string | null; }[]>; /** GA4 property 에 연결된 BigQuery export 링크 목록. */ export declare function listBigQueryLinks(auth: Ga4Auth, propertyId: string): Promise<{ name: string | null; project: string | null; datasetLocation: string | null; createTime: string | null; dailyExportEnabled: boolean; streamingExportEnabled: boolean; freshDailyExportEnabled: boolean; includeAdvertisingId: boolean; }[]>; /** * 생성 전 계획. GA4 property 는 BigQuery 링크가 이미 있으면 중복 생성을 시도하지 않는다. * 기존 링크가 있으면 대상 프로젝트가 같아도/달라도 원격 상태를 그대로 보여준다. */ export declare function planBigQueryLink(auth: Ga4Auth, propertyId: string, opts: BigQueryLinkOptions): Promise<{ ready: boolean; action: string; property: string; requestBody: { project: string; datasetLocation: string; dailyExportEnabled: boolean; streamingExportEnabled: boolean; freshDailyExportEnabled: boolean; includeAdvertisingId: boolean; }; existingLinks: { name: string | null; project: string | null; datasetLocation: string | null; createTime: string | null; dailyExportEnabled: boolean; streamingExportEnabled: boolean; freshDailyExportEnabled: boolean; includeAdvertisingId: boolean; }[]; }>; /** 계획을 다시 검사한 뒤 BigQuery export 링크 생성. */ export declare function createBigQueryLink(auth: Ga4Auth, propertyId: string, opts: BigQueryLinkOptions): Promise<{ ready: boolean; action: string; property: string; requestBody: { project: string; datasetLocation: string; dailyExportEnabled: boolean; streamingExportEnabled: boolean; freshDailyExportEnabled: boolean; includeAdvertisingId: boolean; }; existingLinks: { name: string | null; project: string | null; datasetLocation: string | null; createTime: string | null; dailyExportEnabled: boolean; streamingExportEnabled: boolean; freshDailyExportEnabled: boolean; includeAdvertisingId: boolean; }[]; created: boolean; link?: undefined; } | { created: boolean; property: string; link: { name: string | null; project: string | null; datasetLocation: string | null; createTime: string | null; dailyExportEnabled: boolean; streamingExportEnabled: boolean; freshDailyExportEnabled: boolean; includeAdvertisingId: boolean; }; }>; export interface RunReportParams { startDate: string; endDate: string; dimensions?: string[]; metrics?: string[]; } export declare function runReport(auth: Ga4Auth, propertyId: string, params: RunReportParams): Promise;