diff --git a/credentials/CloudinaryApi.credentials.ts b/credentials/CloudinaryApi.credentials.ts
index 16926cd..74e128f 100644
--- a/credentials/CloudinaryApi.credentials.ts
+++ b/credentials/CloudinaryApi.credentials.ts
@@ -2,12 +2,14 @@ import {
IAuthenticateGeneric,
ICredentialTestRequest,
ICredentialType,
+ Icon,
INodeProperties,
} from 'n8n-workflow';
export class CloudinaryApi implements ICredentialType {
name = 'cloudinaryApi';
displayName = 'Cloudinary API';
+ icon: Icon = { light: 'file:cloudinary.svg', dark: 'file:cloudinary.dark.svg' };
documentationUrl = 'https://cloudinary.com/documentation/developer_onboarding_faq_find_credentials';
properties: INodeProperties[] = [
{
diff --git a/credentials/cloudinary.dark.svg b/credentials/cloudinary.dark.svg
new file mode 100644
index 0000000..73949c8
--- /dev/null
+++ b/credentials/cloudinary.dark.svg
@@ -0,0 +1,14 @@
+
diff --git a/credentials/cloudinary.svg b/credentials/cloudinary.svg
new file mode 100644
index 0000000..3b8c0d0
--- /dev/null
+++ b/credentials/cloudinary.svg
@@ -0,0 +1,14 @@
+
diff --git a/nodes/Cloudinary/Cloudinary.node.json b/nodes/Cloudinary/Cloudinary.node.json
index 4cc8649..0876d49 100644
--- a/nodes/Cloudinary/Cloudinary.node.json
+++ b/nodes/Cloudinary/Cloudinary.node.json
@@ -1,5 +1,5 @@
{
- "node": "n8n-nodes-base.cloudinary",
+ "node": "n8n-nodes-cloudinary.cloudinary",
"nodeVersion": "1.0",
"codexVersion": "1.0",
"categories": ["Data & Storage", "Marketing & Content"],
diff --git a/nodes/Cloudinary/Cloudinary.node.ts b/nodes/Cloudinary/Cloudinary.node.ts
index 82f0ce9..943cd43 100644
--- a/nodes/Cloudinary/Cloudinary.node.ts
+++ b/nodes/Cloudinary/Cloudinary.node.ts
@@ -3,6 +3,9 @@ import {
INodeTypeDescription,
IExecuteFunctions,
INodeExecutionData,
+ JsonObject,
+ NodeApiError,
+ NodeConnectionTypes,
NodeOperationError,
} from 'n8n-workflow';
import { cloudinaryProperties } from './descriptions';
@@ -13,7 +16,7 @@ export class Cloudinary implements INodeType {
description: INodeTypeDescription = {
displayName: 'Cloudinary',
name: 'cloudinary',
- icon: 'file:cloudinary.svg',
+ icon: { light: 'file:cloudinary.svg', dark: 'file:cloudinary.dark.svg' },
group: ['transform'],
// v1 exposed the Video Player as flat `player*` params; v2 regrouped them into
// collections (see widget.fields.ts). Both schemas ship side by side, gated by
@@ -32,8 +35,8 @@ export class Cloudinary implements INodeType {
defaults: {
name: 'Cloudinary',
},
- inputs: ['main'],
- outputs: ['main'],
+ inputs: [NodeConnectionTypes.Main],
+ outputs: [NodeConnectionTypes.Main],
credentials: [
{
name: CREDENTIAL_TYPE,
@@ -84,7 +87,12 @@ export class Cloudinary implements INodeType {
});
continue;
}
- throw error;
+ // Both constructors pass an already-wrapped error of their own type
+ // through untouched, so handler-thrown errors keep their context.
+ if (error instanceof NodeApiError) {
+ throw new NodeApiError(this.getNode(), error as unknown as JsonObject, { itemIndex: i });
+ }
+ throw new NodeOperationError(this.getNode(), error as Error, { itemIndex: i });
}
}
diff --git a/nodes/Cloudinary/cloudinary.dark.svg b/nodes/Cloudinary/cloudinary.dark.svg
new file mode 100644
index 0000000..73949c8
--- /dev/null
+++ b/nodes/Cloudinary/cloudinary.dark.svg
@@ -0,0 +1,14 @@
+
diff --git a/nodes/Cloudinary/cloudinary.svg b/nodes/Cloudinary/cloudinary.svg
index 07ec75d..3b8c0d0 100644
--- a/nodes/Cloudinary/cloudinary.svg
+++ b/nodes/Cloudinary/cloudinary.svg
@@ -1,8 +1,14 @@
-
-