@cesteral/pinterest-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 +348 -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/pinterest-auth-adapter.d.ts +38 -0
- package/dist/auth/pinterest-auth-adapter.d.ts.map +1 -0
- package/dist/auth/pinterest-auth-adapter.js +117 -0
- package/dist/auth/pinterest-auth-adapter.js.map +1 -0
- package/dist/auth/pinterest-auth-strategy.d.ts +13 -0
- package/dist/auth/pinterest-auth-strategy.d.ts.map +1 -0
- package/dist/auth/pinterest-auth-strategy.js +52 -0
- package/dist/auth/pinterest-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/generated/types.d.ts +18119 -0
- package/dist/generated/types.d.ts.map +1 -0
- package/dist/generated/types.js +2 -0
- package/dist/generated/types.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 +125 -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 +105 -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 +95 -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 +301 -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 +188 -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 +197 -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 +180 -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 +140 -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 +125 -0
- package/dist/mcp-server/resources/definitions/entity-schemas.resource.js.map +1 -0
- package/dist/mcp-server/resources/definitions/index.d.ts +7 -0
- package/dist/mcp-server/resources/definitions/index.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/index.js +58 -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 +148 -0
- package/dist/mcp-server/resources/definitions/reporting-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 +133 -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 +109 -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 +127 -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 +134 -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 +91 -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 +113 -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 +99 -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 +110 -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-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 +319 -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 +183 -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 +301 -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 +176 -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 +75 -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 +72 -0
- package/dist/mcp-server/tools/definitions/get-targeting-options.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/index.d.ts +25 -0
- package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/index.js +75 -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 +180 -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 +116 -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 +103 -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/submit-report.tool.d.ts +164 -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 +118 -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 +81 -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 +73 -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 +82 -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 +100 -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 +169 -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 +154 -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 +105 -0
- package/dist/mcp-server/tools/utils/entity-mapping.js.map +1 -0
- package/dist/mcp-server/tools/utils/media-types.d.ts +14 -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 +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/pinterest/pinterest-http-client.d.ts +22 -0
- package/dist/services/pinterest/pinterest-http-client.d.ts.map +1 -0
- package/dist/services/pinterest/pinterest-http-client.js +149 -0
- package/dist/services/pinterest/pinterest-http-client.js.map +1 -0
- package/dist/services/pinterest/pinterest-reporting-service.d.ts +60 -0
- package/dist/services/pinterest/pinterest-reporting-service.d.ts.map +1 -0
- package/dist/services/pinterest/pinterest-reporting-service.js +132 -0
- package/dist/services/pinterest/pinterest-reporting-service.js.map +1 -0
- package/dist/services/pinterest/pinterest-service.d.ts +110 -0
- package/dist/services/pinterest/pinterest-service.d.ts.map +1 -0
- package/dist/services/pinterest/pinterest-service.js +238 -0
- package/dist/services/pinterest/pinterest-service.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 +23 -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 +57 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { extractHeader, fetchWithTimeout, fingerprintCredentials, JsonRpcErrorCode, McpError, OAuth2RefreshAdapterBase, } from "@cesteral/shared";
|
|
2
|
+
async function fetchPinterestUserId(token, baseUrl) {
|
|
3
|
+
const response = await fetchWithTimeout(`${baseUrl}/v5/user_account`, 10_000, undefined, {
|
|
4
|
+
method: "GET",
|
|
5
|
+
headers: {
|
|
6
|
+
Authorization: `Bearer ${token}`,
|
|
7
|
+
"Content-Type": "application/json",
|
|
8
|
+
},
|
|
9
|
+
});
|
|
10
|
+
if (!response.ok) {
|
|
11
|
+
const errorBody = await response.text().catch(() => "");
|
|
12
|
+
throw new McpError(JsonRpcErrorCode.Unauthorized, `Pinterest token validation HTTP error: ${response.status} ${response.statusText}. ${errorBody.substring(0, 200)}`);
|
|
13
|
+
}
|
|
14
|
+
const data = (await response.json());
|
|
15
|
+
return data.username ?? "unknown";
|
|
16
|
+
}
|
|
17
|
+
export class PinterestAccessTokenAdapter {
|
|
18
|
+
accessToken;
|
|
19
|
+
_adAccountId;
|
|
20
|
+
baseUrl;
|
|
21
|
+
validated = false;
|
|
22
|
+
_userId = "";
|
|
23
|
+
constructor(accessToken, _adAccountId, baseUrl = "https://api.pinterest.com") {
|
|
24
|
+
this.accessToken = accessToken;
|
|
25
|
+
this._adAccountId = _adAccountId;
|
|
26
|
+
this.baseUrl = baseUrl;
|
|
27
|
+
}
|
|
28
|
+
get userId() {
|
|
29
|
+
return this._userId;
|
|
30
|
+
}
|
|
31
|
+
get adAccountId() {
|
|
32
|
+
return this._adAccountId;
|
|
33
|
+
}
|
|
34
|
+
async getAccessToken() {
|
|
35
|
+
return this.accessToken;
|
|
36
|
+
}
|
|
37
|
+
async validate() {
|
|
38
|
+
if (this.validated)
|
|
39
|
+
return;
|
|
40
|
+
this._userId = await fetchPinterestUserId(this.accessToken, this.baseUrl);
|
|
41
|
+
this.validated = true;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export class PinterestRefreshTokenAdapter extends OAuth2RefreshAdapterBase {
|
|
45
|
+
_adAccountId;
|
|
46
|
+
baseUrl;
|
|
47
|
+
_userId = "";
|
|
48
|
+
constructor(credentials, _adAccountId, baseUrl = "https://api.pinterest.com") {
|
|
49
|
+
super({
|
|
50
|
+
platformName: "Pinterest",
|
|
51
|
+
credentials,
|
|
52
|
+
requestToken: async (refreshToken) => {
|
|
53
|
+
const response = await fetchWithTimeout("https://api.pinterest.com/v5/oauth/token", 10_000, undefined, {
|
|
54
|
+
method: "POST",
|
|
55
|
+
headers: {
|
|
56
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
57
|
+
Authorization: `Basic ${Buffer.from(`${credentials.appId}:${credentials.appSecret}`).toString("base64")}`,
|
|
58
|
+
},
|
|
59
|
+
body: new URLSearchParams({
|
|
60
|
+
grant_type: "refresh_token",
|
|
61
|
+
refresh_token: refreshToken,
|
|
62
|
+
scope: "ads:read,ads:write",
|
|
63
|
+
}).toString(),
|
|
64
|
+
});
|
|
65
|
+
if (!response.ok) {
|
|
66
|
+
const errorBody = await response.text().catch(() => "");
|
|
67
|
+
throw new McpError(JsonRpcErrorCode.InternalError, `Pinterest token refresh failed: ${response.status} ${response.statusText}. ${errorBody.substring(0, 200)}`);
|
|
68
|
+
}
|
|
69
|
+
return (await response.json());
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
this._adAccountId = _adAccountId;
|
|
73
|
+
this.baseUrl = baseUrl;
|
|
74
|
+
}
|
|
75
|
+
get userId() {
|
|
76
|
+
return this._userId;
|
|
77
|
+
}
|
|
78
|
+
get adAccountId() {
|
|
79
|
+
return this._adAccountId;
|
|
80
|
+
}
|
|
81
|
+
async validate() {
|
|
82
|
+
const token = await this.getAccessToken();
|
|
83
|
+
this._userId = await fetchPinterestUserId(token, this.baseUrl);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
export function parsePinterestRefreshCredentialsFromHeaders(headers) {
|
|
87
|
+
const appId = extractHeader(headers, "x-pinterest-app-id");
|
|
88
|
+
const appSecret = extractHeader(headers, "x-pinterest-app-secret");
|
|
89
|
+
const refreshToken = extractHeader(headers, "x-pinterest-refresh-token");
|
|
90
|
+
if (!appId || !appSecret || !refreshToken) {
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
return { appId, appSecret, refreshToken };
|
|
94
|
+
}
|
|
95
|
+
export function parsePinterestTokenFromHeaders(headers) {
|
|
96
|
+
const authHeader = extractHeader(headers, "authorization");
|
|
97
|
+
if (!authHeader) {
|
|
98
|
+
throw new McpError(JsonRpcErrorCode.Unauthorized, "Missing required Authorization header");
|
|
99
|
+
}
|
|
100
|
+
const match = authHeader.match(/^Bearer\s+(.+)$/i);
|
|
101
|
+
if (!match || !match[1]) {
|
|
102
|
+
throw new McpError(JsonRpcErrorCode.Unauthorized, "Authorization header must use Bearer scheme");
|
|
103
|
+
}
|
|
104
|
+
return match[1];
|
|
105
|
+
}
|
|
106
|
+
export function getPinterestAdvertiserIdFromHeaders(headers) {
|
|
107
|
+
const adAccountId = extractHeader(headers, "x-pinterest-advertiser-id") ??
|
|
108
|
+
extractHeader(headers, "X-Pinterest-Advertiser-Id");
|
|
109
|
+
if (!adAccountId) {
|
|
110
|
+
throw new McpError(JsonRpcErrorCode.InvalidRequest, "Missing required X-Pinterest-Advertiser-Id header");
|
|
111
|
+
}
|
|
112
|
+
return adAccountId;
|
|
113
|
+
}
|
|
114
|
+
export function getPinterestCredentialFingerprint(accessToken, adAccountId) {
|
|
115
|
+
return fingerprintCredentials(accessToken, adAccountId);
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=pinterest-auth-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pinterest-auth-adapter.js","sourceRoot":"","sources":["../../src/auth/pinterest-auth-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Logger } from "pino";
|
|
2
|
+
import { BearerAuthStrategyBase, type BearerAdapterResult } from "@cesteral/shared";
|
|
3
|
+
export declare class PinterestBearerAuthStrategy extends BearerAuthStrategyBase {
|
|
4
|
+
private readonly baseUrl;
|
|
5
|
+
protected readonly authType = "pinterest-bearer";
|
|
6
|
+
protected readonly platformName = "Pinterest";
|
|
7
|
+
constructor(baseUrl: string, logger?: Logger);
|
|
8
|
+
protected resolveRefreshBranch(headers: Record<string, string | string[] | undefined>): Promise<BearerAdapterResult | null>;
|
|
9
|
+
protected resolveAccessBranch(headers: Record<string, string | string[] | undefined>): Promise<BearerAdapterResult>;
|
|
10
|
+
protected getRefreshFingerprint(headers: Record<string, string | string[] | undefined>): string | undefined;
|
|
11
|
+
protected getTokenFingerprint(headers: Record<string, string | string[] | undefined>): string;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=pinterest-auth-strategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pinterest-auth-strategy.d.ts","sourceRoot":"","sources":["../../src/auth/pinterest-auth-strategy.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,EAAE,sBAAsB,EAAE,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAUpF,qBAAa,2BAA4B,SAAQ,sBAAsB;IAKnE,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJ1B,SAAS,CAAC,QAAQ,CAAC,QAAQ,sBAAsB;IACjD,SAAS,CAAC,QAAQ,CAAC,YAAY,eAAe;gBAG3B,OAAO,EAAE,MAAM,EAChC,MAAM,CAAC,EAAE,MAAM;cAKD,oBAAoB,CAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,GACrD,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;cAkBtB,mBAAmB,CACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,GACrD,OAAO,CAAC,mBAAmB,CAAC;IAe/B,SAAS,CAAC,qBAAqB,CAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,GACrD,MAAM,GAAG,SAAS;IAOrB,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,MAAM;CAK9F"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { BearerAuthStrategyBase } from "@cesteral/shared";
|
|
2
|
+
import { PinterestAccessTokenAdapter, PinterestRefreshTokenAdapter, parsePinterestTokenFromHeaders, parsePinterestRefreshCredentialsFromHeaders, getPinterestAdvertiserIdFromHeaders, getPinterestCredentialFingerprint, } from "./pinterest-auth-adapter.js";
|
|
3
|
+
export class PinterestBearerAuthStrategy extends BearerAuthStrategyBase {
|
|
4
|
+
baseUrl;
|
|
5
|
+
authType = "pinterest-bearer";
|
|
6
|
+
platformName = "Pinterest";
|
|
7
|
+
constructor(baseUrl, logger) {
|
|
8
|
+
super(logger);
|
|
9
|
+
this.baseUrl = baseUrl;
|
|
10
|
+
}
|
|
11
|
+
async resolveRefreshBranch(headers) {
|
|
12
|
+
const refreshCreds = parsePinterestRefreshCredentialsFromHeaders(headers);
|
|
13
|
+
if (!refreshCreds)
|
|
14
|
+
return null;
|
|
15
|
+
const adAccountId = getPinterestAdvertiserIdFromHeaders(headers);
|
|
16
|
+
const adapter = new PinterestRefreshTokenAdapter(refreshCreds, adAccountId, this.baseUrl);
|
|
17
|
+
await adapter.validate();
|
|
18
|
+
return {
|
|
19
|
+
adapter,
|
|
20
|
+
fingerprint: getPinterestCredentialFingerprint(refreshCreds.appId, adAccountId),
|
|
21
|
+
userId: adapter.userId,
|
|
22
|
+
authFlow: "refresh-token",
|
|
23
|
+
logContext: { adAccountId },
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
async resolveAccessBranch(headers) {
|
|
27
|
+
const token = parsePinterestTokenFromHeaders(headers);
|
|
28
|
+
const adAccountId = getPinterestAdvertiserIdFromHeaders(headers);
|
|
29
|
+
const adapter = new PinterestAccessTokenAdapter(token, adAccountId, this.baseUrl);
|
|
30
|
+
await adapter.validate();
|
|
31
|
+
return {
|
|
32
|
+
adapter,
|
|
33
|
+
fingerprint: getPinterestCredentialFingerprint(token, adAccountId),
|
|
34
|
+
userId: adapter.userId,
|
|
35
|
+
authFlow: "static-token",
|
|
36
|
+
logContext: { adAccountId },
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
getRefreshFingerprint(headers) {
|
|
40
|
+
const refreshCreds = parsePinterestRefreshCredentialsFromHeaders(headers);
|
|
41
|
+
if (!refreshCreds)
|
|
42
|
+
return undefined;
|
|
43
|
+
const adAccountId = getPinterestAdvertiserIdFromHeaders(headers);
|
|
44
|
+
return getPinterestCredentialFingerprint(refreshCreds.appId, adAccountId);
|
|
45
|
+
}
|
|
46
|
+
getTokenFingerprint(headers) {
|
|
47
|
+
const token = parsePinterestTokenFromHeaders(headers);
|
|
48
|
+
const adAccountId = getPinterestAdvertiserIdFromHeaders(headers);
|
|
49
|
+
return getPinterestCredentialFingerprint(token, adAccountId);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=pinterest-auth-strategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pinterest-auth-strategy.js","sourceRoot":"","sources":["../../src/auth/pinterest-auth-strategy.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,sBAAsB,EAA4B,MAAM,kBAAkB,CAAC;AACpF,OAAO,EACL,2BAA2B,EAC3B,4BAA4B,EAC5B,8BAA8B,EAC9B,2CAA2C,EAC3C,mCAAmC,EACnC,iCAAiC,GAClC,MAAM,6BAA6B,CAAC;AAErC,MAAM,OAAO,2BAA4B,SAAQ,sBAAsB;IAKlD;IAJA,QAAQ,GAAG,kBAAkB,CAAC;IAC9B,YAAY,GAAG,WAAW,CAAC;IAE9C,YACmB,OAAe,EAChC,MAAe;QAEf,KAAK,CAAC,MAAM,CAAC,CAAC;QAHG,YAAO,GAAP,OAAO,CAAQ;IAIlC,CAAC;IAES,KAAK,CAAC,oBAAoB,CAClC,OAAsD;QAEtD,MAAM,YAAY,GAAG,2CAA2C,CAAC,OAAO,CAAC,CAAC;QAC1E,IAAI,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC;QAE/B,MAAM,WAAW,GAAG,mCAAmC,CAAC,OAAO,CAAC,CAAC;QACjE,MAAM,OAAO,GAAG,IAAI,4BAA4B,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1F,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;QAEzB,OAAO;YACL,OAAO;YAEP,WAAW,EAAE,iCAAiC,CAAC,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC;YAC/E,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,eAAe;YACzB,UAAU,EAAE,EAAE,WAAW,EAAE;SAC5B,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,mBAAmB,CACjC,OAAsD;QAEtD,MAAM,KAAK,GAAG,8BAA8B,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,WAAW,GAAG,mCAAmC,CAAC,OAAO,CAAC,CAAC;QACjE,MAAM,OAAO,GAAG,IAAI,2BAA2B,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAClF,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;QAEzB,OAAO;YACL,OAAO;YACP,WAAW,EAAE,iCAAiC,CAAC,KAAK,EAAE,WAAW,CAAC;YAClE,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,cAAc;YACxB,UAAU,EAAE,EAAE,WAAW,EAAE;SAC5B,CAAC;IACJ,CAAC;IAES,qBAAqB,CAC7B,OAAsD;QAEtD,MAAM,YAAY,GAAG,2CAA2C,CAAC,OAAO,CAAC,CAAC;QAC1E,IAAI,CAAC,YAAY;YAAE,OAAO,SAAS,CAAC;QACpC,MAAM,WAAW,GAAG,mCAAmC,CAAC,OAAO,CAAC,CAAC;QACjE,OAAO,iCAAiC,CAAC,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC5E,CAAC;IAES,mBAAmB,CAAC,OAAsD;QAClF,MAAM,KAAK,GAAG,8BAA8B,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,WAAW,GAAG,mCAAmC,CAAC,OAAO,CAAC,CAAC;QACjE,OAAO,iCAAiC,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC/D,CAAC;CACF"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
declare const ConfigSchema: z.ZodObject<{
|
|
3
|
+
host: z.ZodDefault<z.ZodString>;
|
|
4
|
+
nodeEnv: z.ZodDefault<z.ZodEnum<["development", "production", "test"]>>;
|
|
5
|
+
mcpStatefulSessionTimeoutMs: z.ZodDefault<z.ZodNumber>;
|
|
6
|
+
mcpAuthSecretKey: z.ZodOptional<z.ZodString>;
|
|
7
|
+
mcpAllowedOrigins: z.ZodOptional<z.ZodString>;
|
|
8
|
+
logLevel: z.ZodDefault<z.ZodEnum<["debug", "info", "notice", "warning", "error"]>>;
|
|
9
|
+
mcpLogLevel: z.ZodDefault<z.ZodEnum<["debug", "info", "notice", "warning", "error"]>>;
|
|
10
|
+
otelEnabled: z.ZodDefault<z.ZodBoolean>;
|
|
11
|
+
otelExporterOtlpTracesEndpoint: z.ZodOptional<z.ZodString>;
|
|
12
|
+
otelExporterOtlpMetricsEndpoint: z.ZodOptional<z.ZodString>;
|
|
13
|
+
gcsBucketName: z.ZodOptional<z.ZodString>;
|
|
14
|
+
} & {
|
|
15
|
+
serviceName: z.ZodDefault<z.ZodString>;
|
|
16
|
+
port: z.ZodDefault<z.ZodNumber>;
|
|
17
|
+
otelServiceName: z.ZodDefault<z.ZodString>;
|
|
18
|
+
mcpAuthMode: z.ZodDefault<z.ZodEnum<["pinterest-bearer", "jwt", "none"]>>;
|
|
19
|
+
pinterestApiBaseUrl: z.ZodDefault<z.ZodString>;
|
|
20
|
+
pinterestApiVersion: z.ZodDefault<z.ZodString>;
|
|
21
|
+
pinterestRateLimitPerMinute: z.ZodDefault<z.ZodNumber>;
|
|
22
|
+
pinterestAccessToken: z.ZodOptional<z.ZodString>;
|
|
23
|
+
pinterestAdAccountId: z.ZodOptional<z.ZodString>;
|
|
24
|
+
pinterestAppId: z.ZodOptional<z.ZodString>;
|
|
25
|
+
pinterestAppSecret: z.ZodOptional<z.ZodString>;
|
|
26
|
+
pinterestRefreshToken: z.ZodOptional<z.ZodString>;
|
|
27
|
+
pinterestReportPollIntervalMs: z.ZodDefault<z.ZodNumber>;
|
|
28
|
+
pinterestReportMaxPollAttempts: z.ZodDefault<z.ZodNumber>;
|
|
29
|
+
pinterestVideoUploadPollIntervalMs: z.ZodDefault<z.ZodNumber>;
|
|
30
|
+
pinterestVideoUploadMaxPollAttempts: z.ZodDefault<z.ZodNumber>;
|
|
31
|
+
}, "strip", z.ZodTypeAny, {
|
|
32
|
+
serviceName: string;
|
|
33
|
+
port: number;
|
|
34
|
+
otelServiceName: string;
|
|
35
|
+
mcpAuthMode: "pinterest-bearer" | "jwt" | "none";
|
|
36
|
+
pinterestApiBaseUrl: string;
|
|
37
|
+
pinterestApiVersion: string;
|
|
38
|
+
pinterestRateLimitPerMinute: number;
|
|
39
|
+
pinterestReportPollIntervalMs: number;
|
|
40
|
+
pinterestReportMaxPollAttempts: number;
|
|
41
|
+
pinterestVideoUploadPollIntervalMs: number;
|
|
42
|
+
pinterestVideoUploadMaxPollAttempts: number;
|
|
43
|
+
host: string;
|
|
44
|
+
nodeEnv: "development" | "production" | "test";
|
|
45
|
+
mcpStatefulSessionTimeoutMs: number;
|
|
46
|
+
logLevel: "debug" | "info" | "notice" | "warning" | "error";
|
|
47
|
+
mcpLogLevel: "debug" | "info" | "notice" | "warning" | "error";
|
|
48
|
+
otelEnabled: boolean;
|
|
49
|
+
pinterestAccessToken?: string | undefined;
|
|
50
|
+
pinterestAdAccountId?: string | undefined;
|
|
51
|
+
pinterestAppId?: string | undefined;
|
|
52
|
+
pinterestAppSecret?: string | undefined;
|
|
53
|
+
pinterestRefreshToken?: string | undefined;
|
|
54
|
+
mcpAuthSecretKey?: string | undefined;
|
|
55
|
+
mcpAllowedOrigins?: string | undefined;
|
|
56
|
+
otelExporterOtlpTracesEndpoint?: string | undefined;
|
|
57
|
+
otelExporterOtlpMetricsEndpoint?: string | undefined;
|
|
58
|
+
gcsBucketName?: string | undefined;
|
|
59
|
+
}, {
|
|
60
|
+
serviceName?: string | undefined;
|
|
61
|
+
port?: number | undefined;
|
|
62
|
+
otelServiceName?: string | undefined;
|
|
63
|
+
mcpAuthMode?: "pinterest-bearer" | "jwt" | "none" | undefined;
|
|
64
|
+
pinterestApiBaseUrl?: string | undefined;
|
|
65
|
+
pinterestApiVersion?: string | undefined;
|
|
66
|
+
pinterestRateLimitPerMinute?: number | undefined;
|
|
67
|
+
pinterestAccessToken?: string | undefined;
|
|
68
|
+
pinterestAdAccountId?: string | undefined;
|
|
69
|
+
pinterestAppId?: string | undefined;
|
|
70
|
+
pinterestAppSecret?: string | undefined;
|
|
71
|
+
pinterestRefreshToken?: string | undefined;
|
|
72
|
+
pinterestReportPollIntervalMs?: number | undefined;
|
|
73
|
+
pinterestReportMaxPollAttempts?: number | undefined;
|
|
74
|
+
pinterestVideoUploadPollIntervalMs?: number | undefined;
|
|
75
|
+
pinterestVideoUploadMaxPollAttempts?: number | undefined;
|
|
76
|
+
host?: string | undefined;
|
|
77
|
+
nodeEnv?: "development" | "production" | "test" | undefined;
|
|
78
|
+
mcpStatefulSessionTimeoutMs?: number | undefined;
|
|
79
|
+
mcpAuthSecretKey?: string | undefined;
|
|
80
|
+
mcpAllowedOrigins?: string | undefined;
|
|
81
|
+
logLevel?: "debug" | "info" | "notice" | "warning" | "error" | undefined;
|
|
82
|
+
mcpLogLevel?: "debug" | "info" | "notice" | "warning" | "error" | undefined;
|
|
83
|
+
otelEnabled?: boolean | undefined;
|
|
84
|
+
otelExporterOtlpTracesEndpoint?: string | undefined;
|
|
85
|
+
otelExporterOtlpMetricsEndpoint?: string | undefined;
|
|
86
|
+
gcsBucketName?: string | undefined;
|
|
87
|
+
}>;
|
|
88
|
+
export type AppConfig = z.infer<typeof ConfigSchema>;
|
|
89
|
+
export declare function parseConfig(): AppConfig;
|
|
90
|
+
export declare const mcpConfig: {
|
|
91
|
+
serviceName: string;
|
|
92
|
+
port: number;
|
|
93
|
+
otelServiceName: string;
|
|
94
|
+
mcpAuthMode: "pinterest-bearer" | "jwt" | "none";
|
|
95
|
+
pinterestApiBaseUrl: string;
|
|
96
|
+
pinterestApiVersion: string;
|
|
97
|
+
pinterestRateLimitPerMinute: number;
|
|
98
|
+
pinterestReportPollIntervalMs: number;
|
|
99
|
+
pinterestReportMaxPollAttempts: number;
|
|
100
|
+
pinterestVideoUploadPollIntervalMs: number;
|
|
101
|
+
pinterestVideoUploadMaxPollAttempts: number;
|
|
102
|
+
host: string;
|
|
103
|
+
nodeEnv: "development" | "production" | "test";
|
|
104
|
+
mcpStatefulSessionTimeoutMs: number;
|
|
105
|
+
logLevel: "debug" | "info" | "notice" | "warning" | "error";
|
|
106
|
+
mcpLogLevel: "debug" | "info" | "notice" | "warning" | "error";
|
|
107
|
+
otelEnabled: boolean;
|
|
108
|
+
pinterestAccessToken?: string | undefined;
|
|
109
|
+
pinterestAdAccountId?: string | undefined;
|
|
110
|
+
pinterestAppId?: string | undefined;
|
|
111
|
+
pinterestAppSecret?: string | undefined;
|
|
112
|
+
pinterestRefreshToken?: string | undefined;
|
|
113
|
+
mcpAuthSecretKey?: string | undefined;
|
|
114
|
+
mcpAllowedOrigins?: string | undefined;
|
|
115
|
+
otelExporterOtlpTracesEndpoint?: string | undefined;
|
|
116
|
+
otelExporterOtlpMetricsEndpoint?: string | undefined;
|
|
117
|
+
gcsBucketName?: string | undefined;
|
|
118
|
+
};
|
|
119
|
+
export {};
|
|
120
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAYxB,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiChB,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAErD,wBAAgB,WAAW,IAAI,SAAS,CA6CvC;AAED,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAgB,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { loadDotEnv, BaseConfigSchema, getBaseEnvConfig, parseConfigWithSchema, getDefaultHost, } from "@cesteral/shared";
|
|
3
|
+
loadDotEnv();
|
|
4
|
+
const ConfigSchema = BaseConfigSchema.extend({
|
|
5
|
+
serviceName: z.string().default("pinterest-mcp"),
|
|
6
|
+
port: z.number().int().min(1).max(65535).default(3011),
|
|
7
|
+
otelServiceName: z.string().default("pinterest-mcp"),
|
|
8
|
+
mcpAuthMode: z.enum(["pinterest-bearer", "jwt", "none"]).default("pinterest-bearer"),
|
|
9
|
+
pinterestApiBaseUrl: z.string().url().default("https://api.pinterest.com"),
|
|
10
|
+
pinterestApiVersion: z.string().default("v5"),
|
|
11
|
+
pinterestRateLimitPerMinute: z.number().default(10),
|
|
12
|
+
pinterestAccessToken: z.string().optional(),
|
|
13
|
+
pinterestAdAccountId: z.string().optional(),
|
|
14
|
+
pinterestAppId: z.string().optional(),
|
|
15
|
+
pinterestAppSecret: z.string().optional(),
|
|
16
|
+
pinterestRefreshToken: z.string().optional(),
|
|
17
|
+
pinterestReportPollIntervalMs: z.number().default(2_000),
|
|
18
|
+
pinterestReportMaxPollAttempts: z.number().default(30),
|
|
19
|
+
pinterestVideoUploadPollIntervalMs: z.number().default(20_000),
|
|
20
|
+
pinterestVideoUploadMaxPollAttempts: z.number().default(30),
|
|
21
|
+
});
|
|
22
|
+
export function parseConfig() {
|
|
23
|
+
const defaultHost = getDefaultHost();
|
|
24
|
+
const rawConfig = {
|
|
25
|
+
...getBaseEnvConfig(defaultHost),
|
|
26
|
+
serviceName: process.env.SERVICE_NAME,
|
|
27
|
+
...(process.env.PINTEREST_MCP_PORT ? { port: Number(process.env.PINTEREST_MCP_PORT) } : {}),
|
|
28
|
+
host: process.env.PINTEREST_MCP_HOST || defaultHost,
|
|
29
|
+
pinterestApiBaseUrl: process.env.PINTEREST_API_BASE_URL,
|
|
30
|
+
pinterestApiVersion: process.env.PINTEREST_API_VERSION,
|
|
31
|
+
pinterestRateLimitPerMinute: process.env.PINTEREST_RATE_LIMIT_PER_MINUTE
|
|
32
|
+
? Number(process.env.PINTEREST_RATE_LIMIT_PER_MINUTE)
|
|
33
|
+
: undefined,
|
|
34
|
+
pinterestAccessToken: process.env.PINTEREST_ACCESS_TOKEN,
|
|
35
|
+
pinterestAdAccountId: process.env.PINTEREST_AD_ACCOUNT_ID,
|
|
36
|
+
pinterestAppId: process.env.PINTEREST_APP_ID,
|
|
37
|
+
pinterestAppSecret: process.env.PINTEREST_APP_SECRET,
|
|
38
|
+
pinterestRefreshToken: process.env.PINTEREST_REFRESH_TOKEN,
|
|
39
|
+
pinterestReportPollIntervalMs: process.env.PINTEREST_REPORT_POLL_INTERVAL_MS
|
|
40
|
+
? Number(process.env.PINTEREST_REPORT_POLL_INTERVAL_MS)
|
|
41
|
+
: undefined,
|
|
42
|
+
pinterestReportMaxPollAttempts: process.env.PINTEREST_REPORT_MAX_POLL_ATTEMPTS
|
|
43
|
+
? Number(process.env.PINTEREST_REPORT_MAX_POLL_ATTEMPTS)
|
|
44
|
+
: undefined,
|
|
45
|
+
pinterestVideoUploadPollIntervalMs: process.env.PINTEREST_VIDEO_UPLOAD_POLL_INTERVAL_MS
|
|
46
|
+
? Number(process.env.PINTEREST_VIDEO_UPLOAD_POLL_INTERVAL_MS)
|
|
47
|
+
: undefined,
|
|
48
|
+
pinterestVideoUploadMaxPollAttempts: process.env.PINTEREST_VIDEO_UPLOAD_MAX_POLL_ATTEMPTS
|
|
49
|
+
? Number(process.env.PINTEREST_VIDEO_UPLOAD_MAX_POLL_ATTEMPTS)
|
|
50
|
+
: undefined,
|
|
51
|
+
};
|
|
52
|
+
return parseConfigWithSchema(ConfigSchema, rawConfig);
|
|
53
|
+
}
|
|
54
|
+
export const mcpConfig = parseConfig();
|
|
55
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
|