@cesteral/linkedin-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 +304 -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/linkedin-auth-adapter.d.ts +38 -0
- package/dist/auth/linkedin-auth-adapter.d.ts.map +1 -0
- package/dist/auth/linkedin-auth-adapter.js +110 -0
- package/dist/auth/linkedin-auth-adapter.js.map +1 -0
- package/dist/auth/linkedin-auth-strategy.d.ts +14 -0
- package/dist/auth/linkedin-auth-strategy.d.ts.map +1 -0
- package/dist/auth/linkedin-auth-strategy.js +50 -0
- package/dist/auth/linkedin-auth-strategy.js.map +1 -0
- package/dist/config/index.d.ts +100 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +37 -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 +40 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/analytics-reporting-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/analytics-reporting-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/analytics-reporting-workflow.prompt.js +108 -0
- package/dist/mcp-server/prompts/definitions/analytics-reporting-workflow.prompt.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 +177 -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 +171 -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 +109 -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 +213 -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 +151 -0
- package/dist/mcp-server/prompts/definitions/entity-update-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 +217 -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 +98 -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 +91 -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/analytics-reference.resource.d.ts +3 -0
- package/dist/mcp-server/resources/definitions/analytics-reference.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/analytics-reference.resource.js +162 -0
- package/dist/mcp-server/resources/definitions/analytics-reference.resource.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 +164 -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 +144 -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 +127 -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 +54 -0
- package/dist/mcp-server/resources/definitions/index.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 +122 -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 +128 -0
- package/dist/mcp-server/server.js.map +1 -0
- package/dist/mcp-server/tools/definitions/adjust-bids.tool.d.ts +213 -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 +174 -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 +128 -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 +95 -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 +183 -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 +122 -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 +140 -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 +109 -0
- package/dist/mcp-server/tools/definitions/bulk-update-status.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/create-entity.tool.d.ts +117 -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 +98 -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 +93 -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 +100 -0
- package/dist/mcp-server/tools/definitions/delete-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/duplicate-entity.tool.d.ts +95 -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 +89 -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 +75 -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 +68 -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 +75 -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 +71 -0
- package/dist/mcp-server/tools/definitions/get-ad-previews.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-analytics-breakdowns.tool.d.ts +223 -0
- package/dist/mcp-server/tools/definitions/get-analytics-breakdowns.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-analytics-breakdowns.tool.js +152 -0
- package/dist/mcp-server/tools/definitions/get-analytics-breakdowns.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-analytics.tool.d.ts +325 -0
- package/dist/mcp-server/tools/definitions/get-analytics.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-analytics.tool.js +154 -0
- package/dist/mcp-server/tools/definitions/get-analytics.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-delivery-forecast.tool.d.ts +95 -0
- package/dist/mcp-server/tools/definitions/get-delivery-forecast.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-delivery-forecast.tool.js +90 -0
- package/dist/mcp-server/tools/definitions/get-delivery-forecast.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-entity.tool.d.ts +75 -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 +75 -0
- package/dist/mcp-server/tools/definitions/get-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-targeting-options.tool.d.ts +81 -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 +76 -0
- package/dist/mcp-server/tools/definitions/get-targeting-options.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/index.d.ts +23 -0
- package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/index.js +69 -0
- package/dist/mcp-server/tools/definitions/index.js.map +1 -0
- package/dist/mcp-server/tools/definitions/list-ad-accounts.tool.d.ts +141 -0
- package/dist/mcp-server/tools/definitions/list-ad-accounts.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/list-ad-accounts.tool.js +84 -0
- package/dist/mcp-server/tools/definitions/list-ad-accounts.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/list-entities.tool.d.ts +165 -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 +112 -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 +102 -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 +98 -0
- package/dist/mcp-server/tools/definitions/search-targeting.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/update-entity.tool.d.ts +104 -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 +88 -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 +75 -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 +99 -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 +69 -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 +98 -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 +168 -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 +200 -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 +13 -0
- package/dist/mcp-server/tools/utils/entity-mapping.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/entity-mapping.js +68 -0
- package/dist/mcp-server/tools/utils/entity-mapping.js.map +1 -0
- package/dist/mcp-server/tools/utils/media-types.d.ts +12 -0
- package/dist/mcp-server/tools/utils/media-types.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/media-types.js +2 -0
- package/dist/mcp-server/tools/utils/media-types.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 +49 -0
- package/dist/mcp-server/transports/streamable-http-transport.d.ts.map +1 -0
- package/dist/mcp-server/transports/streamable-http-transport.js +91 -0
- package/dist/mcp-server/transports/streamable-http-transport.js.map +1 -0
- package/dist/services/linkedin/linkedin-http-client.d.ts +20 -0
- package/dist/services/linkedin/linkedin-http-client.d.ts.map +1 -0
- package/dist/services/linkedin/linkedin-http-client.js +147 -0
- package/dist/services/linkedin/linkedin-http-client.js.map +1 -0
- package/dist/services/linkedin/linkedin-reporting-service.d.ts +26 -0
- package/dist/services/linkedin/linkedin-reporting-service.d.ts.map +1 -0
- package/dist/services/linkedin/linkedin-reporting-service.js +69 -0
- package/dist/services/linkedin/linkedin-reporting-service.js.map +1 -0
- package/dist/services/linkedin/linkedin-service.d.ts +84 -0
- package/dist/services/linkedin/linkedin-service.d.ts.map +1 -0
- package/dist/services/linkedin/linkedin-service.js +195 -0
- package/dist/services/linkedin/linkedin-service.js.map +1 -0
- package/dist/services/linkedin/types.d.ts +166 -0
- package/dist/services/linkedin/types.d.ts.map +1 -0
- package/dist/services/linkedin/types.js +31 -0
- package/dist/services/linkedin/types.js.map +1 -0
- package/dist/services/session-services.d.ts +18 -0
- package/dist/services/session-services.d.ts.map +1 -0
- package/dist/services/session-services.js +16 -0
- package/dist/services/session-services.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,195 @@
|
|
|
1
|
+
import { LinkedInHttpClient } from "./linkedin-http-client.js";
|
|
2
|
+
import { executeBulkConcurrent } from "@cesteral/shared";
|
|
3
|
+
import { McpError, JsonRpcErrorCode } from "@cesteral/shared";
|
|
4
|
+
import { getEntityConfig, } from "../../mcp-server/tools/utils/entity-mapping.js";
|
|
5
|
+
export class LinkedInService {
|
|
6
|
+
rateLimiter;
|
|
7
|
+
httpClient;
|
|
8
|
+
constructor(rateLimiter, httpClient) {
|
|
9
|
+
this.rateLimiter = rateLimiter;
|
|
10
|
+
this.httpClient = httpClient;
|
|
11
|
+
}
|
|
12
|
+
get client() {
|
|
13
|
+
return this.httpClient;
|
|
14
|
+
}
|
|
15
|
+
async listEntities(entityType, adAccountUrn, start, count, context) {
|
|
16
|
+
const config = getEntityConfig(entityType);
|
|
17
|
+
await this.rateLimiter.consume(`linkedin:${adAccountUrn ?? "default"}`);
|
|
18
|
+
const params = {
|
|
19
|
+
q: "search",
|
|
20
|
+
start: String(start ?? 0),
|
|
21
|
+
count: String(Math.min(count ?? 25, 100)),
|
|
22
|
+
};
|
|
23
|
+
if (adAccountUrn && config.listScopingParam) {
|
|
24
|
+
params[config.listScopingParam] = adAccountUrn;
|
|
25
|
+
}
|
|
26
|
+
const result = (await this.httpClient.get(config.apiPath, params, context));
|
|
27
|
+
return {
|
|
28
|
+
entities: result.elements ?? [],
|
|
29
|
+
total: result.paging?.total,
|
|
30
|
+
start: result.paging?.start,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
async getEntity(entityType, entityUrn, context) {
|
|
34
|
+
const config = getEntityConfig(entityType);
|
|
35
|
+
await this.rateLimiter.consume(`linkedin:default`);
|
|
36
|
+
const encodedUrn = LinkedInHttpClient.encodeUrn(entityUrn);
|
|
37
|
+
return this.httpClient.get(`${config.apiPath}/${encodedUrn}`, undefined, context);
|
|
38
|
+
}
|
|
39
|
+
async createEntity(entityType, data, context) {
|
|
40
|
+
const config = getEntityConfig(entityType);
|
|
41
|
+
await this.rateLimiter.consume(`linkedin:default`, 3);
|
|
42
|
+
return this.httpClient.post(config.apiPath, data, context);
|
|
43
|
+
}
|
|
44
|
+
async updateEntity(entityType, entityUrn, data, context) {
|
|
45
|
+
const config = getEntityConfig(entityType);
|
|
46
|
+
await this.rateLimiter.consume(`linkedin:default`, 3);
|
|
47
|
+
const encodedUrn = LinkedInHttpClient.encodeUrn(entityUrn);
|
|
48
|
+
return this.httpClient.patch(`${config.apiPath}/${encodedUrn}`, data, context);
|
|
49
|
+
}
|
|
50
|
+
async deleteEntity(entityType, entityUrn, context) {
|
|
51
|
+
const config = getEntityConfig(entityType);
|
|
52
|
+
await this.rateLimiter.consume(`linkedin:default`, 3);
|
|
53
|
+
const encodedUrn = LinkedInHttpClient.encodeUrn(entityUrn);
|
|
54
|
+
return this.httpClient.delete(`${config.apiPath}/${encodedUrn}`, context);
|
|
55
|
+
}
|
|
56
|
+
async listAdAccounts(start, count, context) {
|
|
57
|
+
await this.rateLimiter.consume(`linkedin:default`);
|
|
58
|
+
const params = {
|
|
59
|
+
q: "search",
|
|
60
|
+
start: String(start ?? 0),
|
|
61
|
+
count: String(Math.min(count ?? 25, 100)),
|
|
62
|
+
};
|
|
63
|
+
const result = (await this.httpClient.get("/v2/adAccounts", params, context));
|
|
64
|
+
return {
|
|
65
|
+
accounts: result.elements ?? [],
|
|
66
|
+
total: result.paging?.total,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
async bulkUpdateStatus(entityType, entityUrns, status, context) {
|
|
70
|
+
const bulkResults = await executeBulkConcurrent(entityUrns, async (entityUrn) => {
|
|
71
|
+
return this.updateEntity(entityType, entityUrn, { status }, context);
|
|
72
|
+
});
|
|
73
|
+
return {
|
|
74
|
+
results: bulkResults.map((r, i) => ({
|
|
75
|
+
entityUrn: entityUrns[i],
|
|
76
|
+
success: r.success,
|
|
77
|
+
error: r.error,
|
|
78
|
+
})),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
async bulkCreateEntities(entityType, items, context) {
|
|
82
|
+
const results = await executeBulkConcurrent(items, async (data) => {
|
|
83
|
+
return this.createEntity(entityType, data, context);
|
|
84
|
+
});
|
|
85
|
+
return { results };
|
|
86
|
+
}
|
|
87
|
+
async bulkUpdateEntities(entityType, items, context) {
|
|
88
|
+
const bulkResults = await executeBulkConcurrent(items, async (item) => {
|
|
89
|
+
return this.updateEntity(entityType, item.entityUrn, item.data, context);
|
|
90
|
+
});
|
|
91
|
+
return {
|
|
92
|
+
results: bulkResults.map((r, i) => ({
|
|
93
|
+
entityUrn: items[i].entityUrn,
|
|
94
|
+
success: r.success,
|
|
95
|
+
error: r.error,
|
|
96
|
+
})),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
async adjustBids(adjustments, context) {
|
|
100
|
+
const results = [];
|
|
101
|
+
for (const adjustment of adjustments) {
|
|
102
|
+
try {
|
|
103
|
+
await this.updateEntity("campaign", adjustment.campaignUrn, { unitCost: adjustment.bidAmount }, context);
|
|
104
|
+
results.push({ campaignUrn: adjustment.campaignUrn, success: true });
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
if (error instanceof McpError && error.code === JsonRpcErrorCode.RateLimited) {
|
|
108
|
+
results.push({
|
|
109
|
+
campaignUrn: adjustment.campaignUrn,
|
|
110
|
+
success: false,
|
|
111
|
+
error: error.message,
|
|
112
|
+
});
|
|
113
|
+
for (const remaining of adjustments.slice(adjustments.indexOf(adjustment) + 1)) {
|
|
114
|
+
results.push({
|
|
115
|
+
campaignUrn: remaining.campaignUrn,
|
|
116
|
+
success: false,
|
|
117
|
+
error: "Skipped due to rate limit",
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
results.push({
|
|
123
|
+
campaignUrn: adjustment.campaignUrn,
|
|
124
|
+
success: false,
|
|
125
|
+
error: error instanceof Error ? error.message : String(error),
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return { results };
|
|
130
|
+
}
|
|
131
|
+
async searchTargeting(facetType, query, limit, context) {
|
|
132
|
+
await this.rateLimiter.consume(`linkedin:default`);
|
|
133
|
+
const params = {
|
|
134
|
+
q: "type",
|
|
135
|
+
facetType,
|
|
136
|
+
count: String(Math.min(limit ?? 20, 100)),
|
|
137
|
+
};
|
|
138
|
+
if (query) {
|
|
139
|
+
params.query = query;
|
|
140
|
+
}
|
|
141
|
+
return this.httpClient.get("/v2/adTargetingFacets", params, context);
|
|
142
|
+
}
|
|
143
|
+
async getTargetingOptions(adAccountUrn, facetType, context) {
|
|
144
|
+
await this.rateLimiter.consume(`linkedin:default`);
|
|
145
|
+
const params = {
|
|
146
|
+
q: "account",
|
|
147
|
+
account: adAccountUrn,
|
|
148
|
+
};
|
|
149
|
+
if (facetType) {
|
|
150
|
+
params.facetType = facetType;
|
|
151
|
+
}
|
|
152
|
+
return this.httpClient.get("/v2/adTargetingFacets", params, context);
|
|
153
|
+
}
|
|
154
|
+
async duplicateEntity(entityType, entityUrn, options, context) {
|
|
155
|
+
const source = await this.getEntity(entityType, entityUrn, context);
|
|
156
|
+
const copyData = { ...source };
|
|
157
|
+
delete copyData.id;
|
|
158
|
+
delete copyData.changeAuditStamps;
|
|
159
|
+
delete copyData.created;
|
|
160
|
+
delete copyData.lastModified;
|
|
161
|
+
delete copyData.review;
|
|
162
|
+
delete copyData.servingStatuses;
|
|
163
|
+
delete copyData.version;
|
|
164
|
+
delete copyData.associatedEntity;
|
|
165
|
+
if (options?.newName) {
|
|
166
|
+
copyData.name = options.newName;
|
|
167
|
+
}
|
|
168
|
+
else if (typeof copyData.name === "string") {
|
|
169
|
+
copyData.name = `Copy of ${copyData.name}`;
|
|
170
|
+
}
|
|
171
|
+
copyData.status = "DRAFT";
|
|
172
|
+
return this.createEntity(entityType, copyData, context);
|
|
173
|
+
}
|
|
174
|
+
async getDeliveryForecast(adAccountUrn, targetingCriteria, optimizationTargetType, context) {
|
|
175
|
+
await this.rateLimiter.consume(`linkedin:default`);
|
|
176
|
+
const requestBody = {
|
|
177
|
+
account: adAccountUrn,
|
|
178
|
+
targetingCriteria,
|
|
179
|
+
};
|
|
180
|
+
if (optimizationTargetType) {
|
|
181
|
+
requestBody.optimizationTargetType = optimizationTargetType;
|
|
182
|
+
}
|
|
183
|
+
return this.httpClient.post("/v2/adForecastsV2", requestBody, context);
|
|
184
|
+
}
|
|
185
|
+
async getAdPreviews(creativeUrn, adFormat, context) {
|
|
186
|
+
await this.rateLimiter.consume(`linkedin:default`);
|
|
187
|
+
const encodedUrn = LinkedInHttpClient.encodeUrn(creativeUrn);
|
|
188
|
+
const params = {};
|
|
189
|
+
if (adFormat) {
|
|
190
|
+
params.adFormat = adFormat;
|
|
191
|
+
}
|
|
192
|
+
return this.httpClient.get(`/v2/adCreativePreviews/${encodedUrn}`, params, context);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=linkedin-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linkedin-service.js","sourceRoot":"","sources":["../../../src/services/linkedin/linkedin-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
export type LinkedInCampaignStatus = "ACTIVE" | "PAUSED" | "ARCHIVED" | "COMPLETED" | "CANCELED" | "DRAFT" | "PENDING_DELETION" | "REMOVED";
|
|
2
|
+
export type LinkedInCampaignType = "TEXT_AD" | "SPONSORED_UPDATES" | "SPONSORED_INMAILS" | "DYNAMIC" | "SPONSORED_UPDATES_CAROUSEL" | "VIDEO" | "CONVERSATION" | "THOUGHT_LEADER_ADS" | "NORMALIZED_DISPLAY_AD";
|
|
3
|
+
export type LinkedInCampaignObjectiveType = "AWARENESS" | "BRAND_AWARENESS" | "ENGAGEMENT" | "JOB_APPLICANTS" | "LEAD_GENERATION" | "VIDEO_VIEWS" | "WEBSITE_CONVERSIONS" | "WEBSITE_VISITS" | "TALENT_LEADS";
|
|
4
|
+
export type LinkedInOptimizationTargetType = "ENHANCED_CONVERSION" | "NONE" | "MAX_CLICK" | "MAX_IMPRESSION" | "MAX_CONVERSION" | "MAX_VIDEO_VIEW" | "TARGET_COST_PER_CLICK" | "TARGET_COST_PER_IMPRESSION" | "TARGET_COST_PER_VIDEO_VIEW";
|
|
5
|
+
export type LinkedInCreativeStatus = "ACTIVE" | "PAUSED" | "ARCHIVED" | "COMPLETED" | "CANCELED" | "DRAFT" | "PENDING_DELETION" | "REMOVED";
|
|
6
|
+
export type LinkedInUrn = string;
|
|
7
|
+
export interface LinkedInAuditStamp {
|
|
8
|
+
actor: LinkedInUrn;
|
|
9
|
+
time: number;
|
|
10
|
+
}
|
|
11
|
+
export interface LinkedInAdAccount {
|
|
12
|
+
id: number;
|
|
13
|
+
name: string;
|
|
14
|
+
status: "ACTIVE" | "INACTIVE" | "CLOSED";
|
|
15
|
+
currency: string;
|
|
16
|
+
type: "BUSINESS" | "ENTERPRISE";
|
|
17
|
+
test: boolean;
|
|
18
|
+
created?: LinkedInAuditStamp;
|
|
19
|
+
lastModified?: LinkedInAuditStamp;
|
|
20
|
+
}
|
|
21
|
+
export interface LinkedInCampaignGroup {
|
|
22
|
+
id: number;
|
|
23
|
+
name: string;
|
|
24
|
+
status: LinkedInCampaignStatus;
|
|
25
|
+
account: LinkedInUrn;
|
|
26
|
+
created?: LinkedInAuditStamp;
|
|
27
|
+
lastModified?: LinkedInAuditStamp;
|
|
28
|
+
}
|
|
29
|
+
export interface LinkedInAmount {
|
|
30
|
+
amount: string;
|
|
31
|
+
currencyCode: string;
|
|
32
|
+
}
|
|
33
|
+
export interface LinkedInSchedule {
|
|
34
|
+
start: number;
|
|
35
|
+
end?: number;
|
|
36
|
+
}
|
|
37
|
+
export interface LinkedInLocale {
|
|
38
|
+
country: string;
|
|
39
|
+
language: string;
|
|
40
|
+
}
|
|
41
|
+
export interface LinkedInTargetingFacets {
|
|
42
|
+
locations?: LinkedInUrn[];
|
|
43
|
+
seniorities?: LinkedInUrn[];
|
|
44
|
+
jobFunctions?: LinkedInUrn[];
|
|
45
|
+
titles?: LinkedInUrn[];
|
|
46
|
+
skills?: LinkedInUrn[];
|
|
47
|
+
companies?: LinkedInUrn[];
|
|
48
|
+
industries?: LinkedInUrn[];
|
|
49
|
+
}
|
|
50
|
+
export interface LinkedInTargeting {
|
|
51
|
+
includedTargetingFacets?: LinkedInTargetingFacets;
|
|
52
|
+
excludedTargetingFacets?: LinkedInTargetingFacets;
|
|
53
|
+
}
|
|
54
|
+
export interface LinkedInCampaign {
|
|
55
|
+
id: number;
|
|
56
|
+
name: string;
|
|
57
|
+
status: LinkedInCampaignStatus;
|
|
58
|
+
type: LinkedInCampaignType;
|
|
59
|
+
campaignGroup: LinkedInUrn;
|
|
60
|
+
account: LinkedInUrn;
|
|
61
|
+
objectiveType?: LinkedInCampaignObjectiveType;
|
|
62
|
+
optimizationTargetType?: LinkedInOptimizationTargetType;
|
|
63
|
+
unitCost?: LinkedInAmount;
|
|
64
|
+
dailyBudget?: LinkedInAmount;
|
|
65
|
+
totalBudget?: LinkedInAmount;
|
|
66
|
+
runSchedule?: LinkedInSchedule;
|
|
67
|
+
targeting?: LinkedInTargeting;
|
|
68
|
+
locale?: LinkedInLocale;
|
|
69
|
+
format?: string;
|
|
70
|
+
created?: LinkedInAuditStamp;
|
|
71
|
+
lastModified?: LinkedInAuditStamp;
|
|
72
|
+
}
|
|
73
|
+
export interface LinkedInCreativeVariables {
|
|
74
|
+
data: Record<string, unknown>;
|
|
75
|
+
}
|
|
76
|
+
export interface LinkedInCreative {
|
|
77
|
+
id: number;
|
|
78
|
+
status: LinkedInCreativeStatus;
|
|
79
|
+
campaign: LinkedInUrn;
|
|
80
|
+
reference?: LinkedInUrn;
|
|
81
|
+
type?: string;
|
|
82
|
+
variables?: LinkedInCreativeVariables;
|
|
83
|
+
created?: LinkedInAuditStamp;
|
|
84
|
+
lastModified?: LinkedInAuditStamp;
|
|
85
|
+
}
|
|
86
|
+
export interface LinkedInConversionRule {
|
|
87
|
+
id: number;
|
|
88
|
+
name: string;
|
|
89
|
+
account: LinkedInUrn;
|
|
90
|
+
type: string;
|
|
91
|
+
enabled: boolean;
|
|
92
|
+
postClickAttributionWindowSize?: number;
|
|
93
|
+
viewThroughAttributionWindowSize?: number;
|
|
94
|
+
created?: LinkedInAuditStamp;
|
|
95
|
+
lastModified?: LinkedInAuditStamp;
|
|
96
|
+
}
|
|
97
|
+
export interface LinkedInDate {
|
|
98
|
+
day: number;
|
|
99
|
+
month: number;
|
|
100
|
+
year: number;
|
|
101
|
+
}
|
|
102
|
+
export interface LinkedInDateRange {
|
|
103
|
+
start: LinkedInDate;
|
|
104
|
+
end: LinkedInDate;
|
|
105
|
+
}
|
|
106
|
+
export interface LinkedInAnalyticsElement {
|
|
107
|
+
dateRange?: LinkedInDateRange;
|
|
108
|
+
impressions?: number;
|
|
109
|
+
clicks?: number;
|
|
110
|
+
totalEngagements?: number;
|
|
111
|
+
videoViews?: number;
|
|
112
|
+
opens?: number;
|
|
113
|
+
reactions?: number;
|
|
114
|
+
follows?: number;
|
|
115
|
+
companyPageClicks?: number;
|
|
116
|
+
pivot?: string;
|
|
117
|
+
pivotValue?: LinkedInUrn;
|
|
118
|
+
pivotValues?: LinkedInUrn[];
|
|
119
|
+
costInLocalCurrency?: string;
|
|
120
|
+
approximateUniqueImpressions?: number;
|
|
121
|
+
}
|
|
122
|
+
export interface LinkedInAnalyticsResponse {
|
|
123
|
+
elements: LinkedInAnalyticsElement[];
|
|
124
|
+
paging?: LinkedInPaging;
|
|
125
|
+
}
|
|
126
|
+
export interface LinkedInPaging {
|
|
127
|
+
start: number;
|
|
128
|
+
count: number;
|
|
129
|
+
total?: number;
|
|
130
|
+
}
|
|
131
|
+
export interface LinkedInElementsResponse<T> {
|
|
132
|
+
elements: T[];
|
|
133
|
+
paging?: LinkedInPaging;
|
|
134
|
+
}
|
|
135
|
+
export interface CreateLinkedInCampaignGroupRequest {
|
|
136
|
+
account: LinkedInUrn;
|
|
137
|
+
name: string;
|
|
138
|
+
status?: LinkedInCampaignStatus;
|
|
139
|
+
}
|
|
140
|
+
export interface CreateLinkedInCampaignRequest {
|
|
141
|
+
name: string;
|
|
142
|
+
account: LinkedInUrn;
|
|
143
|
+
campaignGroup: LinkedInUrn;
|
|
144
|
+
type: LinkedInCampaignType;
|
|
145
|
+
objectiveType?: LinkedInCampaignObjectiveType;
|
|
146
|
+
status?: LinkedInCampaignStatus;
|
|
147
|
+
dailyBudget?: LinkedInAmount;
|
|
148
|
+
totalBudget?: LinkedInAmount;
|
|
149
|
+
unitCost?: LinkedInAmount;
|
|
150
|
+
targeting?: LinkedInTargeting;
|
|
151
|
+
runSchedule?: LinkedInSchedule;
|
|
152
|
+
locale?: LinkedInLocale;
|
|
153
|
+
}
|
|
154
|
+
export interface CreateLinkedInCreativeRequest {
|
|
155
|
+
campaign: LinkedInUrn;
|
|
156
|
+
reference?: LinkedInUrn;
|
|
157
|
+
status?: LinkedInCreativeStatus;
|
|
158
|
+
type?: string;
|
|
159
|
+
variables?: LinkedInCreativeVariables;
|
|
160
|
+
}
|
|
161
|
+
export declare function isLinkedInCampaign(value: unknown): value is LinkedInCampaign;
|
|
162
|
+
export declare function isLinkedInCampaignGroup(value: unknown): value is LinkedInCampaignGroup;
|
|
163
|
+
export declare function isLinkedInCreative(value: unknown): value is LinkedInCreative;
|
|
164
|
+
export declare function isLinkedInAdAccount(value: unknown): value is LinkedInAdAccount;
|
|
165
|
+
export declare function isLinkedInConversionRule(value: unknown): value is LinkedInConversionRule;
|
|
166
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/linkedin/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export function isLinkedInCampaign(value) {
|
|
2
|
+
return (typeof value === "object" &&
|
|
3
|
+
value !== null &&
|
|
4
|
+
typeof value.id === "number" &&
|
|
5
|
+
typeof value.campaignGroup === "string");
|
|
6
|
+
}
|
|
7
|
+
export function isLinkedInCampaignGroup(value) {
|
|
8
|
+
return (typeof value === "object" &&
|
|
9
|
+
value !== null &&
|
|
10
|
+
typeof value.id === "number" &&
|
|
11
|
+
typeof value.account === "string");
|
|
12
|
+
}
|
|
13
|
+
export function isLinkedInCreative(value) {
|
|
14
|
+
return (typeof value === "object" &&
|
|
15
|
+
value !== null &&
|
|
16
|
+
typeof value.id === "number" &&
|
|
17
|
+
typeof value.campaign === "string");
|
|
18
|
+
}
|
|
19
|
+
export function isLinkedInAdAccount(value) {
|
|
20
|
+
return (typeof value === "object" &&
|
|
21
|
+
value !== null &&
|
|
22
|
+
typeof value.id === "number" &&
|
|
23
|
+
typeof value.currency === "string");
|
|
24
|
+
}
|
|
25
|
+
export function isLinkedInConversionRule(value) {
|
|
26
|
+
return (typeof value === "object" &&
|
|
27
|
+
value !== null &&
|
|
28
|
+
typeof value.id === "number" &&
|
|
29
|
+
typeof value.account === "string");
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/linkedin/types.ts"],"names":[],"mappings":"AAiQA,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,OAAQ,KAA0B,CAAC,EAAE,KAAK,QAAQ;QAClD,OAAQ,KAA0B,CAAC,aAAa,KAAK,QAAQ,CAC9D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,OAAQ,KAA+B,CAAC,EAAE,KAAK,QAAQ;QACvD,OAAQ,KAA+B,CAAC,OAAO,KAAK,QAAQ,CAC7D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,OAAQ,KAA0B,CAAC,EAAE,KAAK,QAAQ;QAClD,OAAQ,KAA0B,CAAC,QAAQ,KAAK,QAAQ,CACzD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,OAAQ,KAA2B,CAAC,EAAE,KAAK,QAAQ;QACnD,OAAQ,KAA2B,CAAC,QAAQ,KAAK,QAAQ,CAC1D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,OAAQ,KAAgC,CAAC,EAAE,KAAK,QAAQ;QACxD,OAAQ,KAAgC,CAAC,OAAO,KAAK,QAAQ,CAC9D,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Logger } from "pino";
|
|
2
|
+
import type { LinkedInAuthAdapter } from "../auth/linkedin-auth-adapter.js";
|
|
3
|
+
import type { RateLimiter } from "@cesteral/shared";
|
|
4
|
+
import { SessionServiceStore } from "@cesteral/shared";
|
|
5
|
+
export { SessionServiceStore } from "@cesteral/shared";
|
|
6
|
+
import { LinkedInService } from "./linkedin/linkedin-service.js";
|
|
7
|
+
import { LinkedInReportingService } from "./linkedin/linkedin-reporting-service.js";
|
|
8
|
+
export interface SessionServices {
|
|
9
|
+
linkedInService: LinkedInService;
|
|
10
|
+
linkedInReportingService: LinkedInReportingService;
|
|
11
|
+
}
|
|
12
|
+
export interface LinkedInSessionConfig {
|
|
13
|
+
baseUrl: string;
|
|
14
|
+
apiVersion: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function createSessionServices(authAdapter: LinkedInAuthAdapter, config: LinkedInSessionConfig, logger: Logger, rateLimiter: RateLimiter): SessionServices;
|
|
17
|
+
export declare const sessionServiceStore: SessionServiceStore<SessionServices>;
|
|
18
|
+
//# sourceMappingURL=session-services.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-services.d.ts","sourceRoot":"","sources":["../../src/services/session-services.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AAEpF,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,eAAe,CAAC;IACjC,wBAAwB,EAAE,wBAAwB,CAAC;CACpD;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,mBAAmB,EAChC,MAAM,EAAE,qBAAqB,EAC7B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,GACvB,eAAe,CAQjB;AAED,eAAO,MAAM,mBAAmB,sCAA6C,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { SessionServiceStore } from "@cesteral/shared";
|
|
2
|
+
export { SessionServiceStore } from "@cesteral/shared";
|
|
3
|
+
import { LinkedInHttpClient } from "./linkedin/linkedin-http-client.js";
|
|
4
|
+
import { LinkedInService } from "./linkedin/linkedin-service.js";
|
|
5
|
+
import { LinkedInReportingService } from "./linkedin/linkedin-reporting-service.js";
|
|
6
|
+
export function createSessionServices(authAdapter, config, logger, rateLimiter) {
|
|
7
|
+
const httpClient = new LinkedInHttpClient(authAdapter, config.baseUrl, config.apiVersion, logger);
|
|
8
|
+
const linkedInService = new LinkedInService(rateLimiter, httpClient);
|
|
9
|
+
const linkedInReportingService = new LinkedInReportingService(rateLimiter, httpClient);
|
|
10
|
+
return {
|
|
11
|
+
linkedInService,
|
|
12
|
+
linkedInReportingService,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export const sessionServiceStore = new SessionServiceStore();
|
|
16
|
+
//# sourceMappingURL=session-services.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-services.js","sourceRoot":"","sources":["../../src/services/session-services.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AAYpF,MAAM,UAAU,qBAAqB,CACnC,WAAgC,EAChC,MAA6B,EAC7B,MAAc,EACd,WAAwB;IAExB,MAAM,UAAU,GAAG,IAAI,kBAAkB,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAClG,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACrE,MAAM,wBAAwB,GAAG,IAAI,wBAAwB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACvF,OAAO;QACL,eAAe;QACf,wBAAwB;KACzB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,EAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/types-global/mcp.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/types-global/mcp.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/errors/index.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,KAAK,YAAY,EACjB,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/errors/index.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,QAAQ,EACR,YAAY,EAEZ,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare const withLinkedInApiSpan: <T>(operation: string, entityType: string | undefined, fn: (span: import("@opentelemetry/api").Span) => Promise<T>) => Promise<T>;
|
|
2
|
+
export declare const rateLimiter: import("@cesteral/shared").RateLimiter;
|
|
3
|
+
//# sourceMappingURL=platform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/utils/platform.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,mBAAmB,mIAAuC,CAAC;AACxE,eAAO,MAAM,WAAW,wCAGvB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { createPlatformSpanHelper, createPlatformRateLimiter } from "@cesteral/shared";
|
|
2
|
+
import { mcpConfig } from "../config/index.js";
|
|
3
|
+
export const withLinkedInApiSpan = createPlatformSpanHelper("linkedin");
|
|
4
|
+
export const rateLimiter = createPlatformRateLimiter("linkedin", mcpConfig.linkedinRateLimitPerMinute);
|
|
5
|
+
//# sourceMappingURL=platform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/utils/platform.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AACvF,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,CAAC,MAAM,mBAAmB,GAAG,wBAAwB,CAAC,UAAU,CAAC,CAAC;AACxE,MAAM,CAAC,MAAM,WAAW,GAAG,yBAAyB,CAClD,UAAU,EACV,SAAS,CAAC,0BAA0B,CACrC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../../src/utils/security/rate-limiter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI/C,eAAO,MAAM,WAAW,wCAGvB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { RateLimiter } from "@cesteral/shared";
|
|
2
|
+
import { createPlatformRateLimiter } from "@cesteral/shared";
|
|
3
|
+
import { mcpConfig } from "../../config/index.js";
|
|
4
|
+
export const rateLimiter = createPlatformRateLimiter("linkedin", mcpConfig.linkedinRateLimitPerMinute);
|
|
5
|
+
//# sourceMappingURL=rate-limiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../../src/utils/security/rate-limiter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,MAAM,CAAC,MAAM,WAAW,GAAG,yBAAyB,CAClD,UAAU,EACV,SAAS,CAAC,0BAA0B,CACrC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/telemetry/index.ts"],"names":[],"mappings":"AAGA,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/telemetry/index.ts"],"names":[],"mappings":"AAGA,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { initializeOpenTelemetry, shutdownOpenTelemetry, getOpenTelemetrySDK, isOpenTelemetryEnabled, otelLogMixin, getTracer, withSpan, withToolSpan, setSpanAttribute, recordSpanError, createPlatformSpanHelper, type Span, } from "@cesteral/shared";
|
|
2
|
+
export declare const withLinkedInApiSpan: <T>(operation: string, entityType: string | undefined, fn: (span: import("@opentelemetry/api").Span) => Promise<T>) => Promise<T>;
|
|
3
|
+
//# sourceMappingURL=tracing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracing.d.ts","sourceRoot":"","sources":["../../../src/utils/telemetry/tracing.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,wBAAwB,EACxB,KAAK,IAAI,GACV,MAAM,kBAAkB,CAAC;AAI1B,eAAO,MAAM,mBAAmB,mIAAuC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { initializeOpenTelemetry, shutdownOpenTelemetry, getOpenTelemetrySDK, isOpenTelemetryEnabled, otelLogMixin, getTracer, withSpan, withToolSpan, setSpanAttribute, recordSpanError, createPlatformSpanHelper, } from "@cesteral/shared";
|
|
2
|
+
import { createPlatformSpanHelper } from "@cesteral/shared";
|
|
3
|
+
export const withLinkedInApiSpan = createPlatformSpanHelper("linkedin");
|
|
4
|
+
//# sourceMappingURL=tracing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracing.js","sourceRoot":"","sources":["../../../src/utils/telemetry/tracing.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,wBAAwB,GAEzB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,MAAM,CAAC,MAAM,mBAAmB,GAAG,wBAAwB,CAAC,UAAU,CAAC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@cesteral/linkedin-mcp",
|
|
3
|
+
"mcpName": "io.github.cesteral/linkedin-mcp",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"description": "LinkedIn Ads MCP Server - Campaign entity management and reporting via LinkedIn Marketing API v2",
|
|
6
|
+
"license": "Apache-2.0",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/cesteral/mcp-open-advertising.git",
|
|
10
|
+
"directory": "packages/linkedin-mcp"
|
|
11
|
+
},
|
|
12
|
+
"homepage": "https://github.com/cesteral/mcp-open-advertising#readme",
|
|
13
|
+
"keywords": [
|
|
14
|
+
"mcp",
|
|
15
|
+
"model-context-protocol",
|
|
16
|
+
"advertising",
|
|
17
|
+
"linkedin-ads"
|
|
18
|
+
],
|
|
19
|
+
"files": [
|
|
20
|
+
"dist/",
|
|
21
|
+
"README.md",
|
|
22
|
+
"LICENSE.md"
|
|
23
|
+
],
|
|
24
|
+
"type": "module",
|
|
25
|
+
"main": "./dist/index.js",
|
|
26
|
+
"types": "./dist/index.d.ts",
|
|
27
|
+
"bin": {
|
|
28
|
+
"linkedin-mcp": "./dist/index.js"
|
|
29
|
+
},
|
|
30
|
+
"publishConfig": {
|
|
31
|
+
"access": "public"
|
|
32
|
+
},
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"@modelcontextprotocol/sdk": "1.27.1",
|
|
35
|
+
"pino": "^10.1.0",
|
|
36
|
+
"zod": "3.25.76",
|
|
37
|
+
"@cesteral/shared": "1.0.0"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@types/node": "^20.17.6",
|
|
41
|
+
"tsx": "^4.20.6",
|
|
42
|
+
"typescript": "^5.9.3",
|
|
43
|
+
"vitest": "^1.6.0"
|
|
44
|
+
},
|
|
45
|
+
"scripts": {
|
|
46
|
+
"build": "tsc --build",
|
|
47
|
+
"clean": "rm -rf dist *.tsbuildinfo",
|
|
48
|
+
"dev:http": "tsx watch src/index.ts",
|
|
49
|
+
"start": "node dist/index.js",
|
|
50
|
+
"typecheck": "tsc --noEmit",
|
|
51
|
+
"lint": "eslint src/",
|
|
52
|
+
"test": "vitest run",
|
|
53
|
+
"test:coverage": "vitest run --coverage"
|
|
54
|
+
}
|
|
55
|
+
}
|