@cesteral/tiktok-mcp 1.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/LICENSE.md +201 -0
- package/README.md +347 -0
- package/dist/auth/index.d.ts +3 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +3 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/tiktok-auth-adapter.d.ts +40 -0
- package/dist/auth/tiktok-auth-adapter.d.ts.map +1 -0
- package/dist/auth/tiktok-auth-adapter.js +126 -0
- package/dist/auth/tiktok-auth-adapter.js.map +1 -0
- package/dist/auth/tiktok-auth-strategy.d.ts +14 -0
- package/dist/auth/tiktok-auth-strategy.d.ts.map +1 -0
- package/dist/auth/tiktok-auth-strategy.js +54 -0
- package/dist/auth/tiktok-auth-strategy.js.map +1 -0
- package/dist/config/index.d.ts +120 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +55 -0
- package/dist/config/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.js +127 -0
- package/dist/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.js +104 -0
- package/dist/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/creative-upload-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/creative-upload-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/creative-upload-workflow.prompt.js +121 -0
- package/dist/mcp-server/prompts/definitions/creative-upload-workflow.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.js +299 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.js +170 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/entity-duplication-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/entity-duplication-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/entity-duplication-workflow.prompt.js +198 -0
- package/dist/mcp-server/prompts/definitions/entity-duplication-workflow.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/entity-update-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/entity-update-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/entity-update-workflow.prompt.js +189 -0
- package/dist/mcp-server/prompts/definitions/entity-update-workflow.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/reporting-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/reporting-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/reporting-workflow.prompt.js +126 -0
- package/dist/mcp-server/prompts/definitions/reporting-workflow.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/targeting-discovery-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/targeting-discovery-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/targeting-discovery-workflow.prompt.js +200 -0
- package/dist/mcp-server/prompts/definitions/targeting-discovery-workflow.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/tool-schema-exploration.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/tool-schema-exploration.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/tool-schema-exploration.prompt.js +93 -0
- package/dist/mcp-server/prompts/definitions/tool-schema-exploration.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/troubleshoot-entity.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/troubleshoot-entity.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/troubleshoot-entity.prompt.js +111 -0
- package/dist/mcp-server/prompts/definitions/troubleshoot-entity.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/index.d.ts +9 -0
- package/dist/mcp-server/prompts/index.d.ts.map +1 -0
- package/dist/mcp-server/prompts/index.js +97 -0
- package/dist/mcp-server/prompts/index.js.map +1 -0
- package/dist/mcp-server/resources/definitions/entity-examples.resource.d.ts +4 -0
- package/dist/mcp-server/resources/definitions/entity-examples.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/entity-examples.resource.js +182 -0
- package/dist/mcp-server/resources/definitions/entity-examples.resource.js.map +1 -0
- package/dist/mcp-server/resources/definitions/entity-hierarchy.resource.d.ts +3 -0
- package/dist/mcp-server/resources/definitions/entity-hierarchy.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/entity-hierarchy.resource.js +147 -0
- package/dist/mcp-server/resources/definitions/entity-hierarchy.resource.js.map +1 -0
- package/dist/mcp-server/resources/definitions/entity-schemas.resource.d.ts +4 -0
- package/dist/mcp-server/resources/definitions/entity-schemas.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/entity-schemas.resource.js +135 -0
- package/dist/mcp-server/resources/definitions/entity-schemas.resource.js.map +1 -0
- package/dist/mcp-server/resources/definitions/index.d.ts +8 -0
- package/dist/mcp-server/resources/definitions/index.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/index.js +79 -0
- package/dist/mcp-server/resources/definitions/index.js.map +1 -0
- package/dist/mcp-server/resources/definitions/reporting-reference.resource.d.ts +3 -0
- package/dist/mcp-server/resources/definitions/reporting-reference.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/reporting-reference.resource.js +165 -0
- package/dist/mcp-server/resources/definitions/reporting-reference.resource.js.map +1 -0
- package/dist/mcp-server/resources/definitions/targeting-reference.resource.d.ts +3 -0
- package/dist/mcp-server/resources/definitions/targeting-reference.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/targeting-reference.resource.js +134 -0
- package/dist/mcp-server/resources/definitions/targeting-reference.resource.js.map +1 -0
- package/dist/mcp-server/resources/index.d.ts +3 -0
- package/dist/mcp-server/resources/index.d.ts.map +1 -0
- package/dist/mcp-server/resources/index.js +2 -0
- package/dist/mcp-server/resources/index.js.map +1 -0
- package/dist/mcp-server/resources/types.d.ts +8 -0
- package/dist/mcp-server/resources/types.d.ts.map +1 -0
- package/dist/mcp-server/resources/types.js +2 -0
- package/dist/mcp-server/resources/types.js.map +1 -0
- package/dist/mcp-server/server.d.ts +5 -0
- package/dist/mcp-server/server.d.ts.map +1 -0
- package/dist/mcp-server/server.js +134 -0
- package/dist/mcp-server/server.js.map +1 -0
- package/dist/mcp-server/tools/definitions/adjust-bids.tool.d.ts +209 -0
- package/dist/mcp-server/tools/definitions/adjust-bids.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/adjust-bids.tool.js +141 -0
- package/dist/mcp-server/tools/definitions/adjust-bids.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/bulk-create-entities.tool.d.ts +151 -0
- package/dist/mcp-server/tools/definitions/bulk-create-entities.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/bulk-create-entities.tool.js +112 -0
- package/dist/mcp-server/tools/definitions/bulk-create-entities.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/bulk-update-entities.tool.d.ts +193 -0
- package/dist/mcp-server/tools/definitions/bulk-update-entities.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/bulk-update-entities.tool.js +130 -0
- package/dist/mcp-server/tools/definitions/bulk-update-entities.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/bulk-update-status.tool.d.ts +153 -0
- package/dist/mcp-server/tools/definitions/bulk-update-status.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/bulk-update-status.tool.js +137 -0
- package/dist/mcp-server/tools/definitions/bulk-update-status.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/check-report-status.tool.d.ts +119 -0
- package/dist/mcp-server/tools/definitions/check-report-status.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/check-report-status.tool.js +89 -0
- package/dist/mcp-server/tools/definitions/check-report-status.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/create-entity.tool.d.ts +115 -0
- package/dist/mcp-server/tools/definitions/create-entity.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/create-entity.tool.js +103 -0
- package/dist/mcp-server/tools/definitions/create-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/delete-entity.tool.d.ts +100 -0
- package/dist/mcp-server/tools/definitions/delete-entity.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/delete-entity.tool.js +110 -0
- package/dist/mcp-server/tools/definitions/delete-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/download-report.tool.d.ts +297 -0
- package/dist/mcp-server/tools/definitions/download-report.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/download-report.tool.js +105 -0
- package/dist/mcp-server/tools/definitions/download-report.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/duplicate-entity.tool.d.ts +105 -0
- package/dist/mcp-server/tools/definitions/duplicate-entity.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/duplicate-entity.tool.js +85 -0
- package/dist/mcp-server/tools/definitions/duplicate-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-ad-preview.tool.d.ts +89 -0
- package/dist/mcp-server/tools/definitions/get-ad-preview.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-ad-preview.tool.js +74 -0
- package/dist/mcp-server/tools/definitions/get-ad-preview.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-ad-previews.tool.d.ts +89 -0
- package/dist/mcp-server/tools/definitions/get-ad-previews.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-ad-previews.tool.js +83 -0
- package/dist/mcp-server/tools/definitions/get-ad-previews.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-audience-estimate.tool.d.ts +85 -0
- package/dist/mcp-server/tools/definitions/get-audience-estimate.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-audience-estimate.tool.js +88 -0
- package/dist/mcp-server/tools/definitions/get-audience-estimate.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-entity.tool.d.ts +76 -0
- package/dist/mcp-server/tools/definitions/get-entity.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-entity.tool.js +71 -0
- package/dist/mcp-server/tools/definitions/get-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-report-breakdowns.tool.d.ts +295 -0
- package/dist/mcp-server/tools/definitions/get-report-breakdowns.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-report-breakdowns.tool.js +174 -0
- package/dist/mcp-server/tools/definitions/get-report-breakdowns.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-report.tool.d.ts +303 -0
- package/dist/mcp-server/tools/definitions/get-report.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-report.tool.js +178 -0
- package/dist/mcp-server/tools/definitions/get-report.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-targeting-options.tool.d.ts +127 -0
- package/dist/mcp-server/tools/definitions/get-targeting-options.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-targeting-options.tool.js +120 -0
- package/dist/mcp-server/tools/definitions/get-targeting-options.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/index.d.ts +26 -0
- package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/index.js +78 -0
- package/dist/mcp-server/tools/definitions/index.js.map +1 -0
- package/dist/mcp-server/tools/definitions/list-advertisers.tool.d.ts +54 -0
- package/dist/mcp-server/tools/definitions/list-advertisers.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/list-advertisers.tool.js +58 -0
- package/dist/mcp-server/tools/definitions/list-advertisers.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/list-entities.tool.d.ts +167 -0
- package/dist/mcp-server/tools/definitions/list-entities.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/list-entities.tool.js +114 -0
- package/dist/mcp-server/tools/definitions/list-entities.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/search-targeting.tool.d.ts +131 -0
- package/dist/mcp-server/tools/definitions/search-targeting.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/search-targeting.tool.js +123 -0
- package/dist/mcp-server/tools/definitions/search-targeting.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/submit-report.tool.d.ts +153 -0
- package/dist/mcp-server/tools/definitions/submit-report.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/submit-report.tool.js +117 -0
- package/dist/mcp-server/tools/definitions/submit-report.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/update-entity.tool.d.ts +111 -0
- package/dist/mcp-server/tools/definitions/update-entity.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/update-entity.tool.js +89 -0
- package/dist/mcp-server/tools/definitions/update-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/upload-image.tool.d.ts +87 -0
- package/dist/mcp-server/tools/definitions/upload-image.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/upload-image.tool.js +82 -0
- package/dist/mcp-server/tools/definitions/upload-image.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/upload-video.tool.d.ts +88 -0
- package/dist/mcp-server/tools/definitions/upload-video.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/upload-video.tool.js +113 -0
- package/dist/mcp-server/tools/definitions/upload-video.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/validate-entity.tool.d.ts +197 -0
- package/dist/mcp-server/tools/definitions/validate-entity.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/validate-entity.tool.js +237 -0
- package/dist/mcp-server/tools/definitions/validate-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/index.d.ts +2 -0
- package/dist/mcp-server/tools/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/index.js +2 -0
- package/dist/mcp-server/tools/index.js.map +1 -0
- package/dist/mcp-server/tools/utils/entity-mapping.d.ts +22 -0
- package/dist/mcp-server/tools/utils/entity-mapping.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/entity-mapping.js +121 -0
- package/dist/mcp-server/tools/utils/entity-mapping.js.map +1 -0
- package/dist/mcp-server/tools/utils/resolve-session.d.ts +4 -0
- package/dist/mcp-server/tools/utils/resolve-session.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/resolve-session.js +6 -0
- package/dist/mcp-server/tools/utils/resolve-session.js.map +1 -0
- package/dist/mcp-server/transports/streamable-http-transport.d.ts +59 -0
- package/dist/mcp-server/transports/streamable-http-transport.d.ts.map +1 -0
- package/dist/mcp-server/transports/streamable-http-transport.js +107 -0
- package/dist/mcp-server/transports/streamable-http-transport.js.map +1 -0
- package/dist/services/session-services.d.ts +21 -0
- package/dist/services/session-services.d.ts.map +1 -0
- package/dist/services/session-services.js +25 -0
- package/dist/services/session-services.js.map +1 -0
- package/dist/services/tiktok/tiktok-http-client.d.ts +19 -0
- package/dist/services/tiktok/tiktok-http-client.d.ts.map +1 -0
- package/dist/services/tiktok/tiktok-http-client.js +184 -0
- package/dist/services/tiktok/tiktok-http-client.js.map +1 -0
- package/dist/services/tiktok/tiktok-reporting-service.d.ts +62 -0
- package/dist/services/tiktok/tiktok-reporting-service.d.ts.map +1 -0
- package/dist/services/tiktok/tiktok-reporting-service.js +129 -0
- package/dist/services/tiktok/tiktok-reporting-service.js.map +1 -0
- package/dist/services/tiktok/tiktok-service.d.ts +86 -0
- package/dist/services/tiktok/tiktok-service.d.ts.map +1 -0
- package/dist/services/tiktok/tiktok-service.js +217 -0
- package/dist/services/tiktok/tiktok-service.js.map +1 -0
- package/dist/services/tiktok/types.d.ts +161 -0
- package/dist/services/tiktok/types.d.ts.map +1 -0
- package/dist/services/tiktok/types.js +31 -0
- package/dist/services/tiktok/types.js.map +1 -0
- package/dist/types-global/mcp.d.ts +2 -0
- package/dist/types-global/mcp.d.ts.map +1 -0
- package/dist/types-global/mcp.js +2 -0
- package/dist/types-global/mcp.js.map +1 -0
- package/dist/utils/errors/index.d.ts +2 -0
- package/dist/utils/errors/index.d.ts.map +1 -0
- package/dist/utils/errors/index.js +2 -0
- package/dist/utils/errors/index.js.map +1 -0
- package/dist/utils/platform.d.ts +3 -0
- package/dist/utils/platform.d.ts.map +1 -0
- package/dist/utils/platform.js +5 -0
- package/dist/utils/platform.js.map +1 -0
- package/dist/utils/security/rate-limiter.d.ts +3 -0
- package/dist/utils/security/rate-limiter.d.ts.map +1 -0
- package/dist/utils/security/rate-limiter.js +5 -0
- package/dist/utils/security/rate-limiter.js.map +1 -0
- package/dist/utils/telemetry/index.d.ts +2 -0
- package/dist/utils/telemetry/index.d.ts.map +1 -0
- package/dist/utils/telemetry/index.js +2 -0
- package/dist/utils/telemetry/index.js.map +1 -0
- package/dist/utils/telemetry/tracing.d.ts +3 -0
- package/dist/utils/telemetry/tracing.d.ts.map +1 -0
- package/dist/utils/telemetry/tracing.js +4 -0
- package/dist/utils/telemetry/tracing.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { fetchWithTimeout, McpError, JsonRpcErrorCode, DEFAULT_REPORT_MAX_BACKOFF_MS, DEFAULT_REPORT_POLL_INTERVAL_MS, DEFAULT_REPORT_MAX_POLL_ATTEMPTS, DEFAULT_REPORT_DOWNLOAD_TIMEOUT_MS, DEFAULT_REPORT_MAX_SIZE_BYTES, DEFAULT_REPORT_MAX_ROWS, parseCSV, pollUntilComplete, ReportFailedError, } from "@cesteral/shared";
|
|
2
|
+
export class TikTokReportingService {
|
|
3
|
+
rateLimiter;
|
|
4
|
+
httpClient;
|
|
5
|
+
logger;
|
|
6
|
+
pollIntervalMs;
|
|
7
|
+
maxPollAttempts;
|
|
8
|
+
apiVersion;
|
|
9
|
+
constructor(rateLimiter, httpClient, logger, pollIntervalMs = DEFAULT_REPORT_POLL_INTERVAL_MS, maxPollAttempts = DEFAULT_REPORT_MAX_POLL_ATTEMPTS, apiVersion = "v1.3") {
|
|
10
|
+
this.rateLimiter = rateLimiter;
|
|
11
|
+
this.httpClient = httpClient;
|
|
12
|
+
this.logger = logger;
|
|
13
|
+
this.pollIntervalMs = pollIntervalMs;
|
|
14
|
+
this.maxPollAttempts = maxPollAttempts;
|
|
15
|
+
this.apiVersion = apiVersion;
|
|
16
|
+
}
|
|
17
|
+
async submitReport(reportConfig, context) {
|
|
18
|
+
await this.rateLimiter.consume(`tiktok:reporting`);
|
|
19
|
+
const result = (await this.httpClient.post(`/open_api/${this.apiVersion}/report/task/create/`, {
|
|
20
|
+
report_type: reportConfig.report_type ?? "BASIC",
|
|
21
|
+
dimensions: reportConfig.dimensions,
|
|
22
|
+
metrics: reportConfig.metrics,
|
|
23
|
+
start_date: reportConfig.start_date,
|
|
24
|
+
end_date: reportConfig.end_date,
|
|
25
|
+
...(reportConfig.page ? { page: reportConfig.page } : {}),
|
|
26
|
+
...(reportConfig.page_size ? { page_size: reportConfig.page_size } : {}),
|
|
27
|
+
...(reportConfig.filtering ? { filtering: reportConfig.filtering } : {}),
|
|
28
|
+
...(reportConfig.order_field ? { order_field: reportConfig.order_field } : {}),
|
|
29
|
+
...(reportConfig.order_type ? { order_type: reportConfig.order_type } : {}),
|
|
30
|
+
}, context));
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
async pollReport(taskId, context) {
|
|
34
|
+
this.logger.debug({ taskId, maxPollAttempts: this.maxPollAttempts }, "Starting report poll");
|
|
35
|
+
try {
|
|
36
|
+
return await pollUntilComplete({
|
|
37
|
+
fetchStatus: async () => {
|
|
38
|
+
await this.rateLimiter.consume(`tiktok:reporting`);
|
|
39
|
+
return (await this.httpClient.get(`/open_api/${this.apiVersion}/report/task/check/`, { task_id: taskId }, context));
|
|
40
|
+
},
|
|
41
|
+
isComplete: (r) => r.status === "DONE",
|
|
42
|
+
isFailed: (r) => r.status === "FAILED",
|
|
43
|
+
initialDelayMs: this.pollIntervalMs,
|
|
44
|
+
maxDelayMs: DEFAULT_REPORT_MAX_BACKOFF_MS,
|
|
45
|
+
maxAttempts: this.maxPollAttempts,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
if (err instanceof ReportFailedError) {
|
|
50
|
+
return err.status;
|
|
51
|
+
}
|
|
52
|
+
throw err;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async checkReportStatus(taskId, context) {
|
|
56
|
+
await this.rateLimiter.consume(`tiktok:reporting`);
|
|
57
|
+
const result = (await this.httpClient.get(`/open_api/${this.apiVersion}/report/task/check/`, { task_id: taskId }, context));
|
|
58
|
+
return {
|
|
59
|
+
taskId: result.task_id,
|
|
60
|
+
status: result.status,
|
|
61
|
+
downloadUrl: result.download_url,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
async downloadReport(downloadUrl, maxRows = DEFAULT_REPORT_MAX_ROWS, context, options = {}) {
|
|
65
|
+
const response = await fetchWithTimeout(downloadUrl, DEFAULT_REPORT_DOWNLOAD_TIMEOUT_MS, context);
|
|
66
|
+
if (!response.ok) {
|
|
67
|
+
throw new McpError(JsonRpcErrorCode.InternalError, `Failed to download TikTok report: ${response.status} ${response.statusText}`);
|
|
68
|
+
}
|
|
69
|
+
const contentLength = response.headers?.get("content-length");
|
|
70
|
+
if (contentLength && parseInt(contentLength, 10) > DEFAULT_REPORT_MAX_SIZE_BYTES) {
|
|
71
|
+
throw new McpError(JsonRpcErrorCode.InternalError, `TikTok report too large (${contentLength} bytes, limit ${DEFAULT_REPORT_MAX_SIZE_BYTES}). Use more restrictive filters or date ranges.`);
|
|
72
|
+
}
|
|
73
|
+
const csvText = await response.text();
|
|
74
|
+
const normalizedCsvText = csvText
|
|
75
|
+
.replace(/^\uFEFF/, "")
|
|
76
|
+
.replace(/\r\n/g, "\n")
|
|
77
|
+
.trim();
|
|
78
|
+
if (normalizedCsvText === "") {
|
|
79
|
+
return {
|
|
80
|
+
rows: [],
|
|
81
|
+
headers: [],
|
|
82
|
+
totalRows: 0,
|
|
83
|
+
...(options.includeRawCsv ? { rawCsv: "" } : {}),
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
const { headers, rows } = parseCSV(normalizedCsvText);
|
|
87
|
+
if (headers.length === 0 && rows.length === 0) {
|
|
88
|
+
return {
|
|
89
|
+
rows: [],
|
|
90
|
+
headers: [],
|
|
91
|
+
totalRows: 0,
|
|
92
|
+
...(options.includeRawCsv ? { rawCsv: normalizedCsvText } : {}),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
const limitedRecords = rows.slice(0, maxRows);
|
|
96
|
+
const rowArrays = limitedRecords.map((record) => headers.map((h) => record[h] ?? ""));
|
|
97
|
+
return {
|
|
98
|
+
rows: rowArrays,
|
|
99
|
+
headers,
|
|
100
|
+
totalRows: rows.length,
|
|
101
|
+
...(options.includeRawCsv ? { rawCsv: normalizedCsvText } : {}),
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
async getReport(reportConfig, maxRowsOrContext = DEFAULT_REPORT_MAX_ROWS, context) {
|
|
105
|
+
const maxRows = typeof maxRowsOrContext === "number" ? maxRowsOrContext : DEFAULT_REPORT_MAX_ROWS;
|
|
106
|
+
const requestContext = typeof maxRowsOrContext === "number" ? context : maxRowsOrContext;
|
|
107
|
+
const { task_id } = await this.submitReport(reportConfig, requestContext);
|
|
108
|
+
const taskResult = await this.pollReport(task_id, requestContext);
|
|
109
|
+
if (taskResult.status === "FAILED") {
|
|
110
|
+
throw new McpError(JsonRpcErrorCode.InternalError, `TikTok report task ${task_id} failed`);
|
|
111
|
+
}
|
|
112
|
+
if (!taskResult.download_url) {
|
|
113
|
+
throw new McpError(JsonRpcErrorCode.InternalError, `TikTok report task ${task_id} completed but has no download URL`);
|
|
114
|
+
}
|
|
115
|
+
const reportData = await this.downloadReport(taskResult.download_url, maxRows, requestContext);
|
|
116
|
+
return {
|
|
117
|
+
...reportData,
|
|
118
|
+
taskId: task_id,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
async getReportBreakdowns(reportConfig, breakdowns, maxRowsOrContext = DEFAULT_REPORT_MAX_ROWS, context) {
|
|
122
|
+
const configWithBreakdowns = {
|
|
123
|
+
...reportConfig,
|
|
124
|
+
dimensions: [...reportConfig.dimensions, ...breakdowns],
|
|
125
|
+
};
|
|
126
|
+
return this.getReport(configWithBreakdowns, maxRowsOrContext, context);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=tiktok-reporting-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tiktok-reporting-service.js","sourceRoot":"","sources":["../../../src/services/tiktok/tiktok-reporting-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import type { TikTokHttpClient } from "./tiktok-http-client.js";
|
|
2
|
+
import type { RateLimiter } from "@cesteral/shared";
|
|
3
|
+
import { type RequestContext } from "@cesteral/shared";
|
|
4
|
+
import { type TikTokEntityType } from "../../mcp-server/tools/utils/entity-mapping.js";
|
|
5
|
+
import type { Logger } from "pino";
|
|
6
|
+
import type { CreateTikTokAdGroupRequest, CreateTikTokAdRequest, CreateTikTokCampaignRequest, TikTokAd, TikTokAdAccount, TikTokAdGroup, TikTokCampaign, TikTokCreative, TikTokPageInfoShape } from "./types.js";
|
|
7
|
+
export type { CreateTikTokAdGroupRequest, CreateTikTokAdRequest, CreateTikTokCampaignRequest, TikTokAd, TikTokAdAccount, TikTokAdGroup, TikTokCampaign, TikTokCreative, TikTokPageInfoShape, };
|
|
8
|
+
interface TikTokEntityMap {
|
|
9
|
+
campaign: TikTokCampaign;
|
|
10
|
+
adGroup: TikTokAdGroup;
|
|
11
|
+
ad: TikTokAd;
|
|
12
|
+
creative: TikTokCreative;
|
|
13
|
+
}
|
|
14
|
+
type TikTokCreateEntityInputMap = {
|
|
15
|
+
campaign: CreateTikTokCampaignRequest;
|
|
16
|
+
adGroup: CreateTikTokAdGroupRequest;
|
|
17
|
+
ad: CreateTikTokAdRequest;
|
|
18
|
+
creative: Record<string, unknown>;
|
|
19
|
+
};
|
|
20
|
+
type TikTokUpdateEntityInputMap = {
|
|
21
|
+
[K in TikTokEntityType]: Partial<TikTokEntityMap[K]> & Record<string, unknown>;
|
|
22
|
+
};
|
|
23
|
+
interface TikTokAdvertiserListData {
|
|
24
|
+
list?: TikTokAdAccount[];
|
|
25
|
+
}
|
|
26
|
+
export declare class TikTokService {
|
|
27
|
+
private readonly rateLimiter;
|
|
28
|
+
private readonly httpClient;
|
|
29
|
+
private readonly logger;
|
|
30
|
+
private readonly apiVersion;
|
|
31
|
+
constructor(rateLimiter: RateLimiter, httpClient: TikTokHttpClient, logger: Logger, apiVersion?: string);
|
|
32
|
+
get client(): TikTokHttpClient;
|
|
33
|
+
listEntities<T extends TikTokEntityType>(entityType: T, filters?: Record<string, unknown>, page?: number, pageSize?: number, context?: RequestContext): Promise<{
|
|
34
|
+
entities: TikTokEntityMap[T][];
|
|
35
|
+
pageInfo: TikTokPageInfoShape;
|
|
36
|
+
}>;
|
|
37
|
+
getEntity<T extends TikTokEntityType>(entityType: T, entityId: string, context?: RequestContext): Promise<TikTokEntityMap[T]>;
|
|
38
|
+
createEntity<T extends TikTokEntityType>(entityType: T, data: TikTokCreateEntityInputMap[T], context?: RequestContext): Promise<TikTokEntityMap[T]>;
|
|
39
|
+
updateEntity<T extends TikTokEntityType>(entityType: T, entityId: string, data: TikTokUpdateEntityInputMap[T], context?: RequestContext): Promise<TikTokEntityMap[T]>;
|
|
40
|
+
deleteEntity(entityType: TikTokEntityType, entityIds: string[], context?: RequestContext): Promise<unknown>;
|
|
41
|
+
updateEntityStatus(entityType: TikTokEntityType, entityIds: string[], operationStatus: "ENABLE" | "DISABLE" | "DELETE", context?: RequestContext): Promise<unknown>;
|
|
42
|
+
listAdvertisers(context?: RequestContext): Promise<TikTokAdvertiserListData>;
|
|
43
|
+
duplicateEntity<T extends TikTokEntityType>(entityType: T, entityId: string, options?: Record<string, unknown>, context?: RequestContext): Promise<TikTokEntityMap[T]>;
|
|
44
|
+
adjustBids(adjustments: Array<{
|
|
45
|
+
adGroupId: string;
|
|
46
|
+
bidPrice: number;
|
|
47
|
+
}>, context?: RequestContext): Promise<{
|
|
48
|
+
results: Array<{
|
|
49
|
+
adGroupId: string;
|
|
50
|
+
success: boolean;
|
|
51
|
+
previousBid?: number;
|
|
52
|
+
newBid?: number;
|
|
53
|
+
error?: string;
|
|
54
|
+
}>;
|
|
55
|
+
}>;
|
|
56
|
+
bulkCreateEntities<T extends TikTokEntityType>(entityType: T, items: TikTokCreateEntityInputMap[T][], context?: RequestContext): Promise<{
|
|
57
|
+
results: Array<{
|
|
58
|
+
success: boolean;
|
|
59
|
+
entity?: TikTokEntityMap[T];
|
|
60
|
+
error?: string;
|
|
61
|
+
}>;
|
|
62
|
+
}>;
|
|
63
|
+
bulkUpdateEntities<T extends TikTokEntityType>(entityType: T, items: Array<{
|
|
64
|
+
entityId: string;
|
|
65
|
+
data: TikTokUpdateEntityInputMap[T];
|
|
66
|
+
}>, context?: RequestContext): Promise<{
|
|
67
|
+
results: Array<{
|
|
68
|
+
entityId: string;
|
|
69
|
+
success: boolean;
|
|
70
|
+
error?: string;
|
|
71
|
+
}>;
|
|
72
|
+
}>;
|
|
73
|
+
bulkUpdateStatus(entityType: TikTokEntityType, entityIds: string[], operationStatus: "ENABLE" | "DISABLE" | "DELETE", context?: RequestContext): Promise<{
|
|
74
|
+
results: Array<{
|
|
75
|
+
entityId: string;
|
|
76
|
+
success: boolean;
|
|
77
|
+
error?: string;
|
|
78
|
+
}>;
|
|
79
|
+
}>;
|
|
80
|
+
searchTargeting(criteria: Record<string, unknown>, context?: RequestContext): Promise<unknown>;
|
|
81
|
+
getTargetingOptions(optionType: string, params: Record<string, unknown>, context?: RequestContext): Promise<unknown>;
|
|
82
|
+
getAudienceEstimate(targetingConfig: Record<string, unknown>, context?: RequestContext): Promise<unknown>;
|
|
83
|
+
getAdPreviews(adId: string, adFormat?: string, context?: RequestContext): Promise<unknown>;
|
|
84
|
+
private stringifyParams;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=tiktok-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tiktok-service.d.ts","sourceRoot":"","sources":["../../../src/services/tiktok/tiktok-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { executeBulkConcurrent, McpError, JsonRpcErrorCode, } from "@cesteral/shared";
|
|
2
|
+
import { getEntityConfig, } from "../../mcp-server/tools/utils/entity-mapping.js";
|
|
3
|
+
export class TikTokService {
|
|
4
|
+
rateLimiter;
|
|
5
|
+
httpClient;
|
|
6
|
+
logger;
|
|
7
|
+
apiVersion;
|
|
8
|
+
constructor(rateLimiter, httpClient, logger, apiVersion = "v1.3") {
|
|
9
|
+
this.rateLimiter = rateLimiter;
|
|
10
|
+
this.httpClient = httpClient;
|
|
11
|
+
this.logger = logger;
|
|
12
|
+
this.apiVersion = apiVersion;
|
|
13
|
+
}
|
|
14
|
+
get client() {
|
|
15
|
+
return this.httpClient;
|
|
16
|
+
}
|
|
17
|
+
async listEntities(entityType, filters, page = 1, pageSize = 10, context) {
|
|
18
|
+
await this.rateLimiter.consume(`tiktok:default`);
|
|
19
|
+
const config = getEntityConfig(entityType);
|
|
20
|
+
const params = {
|
|
21
|
+
page: String(page),
|
|
22
|
+
page_size: String(pageSize),
|
|
23
|
+
fields: JSON.stringify(config.defaultFields),
|
|
24
|
+
};
|
|
25
|
+
if (filters && Object.keys(filters).length > 0) {
|
|
26
|
+
params.filtering = JSON.stringify(filters);
|
|
27
|
+
}
|
|
28
|
+
const result = (await this.httpClient.get(config.listPath, params, context));
|
|
29
|
+
return {
|
|
30
|
+
entities: result?.list ?? [],
|
|
31
|
+
pageInfo: result?.page_info ?? {
|
|
32
|
+
page,
|
|
33
|
+
page_size: pageSize,
|
|
34
|
+
total_number: 0,
|
|
35
|
+
total_page: 0,
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
async getEntity(entityType, entityId, context) {
|
|
40
|
+
await this.rateLimiter.consume(`tiktok:default`);
|
|
41
|
+
const config = getEntityConfig(entityType);
|
|
42
|
+
const params = {
|
|
43
|
+
page_size: "1",
|
|
44
|
+
fields: JSON.stringify(config.defaultFields),
|
|
45
|
+
filtering: JSON.stringify({
|
|
46
|
+
[config.idsField]: [entityId],
|
|
47
|
+
}),
|
|
48
|
+
};
|
|
49
|
+
const result = (await this.httpClient.get(config.listPath, params, context));
|
|
50
|
+
const list = result?.list ?? [];
|
|
51
|
+
if (list.length === 0) {
|
|
52
|
+
throw new McpError(JsonRpcErrorCode.NotFound, `${config.displayName} with ID ${entityId} not found`);
|
|
53
|
+
}
|
|
54
|
+
return list[0];
|
|
55
|
+
}
|
|
56
|
+
async createEntity(entityType, data, context) {
|
|
57
|
+
const config = getEntityConfig(entityType);
|
|
58
|
+
await this.rateLimiter.consume(`tiktok:default`, 3);
|
|
59
|
+
return this.httpClient.post(config.createPath, data, context);
|
|
60
|
+
}
|
|
61
|
+
async updateEntity(entityType, entityId, data, context) {
|
|
62
|
+
const config = getEntityConfig(entityType);
|
|
63
|
+
await this.rateLimiter.consume(`tiktok:default`, 3);
|
|
64
|
+
return this.httpClient.post(config.updatePath, {
|
|
65
|
+
[config.idField]: entityId,
|
|
66
|
+
...data,
|
|
67
|
+
}, context);
|
|
68
|
+
}
|
|
69
|
+
async deleteEntity(entityType, entityIds, context) {
|
|
70
|
+
const config = getEntityConfig(entityType);
|
|
71
|
+
await this.rateLimiter.consume(`tiktok:default`, 3);
|
|
72
|
+
return this.httpClient.post(config.deletePath, {
|
|
73
|
+
[config.idsField]: entityIds,
|
|
74
|
+
}, context);
|
|
75
|
+
}
|
|
76
|
+
async updateEntityStatus(entityType, entityIds, operationStatus, context) {
|
|
77
|
+
const config = getEntityConfig(entityType);
|
|
78
|
+
if (!config.supportsStatusUpdate) {
|
|
79
|
+
throw new McpError(JsonRpcErrorCode.InvalidParams, `Entity type '${entityType}' does not support status updates. Use the regular update endpoint instead.`);
|
|
80
|
+
}
|
|
81
|
+
await this.rateLimiter.consume(`tiktok:default`, 3);
|
|
82
|
+
return this.httpClient.post(config.statusUpdatePath, {
|
|
83
|
+
[config.idsField]: entityIds,
|
|
84
|
+
operation_status: operationStatus,
|
|
85
|
+
}, context);
|
|
86
|
+
}
|
|
87
|
+
async listAdvertisers(context) {
|
|
88
|
+
await this.rateLimiter.consume(`tiktok:default`);
|
|
89
|
+
return this.httpClient.get(`/open_api/${this.apiVersion}/advertiser/info/`, {}, context);
|
|
90
|
+
}
|
|
91
|
+
async duplicateEntity(entityType, entityId, options, context) {
|
|
92
|
+
const config = getEntityConfig(entityType);
|
|
93
|
+
if (!config.supportsDuplicate) {
|
|
94
|
+
this.logger.debug({ entityType }, "Duplicate skipped: entity type does not support duplication");
|
|
95
|
+
throw new McpError(JsonRpcErrorCode.InvalidParams, `Entity type ${entityType} does not support duplication`);
|
|
96
|
+
}
|
|
97
|
+
await this.rateLimiter.consume(`tiktok:default`, 3);
|
|
98
|
+
const copyPath = config.createPath.replace("/create/", "/copy/");
|
|
99
|
+
return this.httpClient.post(copyPath, {
|
|
100
|
+
[config.idField]: entityId,
|
|
101
|
+
...options,
|
|
102
|
+
}, context);
|
|
103
|
+
}
|
|
104
|
+
async adjustBids(adjustments, context) {
|
|
105
|
+
const results = [];
|
|
106
|
+
for (const adjustment of adjustments) {
|
|
107
|
+
try {
|
|
108
|
+
const entity = await this.getEntity("adGroup", adjustment.adGroupId, context);
|
|
109
|
+
const previousBid = entity.bid_price;
|
|
110
|
+
await this.updateEntity("adGroup", adjustment.adGroupId, {
|
|
111
|
+
bid_price: adjustment.bidPrice,
|
|
112
|
+
}, context);
|
|
113
|
+
results.push({
|
|
114
|
+
adGroupId: adjustment.adGroupId,
|
|
115
|
+
success: true,
|
|
116
|
+
previousBid,
|
|
117
|
+
newBid: adjustment.bidPrice,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
results.push({
|
|
122
|
+
adGroupId: adjustment.adGroupId,
|
|
123
|
+
success: false,
|
|
124
|
+
error: error instanceof Error ? error.message : String(error),
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return { results };
|
|
129
|
+
}
|
|
130
|
+
async bulkCreateEntities(entityType, items, context) {
|
|
131
|
+
const results = await executeBulkConcurrent(items, async (data) => {
|
|
132
|
+
return this.createEntity(entityType, data, context);
|
|
133
|
+
}, { logger: this.logger });
|
|
134
|
+
return { results };
|
|
135
|
+
}
|
|
136
|
+
async bulkUpdateEntities(entityType, items, context) {
|
|
137
|
+
const bulkResults = await executeBulkConcurrent(items, async (item) => {
|
|
138
|
+
return this.updateEntity(entityType, item.entityId, item.data, context);
|
|
139
|
+
}, { logger: this.logger });
|
|
140
|
+
return {
|
|
141
|
+
results: bulkResults.map((r, i) => ({
|
|
142
|
+
entityId: items[i].entityId,
|
|
143
|
+
success: r.success,
|
|
144
|
+
error: r.error,
|
|
145
|
+
})),
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
async bulkUpdateStatus(entityType, entityIds, operationStatus, context) {
|
|
149
|
+
this.logger.debug({ entityType, count: entityIds.length, operationStatus }, "Bulk status update");
|
|
150
|
+
try {
|
|
151
|
+
await this.updateEntityStatus(entityType, entityIds, operationStatus, context);
|
|
152
|
+
return {
|
|
153
|
+
results: entityIds.map((entityId) => ({
|
|
154
|
+
entityId,
|
|
155
|
+
success: true,
|
|
156
|
+
})),
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
161
|
+
return {
|
|
162
|
+
results: entityIds.map((entityId) => ({
|
|
163
|
+
entityId,
|
|
164
|
+
success: false,
|
|
165
|
+
error: errorMessage,
|
|
166
|
+
})),
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
async searchTargeting(criteria, context) {
|
|
171
|
+
await this.rateLimiter.consume(`tiktok:default`);
|
|
172
|
+
return this.httpClient.post(`/open_api/${this.apiVersion}/tool/targeting/search/`, criteria, context);
|
|
173
|
+
}
|
|
174
|
+
async getTargetingOptions(optionType, params, context) {
|
|
175
|
+
await this.rateLimiter.consume(`tiktok:default`);
|
|
176
|
+
switch (optionType) {
|
|
177
|
+
case "ACTION_CATEGORY":
|
|
178
|
+
return this.httpClient.get(`/open_api/${this.apiVersion}/tool/action_category/`, this.stringifyParams(params), context);
|
|
179
|
+
case "CARRIER":
|
|
180
|
+
return this.httpClient.get(`/open_api/${this.apiVersion}/tool/carrier/`, this.stringifyParams(params), context);
|
|
181
|
+
case "DEVICE_MODEL":
|
|
182
|
+
return this.httpClient.get(`/open_api/${this.apiVersion}/tool/device_model/`, this.stringifyParams(params), context);
|
|
183
|
+
case "INTEREST_CATEGORY":
|
|
184
|
+
return this.httpClient.get(`/open_api/${this.apiVersion}/tool/interest_category/`, this.stringifyParams(params), context);
|
|
185
|
+
case "INTEREST_KEYWORD":
|
|
186
|
+
return this.httpClient.get(`/open_api/${this.apiVersion}/tool/interest_keyword/recommend/`, this.stringifyParams(params), context);
|
|
187
|
+
case "LANGUAGE":
|
|
188
|
+
return this.httpClient.get(`/open_api/${this.apiVersion}/tool/language/`, this.stringifyParams(params), context);
|
|
189
|
+
case "LOCATION":
|
|
190
|
+
return this.httpClient.get(`/open_api/${this.apiVersion}/tool/region/`, this.stringifyParams(params), context);
|
|
191
|
+
case "ISP":
|
|
192
|
+
return this.httpClient.get(`/open_api/${this.apiVersion}/tool/targeting/list/`, this.stringifyParams(params), context);
|
|
193
|
+
default:
|
|
194
|
+
throw new McpError(JsonRpcErrorCode.InvalidParams, `Unsupported targeting option type: ${optionType}`);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
async getAudienceEstimate(targetingConfig, context) {
|
|
198
|
+
await this.rateLimiter.consume(`tiktok:default`);
|
|
199
|
+
return this.httpClient.post(`/open_api/${this.apiVersion}/audience/estimate/`, targetingConfig, context);
|
|
200
|
+
}
|
|
201
|
+
async getAdPreviews(adId, adFormat, context) {
|
|
202
|
+
await this.rateLimiter.consume(`tiktok:default`);
|
|
203
|
+
const params = {
|
|
204
|
+
ad_id: adId,
|
|
205
|
+
};
|
|
206
|
+
if (adFormat) {
|
|
207
|
+
params.ad_format = adFormat;
|
|
208
|
+
}
|
|
209
|
+
return this.httpClient.get(`/open_api/${this.apiVersion}/ad/preview/`, params, context);
|
|
210
|
+
}
|
|
211
|
+
stringifyParams(params) {
|
|
212
|
+
return Object.fromEntries(Object.entries(params)
|
|
213
|
+
.filter(([, value]) => value !== undefined)
|
|
214
|
+
.map(([key, value]) => [key, typeof value === "string" ? value : JSON.stringify(value)]));
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=tiktok-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tiktok-service.js","sourceRoot":"","sources":["../../../src/services/tiktok/tiktok-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
export type TikTokCampaignStatus = "CAMPAIGN_STATUS_ENABLE" | "CAMPAIGN_STATUS_DISABLE" | "CAMPAIGN_STATUS_DELETE" | "CAMPAIGN_STATUS_BUDGET_EXCEED" | "CAMPAIGN_STATUS_TIME_DONE" | "CAMPAIGN_STATUS_ALL_DONE" | "CAMPAIGN_STATUS_IN_PROCESS" | "CAMPAIGN_STATUS_NOT_START";
|
|
2
|
+
export type TikTokObjectiveType = "REACH" | "TRAFFIC" | "APP_PROMOTION" | "VIDEO_VIEWS" | "LEAD_GENERATION" | "ENGAGEMENT" | "WEB_CONVERSIONS" | "PRODUCT_SALES" | "RF_REACH";
|
|
3
|
+
export type TikTokBudgetMode = "BUDGET_MODE_DAY" | "BUDGET_MODE_TOTAL" | "BUDGET_MODE_INFINITE";
|
|
4
|
+
export type TikTokAdGroupStatus = "ADGROUP_STATUS_ENABLE" | "ADGROUP_STATUS_DISABLE" | "ADGROUP_STATUS_DELETE" | "ADGROUP_STATUS_BUDGET_EXCEED" | "ADGROUP_STATUS_TIME_DONE" | "ADGROUP_STATUS_ADGROUP_EXCEED" | "ADGROUP_STATUS_BALANCE_EXCEED" | "ADGROUP_STATUS_NOT_START" | "ADGROUP_STATUS_IN_PROCESS";
|
|
5
|
+
export type TikTokOptimizationGoal = "SHOW" | "CLICK" | "REACH" | "VIDEO_VIEW" | "LEAD" | "APP_INSTALL" | "PURCHASE" | "ADD_TO_WISHLIST" | "REGISTRATION" | "FORM" | "PAGE_EVENT";
|
|
6
|
+
export type TikTokBillingEvent = "CPC" | "CPM" | "CPV" | "OCPC" | "OCPM";
|
|
7
|
+
export type TikTokAdStatus = "AD_STATUS_ENABLE" | "AD_STATUS_DISABLE" | "AD_STATUS_DELETE";
|
|
8
|
+
export interface TikTokTargetingInterest {
|
|
9
|
+
interest_category_id: string;
|
|
10
|
+
interest_category_name?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface TikTokTargeting {
|
|
13
|
+
location_ids?: string[];
|
|
14
|
+
age_groups?: string[];
|
|
15
|
+
gender?: string;
|
|
16
|
+
interests?: TikTokTargetingInterest[];
|
|
17
|
+
device_model_ids?: string[];
|
|
18
|
+
operating_systems?: string[];
|
|
19
|
+
languages?: string[];
|
|
20
|
+
}
|
|
21
|
+
export interface TikTokCampaign {
|
|
22
|
+
campaign_id: string;
|
|
23
|
+
campaign_name: string;
|
|
24
|
+
advertiser_id: string;
|
|
25
|
+
status: TikTokCampaignStatus;
|
|
26
|
+
objective_type: TikTokObjectiveType;
|
|
27
|
+
budget?: number;
|
|
28
|
+
budget_mode?: TikTokBudgetMode;
|
|
29
|
+
create_time?: string;
|
|
30
|
+
modify_time?: string;
|
|
31
|
+
}
|
|
32
|
+
export interface TikTokAdGroup {
|
|
33
|
+
adgroup_id: string;
|
|
34
|
+
adgroup_name: string;
|
|
35
|
+
campaign_id: string;
|
|
36
|
+
advertiser_id: string;
|
|
37
|
+
status: TikTokAdGroupStatus;
|
|
38
|
+
budget?: number;
|
|
39
|
+
budget_mode?: TikTokBudgetMode;
|
|
40
|
+
schedule_start_time?: string;
|
|
41
|
+
schedule_end_time?: string;
|
|
42
|
+
optimization_goal?: TikTokOptimizationGoal;
|
|
43
|
+
billing_event?: TikTokBillingEvent;
|
|
44
|
+
bid_price?: number;
|
|
45
|
+
targeting?: TikTokTargeting;
|
|
46
|
+
create_time?: string;
|
|
47
|
+
modify_time?: string;
|
|
48
|
+
}
|
|
49
|
+
export interface TikTokAd {
|
|
50
|
+
ad_id: string;
|
|
51
|
+
ad_name: string;
|
|
52
|
+
adgroup_id: string;
|
|
53
|
+
campaign_id: string;
|
|
54
|
+
advertiser_id: string;
|
|
55
|
+
status: TikTokAdStatus;
|
|
56
|
+
creative_type?: string;
|
|
57
|
+
call_to_action?: string;
|
|
58
|
+
create_time?: string;
|
|
59
|
+
modify_time?: string;
|
|
60
|
+
}
|
|
61
|
+
export interface TikTokCreative {
|
|
62
|
+
creative_id: string;
|
|
63
|
+
creative_name: string;
|
|
64
|
+
advertiser_id: string;
|
|
65
|
+
creative_type: string;
|
|
66
|
+
image_ids?: string[];
|
|
67
|
+
video_id?: string;
|
|
68
|
+
ad_name?: string;
|
|
69
|
+
brand_name?: string;
|
|
70
|
+
call_to_action?: string;
|
|
71
|
+
landing_page_url?: string;
|
|
72
|
+
create_time?: string;
|
|
73
|
+
modify_time?: string;
|
|
74
|
+
}
|
|
75
|
+
export interface TikTokAdAccount {
|
|
76
|
+
advertiser_id: string;
|
|
77
|
+
advertiser_name: string;
|
|
78
|
+
status: string;
|
|
79
|
+
currency: string;
|
|
80
|
+
timezone: string;
|
|
81
|
+
balance?: number;
|
|
82
|
+
create_time?: string;
|
|
83
|
+
}
|
|
84
|
+
export interface TikTokImage {
|
|
85
|
+
image_id: string;
|
|
86
|
+
size: number;
|
|
87
|
+
width: number;
|
|
88
|
+
height: number;
|
|
89
|
+
format: string;
|
|
90
|
+
url: string;
|
|
91
|
+
create_time?: string;
|
|
92
|
+
}
|
|
93
|
+
export interface TikTokPageInfoShape {
|
|
94
|
+
page: number;
|
|
95
|
+
page_size: number;
|
|
96
|
+
total_number: number;
|
|
97
|
+
total_page: number;
|
|
98
|
+
}
|
|
99
|
+
export interface TikTokEntityPage<T> {
|
|
100
|
+
list: T[];
|
|
101
|
+
page_info: TikTokPageInfoShape;
|
|
102
|
+
}
|
|
103
|
+
export interface CreateTikTokCampaignRequest {
|
|
104
|
+
campaign_name: string;
|
|
105
|
+
advertiser_id: string;
|
|
106
|
+
objective_type: TikTokObjectiveType;
|
|
107
|
+
budget?: number;
|
|
108
|
+
budget_mode?: TikTokBudgetMode;
|
|
109
|
+
app_promotion_type?: string;
|
|
110
|
+
operation_status?: "ENABLE" | "DISABLE";
|
|
111
|
+
}
|
|
112
|
+
export interface UpdateTikTokCampaignRequest {
|
|
113
|
+
campaign_id: string;
|
|
114
|
+
advertiser_id: string;
|
|
115
|
+
campaign_name?: string;
|
|
116
|
+
budget?: number;
|
|
117
|
+
po_number?: string;
|
|
118
|
+
special_industries?: string[];
|
|
119
|
+
}
|
|
120
|
+
export interface CreateTikTokAdGroupRequest {
|
|
121
|
+
adgroup_name: string;
|
|
122
|
+
campaign_id: string;
|
|
123
|
+
advertiser_id: string;
|
|
124
|
+
placement_type?: string;
|
|
125
|
+
placements?: string[];
|
|
126
|
+
schedule_type?: string;
|
|
127
|
+
pacing?: string;
|
|
128
|
+
optimization_goal?: TikTokOptimizationGoal;
|
|
129
|
+
billing_event?: TikTokBillingEvent;
|
|
130
|
+
operation_status?: "ENABLE" | "DISABLE";
|
|
131
|
+
bid_price?: number;
|
|
132
|
+
budget?: number;
|
|
133
|
+
budget_mode?: TikTokBudgetMode;
|
|
134
|
+
schedule_start_time?: string;
|
|
135
|
+
schedule_end_time?: string;
|
|
136
|
+
targeting?: TikTokTargeting;
|
|
137
|
+
}
|
|
138
|
+
export interface TikTokAdCreativeRef {
|
|
139
|
+
ad_name: string;
|
|
140
|
+
image_ids?: string[];
|
|
141
|
+
video_id?: string;
|
|
142
|
+
call_to_action?: string;
|
|
143
|
+
landing_page_url?: string;
|
|
144
|
+
}
|
|
145
|
+
export interface CreateTikTokAdRequest {
|
|
146
|
+
adgroup_id: string;
|
|
147
|
+
advertiser_id: string;
|
|
148
|
+
creatives: TikTokAdCreativeRef[];
|
|
149
|
+
}
|
|
150
|
+
export declare function isTikTokCampaign(value: unknown): value is TikTokCampaign;
|
|
151
|
+
export declare function isTikTokAdGroup(value: unknown): value is TikTokAdGroup;
|
|
152
|
+
export declare function isTikTokAd(value: unknown): value is TikTokAd;
|
|
153
|
+
export declare function isTikTokAdAccount(value: unknown): value is TikTokAdAccount;
|
|
154
|
+
export interface TikTokApiError {
|
|
155
|
+
code: number;
|
|
156
|
+
message: string;
|
|
157
|
+
request_id?: string;
|
|
158
|
+
data?: unknown;
|
|
159
|
+
}
|
|
160
|
+
export declare function isTikTokApiError(value: unknown): value is TikTokApiError;
|
|
161
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/tiktok/types.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,oBAAoB,GAC5B,wBAAwB,GACxB,yBAAyB,GACzB,wBAAwB,GACxB,+BAA+B,GAC/B,2BAA2B,GAC3B,0BAA0B,GAC1B,4BAA4B,GAC5B,2BAA2B,CAAC;AAEhC,MAAM,MAAM,mBAAmB,GAC3B,OAAO,GACP,SAAS,GACT,eAAe,GACf,aAAa,GACb,iBAAiB,GACjB,YAAY,GACZ,iBAAiB,GACjB,eAAe,GACf,UAAU,CAAC;AAEf,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,GAAG,mBAAmB,GAAG,sBAAsB,CAAC;AAEhG,MAAM,MAAM,mBAAmB,GAC3B,uBAAuB,GACvB,wBAAwB,GACxB,uBAAuB,GACvB,8BAA8B,GAC9B,0BAA0B,GAC1B,+BAA+B,GAC/B,+BAA+B,GAC/B,0BAA0B,GAC1B,2BAA2B,CAAC;AAEhC,MAAM,MAAM,sBAAsB,GAC9B,MAAM,GACN,OAAO,GACP,OAAO,GACP,YAAY,GACZ,MAAM,GACN,aAAa,GACb,UAAU,GACV,iBAAiB,GACjB,cAAc,GACd,MAAM,GACN,YAAY,CAAC;AAEjB,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAEzE,MAAM,MAAM,cAAc,GAAG,kBAAkB,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;AAI3F,MAAM,WAAW,uBAAuB;IACtC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,uBAAuB,EAAE,CAAC;IACtC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,cAAc,EAAE,mBAAmB,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;IAC3C,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,cAAc,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAID,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,SAAS,EAAE,mBAAmB,CAAC;CAChC;AAID,MAAM,WAAW,2BAA2B;IAC1C,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,mBAAmB,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;CACzC;AAED,MAAM,WAAW,2BAA2B;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;IAC3C,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,gBAAgB,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,mBAAmB,EAAE,CAAC;CAClC;AAID,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAOxE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAOtE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAO5D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAO1E;AAID,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAOxE"}
|