Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 0 additions & 11 deletions components/intelliprint/README.md

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,203 @@
/* eslint-disable no-unused-vars */
import {
ConfigurationError,
getFileStreamAndMetadata,
} from "@pipedream/platform";
import FormData from "form-data";
import {
DOUBLE_SIDED_OPTIONS,
IDEAL_ENVELOPE_OPTIONS,
POSTAGE_SERVICE_OPTIONS,
SPLITTING_METHOD_OPTIONS,
} from "../../common/constants.mjs";
import { camelCaseToSnakeCase } from "../../common/utils.mjs";
import intelliprint from "../../intelliprint.app.mjs";

export default {
key: "intelliprint-create-a-print-job",
name: "Create a Print Job",
description: "Creates a new print job in the Intelliprint API. [See the documentation](https://api-docs.intelliprint.net/?_gl=1*19r3k2k*_gcl_au*MTU2NDU2MDgzMS4xNzY0MDIwNDQx#print_jobs-create)",
version: "0.0.1",
type: "action",
annotations: {
destructiveHint: false,
openWorldHint: true,
readOnlyHint: false,
},
props: {
intelliprint,
filePath: {
type: "string",
label: "File Path",
description: "The file to upload. Provide either a file URL or a path to a file in the `/tmp` directory (for example, `/tmp/myFile.txt`)",
},
reference: {
type: "string",
label: "Reference",
description: "An user-provided reference for this Print Job.",
optional: true,
},
confirmed: {
type: "boolean",
label: "Confirmed",
description: "Whether to confirm this Print Job immediately, or to leave it as a draft.",
optional: true,
},
testmode: {
type: "boolean",
label: "Test Mode",
description: "Whether to mark this Print Job as a test.",
optional: true,
},
splittingMethod: {
type: "string",
label: "Splitting Method",
description: "The method to use to split the Print Job into multiple Print Jobs.",
options: SPLITTING_METHOD_OPTIONS,
optional: true,
},
splitOnPhrase: {
type: "string",
label: "Split On Phrase",
description: "The word or phrase to split letters using. Only used when **Splitting Method** is set to `split_on_phrase`.",
optional: true,
},
splitOnPage: {
type: "integer",
label: "Split On Page",
description: "The number of pages each letter should be. Only used when **Splitting Method** is set to `split_on_page`.",
optional: true,
},
doubleSided: {
type: "string",
label: "Double Sided",
description: "Whether to print these letters double sided.",
options: DOUBLE_SIDED_OPTIONS,
optional: true,
},
doubleSidedSpecificPages: {
type: "string",
label: "Double Sided Specific Pages",
description: "The array of pages to print double sided. Only used when **Double Sided** is set to `mixed`. Example: **[[1, 3], [6, 7]]**.",
optional: true,
},
premiumQuality: {
type: "boolean",
label: "Premium Quality",
description: "Whether to print these letters in premium quality.",
optional: true,
},
postageService: {
type: "string",
label: "Postage Service",
description: "The postage service to use for this Print Job.",
options: POSTAGE_SERVICE_OPTIONS,
optional: true,
},
idealEnvelope: {
type: "string",
label: "Ideal Envelope",
description: "The ideal envelope size for these letters.",
options: IDEAL_ENVELOPE_OPTIONS,
optional: true,
},
mailDate: {
type: "string",
label: "Mail Date",
description: "The date to send this letter out on. Format: **YYYY-MM-DD**",
optional: true,
},
backgroundFirstPage: {
type: "string",
label: "Background First Page",
description: "The ID of the Background to apply to the first page of these letters.",
optional: true,
},
backgroundOtherPages: {
type: "string",
label: "Background Other Pages",
description: "The ID of the Background to apply to the other pages of these letters.",
optional: true,
},
confidential: {
type: "boolean",
label: "Confidential",
description: "Whether to mark letters of this Print Job as confidential.",
optional: true,
},
removeLetters: {
type: "string",
label: "Remove Letters",
description: "Remove letter objects that have this phrase in their content.",
optional: true,
},
nudgeX: {
type: "integer",
label: "Nudge X",
description: "What amount in mm to move the first page of each letter horizontally. A positive number moves the page right, a negative number moves the page left.",
optional: true,
},
nudgeY: {
type: "integer",
label: "Nudge Y",
description: "What amount in mm to move the first page of each letter vertically. A positive number moves the page down, a negative number moves the page up.",
optional: true,
},
confirmationEmail: {
type: "string",
label: "Confirmation Email",
description: "Whether a confirmation email should be sent to the user or account's email address when this letter is confirmed.",
optional: true,
},
Comment on lines +146 to +151
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

# First, let's look at the full context of the file
cat -n components/intelliprint/actions/create-a-print-job/create-a-print-job.mjs | head -160 | tail -30

Repository: PipedreamHQ/pipedream

Length of output: 1411


🏁 Script executed:

# Search for other confirmationEmail usage in the codebase
rg -i "confirmationemail" --type=mjs -C 3

Repository: PipedreamHQ/pipedream

Length of output: 92


🏁 Script executed:

# Look for the Intelliprint integration file to understand the app structure
fd -e mjs intelliprint

Repository: PipedreamHQ/pipedream

Length of output: 109


🌐 Web query:

Intelliprint API documentation create print job confirmation email field type

💡 Result:

The Print Job parameter confirmation_email is a boolean (true/false). [1]


Fix confirmationEmail type from string to boolean.

The Intelliprint API expects confirmation_email as a boolean (true/false) per the API documentation, but the property is currently typed as string. The description correctly describes boolean behavior ("Whether a confirmation email should be sent..."), so the type should match. Change type: "string" to type: "boolean" on line 147.

🤖 Prompt for AI Agents
In components/intelliprint/actions/create-a-print-job/create-a-print-job.mjs
around lines 146 to 151, the confirmationEmail property is incorrectly typed as
"string"; update the property definition to use type: "boolean" (keeping label,
description and optional: true intact) so it matches the Intelliprint API
expectation for confirmation_email being a true/false value.

metadata: {
type: "object",
label: "Metadata",
description: "A key-value object for storing any information you want to along with this Print Job.",
optional: true,
},
syncDir: {
type: "dir",
accessMode: "read",
sync: true,
optional: false,
},
},
async run({ $ }) {
try {
const {
intelliprint,
filePath,
syncDir,
...data
} = this;

const {
stream, metadata,
} = await getFileStreamAndMetadata(filePath);

const formData = new FormData();
formData.append("file", stream, {
contentType: metadata.contentType,
knownLength: metadata.size,
filename: metadata.name,
});
for (const [
key,
value,
] of Object.entries(data)) {
formData.append(camelCaseToSnakeCase(key), `${value}`);
}

const response = await intelliprint.createPrintJob({
$,
data: formData,
headers: formData.getHeaders(),
});

$.export("$summary", `Successfully created print job with ID: ${response.id}`);
return response;
} catch (error) {
throw new ConfigurationError(`Error creating print job: ${error.response.data.error.message}`);
}
},
};
27 changes: 27 additions & 0 deletions components/intelliprint/common/constants.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
export const SPLITTING_METHOD_OPTIONS = [
"none",
"split_on_phrase",
"split_on_page",
];

