activepieces-piece-podpdf 0.1.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/README.md +47 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/actions/generate-pdf.d.ts +21 -0
- package/dist/lib/actions/generate-pdf.d.ts.map +1 -0
- package/dist/lib/actions/generate-pdf.js +41 -0
- package/dist/lib/actions/generate-pdf.js.map +1 -0
- package/dist/lib/actions/get-download-link.d.ts +13 -0
- package/dist/lib/actions/get-download-link.d.ts.map +1 -0
- package/dist/lib/actions/get-download-link.js +27 -0
- package/dist/lib/actions/get-download-link.js.map +1 -0
- package/dist/lib/actions/get-job.d.ts +18 -0
- package/dist/lib/actions/get-job.d.ts.map +1 -0
- package/dist/lib/actions/get-job.js +31 -0
- package/dist/lib/actions/get-job.js.map +1 -0
- package/dist/lib/actions/render-template.d.ts +7 -0
- package/dist/lib/actions/render-template.d.ts.map +1 -0
- package/dist/lib/actions/render-template.js +71 -0
- package/dist/lib/actions/render-template.js.map +1 -0
- package/dist/lib/actions/start-long-job.d.ts +20 -0
- package/dist/lib/actions/start-long-job.d.ts.map +1 -0
- package/dist/lib/actions/start-long-job.js +65 -0
- package/dist/lib/actions/start-long-job.js.map +1 -0
- package/dist/lib/auth.d.ts +2 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +29 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/common.d.ts +62 -0
- package/dist/lib/common.d.ts.map +1 -0
- package/dist/lib/common.js +235 -0
- package/dist/lib/common.js.map +1 -0
- package/logo.png +0 -0
- package/package.json +49 -0
package/README.md
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# activepieces-piece-podpdf
|
|
2
|
+
|
|
3
|
+
[Activepieces](https://www.activepieces.com) piece for [PodPDF](https://podpdf.com): turn HTML, Markdown, URLs and templates into PDFs with the PodPDF API.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
On a self-hosted Activepieces (or a platform you administer), open **Settings → My Pieces → Install Piece** (on platforms: **Platform Admin → Pieces → Install Piece**), choose npm, and enter:
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
activepieces-piece-podpdf
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Credentials
|
|
14
|
+
|
|
15
|
+
Create an API key at [app.podpdf.com](https://app.podpdf.com) → **Settings → API Keys**, then add a **PodPDF** connection and paste it into **API Key**. The connection is checked with `GET /me`.
|
|
16
|
+
|
|
17
|
+
PodPDF costs $0.01 per PDF and has no free plan: buy a plan or credit pack before calls succeed.
|
|
18
|
+
|
|
19
|
+
## Actions
|
|
20
|
+
|
|
21
|
+
| Action | What it does |
|
|
22
|
+
| --- | --- |
|
|
23
|
+
| **Generate PDF** | `POST /quickjob`. HTML, Markdown or a public HTTPS URL to a PDF (up to 25 pages / 30 s). Returns `job_id`, `pages`, `download_url` and, with **Attach PDF File** on (default), a `file` that later steps can use. |
|
|
24
|
+
| **Render Template** | `POST /templates/{template_id}/render`. Fills a saved template with a JSON **Data** object. Optional **Filename**. Returns the JSON plus a `file`. |
|
|
25
|
+
| **Start Long Job** | `POST /longjob`. HTML or Markdown up to 100 pages, queued. With **Wait for Completion** it polls every 5 s for up to 3 minutes and returns the download link and the PDF file. |
|
|
26
|
+
| **Get Job** | `GET /jobs/{job_id}`. Status: `queued`, `processing`, `completed`, `partial_failed`, `failed`, `timeout`. |
|
|
27
|
+
| **Get Download Link** | `GET /jobs/{job_id}/download`. A fresh signed URL (valid 1 hour). |
|
|
28
|
+
| **Custom API Call** | Any other PodPDF endpoint, with the `X-API-Key` header added for you. |
|
|
29
|
+
|
|
30
|
+
Page options for Generate PDF and Start Long Job: **Format** (A4, Letter, Legal, A3, A5, Tabloid), **Landscape**, **Margin** (one value such as `20mm` for all sides), **Print Background**, **Scale** (0.1–2), **Page Ranges** (e.g. `1-3, 5`). Only the options you set are sent.
|
|
31
|
+
|
|
32
|
+
API errors are shown with their code and message, e.g. `PodPDF 403 INSUFFICIENT_CREDITS: …`. A `408 QUICKJOB_TIMEOUT` means the document is too big for Generate PDF, so use Start Long Job.
|
|
33
|
+
|
|
34
|
+
## Links
|
|
35
|
+
|
|
36
|
+
- API docs: https://apidocs.podpdf.com
|
|
37
|
+
- Support: podpdfapp@gmail.com
|
|
38
|
+
|
|
39
|
+
## Development
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
npm install
|
|
43
|
+
npm run build # tsc -> dist/
|
|
44
|
+
npm test # vitest + nock, no network
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
License: MIT
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGxC,OAAO,EAAE,UAAU,EAAE,CAAC;AAOtB,eAAO,MAAM,MAAM,mHAsBjB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.podpdf = exports.podpdfAuth = void 0;
|
|
4
|
+
const pieces_common_1 = require("@activepieces/pieces-common");
|
|
5
|
+
const pieces_framework_1 = require("@activepieces/pieces-framework");
|
|
6
|
+
const generate_pdf_1 = require("./lib/actions/generate-pdf");
|
|
7
|
+
const get_download_link_1 = require("./lib/actions/get-download-link");
|
|
8
|
+
const get_job_1 = require("./lib/actions/get-job");
|
|
9
|
+
const render_template_1 = require("./lib/actions/render-template");
|
|
10
|
+
const start_long_job_1 = require("./lib/actions/start-long-job");
|
|
11
|
+
const auth_1 = require("./lib/auth");
|
|
12
|
+
Object.defineProperty(exports, "podpdfAuth", { enumerable: true, get: function () { return auth_1.podpdfAuth; } });
|
|
13
|
+
const common_1 = require("./lib/common");
|
|
14
|
+
const categories = ['CONTENT_AND_FILES', 'DEVELOPER_TOOLS'];
|
|
15
|
+
exports.podpdf = (0, pieces_framework_1.createPiece)({
|
|
16
|
+
displayName: 'PodPDF',
|
|
17
|
+
description: 'Turn HTML, Markdown, URLs and templates into PDFs with the PodPDF API.',
|
|
18
|
+
auth: auth_1.podpdfAuth,
|
|
19
|
+
minimumSupportedRelease: '0.36.1',
|
|
20
|
+
// Square PodPDF icon shipped inside this npm package (logo.png), served by jsDelivr.
|
|
21
|
+
logoUrl: 'https://cdn.jsdelivr.net/npm/activepieces-piece-podpdf/logo.png',
|
|
22
|
+
authors: ['mohzameer'],
|
|
23
|
+
categories,
|
|
24
|
+
actions: [
|
|
25
|
+
generate_pdf_1.generatePdf,
|
|
26
|
+
render_template_1.renderTemplate,
|
|
27
|
+
start_long_job_1.startLongJob,
|
|
28
|
+
get_job_1.getJob,
|
|
29
|
+
get_download_link_1.getDownloadLink,
|
|
30
|
+
(0, pieces_common_1.createCustomApiCallAction)({
|
|
31
|
+
auth: auth_1.podpdfAuth,
|
|
32
|
+
baseUrl: () => common_1.BASE_URL,
|
|
33
|
+
authMapping: async (auth) => ({ 'X-API-Key': (0, common_1.apiKeyFrom)(auth) }),
|
|
34
|
+
}),
|
|
35
|
+
],
|
|
36
|
+
triggers: [],
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,+DAAwE;AACxE,qEAA6D;AAC7D,6DAAyD;AACzD,uEAAkE;AAClE,mDAA+C;AAC/C,mEAA+D;AAC/D,iEAA4D;AAC5D,qCAAwC;AAG/B,2FAHA,iBAAU,OAGA;AAFnB,yCAAoD;AAOpD,MAAM,UAAU,GAAG,CAAC,mBAAmB,EAAE,iBAAiB,CAA0B,CAAC;AAExE,QAAA,MAAM,GAAG,IAAA,8BAAW,EAAC;IAChC,WAAW,EAAE,QAAQ;IACrB,WAAW,EAAE,wEAAwE;IACrF,IAAI,EAAE,iBAAU;IAChB,uBAAuB,EAAE,QAAQ;IACjC,qFAAqF;IACrF,OAAO,EAAE,iEAAiE;IAC1E,OAAO,EAAE,CAAC,WAAW,CAAC;IACtB,UAAU;IACV,OAAO,EAAE;QACP,0BAAW;QACX,gCAAc;QACd,6BAAY;QACZ,gBAAM;QACN,mCAAe;QACf,IAAA,yCAAyB,EAAC;YACxB,IAAI,EAAE,iBAAU;YAChB,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAQ;YACvB,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,IAAA,mBAAU,EAAC,IAAI,CAAC,EAAE,CAAC;SACjE,CAAC;KACH;IACD,QAAQ,EAAE,EAAE;CACb,CAAC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type QuickJobResponse = {
|
|
2
|
+
job_id: string;
|
|
3
|
+
pages: number;
|
|
4
|
+
truncated: boolean;
|
|
5
|
+
download_url: string;
|
|
6
|
+
download_url_expires_at: string;
|
|
7
|
+
};
|
|
8
|
+
export declare const generatePdf: import("@activepieces/pieces-framework").IAction<import("@activepieces/pieces-framework").SecretTextProperty<true>, {
|
|
9
|
+
attach_file: import("@activepieces/pieces-framework").CheckboxProperty<false>;
|
|
10
|
+
format: import("@activepieces/pieces-framework").StaticDropdownProperty<string, false>;
|
|
11
|
+
landscape: import("@activepieces/pieces-framework").CheckboxProperty<false>;
|
|
12
|
+
margin: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
13
|
+
printBackground: import("@activepieces/pieces-framework").CheckboxProperty<false>;
|
|
14
|
+
scale: import("@activepieces/pieces-framework").NumberProperty<false>;
|
|
15
|
+
pageRanges: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
16
|
+
url?: import("@activepieces/pieces-framework").ShortTextProperty<false> | undefined;
|
|
17
|
+
html: import("@activepieces/pieces-framework").LongTextProperty<false>;
|
|
18
|
+
markdown: import("@activepieces/pieces-framework").LongTextProperty<false>;
|
|
19
|
+
input_type: import("@activepieces/pieces-framework").StaticDropdownProperty<"html" | "markdown" | "url", true>;
|
|
20
|
+
}>;
|
|
21
|
+
//# sourceMappingURL=generate-pdf.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-pdf.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/generate-pdf.ts"],"names":[],"mappings":"AAgBA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB,EAAE,MAAM,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,WAAW;;;;;;;;;;;;EAiCtB,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generatePdf = void 0;
|
|
4
|
+
const pieces_common_1 = require("@activepieces/pieces-common");
|
|
5
|
+
const pieces_framework_1 = require("@activepieces/pieces-framework");
|
|
6
|
+
const auth_1 = require("../auth");
|
|
7
|
+
const common_1 = require("../common");
|
|
8
|
+
const ALLOWED = ['html', 'markdown', 'url'];
|
|
9
|
+
exports.generatePdf = (0, pieces_framework_1.createAction)({
|
|
10
|
+
auth: auth_1.podpdfAuth,
|
|
11
|
+
name: 'generate_pdf',
|
|
12
|
+
displayName: 'Generate PDF',
|
|
13
|
+
description: 'Convert HTML, Markdown or a public URL to a PDF (up to 25 pages / 30 s; use Start Long Job for bigger documents).',
|
|
14
|
+
props: {
|
|
15
|
+
input_type: (0, common_1.inputTypeProp)([...ALLOWED]),
|
|
16
|
+
...(0, common_1.contentProp)([...ALLOWED]),
|
|
17
|
+
...common_1.optionProps,
|
|
18
|
+
attach_file: common_1.attachFileProp,
|
|
19
|
+
},
|
|
20
|
+
async run(context) {
|
|
21
|
+
const p = context.propsValue;
|
|
22
|
+
const body = { ...(0, common_1.buildContent)(p, [...ALLOWED]) };
|
|
23
|
+
const options = (0, common_1.buildOptions)(p);
|
|
24
|
+
if (options)
|
|
25
|
+
body['options'] = options;
|
|
26
|
+
body['store'] = true;
|
|
27
|
+
const result = await (0, common_1.podpdfRequest)({
|
|
28
|
+
auth: context.auth,
|
|
29
|
+
method: pieces_common_1.HttpMethod.POST,
|
|
30
|
+
path: '/quickjob',
|
|
31
|
+
body,
|
|
32
|
+
});
|
|
33
|
+
if (p['attach_file'] === false || !result.download_url) {
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
const data = await (0, common_1.downloadPdf)(result.download_url);
|
|
37
|
+
const file = await context.files.write({ fileName: `podpdf-${result.job_id}.pdf`, data });
|
|
38
|
+
return { ...result, file };
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
//# sourceMappingURL=generate-pdf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-pdf.js","sourceRoot":"","sources":["../../../src/lib/actions/generate-pdf.ts"],"names":[],"mappings":";;;AAAA,+DAAyD;AACzD,qEAA8D;AAC9D,kCAAqC;AACrC,sCASmB;AAEnB,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAU,CAAC;AAUxC,QAAA,WAAW,GAAG,IAAA,+BAAY,EAAC;IACtC,IAAI,EAAE,iBAAU;IAChB,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,cAAc;IAC3B,WAAW,EACT,mHAAmH;IACrH,KAAK,EAAE;QACL,UAAU,EAAE,IAAA,sBAAa,EAAC,CAAC,GAAG,OAAO,CAAC,CAAC;QACvC,GAAG,IAAA,oBAAW,EAAC,CAAC,GAAG,OAAO,CAAC,CAAC;QAC5B,GAAG,oBAAW;QACd,WAAW,EAAE,uBAAc;KAC5B;IACD,KAAK,CAAC,GAAG,CAAC,OAAO;QACf,MAAM,CAAC,GAAG,OAAO,CAAC,UAAiC,CAAC;QACpD,MAAM,IAAI,GAA4B,EAAE,GAAG,IAAA,qBAAY,EAAC,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;QAC3E,MAAM,OAAO,GAAG,IAAA,qBAAY,EAAC,CAAC,CAAC,CAAC;QAChC,IAAI,OAAO;YAAE,IAAI,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;QAErB,MAAM,MAAM,GAAG,MAAM,IAAA,sBAAa,EAAmB;YACnD,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,0BAAU,CAAC,IAAI;YACvB,IAAI,EAAE,WAAW;YACjB,IAAI;SACL,CAAC,CAAC;QAEH,IAAI,CAAC,CAAC,aAAa,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YACvD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,IAAA,oBAAW,EAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,UAAU,MAAM,CAAC,MAAM,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1F,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type DownloadLinkResponse = {
|
|
2
|
+
job_id: string;
|
|
3
|
+
download_url: string;
|
|
4
|
+
expires_at: string;
|
|
5
|
+
expires_in_seconds: number;
|
|
6
|
+
content_type: string;
|
|
7
|
+
size_bytes: number;
|
|
8
|
+
};
|
|
9
|
+
export declare function fetchDownloadLink(auth: unknown, jobId: string): Promise<DownloadLinkResponse>;
|
|
10
|
+
export declare const getDownloadLink: import("@activepieces/pieces-framework").IAction<import("@activepieces/pieces-framework").SecretTextProperty<true>, {
|
|
11
|
+
job_id: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
12
|
+
}>;
|
|
13
|
+
//# sourceMappingURL=get-download-link.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-download-link.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/get-download-link.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,iCAM7D;AAED,eAAO,MAAM,eAAe;;EAU1B,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getDownloadLink = void 0;
|
|
4
|
+
exports.fetchDownloadLink = fetchDownloadLink;
|
|
5
|
+
const pieces_common_1 = require("@activepieces/pieces-common");
|
|
6
|
+
const pieces_framework_1 = require("@activepieces/pieces-framework");
|
|
7
|
+
const auth_1 = require("../auth");
|
|
8
|
+
const common_1 = require("../common");
|
|
9
|
+
const get_job_1 = require("./get-job");
|
|
10
|
+
function fetchDownloadLink(auth, jobId) {
|
|
11
|
+
return (0, common_1.podpdfRequest)({
|
|
12
|
+
auth,
|
|
13
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
14
|
+
path: `/jobs/${encodeURIComponent(jobId.trim())}/download`,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
exports.getDownloadLink = (0, pieces_framework_1.createAction)({
|
|
18
|
+
auth: auth_1.podpdfAuth,
|
|
19
|
+
name: 'get_download_link',
|
|
20
|
+
displayName: 'Get Download Link',
|
|
21
|
+
description: 'Get a fresh signed download URL (valid 1 hour) for a finished job. Fails with OUTPUT_EXPIRED after the retention window.',
|
|
22
|
+
props: { job_id: get_job_1.jobIdProp },
|
|
23
|
+
async run(context) {
|
|
24
|
+
return fetchDownloadLink(context.auth, context.propsValue.job_id);
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=get-download-link.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-download-link.js","sourceRoot":"","sources":["../../../src/lib/actions/get-download-link.ts"],"names":[],"mappings":";;;AAeA,8CAMC;AArBD,+DAAyD;AACzD,qEAA8D;AAC9D,kCAAqC;AACrC,sCAA0C;AAC1C,uCAAsC;AAWtC,SAAgB,iBAAiB,CAAC,IAAa,EAAE,KAAa;IAC5D,OAAO,IAAA,sBAAa,EAAuB;QACzC,IAAI;QACJ,MAAM,EAAE,0BAAU,CAAC,GAAG;QACtB,IAAI,EAAE,SAAS,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW;KAC3D,CAAC,CAAC;AACL,CAAC;AAEY,QAAA,eAAe,GAAG,IAAA,+BAAY,EAAC;IAC1C,IAAI,EAAE,iBAAU;IAChB,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,mBAAmB;IAChC,WAAW,EACT,0HAA0H;IAC5H,KAAK,EAAE,EAAE,MAAM,EAAE,mBAAS,EAAE;IAC5B,KAAK,CAAC,GAAG,CAAC,OAAO;QACf,OAAO,iBAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACpE,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type JobResponse = {
|
|
2
|
+
job_id: string;
|
|
3
|
+
status: 'queued' | 'processing' | 'completed' | 'partial_failed' | 'failed' | 'timeout';
|
|
4
|
+
job_type: string;
|
|
5
|
+
mode: string;
|
|
6
|
+
pages: number | null;
|
|
7
|
+
created_at: string;
|
|
8
|
+
completed_at: string | null;
|
|
9
|
+
s3_url?: string;
|
|
10
|
+
s3_url_expires_at?: string;
|
|
11
|
+
error_message: string | null;
|
|
12
|
+
};
|
|
13
|
+
export declare const jobIdProp: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
14
|
+
export declare function fetchJob(auth: unknown, jobId: string): Promise<JobResponse>;
|
|
15
|
+
export declare const getJob: import("@activepieces/pieces-framework").IAction<import("@activepieces/pieces-framework").SecretTextProperty<true>, {
|
|
16
|
+
job_id: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
17
|
+
}>;
|
|
18
|
+
//# sourceMappingURL=get-job.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-job.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/get-job.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,QAAQ,GAAG,YAAY,GAAG,WAAW,GAAG,gBAAgB,GAAG,QAAQ,GAAG,SAAS,CAAC;IACxF,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,SAAS,kEAIpB,CAAC;AAEH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,wBAMpD;AAED,eAAO,MAAM,MAAM;;EASjB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getJob = exports.jobIdProp = void 0;
|
|
4
|
+
exports.fetchJob = fetchJob;
|
|
5
|
+
const pieces_common_1 = require("@activepieces/pieces-common");
|
|
6
|
+
const pieces_framework_1 = require("@activepieces/pieces-framework");
|
|
7
|
+
const auth_1 = require("../auth");
|
|
8
|
+
const common_1 = require("../common");
|
|
9
|
+
exports.jobIdProp = pieces_framework_1.Property.ShortText({
|
|
10
|
+
displayName: 'Job ID',
|
|
11
|
+
description: 'The job_id returned by Generate PDF, Render Template or Start Long Job.',
|
|
12
|
+
required: true,
|
|
13
|
+
});
|
|
14
|
+
function fetchJob(auth, jobId) {
|
|
15
|
+
return (0, common_1.podpdfRequest)({
|
|
16
|
+
auth,
|
|
17
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
18
|
+
path: `/jobs/${encodeURIComponent(jobId.trim())}`,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
exports.getJob = (0, pieces_framework_1.createAction)({
|
|
22
|
+
auth: auth_1.podpdfAuth,
|
|
23
|
+
name: 'get_job',
|
|
24
|
+
displayName: 'Get Job',
|
|
25
|
+
description: 'Get the status of a PodPDF job (queued, processing, completed, partial_failed, failed, timeout).',
|
|
26
|
+
props: { job_id: exports.jobIdProp },
|
|
27
|
+
async run(context) {
|
|
28
|
+
return fetchJob(context.auth, context.propsValue.job_id);
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=get-job.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-job.js","sourceRoot":"","sources":["../../../src/lib/actions/get-job.ts"],"names":[],"mappings":";;;AAwBA,4BAMC;AA9BD,+DAAyD;AACzD,qEAAwE;AACxE,kCAAqC;AACrC,sCAA0C;AAe7B,QAAA,SAAS,GAAG,2BAAQ,CAAC,SAAS,CAAC;IAC1C,WAAW,EAAE,QAAQ;IACrB,WAAW,EAAE,yEAAyE;IACtF,QAAQ,EAAE,IAAI;CACf,CAAC,CAAC;AAEH,SAAgB,QAAQ,CAAC,IAAa,EAAE,KAAa;IACnD,OAAO,IAAA,sBAAa,EAAc;QAChC,IAAI;QACJ,MAAM,EAAE,0BAAU,CAAC,GAAG;QACtB,IAAI,EAAE,SAAS,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE;KAClD,CAAC,CAAC;AACL,CAAC;AAEY,QAAA,MAAM,GAAG,IAAA,+BAAY,EAAC;IACjC,IAAI,EAAE,iBAAU;IAChB,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,SAAS;IACtB,WAAW,EAAE,kGAAkG;IAC/G,KAAK,EAAE,EAAE,MAAM,EAAE,iBAAS,EAAE;IAC5B,KAAK,CAAC,GAAG,CAAC,OAAO;QACf,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC3D,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const renderTemplate: import("@activepieces/pieces-framework").IAction<import("@activepieces/pieces-framework").SecretTextProperty<true>, {
|
|
2
|
+
template_id: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
3
|
+
data: import("@activepieces/pieces-framework").JsonProperty<true>;
|
|
4
|
+
filename: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
5
|
+
attach_file: import("@activepieces/pieces-framework").CheckboxProperty<false>;
|
|
6
|
+
}>;
|
|
7
|
+
//# sourceMappingURL=render-template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-template.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/render-template.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,cAAc;;;;;EA+DzB,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderTemplate = void 0;
|
|
4
|
+
const pieces_common_1 = require("@activepieces/pieces-common");
|
|
5
|
+
const pieces_framework_1 = require("@activepieces/pieces-framework");
|
|
6
|
+
const auth_1 = require("../auth");
|
|
7
|
+
const common_1 = require("../common");
|
|
8
|
+
exports.renderTemplate = (0, pieces_framework_1.createAction)({
|
|
9
|
+
auth: auth_1.podpdfAuth,
|
|
10
|
+
name: 'render_template',
|
|
11
|
+
displayName: 'Render Template',
|
|
12
|
+
description: 'Fill a saved PodPDF template with data and get the PDF.',
|
|
13
|
+
props: {
|
|
14
|
+
template_id: pieces_framework_1.Property.ShortText({
|
|
15
|
+
displayName: 'Template ID',
|
|
16
|
+
description: 'Copy it from the template page in the PodPDF dashboard (app.podpdf.com → Templates).',
|
|
17
|
+
required: true,
|
|
18
|
+
}),
|
|
19
|
+
data: pieces_framework_1.Property.Json({
|
|
20
|
+
displayName: 'Data',
|
|
21
|
+
description: 'JSON object of field values, e.g. {"customer_name": "Ada", "total": 42}.',
|
|
22
|
+
required: true,
|
|
23
|
+
defaultValue: {},
|
|
24
|
+
}),
|
|
25
|
+
filename: pieces_framework_1.Property.ShortText({
|
|
26
|
+
displayName: 'Filename',
|
|
27
|
+
description: 'Optional file name for the PDF, e.g. invoice-1042.pdf.',
|
|
28
|
+
required: false,
|
|
29
|
+
}),
|
|
30
|
+
attach_file: common_1.attachFileProp,
|
|
31
|
+
},
|
|
32
|
+
async run(context) {
|
|
33
|
+
const { template_id, data, filename, attach_file } = context.propsValue;
|
|
34
|
+
const id = String(template_id ?? '').trim();
|
|
35
|
+
if (!id)
|
|
36
|
+
throw new Error('Template ID is required.');
|
|
37
|
+
let parsed = data;
|
|
38
|
+
if (typeof parsed === 'string') {
|
|
39
|
+
try {
|
|
40
|
+
parsed = JSON.parse(parsed);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
throw new Error('Data must be a valid JSON object.');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
47
|
+
throw new Error('Data must be a JSON object of field values.');
|
|
48
|
+
}
|
|
49
|
+
const body = { data: (0, common_1.expandDottedKeys)(parsed) };
|
|
50
|
+
const name = typeof filename === 'string' && filename.trim() ? (0, common_1.ensurePdfName)(filename) : undefined;
|
|
51
|
+
if (name)
|
|
52
|
+
body['filename'] = name;
|
|
53
|
+
body['store'] = true;
|
|
54
|
+
const result = await (0, common_1.podpdfRequest)({
|
|
55
|
+
auth: context.auth,
|
|
56
|
+
method: pieces_common_1.HttpMethod.POST,
|
|
57
|
+
path: `/templates/${encodeURIComponent(id)}/render`,
|
|
58
|
+
body,
|
|
59
|
+
});
|
|
60
|
+
if (attach_file === false || !result.download_url) {
|
|
61
|
+
return result;
|
|
62
|
+
}
|
|
63
|
+
const pdf = await (0, common_1.downloadPdf)(result.download_url);
|
|
64
|
+
const file = await context.files.write({
|
|
65
|
+
fileName: name ?? `${result.template_id ?? id}-${result.job_id}.pdf`,
|
|
66
|
+
data: pdf,
|
|
67
|
+
});
|
|
68
|
+
return { ...result, file };
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
//# sourceMappingURL=render-template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-template.js","sourceRoot":"","sources":["../../../src/lib/actions/render-template.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** Polling knobs; exported so tests can shorten them. */
|
|
2
|
+
export declare const polling: {
|
|
3
|
+
intervalMs: number;
|
|
4
|
+
maxWaitMs: number;
|
|
5
|
+
sleep: (ms: number) => Promise<void>;
|
|
6
|
+
};
|
|
7
|
+
export declare const startLongJob: import("@activepieces/pieces-framework").IAction<import("@activepieces/pieces-framework").SecretTextProperty<true>, {
|
|
8
|
+
wait_for_completion: import("@activepieces/pieces-framework").CheckboxProperty<false>;
|
|
9
|
+
format: import("@activepieces/pieces-framework").StaticDropdownProperty<string, false>;
|
|
10
|
+
landscape: import("@activepieces/pieces-framework").CheckboxProperty<false>;
|
|
11
|
+
margin: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
12
|
+
printBackground: import("@activepieces/pieces-framework").CheckboxProperty<false>;
|
|
13
|
+
scale: import("@activepieces/pieces-framework").NumberProperty<false>;
|
|
14
|
+
pageRanges: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
15
|
+
url?: import("@activepieces/pieces-framework").ShortTextProperty<false> | undefined;
|
|
16
|
+
html: import("@activepieces/pieces-framework").LongTextProperty<false>;
|
|
17
|
+
markdown: import("@activepieces/pieces-framework").LongTextProperty<false>;
|
|
18
|
+
input_type: import("@activepieces/pieces-framework").StaticDropdownProperty<"html" | "markdown" | "url", true>;
|
|
19
|
+
}>;
|
|
20
|
+
//# sourceMappingURL=start-long-job.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start-long-job.d.ts","sourceRoot":"","sources":["../../../src/lib/actions/start-long-job.ts"],"names":[],"mappings":"AAiBA,yDAAyD;AACzD,eAAO,MAAM,OAAO;;;gBAGN,MAAM;CACnB,CAAC;AASF,eAAO,MAAM,YAAY;;;;;;;;;;;;EAoDvB,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.startLongJob = exports.polling = void 0;
|
|
4
|
+
const pieces_common_1 = require("@activepieces/pieces-common");
|
|
5
|
+
const pieces_framework_1 = require("@activepieces/pieces-framework");
|
|
6
|
+
const auth_1 = require("../auth");
|
|
7
|
+
const common_1 = require("../common");
|
|
8
|
+
const get_download_link_1 = require("./get-download-link");
|
|
9
|
+
const get_job_1 = require("./get-job");
|
|
10
|
+
const ALLOWED = ['html', 'markdown'];
|
|
11
|
+
/** Polling knobs; exported so tests can shorten them. */
|
|
12
|
+
exports.polling = {
|
|
13
|
+
intervalMs: 5000,
|
|
14
|
+
maxWaitMs: 180000,
|
|
15
|
+
sleep: (ms) => new Promise((r) => setTimeout(r, ms)),
|
|
16
|
+
};
|
|
17
|
+
exports.startLongJob = (0, pieces_framework_1.createAction)({
|
|
18
|
+
auth: auth_1.podpdfAuth,
|
|
19
|
+
name: 'start_long_job',
|
|
20
|
+
displayName: 'Start Long Job',
|
|
21
|
+
description: 'Queue a large HTML or Markdown document (up to 100 pages). Optionally wait for it to finish and return the download link.',
|
|
22
|
+
props: {
|
|
23
|
+
input_type: (0, common_1.inputTypeProp)([...ALLOWED]),
|
|
24
|
+
...(0, common_1.contentProp)([...ALLOWED]),
|
|
25
|
+
...common_1.optionProps,
|
|
26
|
+
wait_for_completion: pieces_framework_1.Property.Checkbox({
|
|
27
|
+
displayName: 'Wait for Completion',
|
|
28
|
+
description: 'Poll the job every 5 seconds for up to 3 minutes, then return the download link (and the PDF file). If it is still running, the current job status is returned.',
|
|
29
|
+
required: false,
|
|
30
|
+
defaultValue: false,
|
|
31
|
+
}),
|
|
32
|
+
},
|
|
33
|
+
async run(context) {
|
|
34
|
+
const p = context.propsValue;
|
|
35
|
+
const body = { ...(0, common_1.buildContent)(p, [...ALLOWED]) };
|
|
36
|
+
const options = (0, common_1.buildOptions)(p);
|
|
37
|
+
if (options)
|
|
38
|
+
body['options'] = options;
|
|
39
|
+
const queued = await (0, common_1.podpdfRequest)({
|
|
40
|
+
auth: context.auth,
|
|
41
|
+
method: pieces_common_1.HttpMethod.POST,
|
|
42
|
+
path: '/longjob',
|
|
43
|
+
body,
|
|
44
|
+
});
|
|
45
|
+
if (p['wait_for_completion'] !== true)
|
|
46
|
+
return queued;
|
|
47
|
+
const deadline = Date.now() + exports.polling.maxWaitMs;
|
|
48
|
+
let job;
|
|
49
|
+
while (Date.now() < deadline) {
|
|
50
|
+
await exports.polling.sleep(exports.polling.intervalMs);
|
|
51
|
+
job = await (0, get_job_1.fetchJob)(context.auth, queued.job_id);
|
|
52
|
+
if (job.status === 'completed' || job.status === 'partial_failed') {
|
|
53
|
+
const link = await (0, get_download_link_1.fetchDownloadLink)(context.auth, queued.job_id);
|
|
54
|
+
const data = await (0, common_1.downloadPdf)(link.download_url);
|
|
55
|
+
const file = await context.files.write({ fileName: `podpdf-${queued.job_id}.pdf`, data });
|
|
56
|
+
return { ...link, status: job.status, pages: job.pages, file };
|
|
57
|
+
}
|
|
58
|
+
if (job.status === 'failed' || job.status === 'timeout') {
|
|
59
|
+
throw new Error(`PodPDF job ${queued.job_id} ${job.status}: ${job.error_message ?? 'no details'}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return job ?? queued;
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
//# sourceMappingURL=start-long-job.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start-long-job.js","sourceRoot":"","sources":["../../../src/lib/actions/start-long-job.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,UAAU,mEAqBrB,CAAC"}
|
package/dist/lib/auth.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.podpdfAuth = void 0;
|
|
4
|
+
const pieces_common_1 = require("@activepieces/pieces-common");
|
|
5
|
+
const pieces_framework_1 = require("@activepieces/pieces-framework");
|
|
6
|
+
const common_1 = require("./common");
|
|
7
|
+
exports.podpdfAuth = pieces_framework_1.PieceAuth.SecretText({
|
|
8
|
+
displayName: 'API Key',
|
|
9
|
+
description: 'Create an API key at [app.podpdf.com](https://app.podpdf.com) → Settings → API Keys. ' +
|
|
10
|
+
'Calls need a paid plan or credit pack ($0.01 per PDF; there is no free plan).',
|
|
11
|
+
required: true,
|
|
12
|
+
validate: async ({ auth }) => {
|
|
13
|
+
try {
|
|
14
|
+
await (0, common_1.podpdfRequest)({
|
|
15
|
+
auth,
|
|
16
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
17
|
+
path: '/me',
|
|
18
|
+
});
|
|
19
|
+
return { valid: true };
|
|
20
|
+
}
|
|
21
|
+
catch (e) {
|
|
22
|
+
return {
|
|
23
|
+
valid: false,
|
|
24
|
+
error: e instanceof Error ? e.message : 'Invalid PodPDF API key.',
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":";;;AAAA,+DAAyD;AACzD,qEAA2D;AAC3D,qCAAyC;AAE5B,QAAA,UAAU,GAAG,4BAAS,CAAC,UAAU,CAAC;IAC7C,WAAW,EAAE,SAAS;IACtB,WAAW,EACT,uFAAuF;QACvF,+EAA+E;IACjF,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,MAAM,IAAA,sBAAa,EAAgC;gBACjD,IAAI;gBACJ,MAAM,EAAE,0BAAU,CAAC,GAAG;gBACtB,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;YACH,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB;aAClE,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { HttpMethod, type HttpMessageBody } from '@activepieces/pieces-common';
|
|
2
|
+
export declare const BASE_URL = "https://api.podpdf.com";
|
|
3
|
+
/** Connection values arrive as a plain string (validate) or as `{ secret_text }` (actions). */
|
|
4
|
+
export declare function apiKeyFrom(auth: unknown): string;
|
|
5
|
+
/** Turn a PodPDF JSON error into a readable Error that keeps code, message and details. */
|
|
6
|
+
export declare function toPodPdfError(status: number | undefined, body: unknown): Error;
|
|
7
|
+
export declare function podpdfRequest<T extends HttpMessageBody>(params: {
|
|
8
|
+
auth: unknown;
|
|
9
|
+
method: HttpMethod;
|
|
10
|
+
path: string;
|
|
11
|
+
body?: unknown;
|
|
12
|
+
}): Promise<T>;
|
|
13
|
+
/** Download a signed URL (no API key: it is a pre-signed S3 link). */
|
|
14
|
+
export declare function downloadPdf(url: string): Promise<Buffer>;
|
|
15
|
+
export declare function ensurePdfName(name: string): string;
|
|
16
|
+
export declare const INPUT_TYPES: {
|
|
17
|
+
readonly html: "HTML";
|
|
18
|
+
readonly markdown: "Markdown";
|
|
19
|
+
readonly url: "URL";
|
|
20
|
+
};
|
|
21
|
+
export type InputType = keyof typeof INPUT_TYPES;
|
|
22
|
+
export declare function inputTypeProp(allowed: InputType[]): import("@activepieces/pieces-framework").StaticDropdownProperty<"html" | "markdown" | "url", true>;
|
|
23
|
+
export declare function contentProp(allowed: InputType[]): {
|
|
24
|
+
url?: import("@activepieces/pieces-framework").ShortTextProperty<false> | undefined;
|
|
25
|
+
html: import("@activepieces/pieces-framework").LongTextProperty<false>;
|
|
26
|
+
markdown: import("@activepieces/pieces-framework").LongTextProperty<false>;
|
|
27
|
+
};
|
|
28
|
+
export declare const optionProps: {
|
|
29
|
+
format: import("@activepieces/pieces-framework").StaticDropdownProperty<string, false>;
|
|
30
|
+
landscape: import("@activepieces/pieces-framework").CheckboxProperty<false>;
|
|
31
|
+
margin: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
32
|
+
printBackground: import("@activepieces/pieces-framework").CheckboxProperty<false>;
|
|
33
|
+
scale: import("@activepieces/pieces-framework").NumberProperty<false>;
|
|
34
|
+
pageRanges: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
35
|
+
};
|
|
36
|
+
type ContentValues = {
|
|
37
|
+
input_type?: string;
|
|
38
|
+
html?: string;
|
|
39
|
+
markdown?: string;
|
|
40
|
+
url?: string;
|
|
41
|
+
};
|
|
42
|
+
type OptionValues = {
|
|
43
|
+
format?: string;
|
|
44
|
+
landscape?: boolean;
|
|
45
|
+
margin?: string;
|
|
46
|
+
printBackground?: boolean;
|
|
47
|
+
scale?: number;
|
|
48
|
+
pageRanges?: string;
|
|
49
|
+
};
|
|
50
|
+
/** Build `{ input_type, html|markdown|url }` from the props, checking the matching field is filled. */
|
|
51
|
+
export declare function buildContent(values: ContentValues, allowed: InputType[]): Record<string, string>;
|
|
52
|
+
/** Only include options the user actually set (and that differ from the API defaults for booleans). */
|
|
53
|
+
export declare function buildOptions(values: OptionValues): Record<string, unknown> | undefined;
|
|
54
|
+
export declare const attachFileProp: import("@activepieces/pieces-framework").CheckboxProperty<false>;
|
|
55
|
+
/**
|
|
56
|
+
* Expands dotted keys into nested objects, so `customer.name` becomes
|
|
57
|
+
* `{ customer: { name: … } }` — the shape the render API expects. Keys without
|
|
58
|
+
* a dot are copied as they are, and a plain key wins over a dotted one.
|
|
59
|
+
*/
|
|
60
|
+
export declare function expandDottedKeys(data: Record<string, unknown>): Record<string, unknown>;
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/lib/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,UAAU,EAEV,KAAK,eAAe,EACrB,MAAM,6BAA6B,CAAC;AAGrC,eAAO,MAAM,QAAQ,2BAA2B,CAAC;AAEjD,+FAA+F;AAC/F,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAMhD;AAMD,2FAA2F;AAC3F,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,OAAO,GAAG,KAAK,CAW9E;AAED,wBAAsB,aAAa,CAAC,CAAC,SAAS,eAAe,EAAE,MAAM,EAAE;IACrE,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,CAAC,CAAC,CAmBb;AAED,sEAAsE;AACtE,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAc9D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGlD;AAID,eAAO,MAAM,WAAW;;;;CAId,CAAC;AACX,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,WAAW,CAAC;AAEjD,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,sGAcjD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE;;;;EAsB/C;AAED,eAAO,MAAM,WAAW;;;;;;;CAqCvB,CAAC;AAEF,KAAK,aAAa,GAAG;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAC7F,KAAK,YAAY,GAAG;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAIF,uGAAuG;AACvG,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAahG;AAED,uGAAuG;AACvG,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAkBtF;AAED,eAAO,MAAM,cAAc,kEAMzB,CAAC;AAEH;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkBvF"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.attachFileProp = exports.optionProps = exports.INPUT_TYPES = exports.BASE_URL = void 0;
|
|
4
|
+
exports.apiKeyFrom = apiKeyFrom;
|
|
5
|
+
exports.toPodPdfError = toPodPdfError;
|
|
6
|
+
exports.podpdfRequest = podpdfRequest;
|
|
7
|
+
exports.downloadPdf = downloadPdf;
|
|
8
|
+
exports.ensurePdfName = ensurePdfName;
|
|
9
|
+
exports.inputTypeProp = inputTypeProp;
|
|
10
|
+
exports.contentProp = contentProp;
|
|
11
|
+
exports.buildContent = buildContent;
|
|
12
|
+
exports.buildOptions = buildOptions;
|
|
13
|
+
exports.expandDottedKeys = expandDottedKeys;
|
|
14
|
+
const pieces_common_1 = require("@activepieces/pieces-common");
|
|
15
|
+
const pieces_framework_1 = require("@activepieces/pieces-framework");
|
|
16
|
+
exports.BASE_URL = 'https://api.podpdf.com';
|
|
17
|
+
/** Connection values arrive as a plain string (validate) or as `{ secret_text }` (actions). */
|
|
18
|
+
function apiKeyFrom(auth) {
|
|
19
|
+
if (typeof auth === 'string')
|
|
20
|
+
return auth;
|
|
21
|
+
if (auth && typeof auth === 'object' && 'secret_text' in auth) {
|
|
22
|
+
return String(auth.secret_text);
|
|
23
|
+
}
|
|
24
|
+
throw new Error('PodPDF: missing API key on the connection.');
|
|
25
|
+
}
|
|
26
|
+
/** Turn a PodPDF JSON error into a readable Error that keeps code, message and details. */
|
|
27
|
+
function toPodPdfError(status, body) {
|
|
28
|
+
const err = body?.error;
|
|
29
|
+
const code = err?.code ?? (status ? `HTTP_${status}` : 'REQUEST_FAILED');
|
|
30
|
+
let message = err?.message ?? (typeof body === 'string' && body ? body : 'Request failed');
|
|
31
|
+
if (err?.details !== undefined) {
|
|
32
|
+
message += ` Details: ${JSON.stringify(err.details)}`;
|
|
33
|
+
}
|
|
34
|
+
const e = new Error(`PodPDF ${status ?? ''} ${code}: ${message}`.replace(/\s+/g, ' ').trim());
|
|
35
|
+
e.status = status;
|
|
36
|
+
e.code = code;
|
|
37
|
+
return e;
|
|
38
|
+
}
|
|
39
|
+
async function podpdfRequest(params) {
|
|
40
|
+
try {
|
|
41
|
+
const res = await pieces_common_1.httpClient.sendRequest({
|
|
42
|
+
method: params.method,
|
|
43
|
+
url: `${exports.BASE_URL}${params.path}`,
|
|
44
|
+
headers: {
|
|
45
|
+
'X-API-Key': apiKeyFrom(params.auth),
|
|
46
|
+
Accept: 'application/json',
|
|
47
|
+
...(params.body !== undefined ? { 'Content-Type': 'application/json' } : {}),
|
|
48
|
+
},
|
|
49
|
+
body: params.body,
|
|
50
|
+
});
|
|
51
|
+
return res.body;
|
|
52
|
+
}
|
|
53
|
+
catch (e) {
|
|
54
|
+
if (e instanceof pieces_common_1.HttpError) {
|
|
55
|
+
throw toPodPdfError(e.response.status, e.response.body);
|
|
56
|
+
}
|
|
57
|
+
throw e;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/** Download a signed URL (no API key: it is a pre-signed S3 link). */
|
|
61
|
+
async function downloadPdf(url) {
|
|
62
|
+
try {
|
|
63
|
+
const res = await pieces_common_1.httpClient.sendRequest({
|
|
64
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
65
|
+
url,
|
|
66
|
+
responseType: 'arraybuffer',
|
|
67
|
+
});
|
|
68
|
+
return Buffer.from(res.body);
|
|
69
|
+
}
|
|
70
|
+
catch (e) {
|
|
71
|
+
if (e instanceof pieces_common_1.HttpError) {
|
|
72
|
+
throw new Error(`PodPDF: could not download the PDF (HTTP ${e.response.status}).`);
|
|
73
|
+
}
|
|
74
|
+
throw e;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function ensurePdfName(name) {
|
|
78
|
+
const trimmed = name.trim().replace(/[\\/]/g, '-');
|
|
79
|
+
return /\.pdf$/i.test(trimmed) ? trimmed : `${trimmed}.pdf`;
|
|
80
|
+
}
|
|
81
|
+
// ---------- shared input properties ----------
|
|
82
|
+
exports.INPUT_TYPES = {
|
|
83
|
+
html: 'HTML',
|
|
84
|
+
markdown: 'Markdown',
|
|
85
|
+
url: 'URL',
|
|
86
|
+
};
|
|
87
|
+
function inputTypeProp(allowed) {
|
|
88
|
+
return pieces_framework_1.Property.StaticDropdown({
|
|
89
|
+
displayName: 'Input Type',
|
|
90
|
+
description: allowed.includes('url')
|
|
91
|
+
? 'What you are converting: raw HTML, Markdown, or a public HTTPS URL.'
|
|
92
|
+
: 'What you are converting: raw HTML or Markdown.',
|
|
93
|
+
required: true,
|
|
94
|
+
defaultValue: 'html',
|
|
95
|
+
options: {
|
|
96
|
+
disabled: false,
|
|
97
|
+
options: allowed.map((v) => ({ label: exports.INPUT_TYPES[v], value: v })),
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
function contentProp(allowed) {
|
|
102
|
+
return {
|
|
103
|
+
html: pieces_framework_1.Property.LongText({
|
|
104
|
+
displayName: 'HTML',
|
|
105
|
+
description: 'Full HTML document or fragment. Required when Input Type is HTML.',
|
|
106
|
+
required: false,
|
|
107
|
+
}),
|
|
108
|
+
markdown: pieces_framework_1.Property.LongText({
|
|
109
|
+
displayName: 'Markdown',
|
|
110
|
+
description: 'Markdown text. Required when Input Type is Markdown.',
|
|
111
|
+
required: false,
|
|
112
|
+
}),
|
|
113
|
+
...(allowed.includes('url')
|
|
114
|
+
? {
|
|
115
|
+
url: pieces_framework_1.Property.ShortText({
|
|
116
|
+
displayName: 'URL',
|
|
117
|
+
description: 'Public HTTPS URL of the page to render. Required when Input Type is URL.',
|
|
118
|
+
required: false,
|
|
119
|
+
}),
|
|
120
|
+
}
|
|
121
|
+
: {}),
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
exports.optionProps = {
|
|
125
|
+
format: pieces_framework_1.Property.StaticDropdown({
|
|
126
|
+
displayName: 'Format',
|
|
127
|
+
description: 'Paper size. Defaults to A4.',
|
|
128
|
+
required: false,
|
|
129
|
+
options: {
|
|
130
|
+
disabled: false,
|
|
131
|
+
options: ['A4', 'Letter', 'Legal', 'A3', 'A5', 'Tabloid'].map((v) => ({ label: v, value: v })),
|
|
132
|
+
},
|
|
133
|
+
}),
|
|
134
|
+
landscape: pieces_framework_1.Property.Checkbox({
|
|
135
|
+
displayName: 'Landscape',
|
|
136
|
+
description: 'Use landscape orientation.',
|
|
137
|
+
required: false,
|
|
138
|
+
defaultValue: false,
|
|
139
|
+
}),
|
|
140
|
+
margin: pieces_framework_1.Property.ShortText({
|
|
141
|
+
displayName: 'Margin',
|
|
142
|
+
description: 'One value applied to all four sides, e.g. 20mm, 1in or 10px.',
|
|
143
|
+
required: false,
|
|
144
|
+
}),
|
|
145
|
+
printBackground: pieces_framework_1.Property.Checkbox({
|
|
146
|
+
displayName: 'Print Background',
|
|
147
|
+
description: 'Include background colours and images.',
|
|
148
|
+
required: false,
|
|
149
|
+
defaultValue: true,
|
|
150
|
+
}),
|
|
151
|
+
scale: pieces_framework_1.Property.Number({
|
|
152
|
+
displayName: 'Scale',
|
|
153
|
+
description: 'Rendering scale between 0.1 and 2.',
|
|
154
|
+
required: false,
|
|
155
|
+
}),
|
|
156
|
+
pageRanges: pieces_framework_1.Property.ShortText({
|
|
157
|
+
displayName: 'Page Ranges',
|
|
158
|
+
description: 'Pages to keep, e.g. 1-3, 5.',
|
|
159
|
+
required: false,
|
|
160
|
+
}),
|
|
161
|
+
};
|
|
162
|
+
const blank = (v) => v === undefined || v === null || (typeof v === 'string' && v.trim() === '');
|
|
163
|
+
/** Build `{ input_type, html|markdown|url }` from the props, checking the matching field is filled. */
|
|
164
|
+
function buildContent(values, allowed) {
|
|
165
|
+
const inputType = values.input_type;
|
|
166
|
+
if (!inputType || !allowed.includes(inputType)) {
|
|
167
|
+
throw new Error(`Input Type must be one of: ${allowed.join(', ')}.`);
|
|
168
|
+
}
|
|
169
|
+
const value = values[inputType];
|
|
170
|
+
if (blank(value)) {
|
|
171
|
+
throw new Error(`The ${exports.INPUT_TYPES[inputType]} field is required when Input Type is ${exports.INPUT_TYPES[inputType]}.`);
|
|
172
|
+
}
|
|
173
|
+
if (inputType === 'url' && !/^https:\/\//i.test(String(value).trim())) {
|
|
174
|
+
throw new Error('URL must be a public HTTPS address (starting with https://).');
|
|
175
|
+
}
|
|
176
|
+
return { input_type: inputType, [inputType]: inputType === 'url' ? String(value).trim() : String(value) };
|
|
177
|
+
}
|
|
178
|
+
/** Only include options the user actually set (and that differ from the API defaults for booleans). */
|
|
179
|
+
function buildOptions(values) {
|
|
180
|
+
const options = {};
|
|
181
|
+
if (!blank(values.format))
|
|
182
|
+
options['format'] = values.format;
|
|
183
|
+
if (values.landscape === true)
|
|
184
|
+
options['landscape'] = true;
|
|
185
|
+
if (!blank(values.margin)) {
|
|
186
|
+
const m = String(values.margin).trim();
|
|
187
|
+
options['margin'] = { top: m, right: m, bottom: m, left: m };
|
|
188
|
+
}
|
|
189
|
+
if (values.printBackground === false)
|
|
190
|
+
options['printBackground'] = false;
|
|
191
|
+
if (!blank(values.scale)) {
|
|
192
|
+
const s = Number(values.scale);
|
|
193
|
+
if (!Number.isFinite(s) || s < 0.1 || s > 2) {
|
|
194
|
+
throw new Error('Scale must be a number between 0.1 and 2.');
|
|
195
|
+
}
|
|
196
|
+
options['scale'] = s;
|
|
197
|
+
}
|
|
198
|
+
if (!blank(values.pageRanges))
|
|
199
|
+
options['pageRanges'] = String(values.pageRanges).trim();
|
|
200
|
+
return Object.keys(options).length ? options : undefined;
|
|
201
|
+
}
|
|
202
|
+
exports.attachFileProp = pieces_framework_1.Property.Checkbox({
|
|
203
|
+
displayName: 'Attach PDF File',
|
|
204
|
+
description: 'Also download the PDF and pass it to later steps as a file. Turn off if you only need the download link.',
|
|
205
|
+
required: false,
|
|
206
|
+
defaultValue: true,
|
|
207
|
+
});
|
|
208
|
+
/**
|
|
209
|
+
* Expands dotted keys into nested objects, so `customer.name` becomes
|
|
210
|
+
* `{ customer: { name: … } }` — the shape the render API expects. Keys without
|
|
211
|
+
* a dot are copied as they are, and a plain key wins over a dotted one.
|
|
212
|
+
*/
|
|
213
|
+
function expandDottedKeys(data) {
|
|
214
|
+
const out = {};
|
|
215
|
+
for (const [key, value] of Object.entries(data)) {
|
|
216
|
+
if (!key.includes('.'))
|
|
217
|
+
continue;
|
|
218
|
+
const parts = key.split('.');
|
|
219
|
+
const last = parts.pop();
|
|
220
|
+
let target = out;
|
|
221
|
+
for (const part of parts) {
|
|
222
|
+
const next = target[part];
|
|
223
|
+
if (!next || typeof next !== 'object' || Array.isArray(next))
|
|
224
|
+
target[part] = {};
|
|
225
|
+
target = target[part];
|
|
226
|
+
}
|
|
227
|
+
target[last] = value;
|
|
228
|
+
}
|
|
229
|
+
for (const [key, value] of Object.entries(data)) {
|
|
230
|
+
if (!key.includes('.'))
|
|
231
|
+
out[key] = value;
|
|
232
|
+
}
|
|
233
|
+
return out;
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/lib/common.ts"],"names":[],"mappings":"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"}
|
package/logo.png
ADDED
|
Binary file
|
package/package.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "activepieces-piece-podpdf",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Activepieces piece for PodPDF: turn HTML, Markdown, URLs and templates into PDFs with the PodPDF API.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"activepieces",
|
|
7
|
+
"activepieces-piece",
|
|
8
|
+
"piece",
|
|
9
|
+
"pdf",
|
|
10
|
+
"html-to-pdf",
|
|
11
|
+
"markdown-to-pdf",
|
|
12
|
+
"podpdf"
|
|
13
|
+
],
|
|
14
|
+
"homepage": "https://podpdf.com",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"email": "podpdfapp@gmail.com"
|
|
17
|
+
},
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"author": "PodPDF <podpdfapp@gmail.com>",
|
|
20
|
+
"type": "commonjs",
|
|
21
|
+
"main": "./dist/index.js",
|
|
22
|
+
"types": "./dist/index.d.ts",
|
|
23
|
+
"files": [
|
|
24
|
+
"dist",
|
|
25
|
+
"logo.png",
|
|
26
|
+
"README.md"
|
|
27
|
+
],
|
|
28
|
+
"engines": {
|
|
29
|
+
"node": ">=18"
|
|
30
|
+
},
|
|
31
|
+
"scripts": {
|
|
32
|
+
"build": "rm -rf dist && tsc -p tsconfig.json",
|
|
33
|
+
"typecheck": "tsc -p tsconfig.test.json --noEmit",
|
|
34
|
+
"test": "vitest run",
|
|
35
|
+
"prepublishOnly": "npm run build && npm test",
|
|
36
|
+
"monorepo:export": "node monorepo/export.js"
|
|
37
|
+
},
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"@activepieces/pieces-common": "0.12.5",
|
|
40
|
+
"@activepieces/pieces-framework": "0.32.0",
|
|
41
|
+
"tslib": "2.6.2"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"@types/node": "26.6.2",
|
|
45
|
+
"nock": "14.0.17",
|
|
46
|
+
"typescript": "5.9.3",
|
|
47
|
+
"vitest": "4.1.11"
|
|
48
|
+
}
|
|
49
|
+
}
|