@pdfgate/mcp-server 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 +21 -0
- package/README.md +84 -0
- package/dist/client.d.ts +5 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +25 -0
- package/dist/client.js.map +1 -0
- package/dist/http.d.ts +3 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +45 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/compress-pdf.d.ts +3 -0
- package/dist/tools/compress-pdf.d.ts.map +1 -0
- package/dist/tools/compress-pdf.js +29 -0
- package/dist/tools/compress-pdf.js.map +1 -0
- package/dist/tools/create-envelope.d.ts +3 -0
- package/dist/tools/create-envelope.d.ts.map +1 -0
- package/dist/tools/create-envelope.js +33 -0
- package/dist/tools/create-envelope.js.map +1 -0
- package/dist/tools/create-webhook.d.ts +3 -0
- package/dist/tools/create-webhook.d.ts.map +1 -0
- package/dist/tools/create-webhook.js +29 -0
- package/dist/tools/create-webhook.js.map +1 -0
- package/dist/tools/delete-document.d.ts +3 -0
- package/dist/tools/delete-document.d.ts.map +1 -0
- package/dist/tools/delete-document.js +17 -0
- package/dist/tools/delete-document.js.map +1 -0
- package/dist/tools/delete-webhook.d.ts +3 -0
- package/dist/tools/delete-webhook.d.ts.map +1 -0
- package/dist/tools/delete-webhook.js +17 -0
- package/dist/tools/delete-webhook.js.map +1 -0
- package/dist/tools/extract-pdf-data.d.ts +3 -0
- package/dist/tools/extract-pdf-data.d.ts.map +1 -0
- package/dist/tools/extract-pdf-data.js +17 -0
- package/dist/tools/extract-pdf-data.js.map +1 -0
- package/dist/tools/flatten-pdf.d.ts +3 -0
- package/dist/tools/flatten-pdf.d.ts.map +1 -0
- package/dist/tools/flatten-pdf.js +25 -0
- package/dist/tools/flatten-pdf.js.map +1 -0
- package/dist/tools/generate-pdf.d.ts +3 -0
- package/dist/tools/generate-pdf.d.ts.map +1 -0
- package/dist/tools/generate-pdf.js +68 -0
- package/dist/tools/generate-pdf.js.map +1 -0
- package/dist/tools/get-document.d.ts +3 -0
- package/dist/tools/get-document.d.ts.map +1 -0
- package/dist/tools/get-document.js +24 -0
- package/dist/tools/get-document.js.map +1 -0
- package/dist/tools/get-envelope.d.ts +3 -0
- package/dist/tools/get-envelope.d.ts.map +1 -0
- package/dist/tools/get-envelope.js +17 -0
- package/dist/tools/get-envelope.js.map +1 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +31 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/protect-pdf.d.ts +3 -0
- package/dist/tools/protect-pdf.d.ts.map +1 -0
- package/dist/tools/protect-pdf.js +52 -0
- package/dist/tools/protect-pdf.js.map +1 -0
- package/dist/tools/send-envelope.d.ts +3 -0
- package/dist/tools/send-envelope.d.ts.map +1 -0
- package/dist/tools/send-envelope.js +17 -0
- package/dist/tools/send-envelope.js.map +1 -0
- package/dist/tools/upload-pdf.d.ts +3 -0
- package/dist/tools/upload-pdf.d.ts.map +1 -0
- package/dist/tools/upload-pdf.js +33 -0
- package/dist/tools/upload-pdf.js.map +1 -0
- package/dist/tools/watermark-pdf.d.ts +3 -0
- package/dist/tools/watermark-pdf.d.ts.map +1 -0
- package/dist/tools/watermark-pdf.js +81 -0
- package/dist/tools/watermark-pdf.js.map +1 -0
- package/dist/webhooks/secrets.d.ts +4 -0
- package/dist/webhooks/secrets.d.ts.map +1 -0
- package/dist/webhooks/secrets.js +19 -0
- package/dist/webhooks/secrets.js.map +1 -0
- package/dist/webhooks/server.d.ts +3 -0
- package/dist/webhooks/server.d.ts.map +1 -0
- package/dist/webhooks/server.js +42 -0
- package/dist/webhooks/server.js.map +1 -0
- package/dist/webhooks/store.d.ts +13 -0
- package/dist/webhooks/store.d.ts.map +1 -0
- package/dist/webhooks/store.js +11 -0
- package/dist/webhooks/store.js.map +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { getClient } from "../client.js";
|
|
3
|
+
export function register(server) {
|
|
4
|
+
server.tool("get_document", "Retrieve metadata for a stored PDFGate document by its ID.", {
|
|
5
|
+
documentId: z.string().describe("The document ID"),
|
|
6
|
+
preSignedUrlExpiresIn: z
|
|
7
|
+
.number()
|
|
8
|
+
.int()
|
|
9
|
+
.min(60)
|
|
10
|
+
.max(86400)
|
|
11
|
+
.optional()
|
|
12
|
+
.describe("Generate a fresh pre-signed download URL expiring in this many seconds (60–86400)"),
|
|
13
|
+
}, async ({ documentId, preSignedUrlExpiresIn }) => {
|
|
14
|
+
try {
|
|
15
|
+
const result = await getClient().getDocument({ id: documentId, preSignedUrlExpiresIn });
|
|
16
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
20
|
+
return { content: [{ type: "text", text: `Error: ${msg}` }], isError: true };
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=get-document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-document.js","sourceRoot":"","sources":["../../src/tools/get-document.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,cAAc,EACd,4DAA4D,EAC5D;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAClD,qBAAqB,EAAE,CAAC;aACrB,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,EAAE,CAAC;aACP,GAAG,CAAC,KAAK,CAAC;aACV,QAAQ,EAAE;aACV,QAAQ,CAAC,mFAAmF,CAAC;KACjG,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,qBAAqB,EAAE,EAAE,EAAE;QAC9C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,qBAAqB,EAAE,CAAC,CAAC;YACxF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAChF,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC/E,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-envelope.d.ts","sourceRoot":"","sources":["../../src/tools/get-envelope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiBhD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { getClient } from "../client.js";
|
|
3
|
+
export function register(server) {
|
|
4
|
+
server.tool("get_envelope", "Retrieve the current state of an envelope including its status, document progress, and per-recipient signing status.", {
|
|
5
|
+
envelopeId: z.string().describe("The envelope ID to retrieve"),
|
|
6
|
+
}, async ({ envelopeId }) => {
|
|
7
|
+
try {
|
|
8
|
+
const result = await getClient().getEnvelope({ id: envelopeId });
|
|
9
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
10
|
+
}
|
|
11
|
+
catch (err) {
|
|
12
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
13
|
+
return { content: [{ type: "text", text: `Error: ${msg}` }], isError: true };
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=get-envelope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-envelope.js","sourceRoot":"","sources":["../../src/tools/get-envelope.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,cAAc,EACd,sHAAsH,EACtH;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;KAC/D,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QACvB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;YACjE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAChF,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC/E,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgBpE,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAerD"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { register as registerGeneratePdf } from "./generate-pdf.js";
|
|
2
|
+
import { register as registerUploadPdf } from "./upload-pdf.js";
|
|
3
|
+
import { register as registerGetDocument } from "./get-document.js";
|
|
4
|
+
import { register as registerDeleteDocument } from "./delete-document.js";
|
|
5
|
+
import { register as registerFlattenPdf } from "./flatten-pdf.js";
|
|
6
|
+
import { register as registerExtractPdfData } from "./extract-pdf-data.js";
|
|
7
|
+
import { register as registerCompressPdf } from "./compress-pdf.js";
|
|
8
|
+
import { register as registerProtectPdf } from "./protect-pdf.js";
|
|
9
|
+
import { register as registerWatermarkPdf } from "./watermark-pdf.js";
|
|
10
|
+
import { register as registerCreateEnvelope } from "./create-envelope.js";
|
|
11
|
+
import { register as registerSendEnvelope } from "./send-envelope.js";
|
|
12
|
+
import { register as registerGetEnvelope } from "./get-envelope.js";
|
|
13
|
+
import { register as registerCreateWebhook } from "./create-webhook.js";
|
|
14
|
+
import { register as registerDeleteWebhook } from "./delete-webhook.js";
|
|
15
|
+
export function registerTools(server) {
|
|
16
|
+
registerGeneratePdf(server);
|
|
17
|
+
registerUploadPdf(server);
|
|
18
|
+
registerGetDocument(server);
|
|
19
|
+
registerDeleteDocument(server);
|
|
20
|
+
registerFlattenPdf(server);
|
|
21
|
+
registerExtractPdfData(server);
|
|
22
|
+
registerCompressPdf(server);
|
|
23
|
+
registerProtectPdf(server);
|
|
24
|
+
registerWatermarkPdf(server);
|
|
25
|
+
registerCreateEnvelope(server);
|
|
26
|
+
registerSendEnvelope(server);
|
|
27
|
+
registerGetEnvelope(server);
|
|
28
|
+
registerCreateWebhook(server);
|
|
29
|
+
registerDeleteWebhook(server);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,IAAI,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,QAAQ,IAAI,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,QAAQ,IAAI,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,QAAQ,IAAI,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,QAAQ,IAAI,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,QAAQ,IAAI,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,QAAQ,IAAI,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,QAAQ,IAAI,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,QAAQ,IAAI,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,QAAQ,IAAI,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,QAAQ,IAAI,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAExE,MAAM,UAAU,aAAa,CAAC,MAAiB;IAC7C,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protect-pdf.d.ts","sourceRoot":"","sources":["../../src/tools/protect-pdf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+DhD"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { getClient } from "../client.js";
|
|
3
|
+
export function register(server) {
|
|
4
|
+
server.tool("protect_pdf", "Encrypt a PDF with a password and optional permission restrictions. Produces a new document; the original is unchanged.", {
|
|
5
|
+
documentId: z.string().describe("The source document ID to protect"),
|
|
6
|
+
algorithm: z
|
|
7
|
+
.enum(["AES256", "AES128"])
|
|
8
|
+
.optional()
|
|
9
|
+
.describe("Encryption algorithm (default: AES256)"),
|
|
10
|
+
userPassword: z
|
|
11
|
+
.string()
|
|
12
|
+
.optional()
|
|
13
|
+
.describe("Password required to open the PDF"),
|
|
14
|
+
ownerPassword: z
|
|
15
|
+
.string()
|
|
16
|
+
.optional()
|
|
17
|
+
.describe("Full-control owner password; required when using AES256 with a userPassword"),
|
|
18
|
+
disablePrint: z.boolean().optional().describe("Prevent printing"),
|
|
19
|
+
disableCopy: z.boolean().optional().describe("Prevent copying text"),
|
|
20
|
+
disableEditing: z.boolean().optional().describe("Prevent editing"),
|
|
21
|
+
encryptMetadata: z.boolean().optional().describe("Encrypt PDF metadata (default: false)"),
|
|
22
|
+
preSignedUrlExpiresIn: z
|
|
23
|
+
.number()
|
|
24
|
+
.int()
|
|
25
|
+
.min(60)
|
|
26
|
+
.max(86400)
|
|
27
|
+
.optional()
|
|
28
|
+
.describe("Pre-signed download URL expiry in seconds (60–86400)"),
|
|
29
|
+
metadata: z.record(z.unknown()).optional().describe("Custom metadata to attach"),
|
|
30
|
+
}, async ({ documentId, algorithm, userPassword, ownerPassword, disablePrint, disableCopy, disableEditing, encryptMetadata, preSignedUrlExpiresIn, metadata, }) => {
|
|
31
|
+
try {
|
|
32
|
+
const result = await getClient().protectPdf({
|
|
33
|
+
documentId,
|
|
34
|
+
algorithm,
|
|
35
|
+
userPassword,
|
|
36
|
+
ownerPassword,
|
|
37
|
+
disablePrint,
|
|
38
|
+
disableCopy,
|
|
39
|
+
disableEditing,
|
|
40
|
+
encryptMetadata,
|
|
41
|
+
preSignedUrlExpiresIn,
|
|
42
|
+
metadata,
|
|
43
|
+
});
|
|
44
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
48
|
+
return { content: [{ type: "text", text: `Error: ${msg}` }], isError: true };
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=protect-pdf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protect-pdf.js","sourceRoot":"","sources":["../../src/tools/protect-pdf.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,aAAa,EACb,yHAAyH,EACzH;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QACpE,SAAS,EAAE,CAAC;aACT,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;aAC1B,QAAQ,EAAE;aACV,QAAQ,CAAC,wCAAwC,CAAC;QACrD,YAAY,EAAE,CAAC;aACZ,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,mCAAmC,CAAC;QAChD,aAAa,EAAE,CAAC;aACb,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,6EAA6E,CAAC;QAC1F,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACjE,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QACpE,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAClE,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;QACzF,qBAAqB,EAAE,CAAC;aACrB,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,EAAE,CAAC;aACP,GAAG,CAAC,KAAK,CAAC;aACV,QAAQ,EAAE;aACV,QAAQ,CAAC,sDAAsD,CAAC;QACnE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;KACjF,EACD,KAAK,EAAE,EACL,UAAU,EACV,SAAS,EACT,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,QAAQ,GACT,EAAE,EAAE;QACH,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC,UAAU,CAAC;gBAC1C,UAAU;gBACV,SAAS;gBACT,YAAY;gBACZ,aAAa;gBACb,YAAY;gBACZ,WAAW;gBACX,cAAc;gBACd,eAAe;gBACf,qBAAqB;gBACrB,QAAQ;aACT,CAAC,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAChF,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC/E,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send-envelope.d.ts","sourceRoot":"","sources":["../../src/tools/send-envelope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiBhD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { getClient } from "../client.js";
|
|
3
|
+
export function register(server) {
|
|
4
|
+
server.tool("send_envelope", "Send a created envelope to its recipients. PDFGate dispatches signing emails with secure, OTP-protected links that expire after 30 days.", {
|
|
5
|
+
envelopeId: z.string().describe("The envelope ID to send"),
|
|
6
|
+
}, async ({ envelopeId }) => {
|
|
7
|
+
try {
|
|
8
|
+
const result = await getClient().sendEnvelope({ id: envelopeId });
|
|
9
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
10
|
+
}
|
|
11
|
+
catch (err) {
|
|
12
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
13
|
+
return { content: [{ type: "text", text: `Error: ${msg}` }], isError: true };
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=send-envelope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send-envelope.js","sourceRoot":"","sources":["../../src/tools/send-envelope.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,eAAe,EACf,0IAA0I,EAC1I;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;KAC3D,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QACvB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;YAClE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAChF,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC/E,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload-pdf.d.ts","sourceRoot":"","sources":["../../src/tools/upload-pdf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+BhD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { getClient } from "../client.js";
|
|
5
|
+
export function register(server) {
|
|
6
|
+
server.tool("upload_pdf", "Upload a PDF to PDFGate so it can be referenced by other operations. Provide either 'filePath' (local path) or 'url'.", {
|
|
7
|
+
filePath: z.string().optional().describe("Absolute local path to the PDF file to upload"),
|
|
8
|
+
url: z.string().url().optional().describe("Publicly accessible URL of the PDF to upload"),
|
|
9
|
+
preSignedUrlExpiresIn: z
|
|
10
|
+
.number()
|
|
11
|
+
.int()
|
|
12
|
+
.min(60)
|
|
13
|
+
.max(86400)
|
|
14
|
+
.optional()
|
|
15
|
+
.describe("Pre-signed download URL expiry in seconds (60–86400)"),
|
|
16
|
+
metadata: z.record(z.unknown()).optional().describe("Custom metadata to attach"),
|
|
17
|
+
}, async ({ filePath, url, preSignedUrlExpiresIn, metadata }) => {
|
|
18
|
+
try {
|
|
19
|
+
let file;
|
|
20
|
+
if (filePath) {
|
|
21
|
+
const data = readFileSync(filePath);
|
|
22
|
+
file = { name: path.basename(filePath), data };
|
|
23
|
+
}
|
|
24
|
+
const result = await getClient().uploadFile({ file, url, preSignedUrlExpiresIn, metadata });
|
|
25
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
29
|
+
return { content: [{ type: "text", text: `Error: ${msg}` }], isError: true };
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=upload-pdf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload-pdf.js","sourceRoot":"","sources":["../../src/tools/upload-pdf.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,uHAAuH,EACvH;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;QACzF,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;QACzF,qBAAqB,EAAE,CAAC;aACrB,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,EAAE,CAAC;aACP,GAAG,CAAC,KAAK,CAAC;aACV,QAAQ,EAAE;aACV,QAAQ,CAAC,sDAAsD,CAAC;QACnE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;KACjF,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,qBAAqB,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC3D,IAAI,CAAC;YACH,IAAI,IAAgD,CAAC;YACrD,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACpC,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;YACjD,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,qBAAqB,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC5F,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAChF,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC/E,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watermark-pdf.d.ts","sourceRoot":"","sources":["../../src/tools/watermark-pdf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkGhD"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { getClient } from "../client.js";
|
|
5
|
+
export function register(server) {
|
|
6
|
+
server.tool("watermark_pdf", "Apply a text or image watermark to a PDF. For type='text' provide 'text'; for type='image' provide 'watermarkImagePath'.", {
|
|
7
|
+
documentId: z.string().describe("The source document ID"),
|
|
8
|
+
type: z.enum(["text", "image"]).describe("Watermark type"),
|
|
9
|
+
text: z.string().optional().describe("Watermark text (required when type='text')"),
|
|
10
|
+
watermarkImagePath: z
|
|
11
|
+
.string()
|
|
12
|
+
.optional()
|
|
13
|
+
.describe("Local path to a .png/.jpg watermark image (required when type='image')"),
|
|
14
|
+
fontFilePath: z
|
|
15
|
+
.string()
|
|
16
|
+
.optional()
|
|
17
|
+
.describe("Local path to a .ttf/.otf font file (overrides 'font')"),
|
|
18
|
+
font: z
|
|
19
|
+
.enum([
|
|
20
|
+
"times-roman", "times-bold", "times-italic", "times-bolditalic",
|
|
21
|
+
"helvetica", "helvetica-bold", "helvetica-oblique", "helvetica-boldoblique",
|
|
22
|
+
"courier", "courier-bold", "courier-oblique", "courier-boldoblique",
|
|
23
|
+
])
|
|
24
|
+
.optional()
|
|
25
|
+
.describe("Standard PDF font name"),
|
|
26
|
+
fontSize: z.number().optional().describe("Font size in points"),
|
|
27
|
+
fontColor: z.string().optional().describe("Font colour as hex e.g. '#FF0000'"),
|
|
28
|
+
opacity: z.number().min(0).max(1).optional().describe("Opacity 0–1"),
|
|
29
|
+
xPosition: z.number().optional().describe("Horizontal position"),
|
|
30
|
+
yPosition: z.number().optional().describe("Vertical position"),
|
|
31
|
+
imageWidth: z.number().optional().describe("Image watermark width"),
|
|
32
|
+
imageHeight: z.number().optional().describe("Image watermark height"),
|
|
33
|
+
rotate: z.number().min(0).max(360).optional().describe("Rotation in degrees (0–360)"),
|
|
34
|
+
preSignedUrlExpiresIn: z
|
|
35
|
+
.number()
|
|
36
|
+
.int()
|
|
37
|
+
.min(60)
|
|
38
|
+
.max(86400)
|
|
39
|
+
.optional()
|
|
40
|
+
.describe("Pre-signed download URL expiry in seconds (60–86400)"),
|
|
41
|
+
metadata: z.record(z.unknown()).optional().describe("Custom metadata to attach"),
|
|
42
|
+
}, async ({ documentId, type, text, watermarkImagePath, fontFilePath, font, fontSize, fontColor, opacity, xPosition, yPosition, imageWidth, imageHeight, rotate, preSignedUrlExpiresIn, metadata, }) => {
|
|
43
|
+
try {
|
|
44
|
+
let watermark;
|
|
45
|
+
if (watermarkImagePath) {
|
|
46
|
+
watermark = {
|
|
47
|
+
name: path.basename(watermarkImagePath),
|
|
48
|
+
data: readFileSync(watermarkImagePath),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
let fontFile;
|
|
52
|
+
if (fontFilePath) {
|
|
53
|
+
fontFile = { name: path.basename(fontFilePath), data: readFileSync(fontFilePath) };
|
|
54
|
+
}
|
|
55
|
+
const result = await getClient().watermarkPdf({
|
|
56
|
+
documentId,
|
|
57
|
+
type,
|
|
58
|
+
text,
|
|
59
|
+
watermark,
|
|
60
|
+
fontFile,
|
|
61
|
+
font: font,
|
|
62
|
+
fontSize,
|
|
63
|
+
fontColor,
|
|
64
|
+
opacity,
|
|
65
|
+
xPosition,
|
|
66
|
+
yPosition,
|
|
67
|
+
imageWidth,
|
|
68
|
+
imageHeight,
|
|
69
|
+
rotate,
|
|
70
|
+
preSignedUrlExpiresIn,
|
|
71
|
+
metadata,
|
|
72
|
+
});
|
|
73
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
77
|
+
return { content: [{ type: "text", text: `Error: ${msg}` }], isError: true };
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=watermark-pdf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watermark-pdf.js","sourceRoot":"","sources":["../../src/tools/watermark-pdf.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/webhooks/secrets.ts"],"names":[],"mappings":"AAIA,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAQ/E;AAED,wBAAgB,UAAU,IAAI,OAAO,CAEpC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import PdfGate from "pdfgate";
|
|
2
|
+
const secrets = new Set();
|
|
3
|
+
export function addSecret(secret) {
|
|
4
|
+
secrets.add(secret);
|
|
5
|
+
}
|
|
6
|
+
export function verifyWithAnySecret(signature, payload) {
|
|
7
|
+
for (const secret of secrets) {
|
|
8
|
+
try {
|
|
9
|
+
PdfGate.verifySignature(secret, signature, payload);
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
catch { }
|
|
13
|
+
}
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
export function hasSecrets() {
|
|
17
|
+
return secrets.size > 0;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=secrets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/webhooks/secrets.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;AAElC,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,SAAiB,EAAE,OAAe;IACpE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,OAAO,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YACpD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/webhooks/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CA0C7D"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import * as http from "node:http";
|
|
2
|
+
import { addEvent } from "./store.js";
|
|
3
|
+
import { hasSecrets, verifyWithAnySecret } from "./secrets.js";
|
|
4
|
+
export function startWebhookServer(mcpServer) {
|
|
5
|
+
const port = parseInt(process.env.PDFGATE_WEBHOOK_PORT ?? "3599", 10);
|
|
6
|
+
const httpServer = http.createServer((req, res) => {
|
|
7
|
+
if (req.method !== "POST") {
|
|
8
|
+
res.writeHead(405).end();
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
const chunks = [];
|
|
12
|
+
req.on("data", (chunk) => chunks.push(chunk));
|
|
13
|
+
req.on("end", () => {
|
|
14
|
+
const rawBody = Buffer.concat(chunks);
|
|
15
|
+
if (hasSecrets()) {
|
|
16
|
+
const signature = req.headers["x-pdfgate-signature"];
|
|
17
|
+
if (typeof signature !== "string") {
|
|
18
|
+
res.writeHead(401).end("Missing signature");
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
if (!verifyWithAnySecret(signature, rawBody)) {
|
|
22
|
+
res.writeHead(401).end("Invalid signature");
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
const event = JSON.parse(rawBody.toString("utf8"));
|
|
28
|
+
addEvent(event);
|
|
29
|
+
mcpServer.server.sendResourceUpdated({ uri: "pdfgate://events" }).catch(() => { });
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
res.writeHead(400).end("Invalid JSON");
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
res.writeHead(200).end("OK");
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
httpServer.listen(port, () => {
|
|
39
|
+
process.stderr.write(`PDFGate webhook listener started on port ${port}\n`);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/webhooks/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAE/D,MAAM,UAAU,kBAAkB,CAAC,SAAoB;IACrD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;IAEtE,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAChD,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC1B,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACtD,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACjB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAEtC,IAAI,UAAU,EAAE,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;gBACrD,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;oBAClC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;oBAC5C,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC;oBAC7C,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;oBAC5C,OAAO;gBACT,CAAC;YACH,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;gBACnD,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAChB,SAAS,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACpF,CAAC;YAAC,MAAM,CAAC;gBACP,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBACvC,OAAO;YACT,CAAC;YAED,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;QAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4CAA4C,IAAI,IAAI,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface WebhookEvent {
|
|
2
|
+
eventId: string;
|
|
3
|
+
event: string;
|
|
4
|
+
timestamp: Date;
|
|
5
|
+
resource: {
|
|
6
|
+
kind: string;
|
|
7
|
+
id: string;
|
|
8
|
+
};
|
|
9
|
+
data: Record<string, unknown>;
|
|
10
|
+
}
|
|
11
|
+
export declare function addEvent(event: WebhookEvent): void;
|
|
12
|
+
export declare function getEvents(): WebhookEvent[];
|
|
13
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/webhooks/store.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAKD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAGlD;AAED,wBAAgB,SAAS,IAAI,YAAY,EAAE,CAE1C"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
const MAX_EVENTS = 100;
|
|
2
|
+
const events = [];
|
|
3
|
+
export function addEvent(event) {
|
|
4
|
+
events.unshift(event);
|
|
5
|
+
if (events.length > MAX_EVENTS)
|
|
6
|
+
events.length = MAX_EVENTS;
|
|
7
|
+
}
|
|
8
|
+
export function getEvents() {
|
|
9
|
+
return [...events];
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/webhooks/store.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,GAAG,GAAG,CAAC;AACvB,MAAM,MAAM,GAAmB,EAAE,CAAC;AAElC,MAAM,UAAU,QAAQ,CAAC,KAAmB;IAC1C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACtB,IAAI,MAAM,CAAC,MAAM,GAAG,UAAU;QAAE,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;AACrB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@pdfgate/mcp-server",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "PDFGate MCP Server",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"homepage": "https://pdfgate.com",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/pdfgate/pdfgate-mcp-server.git"
|
|
10
|
+
},
|
|
11
|
+
"bugs": "https://github.com/pdfgate/pdfgate-mcp-server/issues",
|
|
12
|
+
"keywords": [
|
|
13
|
+
"pdfgate",
|
|
14
|
+
"pdf",
|
|
15
|
+
"mcp",
|
|
16
|
+
"model-context-protocol",
|
|
17
|
+
"pdf-generation",
|
|
18
|
+
"esignature",
|
|
19
|
+
"pdf-api"
|
|
20
|
+
],
|
|
21
|
+
"bin": {
|
|
22
|
+
"pdfgate-mcp-server": "./dist/index.js"
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"dist",
|
|
26
|
+
"README.md"
|
|
27
|
+
],
|
|
28
|
+
"scripts": {
|
|
29
|
+
"build": "tsc",
|
|
30
|
+
"start": "node dist/index.js",
|
|
31
|
+
"dev": "tsc --watch"
|
|
32
|
+
},
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
35
|
+
"pdfgate": "^1.0.7",
|
|
36
|
+
"zod": "^3.24.0"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@types/node": "^22.0.0",
|
|
40
|
+
"typescript": "^5.8.0"
|
|
41
|
+
},
|
|
42
|
+
"engines": {
|
|
43
|
+
"node": ">=18.0.0"
|
|
44
|
+
}
|
|
45
|
+
}
|