export const DOUBLE_SIDED_OPTIONS = [
"no",
"yes",
"mixed",
];

export const POSTAGE_SERVICE_OPTIONS = [
"uk_first_class",
"uk_second_class",
"uk_first_class_signed_for",
"uk_second_class_signed_for",
"uk_special_delivery",
"international",
];

export const IDEAL_ENVELOPE_OPTIONS = [
"c4",
"c5",
"c4_plus",
"a4_box",
];
3 changes: 3 additions & 0 deletions components/intelliprint/common/utils.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export const camelCaseToSnakeCase = (str) => {
return str?.replace(/([A-Z])/g, "_$1").toLowerCase();
};
29 changes: 26 additions & 3 deletions components/intelliprint/intelliprint.app.mjs
Original file line number Diff line number Diff line change
@@ -1,11 +1,34 @@
import { axios } from "@pipedream/platform";

export default {
type: "app",
app: "intelliprint",
propDefinitions: {},
methods: {
// this.$auth contains connected account data
authKeys() {
console.log(Object.keys(this.$auth));
_apiUrl() {
return "https://api.rnbdata.uk/v1";
},
_getAuth() {
return {
"username": this.$auth.api_key,
"password": "",
};
},
_makeRequest({
$ = this, path, ...opts
}) {
return axios($, {
url: `${this._apiUrl()}/${path}`,
auth: this._getAuth(),
...opts,
});
},
createPrintJob(args = {}) {
return this._makeRequest({
method: "POST",
path: "prints",
...args,
});
},
},
};
5 changes: 4 additions & 1 deletion components/intelliprint/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@pipedream/intelliprint",
"version": "0.0.1",
"version": "0.1.0",
"description": "Pipedream Intelliprint Components",
"main": "intelliprint.app.mjs",
"keywords": [
Expand All @@ -11,5 +11,8 @@
"author": "Pipedream <support@pipedream.com> (https://pipedream.com/)",
"publishConfig": {
"access": "public"
},
"dependencies": {
"@pipedream/platform": "^3.1.1"
}
}
Loading
Loading